آموزش کپی کردن نوشته و برگه در وردپرس
مقالات وردپرساگر در وردپرس قصد دارید تا از یک نوشته ، برگه یا محصول کپی تهیه کرده و کار خود را سرعت بخشید باید چگونه عمل کرد ؟ معرفی روشهای سریع تهیه رونوشت از انواع محتوا در وردپرس !

کپی کردن نوشته و برگه در وردپرس ممکن است به هر دلیل انجام شود . متاسفانه به شکل پیش فرض در بخش نوشتهها یا برگهها امکان کپی کردن و اصطلاحا Clone کردن یک نوشته یا برگه وجود ندارد و برای اینکه یک نسخه همسان از یک نوشته یا برگه تهیه شود باید دست به دامان افزونهها شده و یا کدهایی را داخل قالب اضافه کرد . مسلما روش استفاده از افزونه برای دوستانی که به روشهای برنامه نویسی آشنایی ندارند سادهتر و سریعتر است .
کپی کردن نوشته و برگه در وردپرس چه زمانی لازم است ؟
تصور کنید شما با افزونه صفحه ساز در حال ساخت یک صفحه هستید که جزئیات بسیاری دارد و حداقل 3 الی 4 ساعت برای تنظیم المانهای داخل آن زمان صرف کردید . اکنون اگر صفحه دیگری با همین شرایط نیاز داشته باشید باید تمامی کارهایی که داخل برگه انجام شده را مجدد در برگه جدید انجام دهید تا یک نسخه دیگر از همان صفحه داخل سایت داشته باشید .
یا برای مثال اگر یک صفحه جامع دارید و به یک نسخه کاهش یافته از یک صفحه نیاز دارید ، مثلا در صفحه اصلی المانهایی همچون اسلایدر ، آخرین محصولات ، محصولات پیشنهادی و محصولات پرفروش را دارید و اکنون قصد دارید در یک صفحه جدید فقط بخش اسلایدر و بخش آخرین محصولات را داشته باشید . در این شرایط میتوانید از صفحه اصلی یک نسخه کپی تهیه نموده و بخشهایی غیر از اسلایدر و آخرین محصولات را حذف کنید و صفحه جدید خود را داشته باشید . به همین ترتیب در مواردی مشابه ممکن است شما نیاز به تهیه یک نسخه از نوشته ، برگه یا محصولات خود داشته باشید .
یک نکته مهم !
مفهوم پست در وردپرس کمی متفاوت است ! Post یک مفهوم جامع به کار رفته در وردپرس است و لازم است بدانید که شاخصههایی مشخص برای تشخیص یک نوع خاص بعنوان پست وجود دارد . داخل وردپرس قسمت نوشتهها ، قسمت برگهها ، رسانه و همچنین فهرستها یک نوع Post هستند . اگر از افزونه فروشگاه ساز ووکامرس استفاده می کنید لازم است بدانید که محصولات نیز یک نوع Post هستند . یا برای مثال اگر از افزونه نمونه کار استفاده می کنید بخش Portfolio نیز یک نوع Post است .
روش اول استفاده از افزونه Yoast Duplicate Post
افزونه Yoast Duplicate Post یکی از اصلیترین و شناخته شدهترین پلاگینهای وردپرس جهت تهیه نسخههای رونوشت از نوشته یا برگه است . شما میتوانید افزونه Yoast Duplicate Post را از این لینک دریافت کنید . این افزونه داخل مخزن وردپرس به ثبت رسیده و هیچگونه نگرانی بابت استفاده از آن وجود ندارد . این افزونه در حال حاضر 4.000.000 نصب فعال دارد . این افزونه به شما امکان کپی کردن پستها در هر نوعی را خواهد داد . اما روش کار آن چگونه است ؟ پس از نصب این افزونه چندین گزینه برای شما فعال خواهد شد . بعد از اینکه افزونه را نصب و فعال نمودید ، از بخش افزونههای نصب شده نام افزونه را پیدا کرده ( نام آن در وردپرس فارسی ” تکثیر کننده پست ” است ) و روی تنظیمات کلیک کنید .
- بخش اول تنظیمات
در بخش تنظیمات با چند تب مختلف روبرو هست که اولین گزینه عنوان ” چه چیزهایی کپی شود ” دارد . در این بخش میتوانید تعیین کنید که چه فاکتورهایی از نوع Post مدنظر کپی شوند . برای مثال امکان کپی کردن : عنوان ، تاریخ ، وضعیت ، نامک ، محتوا ، تصویر شاخص ، ساختار نوشته ، نویسنده ، حتی دیدگاهها نیز وجود دارد . همچنین در این قسمت میتوانید تعیین کنید که چه فیلدهای اختصاصی که مدنظر خودتان است به هیچ عنوان کپی نشوند .
- در قسمت دسترسیها
در این بخش میتوانید تعیین کنید که گزینههای تکثیر و کپی برای چه نقشهایی نمایش داده شود ! برای مدیر کل ، نویسنده ، مدیر فروشگاه ، مدیر سئو و … پس میتوان امکان تکثیر را تنها برای نقشهای کاربری خاصی درنظر گرفت . همچنین در بخش دسترسیها ، در قسمت ” برای این نوع نوشتهها فعال کن ” میتوانید تعیین کنید که خاصیت تکثیر برای چه نوع نوشتههایی قابل اجرا باشد .
- بخش نمایش
در این قسمت میتوانید گزینههایی که این افزونه جهت کار به شما نمایش خواهد داد را کنترل کنید . برای مثال تعیین کنید که گزینه ” پیش نویس تازه ” در منوهای ابزار نمایش داده شود یا نه ! تنظیمات این قسمت درکل به نمایش یا عدم نمایش گزینههای افزونه ارتباط دارد . برای مثال تنظیمات در داخل صفحه ویرایش مطلب ، در کدام سمت صفحه نشان داده شود و …
- در یک پیش نویس تازه کپی کن
اگر وارد بخش ویرایش نوشته شوید ، در باکس انتشار مطلب که در وردپرس فارسی در سمت چپ صفحه قرار دارد ، دو گزینه اضافه شده است که یکی از آنها به این شکل است ” در یک پیش نویس تازه کپی کن که معادل انگلیسی آن ” Copy To A New Draft ” است . در صورتی که روی این گزینه کلیک شود ، نوشته جاری بسته شده و یک نوشته جدید دقیقا با شرایطی که در بخش تنظیمات افزونه تعیین کردهاید ، در حالت پیش نویس ساخته خواهد شد و اکنون میتوانید روی آن کار کنید . آن را منتشر کرده یا به عنوان پیش نویس تغییر یافته ذخیره کنید .
- بازنویسی و انتشار مجدد
اگر وارد بخش ویرایش نوشته شوید ، مجددا داخل باکس انتشار ، و در زیر گزینهی ” در یک پیش نویس تازه کپی کن ” ، یک گزینه دیگر تحت عنوان ” بازنویسی و انتشار مجدد ” وجود دارد که معادل انگلیسی آن ” Rewrite & Republish ” است . اگر بروی این گزینه کلیک شود ، همانند حالت قبلی وارد یک پنجره جدید خواهید شد و گویا در حال ویرایش مطلب هستید اما در این حالت میتوانید بازنویسی نوشته خود را در این نسخه تکراری از نوشته اصلی شروع کنید . اگر روی “بازنشر” کلیک کنید ، تغییرات شما در نوشته اصلی ادغام شده و به آنجا هدایت میشوید . به نوعی یک نسخه رونوشت از نوشته اصلی خود دارید که پس از انجام تغییرات میتوانید آنها را به نسخه اصلی منتقل نمائید و در همان نسخه اصلی منتشر کنید و یا آن را فعلا در حالت پیش نویس قرار دهید . ( در حالت قبلی تغییرات کلا در یک نسخه جدید قابل انتشار بود ، اما دراین نسخه گویا یک نسخه کمکی جهت اعمال تغییرات بروی نوشته اصلی ایجاد میشود و سپس نسخه ساخته شده حذف میشود ) در این شرایط حتی میتوانید تغییرات نسخه جدید را با نسخه اصلی مقایسه کنید .
در صورتی که در لیست نوشتهها یا برگهها قصد دارید به شکل سریع از نوشته خود تکثیر کرده و یا پیش نویس جدید بسازید ، زمانی که موس روی نوشتهها قرار گیرد گزینههایی ظاهر خواهد شد که در زیر توضیح دادهایم .
- تکثیر کردن ( Clone )
درصورتی که در لیست نوشتهها روی گزینه تکثیر کردن کلیک شود ، یک نوشته جدید با حالت پیش نویس در کنار نوشته اصلی تولید خواهد شد که میتوانید پس از تولید ، خودتان وارد قسمت ویرایش آن شده و پس از انجام تغییرات ، آن را منتشر کنید . همانند گزینه ” در یک پیش نویس تازه کپی کن ” عمل میکند .
- پیش نویس تازه ( New Draft )
در صورتی که روی این گزینه کلیک شود ، یک نوشته جدید با حالت پیش نویس تولید شده و شما مستقیما جهت ویرایش به داخل نوشته منتقل خواهید شد که میتوانید پس از انجام تغییرات ، آن را پیش نویس کرده و یا به عنوان نسخه جدید منتشر کنید .
- دوبل کردن
اگر سایت شما دارای بخش فروشگاه و افزونه فروشگاه ساز ووکامرس است ، درصورتی که در حال مشاهده لیست محصولات باشید ، با قرار گرفتن موس روی هر محصول ، یک گزینه با عنوان ” دوبل کردن ” وجود خواهد داشت ، که این گزینه عملکردی دقیقا مانند گزینه پیش نویس تازه در بخش نوشتهها دارد و پس از کلیک روی آن ، به یک صفحه جدید ویرایش محصول با همان مشخصات منتقل خواهید شد که پس از انجام تغییرات میتوانید آن را پیش نویس کرده یا منتشر کنید .
روش دوم ، کدهای برنامه نویسی
برای اینکه خاصیت تکثیر را توسط کدهای برنامه نویسی به پروژه خود اضافه کنید ( تنها در قالبی که تغییرات در آن اعمال شود انجام خواهد شد ) میبایست در داخل فایل functions.php کدهایی که در ادامه معرفی میشود را قرار دهید . البته توجه داشته باشید که انجام تغییرات در فایل functions.php بسیار خطرناک است و باید این کار توسط یک برنامه نویس ماهر که تسلط و شناخت کافی به ساختار قالبهای وردپرس دارد انجام شود . دسترسی به فایل functions.php از چند طریق ممکن است که سادهترین راه دسترسی به آن از داشبورد وردپرس ، بخش نمایش و ویرایشگر پوسته است .
این کدها به زبان php هستند و باید حتما داخل بلوک php نوشته شده و در محل مناسبی از فایل functions.php قرار گیرد . البته این کد برای اضافه کردن گزینه ” Duplicate this item ” به بخش نوشتهها است که میتوانید با تغییر آخرین خط کد ، آنرا برای قسمت برگهها نیز فعال کنید . در این صورت باید دوبار این کد را داخل فایل functions.php قرار دهید . کد به این شکل است :
/*
* Function for post duplication. Dups appear as drafts. User is redirected to the edit 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="Duplicate this item" rel="permalink">Duplicate</a>';
}
return $actions;
}
add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );اگر قصد دارید تا این بخش را برای برگههای سایت نیز فعال کنید باید همین کدها را یکبار دیگر تکرار نموده و خط انتهایی آن را در بخش ” post_row_actions ” به شکل ” page_row_actions ” تغییر دهید تا در بخش لیست برگهها نیز گزینه ” Duplicate this item ” اضافه شود .
add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2);درحالت کلی روش اول یعنی روش استفاده از افزونه سادهتر است و شما میتوانید بعد از نصب افزونه و انجام تکثیرهای لازم ، افزونه را غیرفعال نموده و یا پاک کنید و لزومی ندارد که پس از اتمام کار ، افزونه در حالت فعال یا نصب شده باقی بماند . افزونههای دیگری نیز برای انجام عمل تکثیر نوشته ، برگه یا محصول و … وجود دارد که افزونه Yoast Duplicate Post با چندمیلیون نصب فعال ، در صدر قرار داشته و تمام امکانات آن رایگان است .








