- shares
- 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ì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.
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 Messenger
- Gmail
- Viber
- Skype