4.1/5 - (10 bình chọn)

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ả

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

2 Bình luận

  1. Xin chào, link download không truy cập được, Báo lỗi “Sorry, there have been too many anonymous link requests for files and folders on this site. Please try again later.”.

    Bạn vui lòng upload link khác nhé.