Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Wordpress » Thêm hành động Bulk Action vào dropdown menu [WordPress]

Thêm hành động Bulk Action vào dropdown menu [WordPress]

Thứ Bảy, 14/02/2015 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Bài hôm nay chúng ta sẽ học cách thêm hành động vào bulk action cho phần quản lý nội dung post type wordpress. Trong bài viết mình trình bày và cung cấp một đoạn code cho phép bạn dễ dàng tùy biến thêm bulk actions đến mọi nội dung wordpress gồm có: posts, media, users, custom post type. Cách tiếp tận dưới đây dựa trên chủ đề hỏi đáp về actions bulk trên trang stackexchange

Ví dụ, giả sử chúng ta sẽ thêm action có tên “Export” vào trang quản lý Posts, để cho phép xuất dữ liệu của các posts được lựa chọn. Chú ý nếu bạn muốn thêm một bulk action vào một trong số những phần wordpress admin, chẳng hạn như Users page bạn cần sửa đổi code trong đoạn code mình cung cấp dưới đây tương ứng với hooks bạn sẽ sử dụng. Kết quả cuối cùng trông giống như thế này.
tùy biến thêm bulk action

Tìm hiểu

WordPress hứa hẹn đưa ra filter ‘bulk-actions-screenid’ hiện tại duy nhất chỉ có thể xóa actions bulk không cho phép thêm. Vấn đề này đã ghi chú trong filter trên tài liệu WordPress codex, và được sử dụng trong file wp-admin/includes/class-wp-list-table.php. Như đã nêu trong ticket https://core.trac.wordpress.org/ticket/16031 mình thấy không đủ kiến thức để thêm bulk action mới vào menu dropdown và cách sử lý hành động cho menu action. Sau một hồi tìm kiếm vấn đề của mình đã được giải quyết, sẽ yêu cầu sử dụng hook để thay đổi vào hệ thống wordpress. Tuy nhiên bạn cũng đừng lo lắng vì không gây hại cho các files core.

Giải pháp

Có 3 giai đoạn khi tạo bulk action, đầu tiên thêm một item đến select box của bulk actions. Chúng ta sử dụng action “admin_footer-edit.php”.

add_action('admin_footer-edit.php', 'custom_bulk_admin_footer');
 
function custom_bulk_admin_footer() {
 
  global $post_type;
 
  if($post_type == 'post') {
    ?>
    <script type="text/javascript">
      jQuery(document).ready(function() {
        jQuery('<option>').val('export').text('<?php _e('Export')?>').appendTo("select[name='action']");
        jQuery('<option>').val('export').text('<?php _e('Export')?>').appendTo("select[name='action2']");
      });
    </script>
    <?php
  }
}

Như bạn thấy, ở đây chúng ta sử dụng javascript để thêm item vào 2 bulk action trên trang quản lý Posts.
Bước tiếp theo là phần sử lý hành động khi chọn action, để thực hiện bạn nhờ đến hook load-*. Những công việc cần phải làm:
1. Nhận dạng action.
2. Kiểm tra security.
3. Thực thi action.
4. redirect user đến trang kết quả.

add_action('load-edit.php', 'custom_bulk_action');
 
function custom_bulk_action() {
 
  // ...
 
  // 1. get the action
  $wp_list_table = _get_list_table('WP_Posts_List_Table');
  $action = $wp_list_table->current_action();
 
  // ...
 
  // 2. security check
  check_admin_referer('bulk-posts');
 
  // ...
 
  switch($action) {
    // 3. Perform the action
    case 'export':
      // if we set up user permissions/capabilities, the code might look like:
      //if ( !current_user_can($post_type_object->cap->export_post, $post_id) )
      //  pp_die( __('You are not allowed to export this post.') );
 
      $exported = 0;
 
      foreach( $post_ids as $post_id ) {
        if ( !$this->perform_export($post_id) )
          wp_die( __('Error exporting post.') );
        $exported++;
      }
 
      // build the redirect url
      $sendback = add_query_arg( array('exported' => $exported, 'ids' => join(',', $post_ids) ), $sendback );
 
    break;
    default: return;
  }
 
  // ...
 
  // 4. Redirect client
  wp_redirect($sendback);
 
  exit();
}

Sau đó chúng ta sẽ hiển thị notice là kết quả của action bằng hook ‘admin_notices’. Nếu tồn tại tham số ‘exported’ cái mà gửi từ đoạn code trước.

add_action('admin_notices', 'custom_bulk_admin_notices');
 
function custom_bulk_admin_notices() {
 
  global $post_type, $pagenow;
 
  if($pagenow == 'edit.php' && $post_type == 'post' &&
     isset($_REQUEST['exported']) && (int) $_REQUEST['exported']) {
    $message = sprintf( _n( 'Post exported.', '%s posts exported.', $_REQUEST['exported'] ), number_format_i18n( $_REQUEST['exported'] ) );
    echo "<div class="updated"><p>{$message}</p></div>";
  }
}

Bạn nhìn thấy dải mầu vàng chứa thông điệp như thế này không đó là hệ thống notice trong wordpress.
custom-bulk-action-notice

Và bạn đã có thêm một bulk action mới rồi, mẹo ở đây như bạn thấy chúng ta sẽ sử lý luôn hành động khi user chọn vào action trong hook hiển thị kết quả notices. Tải demo plugin đính kém dưới đây nếu bạn chưa hiểu cách làm ha.
Download Custom Bulk Action Demo Plugin.
Chúc bạn thành công!

Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng có thể theo dõi blog này trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Wordpress Tìm kiếm: bulk actions

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.