web-dev-qa-db-ja.com

管理領域のwp_list_tableに列を追加する方法を教えてください。

enter image description here

それで、私の質問はあなたが絵で見るものとほとんど同じです。私のカスタム投稿タイプの "Products"で、SEO Yoastが WP_List_Table というメインテーブルに追加したような追加の列を追加する方法はありますか。項目の「在庫切れ」のcustom_fieldがtrueまたはfalseに設定されているかどうかに応じて、在庫切れ機能をどのように表示するかについてコードを考え出しました。問題ありませんが、コード内のテーブルのその領域をどのようにターゲットにできますか。私はそれがフィルタであると思います、それがどのように働くかについて確かにするのではなく、誰かが私を助けることができるならば本当にそれを認めます。

1
Lucas Santos

私はあなたが必要としているのはポスト編集画面にカスタムカラムを追加するためのフィルタとアクションのセットであると思います:

  • manage_edit-post_type_columns :列を追加するために使用
  • manage_posts_custom_column :列の各行の内容を印刷するために使用されます。
  • manage_edit-post_type_sortable_columns:ソート可能な列を登録するために使用されます。文書化されていません。
  • request :このフィルタをmanage_edit-post_type_sortable_columnsと組み合わせて使う必要があるかもしれません。

たとえば、次のコードを使用して、カスタムメタフィールドの投稿ヒット情報を含むソート可能な列を追加します。

add_filter( 'manage_edit-post_columns',  'add_new_columns' );
add_filter( 'manage_edit-post_sortable_columns', 'register_sortable_columns' );
add_filter( 'request', 'hits_column_orderby' );
add_action( 'manage_posts_custom_column' , 'custom_columns' );
/**
* Add new columns to the post table
*
* @param Array $columns - Current columns on the list post
*/
function add_new_columns($columns){

    $column_meta = array( 'hits' => 'Hits' );
    $columns = array_slice( $columns, 0, 6, true ) + $column_meta + array_slice( $columns, 6, NULL, true );
    return $columns;

}

// Register the columns as sortable
function register_sortable_columns( $columns ) {
    $columns['hits'] = 'hits';
    return $columns;
}

//Add filter to the request to make the hits sorting process numeric, not string
function hits_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'hits' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => 'hits',
            'orderby' => 'meta_value_num'
        ) );
    }

    return $vars;
}

/**
* Display data in new columns
*
* @param  $column Current column
*
* @return Data for the column
*/
function custom_columns($column) {

    global $post;

    switch ( $column ) {
        case 'hits':
            $hits = get_post_meta( $post->ID, 'hits', true );
            echo (int)$hits;
        break;
    }
}
1
cybmeta