この記事は最後に更新してから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


お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。