1

これは私の WordPress テーブルです。試すために配列を作成しましたが、クラスと ID を追加して、CSS を使用して最上位のプラグイン ページのようにスタイルを設定できるようにする必要があります。

テーブル要素にクラスを追加するにはどうすればよいですか?

<?php

if(!class_exists('WP_List_Table')){
    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
}


class TT_Example_List_Table extends WP_List_Table {

    var $example_data = array(
            array(
                'ID'        => 1,
                'title'     => '300',
                'rating'    => 'R',
                'director'  => 'Zach Snyder'
            ),
            array(
                'ID'        => 2,
                'title'     => 'Eyes Wide Shut',
                'rating'    => 'R',
                'director'  => 'Stanley Kubrick'
            ),
            array(
                'ID'        => 3,
                'title'     => 'Moulin Rouge!',
                'rating'    => 'PG-13',
                'director'  => 'Baz Luhrman'
            ),
            array(
                'ID'        => 4,
                'title'     => 'Snow White',
                'rating'    => 'G',
                'director'  => 'Walt Disney'
            ),
            array(
                'ID'        => 5,
                'title'     => 'Super 8',
                'rating'    => 'PG-13',
                'director'  => 'JJ Abrams'
            ),
            array(
                'ID'        => 6,
                'title'     => 'The Fountain',
                'rating'    => 'PG-13',
                'director'  => 'Darren Aronofsky'
            ),
            array(
                'ID'        => 7,
                'title'     => 'Watchmen',
                'rating'    => 'R',
                'director'  => 'Zach Snyder'
            )
        );


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

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

    }


    function column_default($item, $column_name){
        switch($column_name){
            case 'rating':
            case 'director':
                return $item[$column_name] . 'hi';
            default:
                return print_r($item,true) . ' hi'; //Show the whole array for troubleshooting purposes
        }
    }


    function column_title($item){

        //Build row actions
        $actions = array(
            'edit'      => sprintf('<a href="?page=%s&action=%s&movie=%s">Edit</a>',$_REQUEST['page'],'edit',$item['ID']),
            'delete'    => sprintf('<a href="?page=%s&action=%s&movie=%s">Delete</a>',$_REQUEST['page'],'delete',$item['ID']),
        );

        //Return the title contents
        return sprintf('%1$s <span style="color:silver">(id:%2$s)</span>%3$s',
            /*$1%s*/ $item['title'],
            /*$2%s*/ $item['ID'],
            /*$3%s*/ $this->row_actions($actions)
        );
    }


    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 ("movie")
            /*$2%s*/ $item['ID']                //The value of the checkbox should be the record's id
        );
    }


    function get_columns(){
        $columns = array(
            'cb'        => '<input type="checkbox" />', //Render a checkbox instead of text
            'title'     => 'Title',
            'rating'    => 'Rating',
            'director'  => 'Director'
        );
        return $columns;
    }


    function get_sortable_columns() {
        $sortable_columns = array(
            'title'     => array('title',true),     //true means its already sorted
            'rating'    => array('rating',false),
            'director'  => array('director',false)
        );
        return $sortable_columns;
    }


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


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

    }


    function prepare_items() {


        $per_page = 5;


        $columns = $this->get_columns();
        $hidden = array();
        $sortable = $this->get_sortable_columns();


        $this->_column_headers = array($columns, $hidden, $sortable);


        $this->process_bulk_action();


        $data = $this->example_data;


        function usort_reorder($a,$b){
            $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'title'; //If no sort, default to title
            $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'asc'; //If no order, default to asc
            $result = strcmp($a[$orderby], $b[$orderby]); //Determine sort order
            return ($order==='asc') ? $result : -$result; //Send final sort direction to usort
        }
        usort($data, 'usort_reorder');



        $current_page = $this->get_pagenum();


        $total_items = count($data);



        $data = array_slice($data,(($current_page-1)*$per_page),$per_page);



        $this->items = $data;


        $this->set_pagination_args( array(
            'total_items' => $total_items,                  //WE have to calculate the total number of items
            'per_page'    => $per_page,                     //WE have to determine how many items to show on a page
            'total_pages' => ceil($total_items/$per_page)   //WE have to calculate the total number of pages
        ) );
    }

}



function tt_add_menu_items(){
    add_menu_page('Example Plugin List Table', 'List Table Example', 'activate_plugins', 'tt_list_test', 'tt_render_list_page');
} add_action('admin_menu', 'tt_add_menu_items');


function tt_render_list_page(){

    $testListTable = new TT_Example_List_Table();
    $testListTable->prepare_items();

    ?>
    <div class="wrap">

        <div id="icon-users" class="icon32"><br/></div>
        <h2>List Table Test</h2>


        <form id="movies-filter" method="get">
            <input type="hidden" name="page" value="<?php echo $_REQUEST['page'] ?>" />
            <?php $testListTable->display() ?>
        </form>

    </div>
    <?php
}
4

1 に答える 1

6

これを行う唯一の方法は、WP_List_Tableクラスのメソッドの一部をオーバーライドすることです。

テーブル内の各 tr/td の条件付き HTML クラスをサポートするようにクラスを変更しました。クラスを適用する要素や、​​それをどのように正確に指定するかについて十分に明確ではなかったので、それがあなたが望んでいたものではない場合は申し訳ありません(さらに詳細を指定してください)。

完全なコードを確認できます (TT_Example_List_Tableクラスのみが存在し、残りは同じです) here

基本的に、 というクラス プロパティを定義します$cond_classes。このプロパティは、条件の多次元配列です。そこには、「奇数」と「偶数」の 2 つの最上位キーが予約されています。ご想像のとおり、奇数または偶数の行ごとにアクセスされます。トップレベルの残りのキーは、列 ID または項目 ID にすることができます。

各最上位キーは配列または文字列のいずれかを保持できます。最上位キーが文字列を保持している場合、この条件が満たされると、そのクラスが追加されます。最上位キーが配列を保持している場合は、ループスルーされます。第 2 レベルの配列には、文字列値とキー => 値のペアを含めることができます。キーはクラスで、値は条件の配列です。

かなりややこしいと思いますが、以下の例を見れば、これがどのように機能するかがわかります。

var $cond_classes = 配列(
    '奇数' => 配列(
        'odd-class', // このクラスは常に奇数行とその列に与えられます
        'special-odd-class' => array( // このクラスは、行が ID 1、4、または 7 のアイテムの場合、奇数行とその列にのみ与えられます
            'ID' => 配列( 1, 4, 7 )
        )
    )、
    '偶数' => 配列(
        「偶数クラス」
    )、
    'タイトル' => 配列(
        'custom_title_class',
        'special_title_class' => 配列(
            'ID' => array( 3, 7 ), // これは、ID 3 または 7 のアイテムの「タイトル」列にのみ与えられます
            'title' => 'The Fountain', // これは、"The Fountain" というタイトルのアイテムの "title" 列にのみ与えられます
        )、
    )、
    7 => 'id_7_class', // これは行に与えられ、ID 7 のアイテムの列です
);

結果のテーブルに適用されたクラスが表示されます。 HTML コードのプレビュー

それが役立つことを願っています! ご不明な点がございましたら、どうぞ :)

于 2012-11-13T14:43:35.393 に答える