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

3.8の「アクティビティ」ウィジェットに投稿以外の情報も表示する

説明

ちょうど1月前の「ダッシュボードの「概要」にカスタム投稿タイプ件数を表示する」にて、WordPress 3.8新ダッシュボードの「概要」ウィジェットにカスタム投稿タイプの投稿数を表示する方法を紹介したが、今回のその続編で「アクティビティ」ウィジェットを拡張する方法を紹介する。

「アクティビティ」ウィジェットに表示される「最近公開」は、標準では投稿情報(post_typeが'post')のみで、固定ページやカスタム投稿タイプの内容は表示されない。一般的なブログであれば標準で何ら問題ないわけだが、カスタム投稿タイプを利用してサイト構築している場合は「アクティビティ」ウィジェットにその投稿情報を表示したいケースがある。ざっと調べていくと、/wp-admin/includes/dashboard.phpで定義されているwp_dashboard_recent_posts関数でWP_Queryクラスを利用していた。そんなわけで、自テーマのfunctions.phpに'pre_get_posts'アクション関数を登録することで、目的は達成できた。追加したソースコードは次の通りである。

add_action( 'admin_init', 'my_admin_init' );
function my_admin_init() {
	add_action( 'pre_get_posts', 'my_dashboard_site_activity_recent_posts' );
}
function my_dashboard_site_activity_recent_posts( $query ) {
	foreach( debug_backtrace() as $trace ) {
		if ( $trace['function'] == 'wp_dashboard_recent_posts' ) {
			$query->set( 'post_type', array( 'post', 'foot', 'drink' ) );
			break;
		}
	}
}

'pre_get_posts'アクションはさまざまなところで呼び出されるため、ここでは管理者ページ限定アクションである'admin_init'アクション関数を利用し、その中で登録を行っている。'pre_get_posts'アクション関数内では、PHPのdebug_backtrace関数を利用し、呼び出し経路を辿ってwp_dashboard_recent_posts関数からの呼び出し時のみ投稿タイプを変更している。ここでは、'post'の他にカスタム投稿タイプ名として'foot'と'drink'の3つを指定しているが、実際に利用する際は自テーマに合わせて適当に変更してほしい。

個人的にはdebug_backtrace関数で呼び出し経路を調べるのではなく、wp_dashboard_recent_posts関数で投稿情報を取得する前にフィルターが用意されていればいいかなと思うわけだが、ないものねだりしてもしかたないので、とりあえずはこんな感じでの対応でいいだろう。


最終更新 : 2014年01月17日 15:27


お勧め

get_template(2011年9月8日 更新)

string get_template( )
現在のテーマ名を取得する。

paginate_links(2017年11月17日 更新)

mixed paginate_links( [ mixed $args = '' ] )
(アーカイブページ向けの)ページネートリンクを取得する。

wp_normalize_path(2018年7月6日 更新)

string wp_normalize_path( string $path )
パス名を標準化する。

load_textdomain(2018年5月27日 更新)

bool load_textdomain( string $domain, string $mofile )
国際化用ファイル(MOファイル)をロードする。

wp_upload_dir(2018年5月27日 更新)

array wp_upload_dir( [ string $time = null [ , bool $create_dir = true [ , bool $refresh_cache = false ] ] ] )
アップロードディレクトリ(パス名)を取得する。