この記事は最後に更新してから1年以上経過しています。

5.7の機能拡張:投稿一覧画面向けのフィルター

説明

昨日、予定通り公開された「WordPress 5.7 Beta 3(以降Beta 3)」。WordPressはバージョンアップ毎にアクションやフィルターが追加されており、今回のバージョンアップでは投稿一覧画面に影響を与えるフィルターが追加されていた。

はじめに、この記事は公開された5.7 Beta 3をもとにしており、正式リリースの際に変更される可能性があることを予めお断りする。

投稿情報のチェックボックスが制御可能

1つ目のフィルターは、投稿リストの表示に使用されている wp_admin/includes/class-wp-posts-list-table.php のcolumn_cbメソッドに追加された'wp_list_table_show_post_checkbox'フィルターである。現在のユーザーが対象の投稿情報の編集権限の有無でチェックボックスの表示/非表示を切り替えていたが、このフィルターを使用することで切り替えを制御できるようになる。

挙動を確認するため、テーマのfunctions.phpに以下のコードを追加してみる。

add_filter( 'wp_list_table_show_post_checkbox', '__return_false', 10, 2 );

投稿一覧画面は次のように変化し、チェックボックスが非表示になったことがわかる。

投稿情報のチェックボックスが非表示になった

実際にこのフィルターを使用する場合は、次のようなコールバック関数を用意する。パラメータ$showは表示フラグ(bool)、$postには対象の投稿情報になる。

function callback_show_post_checkbox( $show, $post ) {

	// $showを変更する処理

	return $show;
}

このフィルターが追加されるきっかけになった提案(trac #51291)を見てみると独自のプラグイン向けになっているようなので、グローバル変数の$pagenowで自身のプラグインの画面なのかを判定しながら$showの値を制御するような使い方になりそうだ。

月プルダウンの内容を変更

2つ目のフィルターは、リスト表示の基になっている wp_admin/includes/class-wp-list-table.php のmonths_dropdownメソッドに追加された'pre_months_dropdown_query'フィルターである。通常の投稿一覧画面の場合、投稿があった月がリストされるが、このフィルターを使うことで任意の月のみを表示させることができる。

挙動を確認するため、テーマのfunctions.phpに以下のコードを追加してみる。

add_filter( 'pre_months_dropdown_query', 'mytheme_months_dropdown', 10, 2 );

function mytheme_months_dropdown( $months, $post_type ) {
	$months = [ (object)[ 'year' => 2020, 'month' => 12 ] ];
	return $months;
}

投稿一覧画面の月プルダウンは次のように変化し、内容が書き変わった。

月プルダウンの内容を変更した

返り値の$monthsはyearとmonthプロパティを持つオブジェクトの配列の場合に有効になり、実際に内容を指定する場合は投稿情報から取得することになるだろう。

このフィルターが追加されるきっかけになった提案(trac #51660)では大量のカスタム投稿タイプの投稿一覧画面において表示に時間がかかるため、その問題を回避したかったようた。月プルダウンはコールバック関数で$monthsを空の配列にすることで非表示になるので、同様の問題を抱えているサイトは5.7のリリースにあわせて対応するとよいだろう。


最終更新 : 2021年02月18日 16:27

お勧め

delete_post_meta(2018年5月27日 更新)

bool delete_post_meta( int $post_id, string $meta_key [ , mixed $meta_value = '' ] )
投稿情報のカスタムフィールド情報を削除する。

wp_is_numeric_array(2018年5月27日 更新)

bool wp_is_numeric_array( mixed $data )
数値キーのみの配列か調べる。

get_tag_regex(2013年8月3日 更新)

string get_tag_regex( string $tag )
HTMLタグの正規表現パターンを取得する。

get_all_page_ids(2012年5月30日 更新)

array get_all_page_ids( )
全ページ(post_typeが'page')の投稿IDを取得する。

the_post_thumbnail_caption(2018年5月27日 更新)

void the_post_thumbnail_caption( mixed $post = null )
投稿ページのサムネイル(アイキャッチ画像)キャプションを表示する。