Sao chép bài viết trong WordPress không cần Plugin

Như các bạn đã biết trong Woocommerce có tính năng sao chép sản phẩm. Tính năng này dường như ít được sử dụng, tuy nhiên có một số sản phẩm đặc thù rất cần đến tính năng này. Chúng hỗ trợ tạo ra một sản phẩm mới nhanh chóng với toàn bộ thông tin được sao chép lại. Việc này giúp bạn không cần phải sửa lại quá nhiều thông tin trùng lặp giống nhau.

Sao chép bài viết trong WordPress

Trong phần post ( bài viết ) của wordpress lại không hỗ trợ sẵn tính năng này, khi bạn cần dùng bắt buộc phải cài thêm plugin. Tuy nhiên Themewp.vn sẻ chia sẻ với bạn cách tạo ra tính năng sao chép bài viết trong WordPress mà không cần dùng đến plugin.

Tạo thêm nút sao chép bài viết

Đầu tiên cần thực hiện việc chèn nút sao chép. Mặc định thì các post trong wordpress chỉ có 4 liên kết gồm : Chỉnh sửa | Sửa nhanh | Thùng rác | Xem. Để thêm liên kết Sao chép bạn hãy mở tệp functions.php trong thư mục của giao diện. Thêm xuống dưới cùng đoạn mã sau đây:

add_filter( 'post_row_actions', 'duplicate_product_link', 10, 2 );
add_filter( 'page_row_actions', 'duplicate_product_link', 10, 2 );

function duplicate_product_link( $actions, $post ) {
   if( ! current_user_can( 'edit_posts' )) {
         return $actions;
   }
   $url = wp_nonce_url(
         add_query_arg(
               array(
                    'action' => 'duplicate_product_as_draft',
                    'post' => $post->ID,
               ),
               'admin.php'
        ),basename(__FILE__),
        'duplicate_nonce'
   );

   if($post->post_type =='product'){
       $actions[ 'duplicate' ] = '<a href="' . $url . '" title="Sao chép sản phẩm" rel="permalink">Sao chép</a>';
   }
   return $actions;
}

 

Kết quả sau khi thêm hành động sao chép

Tạo tính năng sao chép bài viết

Ngay bên dưới đoạn mã vừa rồi, hãy thêm đoạn này vào dưới đó.

add_action( 'admin_action_duplicate_product_as_draft', 'duplicate_product_as_draft' );
function duplicate_product_as_draft(){
     if ( empty( $_GET[ 'post' ] ) ) {
          wp_die( 'Không có bài nào được chỉ định để sao chép !' );
     }
     if ( ! isset( $_GET[ 'duplicate_nonce' ] ) || ! wp_verify_nonce( $_GET[ 'duplicate_nonce' ], basename( __FILE__ ) ) ) {
          return;
     }
     $post_id = absint( $_GET[ 'post' ] );
     $post = get_post( $post_id );
     $current_user = wp_get_current_user();
     $new_post_author = $current_user->ID;

     if ( $post ) {
        $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_status' => 'draft',
            'post_title' => $post->post_title.' - Bản Sao',
            'post_type' => $post->post_type
        );
        $new_post_id = wp_insert_post( $args );
        $taxonomies = get_object_taxonomies( get_post_type( $post ) );
        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 );
            }
        }

        $post_meta = get_post_meta( $post_id );
        if( $post_meta ) {
           foreach ( $post_meta as $meta_key => $meta_values ) {
           if( '_wp_old_slug' == $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'
              ),
              admin_url( 'edit.php' )
          )
     );
     exit;
   } else {
       wp_die( 'Không thể tạo sản phẩm, không thể tìm thấy sản phẩm gốc.' );
   }
}

 

thêm tính năng Sao chép bài viết trong WordPress không cần Plugin
Kết quả hoàn thiện tính năng sao chép

Thêm thông báo đã sao chép

Về cơ bản tính năng sao chép đã hoàn thiện. Tuy nhiên để hoàn thiện hơn, cũng như cung cấp tính năng trọn vẹn. Bây giờ sẽ thêm một tính năng thông báo sau khi sao chép xong. Dưới đây là đoạn code thông báo.

add_action( 'admin_notices', 'product_duplication_admin_notice' );
   function product_duplication_admin_notice() {
         $screen = get_current_screen();
         if ( 'edit' !== $screen->base ) {
            return;
         }
         if ( isset( $_GET[ 'saved' ] ) && 'post_duplication_created' == $_GET[ 'saved' ] ) {
            echo '<div class="notice notice-success is-dismissible"><p>Sản phẩm đã được sao chép.</p></div>';
         }
   }
Kết quả hoàn thiện tính năng sao chép
Kết quả hoàn thiện tính năng sao chép

Như vậy bài viết trên Themewp.vn đã chia sẻ xong cách để tạo tính năng sao chép không cần dùng Plugin. Nếu bạn thấy hay, hãy chia sẻ bài viết này để nhiều người biết đến nhé.

4.3/5 - (6 bình chọn)
facebook-icon
zalo-icon
zalo-icon