拡張されたWP_List_Table内で一括アクションを起動する方法。
Mayテーブルの選択ボックスに以下の一括アクションを追加していますが、適用では実際には何も起こりません
これが私の一括アクションの追加方法です
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()
weで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>';
最初にあなたのリストテーブルクラスのインスタンスを作成します。それから公式を作成してprepare_items()
を呼び出します。この呼び出しでは、process_bulk_action()
内でメソッドprepare_items()
を呼び出すので、一括アクションが処理されます。
上記の例では、データを送信するためのメソッドとしてpost
を使用しています。そのため、クラス内で一括アクションを処理したくない場合(または他の理由で)、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)!');
}
}
WP "配列" DATAを使用して一括操作付きのw/wリスト
https://wpengineer.com/2426/wp_list_table-a-step-by-step-guide/ (プラグインとして作成) https://Gist.github.com/Latz/7f923479a4ed135e35b2 (functions.phpの場合)
WP "SQL" DATAを使用して一括操作付きのw/wを一覧表示する
https://www.smashingmagazine.com/2011/11/native-admin-tables-wordpress/ (functions.phpの場合)
乾杯!