Làm thế nào để sao chép trang hoặc bài đăng trên WordPress chỉ bằng một cú nhấp chuột?

Trong bài viết ngắn này, tôi sẽ chỉ cho bạn cách sao chép trang hoặc bài đăng WordPress chỉ bằng một cú nhấp chuột. Phương pháp này không chỉ thực sự đơn giản mà còn sao chép toàn bộ ngày meta mà bài đăng của bạn có thể có (trường tùy chỉnh, hình ảnh nổi bật, v.v.)

bnixvn doc image

Nếu bạn nhấp vào liên kết này thì:

  • Bản sao của bài đăng sẽ được tạo
  • Trạng thái của bài viết là “Bản nháp”
  • Bạn sẽ được chuyển hướng đến trang chỉnh sửa bài đăng

Vì vậy, để nó hoạt động, chỉ cần sử dụng mã dưới đây. Thêm vào file functions.php của theme đang dùng

// Duplicate a WordPress Page or Post with a Single Click

add_filter("post_row_actions", "wpsh_add_duplicate_link", 10, 2);
add_filter("page_row_actions", "wpsh_add_duplicate_link", 10, 2); // add the link to pages too

function wpsh_duplicate_post_as_draft()
{
    if (!current_user_can("edit_posts")) {
        return;
    }
    if (
        !isset($_GET["duplicate_nonce"]) ||
        !wp_verify_nonce($_GET["duplicate_nonce"], basename(__FILE__))
    ) {
        return;
    }
    global $wpdb; 
    if (
        !(
            isset($_GET["post"]) ||
            isset($_POST["post"]) ||
            (isset($_REQUEST["action"]) &&
                "wpsh_duplicate_post_as_draft" == $_REQUEST["action"])
        )
    ) {
        wp_die("No post to duplicate has been supplied!");
    }
    // This on here gets the original post id and post all the original post data
    $post_id = isset($_GET["post"])
        ? absint($_GET["post"])
        : absint($_POST["post"]);
   		 $post = get_post($post_id);
  
  // In case you don't want current user to be the new post author, then change this line to this: $new_post_author = $post->post_author;
    $current_user = wp_get_current_user();
    $new_post_author = $current_user->ID; 

    // If post data exists, create the post duplicate

    if (isset($post) && $post != null) {

        $args = [
            "comment_status" => $post->comment_status,
            "ping_status" => $post->ping_status,
            "post_author" => $new_post_author,
            "post_content" => $post->post_content,
            "post_excerpt" => $post->post_excerpt,
            "post_name" => $post->post_name,
            "post_parent" => $post->post_parent,
            "post_password" => $post->post_password,
            "post_status" => "draft",
            "post_title" => $post->post_title,
            "post_type" => $post->post_type,
            "to_ping" => $post->to_ping,
            "menu_order" => $post->menu_order,
        ];

        $new_post_id = wp_insert_post($args);

        // Get all current post terms ad set them to the new post draft

        $taxonomies = get_object_taxonomies($post->post_type); 
        foreach ($taxonomies as $taxonomy) {
            $post_terms = wp_get_object_terms($post_id, $taxonomy, [
                "fields" => "slugs",
            ]);
            wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
        }

        // Duplicate all post meta
        
        $post_meta_infos = $wpdb->get_results(
            "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id"
        );
        if (count($post_meta_infos) != 0) {
            $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
            foreach ($post_meta_infos as $meta_info) {
                $meta_key = $meta_info->meta_key;
                if ($meta_key == "_wp_old_slug") {
                    continue;
                }
                $meta_value = addslashes($meta_info->meta_value);
                $sql_query_sel[] = "SELECT $new_post_id, '$meta_key', '$meta_value'";
            }
            $sql_query .= implode(" UNION ALL ", $sql_query_sel);
            $wpdb->query($sql_query);
        }

        // Redirect to the edit post screen for the new draft
        wp_safe_redirect(
            admin_url("post.php?action=edit&post=" . $new_post_id)
        ); 
        exit();
    } else {
        wp_die(
            "Post creation failed, could not find original post: " . $post_id
        );
    }
}
add_action(
    "admin_action_wpsh_duplicate_post_as_draft",
    "wpsh_duplicate_post_as_draft"
);

// Add the "Duplicate" link to action list for post_row_actions

function wpsh_add_duplicate_link($actions, $post)
{
    if (current_user_can("edit_posts")) {
        $actions["duplicate"] =
            '<a href="' .
            wp_nonce_url(
                "admin.php?action=wpsh_duplicate_post_as_draft&post=" . $post->ID,
                basename(__FILE__),
                "duplicate_nonce"
            ) .
            '" title="Duplicate this item" rel="permalink">Duplicate</a>';
    }
    return $actions;
}

Chỉ đơn giản vậy thôi, không cần dùng plugin gì cả.

Zalo
087 997 0072 Nhận Giá Ưu Đãi
Đăng ký lái thử

Để đặt lịch Trải nghiệm và Lái thử xe Mercedes ngay hôm nay, gọi ngay hotline : 087 997 0072 hoặc điền vào form Đăng ký lái thử. Xin cảm ơn.

Yêu cầu báo giá

Để nhận được mức giá ưu đãi và các chương trình khuyến mãi tốt nhất năm, Quý khách gọi ngay hotline : 087 997 0072 hoặc điền vào form Báo giá nhanh. Xin cảm ơn.