web-dev-qa-db-ja.com

wp_list_table一括アクション

拡張された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']
        );    

}
2
fefe

一括アクションを追加した場合は、このアクションに対処する必要があります。単に関数を追加しても何もしません、あなたはそれを呼び出さなければなりません:

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配列から好きな場所に一括操作を取得できます(データの送信に使用された方法に応じて)。

6
Ralf912

これは私がいくつかのウェブサイトで見つけたものです。それでもまだ動作しませんが、カスタムリストテーブルにサンプルデータがまだある場合は動作していました。

  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)!');
    }

}
0
Jan

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の場合)

乾杯!

0
samjco