web-dev-qa-db-ja.com

カスタム投稿タイプ一覧画面からこれらのものを削除する方法?

カスタム投稿タイプの投稿リスト画面を変更しています。次の図に示すように、tablenavヘッド上のすべてのものを削除したいです。

enter image description here 

ワードプレスにはそのための特別なフックがありますか、それとも私は汚い方法を使う必要があるでしょうか?

5
KeepMove

ダーティウェイ、うまくいけばではないコア編集であなたが何を意味するのかわかりません!

あなたはCSSでそれを隠すことができます。

それともPHPでそれを行うことができます - 下記参照:

ビュー部分を隠す

あなたはviews部分を削除することができます

add_filter( 'views_edit-post', '__return_null' );

edit.php画面のpost投稿タイプの場合。

Postテーブルオブジェクトは以下から作成されます。

$wp_list_table = _get_list_table('WP_Posts_List_Table');

しかし_get_list_table()関数には利用可能なフィルタがありません。

回避策 - WP_Posts_List_Tableクラスを拡張する

WP_Posts_List_Tableクラスを拡張し、views_edit-postフィルター内でそのメソッドをオーバーライドすることによる回避策があります - 自宅でこれを試してはいけない!

/**
 * Headless post table
 * 
 * @link http://wordpress.stackexchange.com/a/205281/26350
 */
add_action( 'load-edit.php', function()
{
    // Target the post edit screen
    if( 'edit-post' !== get_current_screen()->id )
        return;

    // Include the WP_Posts_List_Table class
    require_once ( ABSPATH . 'wp-admin/includes/class-wp-posts-list-table.php' );

    // Extend the WP_Posts_List_Table class and remove stuff
    class WPSE_Headless_Table extends WP_Posts_List_Table
    {
        public function search_box( $text, $input_id ){} // Remove search box
        protected function pagination( $which ){}        // Remove pagination
        protected function display_tablenav( $which ){}  // Remove navigation
    } // end class

    $mytable = new WPSE_Headless_Table; 
    // Prepare our table, this method has already run with the global table object
    $mytable->prepare_items();

    // Override the global post table object
    add_filter( 'views_edit-post', function( $views ) use ( $mytable )
    {
        global $wp_list_table;    
        // Let's clone it to the global object
        $wp_list_table = clone $mytable;
        // Let's remove the views part also
        return null;
    } );    
} );

これがスクリーンショットの例です。

前:

before 

の後:

after 

10
birgire

@birgireが提供する答えは、要求を処理するための確かなプログラム的な方法ですが、彼が指摘したように、WP coreには重要なフィルターが欠けているので、彼の解決策は少し難しくなります。

単純に抑制するために、私の推奨する方法はCSSです。あなたのカスタム投稿タイプが "Event"と呼ばれると仮定しましょう。このCSSは確実にトリックを行います:

.post-type-event .subsubsub,
.post-type-event .posts-filter .tablenav .actions,
.post-type-event .posts-filter .tablenav .view-switch,
.post-type-event .posts-filter .tablenav .tablenav-pages,
.post-type-event .posts-filter .search-box {
    display: none;
}

これらのスタイルがWordPressダッシュボードに確実にロードされるようにするには、必ず "admin_enqueue_scripts"フックを介してwp_enqueue_style()ヘルパーを使用してエンキューしてください。

編集: "アクション"、 "アイコンの表示"、 "ページ付け"を別々のスタイルに分けるようにスタイルを更新しました。ページ付けは非常に重要なので、私はあなたがそれを維持したいと思うかもしれないと思いました。上記のコードからこの行を削除するだけでページネーションが表示されますが、それ以外はすべて非表示になります。

.post-type-event .posts-filter .tablenav .tablenav-pages,
5
dswebsme