Is there a built-in function to duplicate existing posts?

Does WordPress have a built-in function that allows duplicating posts?I am looking for something like $new_post_id = dup

Does WordPress have a built-in function that allows duplicating posts?

I am looking for something like $new_post_id = duplicate_post(post_id);

Does WordPress have a built-in function that allows duplicating posts?

I am looking for something like $new_post_id = duplicate_post(post_id);

Share Improve this question edited Jun 4, 2019 at 12:57 norman.lol 3,2413 gold badges30 silver badges35 bronze badges asked Jun 4, 2019 at 3:41 I am the Most Stupid PersonI am the Most Stupid Person 5681 gold badge7 silver badges30 bronze badges 5
  • Asking to recommend a product, tool, library or off-site resource is out of scope of the site, as it attracts opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it. Many thanks – norman.lol Commented Jun 4, 2019 at 11:15
  • 1 @leymannx Please read the question before downvoting. I NEVER asked product, tool, library or off-site resource. I have asked if there any BUILT-IN FUNCTION in WORDPRESS. That's 100% about WordPress, not any third-party tool. – I am the Most Stupid Person Commented Jun 4, 2019 at 11:41
  • I didn't -1 you, but you are basically asking for a tool that if it exists you'd find yourself by parsing the WordPress code or docs. That's off-site. – norman.lol Commented Jun 4, 2019 at 12:02
  • @leymannx Then half of WordPress SE questions like wordpress.stackexchange/questions/77201/… should be offtopic, – I am the Most Stupid Person Commented Jun 4, 2019 at 12:09
  • This post is from 2012, less stricter rules back then, and it's not asking for a built-in function but for a way to do that programmatically. Maybe you can just update your wording to make it appear on-topic. And don't forget to add what you've tried yourself so far. Many thanks – norman.lol Commented Jun 4, 2019 at 12:11
Add a comment  | 

3 Answers 3

Reset to default 2

You can add your one...

/*
 * Function creates post duplicate as a draft and redirects then to the edit post screen
 */
function rd_duplicate_post_as_draft(){
    global $wpdb;
    if (! ( isset( $_GET['post']) || isset( $_POST['post'])  || ( isset($_REQUEST['action']) && 'rd_duplicate_post_as_draft' == $_REQUEST['action'] ) ) ) {
        wp_die('No post to duplicate has been supplied!');
    }

    /*
     * Nonce verification
     */
    if ( !isset( $_GET['duplicate_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) )
        return;

    /*
     * get the original post id
     */
    $post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
    /*
     * and all the original post data then
     */
    $post = get_post( $post_id );

    /*
     * if you don't want current user to be the new post author,
     * then change next couple of lines 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) {

        /*
         * new post data array
         */
        $args = array(
            '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
        );

        /*
         * insert the post by wp_insert_post() function
         */
        $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); // returns array of taxonomy names for post type, ex array("category", "post_tag");
        foreach ($taxonomies as $taxonomy) {
            $post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
            wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
        }

        /*
         * duplicate all post meta just in two SQL queries
         */
        $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);
        }


        /*
         * finally, redirect to the edit post screen for the new draft
         */
        wp_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_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' );

/*
 * Add the duplicate link to action list for post_row_actions
 */
function rd_duplicate_post_link( $actions, $post ) {
    if (current_user_can('edit_posts')) {
        $actions['duplicate'] = '<a href="' . wp_nonce_url('admin.php?action=rd_duplicate_post_as_draft&post=' . $post->ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Дублировать" rel="permalink">Дублировать</a>';
    }
    return $actions;
}

add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'rd_duplicate_post_link', 10, 2 );
add_filter( 'product_row_actions', 'rd_duplicate_post_link', 10, 2 );

Mahmod is right, and that last link Mahmod posted (https://www.hostinger/tutorials/how-to-duplicate-wordpress-page-post) is the one I used as the basis of writing my own post/page duplication functions in my functions.php files.

Back up your site, use the last suggestions from that link (#4) and you can create your own post duplication and page duplication on any site. It'll help you better understand how to write something like this for yourself, which I recommend if you're a little hesitant about it.

As long as you back up first and don't deviate outside of what you know, you should be fine. :)

If coding isn't your thing or you don't have time to maintain it, I found the Duplicate Post plugin Mahmod linked to be incredibly helpful on other sites I maintain: https://wordpress/plugins/duplicate-post/

Either way, good luck, and who knows why this isn't a core feature yet... but hopefully it will be some day!

No, there isnt built in function but there are a plenty of plugins that easily can do what you need as those below:

https://wordpress/plugins/duplicate-post/

https://www.wpbeginner/plugins/how-to-duplicate-a-wordpress-page-or-post-with-a-single-click/

https://www.hostinger/tutorials/how-to-duplicate-wordpress-page-post

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745439115a4627749.html

相关推荐

  • Is there a built-in function to duplicate existing posts?

    Does WordPress have a built-in function that allows duplicating posts?I am looking for something like $new_post_id = dup

    4小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信