Intereting Posts

массовые действия wp_list_tables

Как запускать массовые действия внутри расширенного WP_List_Table.

Я добавляю следующие массовые действия в поле выбора may table, но на Apply ничего не произойдет

вот как я добавил свои групповые действия

function get_bulk_actions() { $actions = array( 'delete' => 'Delete', 'parsing' => 'Parsen' ); return $actions; } 

и вот столбец флажка

 function column_cb($item) { return sprintf( '<input type="checkbox" name="record[]" value="%d" />', $item['Round'] ); } 

Если вы добавите массовое действие, вам придется реагировать на это действие. Просто добавление функции ничего не делает, вы должны называть ее:

 class WPSE_List_Table extends WP_List_Table { public function __construct() { parent::__construct( array( 'singular' => 'singular_form', 'plural' => 'plural_form', 'ajax' => false ) ); } public function prepare_items() { $columns = $this->get_columns(); $sortable = $this->get_sortable_columns(); $hidden = array( 'id' ); $this->_column_headers = array( $columns, $hidden, $sortable ); $this->process_bulk_action(); } public function get_columns() { return array( 'cb' => '<input type="checkbox" />', // this is all you need for the bulk-action checkbox 'id' => 'ID', 'date' => __( 'Date', 'your-textdomain' ), 'title' => __( 'Title', 'your-textdomain' ), ); } public function get_sortable_columns() { return array( 'date' => array( 'date', false ), 'title' => array( 'title', false ), ); } public function get_bulk_actions() { return array( 'delete' => __( 'Delete', 'your-textdomain' ), 'save' => __( 'Save', 'your-textdomain' ), ); } public function process_bulk_action() { // security check! if ( isset( $_POST['_wpnonce'] ) && ! empty( $_POST['_wpnonce'] ) ) { $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING ); $action = 'bulk-' . $this->_args['plural']; if ( ! wp_verify_nonce( $nonce, $action ) ) wp_die( 'Nope! Security check failed!' ); } $action = $this->current_action(); switch ( $action ) { case 'delete': wp_die( 'Delete something' ); break; case 'save': wp_die( 'Save something' ); break; default: // do nothing or something else return; break; } return; } } 

В prepare_items() мы вызываем process_bulk_action() . Таким образом, на странице вашего бэкэнд вы будете иметь что-то вроде этого:

 $table = new WPSE_List_Table(); printf( '<div class="wrap" id="wpse-list-table"><h2>%s</h2>', __( 'Your List Table', 'your-textdomain' ) ); echo '<form id="wpse-list-table-form" method="post">'; $page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRIPPED ); $paged = filter_input( INPUT_GET, 'paged', FILTER_SANITIZE_NUMBER_INT ); printf( '<input type="hidden" name="page" value="%s" />', $page ); printf( '<input type="hidden" name="paged" value="%d" />', $paged ); $table->prepare_items(); // this will prepare the items AND process the bulk actions $table->display(); echo '</form>'; echo '</div>'; 

Сначала вы создаете экземпляр класса list-table. Затем вы создаете формуляр и вызываете prepare_items() . С помощью этого вызова массовые действия будут обработаны, потому что мы вызываем метод process_bulk_action() внутри prepare_items() .

В приведенном выше примере мы используем post как метод для отправки данных. Поэтому мы можем захватить массовое действие из массива сообщений, если мы не хотим обрабатывать массовые действия внутри класса (или по другим причинам).

 // this is the top bulk action!! $action = ( isset( $_POST['action'] ) ) ? filter_input( INPUT_POST, 'action', FILTER_SANITIZE_STRIPPED ) : 'default_top_bulk_action'; // this is the bottom bulk action!! $action2 = ( isset( $_POST['action2'] ) ) ? filter_input( INPUT_POST, 'action2', FILTER_SANITIZE_STRIPPED ) : 'default_bottom_bulk_action'; switch ( $action ) {} switch ( $action2 ) {} 

Вы можете захватить массовое действие в любом месте из массива post / get (в зависимости от того, какой метод использовался для отправки данных).

это то, что я нашел на нескольких сайтах. Он все еще не работает для меня, но он работал, когда у меня все еще были образцы данных в моей таблице пользовательских списков.

  function process_bulk_action() { //Detect when a bulk action is being triggered... if( 'delete'===$this->current_action() ) { wp_die('Items deleted (or they would be if we had items to delete)!'); } }