カスタムリストテーブルクラスで一括アクションはどのように処理されますか?


9

WordPressダッシュボードに表示するカスタムデータテーブルを作成しています。テーブルは、プラグインで作成したデータベーステーブルから生成されます。

この領域のコーディングに関する質問のほとんどで、提供されているWordPressカスタムリストテーブルの例を使用していますが、この例には一括アクションを処理するためのものがありません。文書化された例のリンクは次のとおりです。http//wordpress.org/extend/plugins/custom-list-table-example/

バルクアクションを処理するために、この例ではこれだけを提供します。

    function process_bulk_action() {

    //Detect when a bulk action is being triggered...
    if( 'delete'===$this->current_action() ) {

        wp_die('Items deleted!');
    }

}

アクションのために選択されたアイテムをプルする方法を知りたいので、アイテムを削除したり、データベースエントリを編集したりできます。

回答:


11

標準のcolumn_cb()関数を使用していると仮定すると、リストテーブルは、リストテーブルのコンストラクターで「singular」に割り当てたものとしてラベルが付けられた$ _GETの配列で選択された行のIDを渡します。

典型的なcolumn_cb()は次のとおりです。

function column_cb($item){
        return sprintf(
            '<input type="checkbox" name="%1$s[]" value="%2$s" />',
            /*$1%s*/ $this->_args['singular'],  //Let's simply repurpose the table's singular label ("video")
            /*$2%s*/ $item->id             //The value of the checkbox should be the record's id
        );
    }

たとえば、ビデオを表示するリストテーブルがあるとします。コンストラクタは次のようになります。

function __construct(){
        global $status, $page;

        //Set parent defaults
        parent::__construct( array(
            'singular'  => 'video',     //singular name of the listed records
            'plural'    => 'videos',    //plural name of the listed records
            'ajax'      => false        //does this table support ajax?
        ) );

    }

したがって、リストテーブルの3つの行をチェックし、一括アクションリストから[削除]を選択して[適用]をクリックすると、$ _ GET ['video']を使用して選択した行にアクセスできます。

function process_bulk_action() {

        //Detect when a bulk action is being triggered...
        if( 'delete'===$this->current_action() ) {
            foreach($_GET['video'] as $video) {
                //$video will be a string containing the ID of the video
                //i.e. $video = "123";
                //so you can process the id however you need to.
                delete_this_video($video);
            }
        }

    }

ありがとう!他のWordPressテーブルと同じように機能する「編集」バルクアクションを実装する方法に関するアイデアはありますか?
千葉県2011

UIがより複雑になることを除いて、同様の方法で処理できます。このような場合は、おそらくデフォルトのprocess_bulk_actions()メソッドを使用しないでしょう。なぜなら、最も使いやすいインターフェースは、グリッドの行を編集可能なフィールドに変更するものだからです。その場合でも、$ _ GET配列で選択された項目を取得できますが、リストテーブルクラスでHTMLが出力される方法をオーバーライドする必要があります。シナリオははるかに複雑ですが、IDへのアクセス方法は同じです。
Nate Dudek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.