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

お勧め

wp_add_object_terms(2013年8月6日 更新)

mixed wp_add_object_terms( int $object_id, mixed $terms, mixed $taxonomy )
投稿情報などにタクソノミーを追加する。

sanitize_key(2018年5月27日 更新)

string sanitize_key( string $key )
サイト内識別子向けにサニタイズする。

get_default_comment_status(2018年5月27日 更新)

string get_default_comment_status( [ string $post_type = 'post' [ , string $comment_type = 'comment' ] ] )
投稿タイプのコメントステータスを取得する。

wp_slash_strings_only(2020年12月17日 更新)

mixed wp_slash_strings_only( $value )
配列またはオブジェクト内の文字列をバックスラッシュでエスケープする。

url_shorten(2018年5月27日 更新)

string url_shorten( string $url [ , int $length = 35 ] )
(表示向けに)URLを短縮する。