نویسنده: مستر نارگیل تاریخ انتشار: ۱۴۰۵/۰۵/۲۸

برای ساخت صفحه یا پست جدید لازم نیست کار را از صفر شروع کنید، بلکه میتوانید صفحه‌ای که اسکلت‌بندی مناسبی دارد را کپی کنید و با ویرایش آن صفحه جدید را بسازید.
در ادامه سه روش کپی کردن یا داپلیکیت صفحات و پست‌هارا آموزش خواهیم داد.

افزونه کپی نوشته و برگه‌ها در وردپرس

افزونه محبوب Duplicate Page and Post به شما امکان می‌دهد تا با یک کلیک، نوشته‌ها، برگه‌ها، دسته‌بندی‌ها، برچسب‌ها و انواع پست‌های سفارشی را کپی کنید.

ابتدا به داشبورد سایت بروید و از قسمت افزونه‌ها Duplicate Page and Post را نصب و فعال کنید.

افزونه کپی صفحه در وردپرس

حالا به قسمت برگه‌ها یا نوشته‌ها بروید، موس را روی برگه یا نوشته‌ای که میخواهید کپی کنید نگه دارید، اکنونه دکمه Duplicate را خواهید دید، با کلیک بر روی آن یک کپی جدید از صفحه انتخاب شده ایجاد خواهد شد.

داپلیکیت صفحه در وردپرس با کمک پلاگین

کپی و جاگذاری همه محتوای صفحه

راه دیگر کپی گرفتن از نوشته‌ها و صفحات کپی کردن تمام بلوک‌های آن صفحه و جایگذاری آنها در صفحه جدید است. این روش در ادیتور پیش‌فرض وردپرس کار میکند.

ابتدا به صفحه یا نوشته‌ای میخواهید از آن کپی بگیرید بروید و از منوی سه نقطه گزینه کپی همه بلوک‌ها را انتخاب کنید.

کپی محتوای صفحه در وردپرس

اکنون یک صفحه یا نوشته جدید بسازید و در یک بلوک پاراگراف دکمه Ctrl + V را بزنید تا محتوای پیج قبلی در اینجا جایگذاری شود.

کپی صفحه در وردپرس به کمک کد سفارشی

کد زیر را در وب‌سایت خود قرار دهید.

add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'rd_duplicate_post_link', 10, 2 );
function rd_duplicate_post_link( $actions, $post ) {

    if( ! current_user_can( 'edit_posts' ) ) {
        return $actions;
    }

    $url = wp_nonce_url(
        add_query_arg(
            array(
                'action' => 'rd_duplicate_post_as_draft',
                'post' => $post->ID,
            ),
            'admin.php'
        ),
        basename(__FILE__),
        'duplicate_nonce'
    );

    $actions[ 'duplicate' ] = '<a href="' . $url . '" title="Duplicate this item" rel="permalink">Duplicate</a>';

    return $actions;
}

add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' );

function rd_duplicate_post_as_draft(){

    // check if post ID has been provided and action
    if ( empty( $_GET[ 'post' ] ) ) {
        wp_die( 'No post to duplicate has been provided!' );
    }

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

    // Get the original post id
    $post_id = absint( $_GET[ '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 (I am sure it is, but just in a case), create the post duplicate
    if ( $post ) {

        // 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
        );
        $new_post_id = wp_insert_post( $args );
        $taxonomies = get_object_taxonomies( get_post_type( $post ) ); // returns array of taxonomy names for post type, ex array("category", "post_tag");
        if( $taxonomies ) {
            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
        $post_meta = get_post_meta( $post_id );
        if( $post_meta ) {

            foreach ( $post_meta as $meta_key => $meta_values ) {

                if( '_wp_old_slug' == $meta_key ) { // do nothing for this meta key
                    continue;
                }

                foreach ( $meta_values as $meta_value ) {
                    add_post_meta( $new_post_id, $meta_key, $meta_value );
                }
            }
        }

        wp_safe_redirect(
            add_query_arg(
                array(
                    'post_type' => ( 'post' !== get_post_type( $post ) ? get_post_type( $post ) : false ),
                    'saved' => 'post_duplication_created' // just a custom slug here
                ),
                admin_url( 'edit.php' )
            )
        );
        exit;

    } else {
        wp_die( 'Post creation failed, could not find original post.' );
    }

}

add_action( 'admin_notices', 'rudr_duplication_admin_notice' );

function rudr_duplication_admin_notice() {

    // Get the current screen
    $screen = get_current_screen();

    if ( 'edit' !== $screen->base ) {
        return;
    }

    //Checks if settings updated
    if ( isset( $_GET[ 'saved' ] ) && 'post_duplication_created' == $_GET[ 'saved' ] ) {

         echo '<div class="notice notice-success is-dismissible"><p>Post copy created.</p></div>';
         
    }
}

این کد نیز مانند سایر پلاگین‌های کپی صفحه، دکمه Duplicate را به برگه‌ها و نوشته‌ها اضافه میکند و با کلیک بر روی آن یک کپی از صفحه از انتخاب شده ساخته خواهد شد.