Linuxなどのメモ書き

wp_get_archives()でのpost_type指定


Rev.2を表示中。最新版はこちら

WordPress4.4でwp_get_archives()関数のパラメータでpost_typeの指定ができるようになった。ただし一つだけ。

WordPressには月間アーカイブのリンクを出力するのに使う、wp_get_archives()という関数がある。本関数は従来(〜4.3.1)、投稿タイプ(post_type)を指定できず、デフォルトの'post'に対してしか、記事数を取得できなかった。このため、カスタム投稿タイプに対して月間アーカイブを出力しようとした場合、getarchives_whereフィルターでSQLのWHERE句を書き換えるのが常套手段とされていた。私も以下のようなフィルタ関数を使ってカスタム投稿タイプの月間アーカイブを作成していた。

post_type指定を可能にするgetarchives_whereフィルタ関数

function custom_post_type_getarchives_where($where, $args){
	$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
	if (is_array($post_type)) {
		$conds = array();
		foreach ($post_type as $type) {
			$conds[] = "post_type = '".esc_sql($type)."'";
		}
		$cond = '('.implode(' OR ', $conds).')';
	} else {
		$cond = "post_type = '".esc_sql($post_type)."'";
	}

	return "WHERE  $cond AND post_status = 'publish'";
}
add_filter('getarchives_where', 'custom_post_type_getarchives_where', 10, 2);

 

post_typeを指定しての月間アーカイブHTMLの生成

$args = array('type'            => 'monthly',
              'limit'           => '',
              'format'          => 'html', 
              'before'          => '',
              'after'           => '',
              'show_post_count' => true,
              'echo'            => 0,
              'order'           => 'DESC',
// post_type引数はcustom_post_type_getarchives_where()で参照される
#             'post_type' => 'common',                  // 投稿タイプの指定
              'post_type' => array('common', 'post'),   // 複数指定する場合
              );
echo wp_get_archives($args);

 

WordPress4.4からはwp_get_archives()にpost_typeパラメータが追加になり、投稿タイプを指定できるようになったので、指定したい投稿タイプが一つだけなら、わざわざgetarchives_whereフィルタを書く必要はなくなった。ただし、複数指定したい場合は、相変わらずフィルタに頼ることになる。

ところで、WordPress4.4からはpost_typeパラメータがサポートされたことにより、wp_get_archives()内でpost_typeの値がチェックされるようになったため、上記の例で'post_type'に array('common', 'post')のように複数指定してwp_get_archives()を呼び出した場合、エラー終了してしまうようになった。複数投稿タイプ指定に対応するためgetarchives_whereフィルタを使うなら、フィルタに渡すためのパラメータの名称を'post_type'からなにか別の名称('filter_post_type'とか)に変えてやる必要がある。

 

 


最終更新 2015/12/22 17:52:08 - kztomita
(2015/12/22 17:43:58 作成)


リンク

その他のWiki
Linuxメモ
Xnuメモ

会社
(有)ビットハイブ
受託開発やってます。

よくやる仕事

・Webシステム開発(LAMP環境)
・Linuxサーバー設定関連
サーバー移転作業代行

開発事例にデジタルカタログ/マンガビューワーを追加しました。

draggable.jsのスマホ対応版デモページを追加しました。説明はこちら

検索

Adsense
最近のコメント