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

お勧め

_doing_it_wrong(2020年7月24日 更新)

void _doing_it_wrong( string $function, string $message, string $version )
不適切な関数などの呼び出しをマークする。

wp_unique_id(2019年1月15日 更新)

string wp_unique_id( [ string $prefix = '' ] )
ユニークIDを取得する。

wp_get_post_tags(2011年6月2日 更新)

mixed wp_get_post_tags( [ int $post_id = 0 [ , array $args = array() ] ] )
投稿記事の投稿タグ情報を取得する。

wp_dropdown_categories(2016年8月22日 更新)

string wp_dropdown_categories( [ mixed $args = '' ] )
ドロップダウン形式のカテゴリーリストを表示または取得する。

send_confirmation_on_profile_email(2018年5月27日 更新)

void send_confirmation_on_profile_email()
メールアドレス変更を確認するメールを送信する。