مرحله | توضیحات | تنظیمات |
افزودن کد | فایل فانکشن چایلد | چایلد یا اصلی |
نوشتهها برگه ها وکامرس | گزینه “Duplicate” را اضافه میکند | بطور خودکار همه محتواها شامل میشه |
اموزش کپی کردن برگه ها نوشته ها در سایت وردپرس
کپی کردن برگه ها نوشته ها در وردپرس – این کد یک قابلیت کپیسازی (Duplicate) برای نوشتهها، برگهها و محصولات ووکامرس به داشبورد مدیریت وردپرس اضافه میکند. در ادامه توضیح عملکرد آن را بررسی میکنیم.
اهمیت کپی کردن برگهها و نوشتهها
فکرشو بکنید: یه برگه یا نوشته رو با کلی زحمت درست کردید، حالا میخواید یه نسخه مشابهش بسازید، مثلاً برای یه محصول جدید یا یه تست ساده. آیا باید از صفر شروع کنید؟ نه دیگه! کپی کردن توی وردپرس مثل یه میانبر باحاله که وقتتون رو آزاد میکنه و کارتون رو سریعتر میکنه.
روش های مختلف کپی کردن در سایت
روش های زیادی برای کپی کردن برگه و نوشته موجود نیست ! فقط دو روش رایج موجد هست که اولی از دومی بهتر امن تر و سبک تره!
- قابلیت کپی کاری با کد نویسی⭐⭐⭐
- قابلیت کپی کاری با افزونه⭐
کپی کاری برگه با قابلیت کد آماده
کپی کاری برگه با قابلیت کد آماده باعث میشود اطلاعات ضروری مانند :محتوا، عنوان، وضعیت انتشار، نویسنده، وضعیت کامنت و … را در یک آرایه قرار گیرد.
– نسخهی جدید پست را در پایگاه داده ایجاد میکند و مقدار `draft` را بهعنوان وضعیت انتشار آن تنظیم میکند.
– سپس دستهبندیها (Taxonomies) و اطلاعات متا (Meta Data) را از پست اصلی به پست جدید کپی میکند.
– در نهایت با این قابلیت کپی کردن برگه ها نوشته ها در وردپرس، مدیر سایت را به صفحهی ویرایش پست جدید هدایت میکند.
مشخصات کدهای و توابع کپی نوشته ها
تابع `duplicate_post_link`
این تابع وظیفهی **افزودن گزینهی “Duplicate” به لیست عملیات مدیریتی هر پست را دارد:
– بررسی میکند که آیا کاربر دارای مجوز ویرایش پستها (`edit_posts`) است یا خیر.
– لینک مربوط به کپیسازی را ایجاد کرده و آن را به لیست گزینههای مدیریت پست اضافه میکند.
قابلیت کپی محصولات به ووکامرس
این قابلیت در ابتدا برای نوشتهها (`post`) و برگهها (`page`) فعال بود، اما اکنون برای محصولات ووکامرس (`woocommerce_product_row_actions`) نیز اضافه شده است. این یعنی:
– در لیست نوشتهها و برگهها، کنار هر آیتم گزینهی “Duplicate” نمایش داده میشود.
– در صفحهی محصولات ووکامرس نیز همین گزینه در کنار محصولات ظاهر خواهد شد.
ویژگیها و بهبودهای کد
✅ کاربردی و تمیز: این کد مستقیماً با وردپرس و پایگاه دادهی آن تعامل دارد، بنابراین بدون وابستگی به افزونههای اضافی کار میکند.
✅ سازگار با ووکامرس: قابلیت کپیسازی به محصولات ووکامرس اضافه شده است.
✅ حفظ اطلاعات متا و دستهبندیها: هنگام کپی، تمامی اطلاعات مربوط به پست اصلی، از جمله متادیتاها و دستهبندیها، به نسخهی جدید منتقل میشود.
✅ مدیریت ساده: مدیر سایت میتواند با قابلیت کپی کردن برگه ها نوشته ها ویک کلیک، یک نسخهی جدید از هر نوشته، برگه یا محصول ایجاد کند و بلافاصله آن را ویرایش کند.
کد برای اضافه کردن به قالب چایلد :
//copy kari
function duplicate_post_as_draft(){
global $wpdb;
if (! ( isset( $_GET[‘post’]) || isset( $_POST[‘post’]) || ( isset($_REQUEST[‘action’]) && ‘duplicate_post_as_draft’ == $_REQUEST[‘action’] ) ) ) {
wp_die(‘No post to duplicate has been supplied!’);
}
$post_id = (isset($_GET[‘post’]) ? absint( $_GET[‘post’] ) : absint( $_POST[‘post’] ) );
$post = get_post( $post_id );
$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;
if (isset( $post ) && $post != null) {
$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 . ‘ (Copy)’,
‘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($post->post_type);
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);
}
$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);
}
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_duplicate_post_as_draft’, ‘duplicate_post_as_draft’ );
function duplicate_post_link( $actions, $post ) {
if (current_user_can(‘edit_posts’)) {
$actions[‘duplicate’] = ‘ID, basename(__FILE__), ‘duplicate_nonce’ ) . ‘” title=”Duplicate this item” rel=”permalink”>Duplicate’;
}
return $actions;
}
add_filter( ‘post_row_actions’, ‘duplicate_post_link’, ۱۰, ۲ );
add_filter( ‘page_row_actions’, ‘duplicate_post_link’, ۱۰, ۲ );
add_filter( ‘woocommerce_product_row_actions’, ‘duplicate_post_link’, ۱۰, ۲ );
//copy kari function duplicate_post_as_draft(){ global $wpdb; if (! ( isset( $_GET[‘post’]) || isset( $_POST[‘post’]) || ( isset($_REQUEST[‘action’]) && ‘duplicate_post_as_draft’ == $_REQUEST[‘action’] ) ) ) { wp_die(‘No post to duplicate has been supplied!’); } $post_id = (isset($_GET[‘post’]) ? absint( $_GET[‘post’] ) : absint( $_POST[‘post’] ) ); $post = get_post( $post_id ); $current_user = wp_get_current_user(); $new_post_author = $current_user->ID; if (isset( $post ) && $post != null) { $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 . ‘ (Copy)’, ‘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($post->post_type); 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); } $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); } 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_duplicate_post_as_draft’, ‘duplicate_post_as_draft’ ); function duplicate_post_link( $actions, $post ) { if (current_user_can(‘edit_posts’)) { $actions[‘duplicate’] = ‘ID, basename(__FILE__), ‘duplicate_nonce’ ) . ‘” title=”Duplicate this item” rel=”permalink”>Duplicate’; } return $actions; } add_filter( ‘post_row_actions’, ‘duplicate_post_link’, ۱۰, ۲ ); add_filter( ‘page_row_actions’, ‘duplicate_post_link’, ۱۰, ۲ ); add_filter( ‘woocommerce_product_row_actions’, ‘duplicate_post_link’, ۱۰, ۲ );
افزونه کپی برگه نوشته duplicate page
بدترین حالت ولی آسان ترین حالت اضافه کردن کپی کردن برگه ها نوشته ها در وردپرس – استفاده از پلاگین مربوطه است
مقاله افزایش سرعت المنتور
2 پاسخ
کد شما عالی- افزونه کپی برگه ها نوشته ها خیلی بده!!!
بله-قطعا⭐