サワッディ!
トゥァエーンおっしー。
今回はWordpressでサイトを構築する際によく使用する、アーカイブの取得条件を変更する方法についてご紹介します。
※WordPressバージョン3.9対応
※2014.4.25 修正
wp_get_archivesを使用する > 設定可能な値 > type > 用意されている値
上記中で、事実と異なった表記をしているものがありましたので修正をいたしました。申し訳ございません。
wp_get_archivesを使用する
アーカイブの条件を変更する際に「wp_get_archives」を使用されている方も多いと思います。
何をやっているのか見てみます。
wp-includes/general-template.phpに存在する関数です。
function wp_get_archives($args = '') {
~ 省略 ~
}
設定可能な値
type
アーカイブの種別を指定
用意されている値
daily | 日別 |
weekly | 週別 |
monthly | 月別 |
yearly | 年別 |
postbypost | 最新記事順 |
alpha | タイトルのあいうえお順 |
※記述しない場合は「月別」となります。
limit
表示件数・・・何件まで表示、としたい場合
format
表示形式を指定できます。
中で「get_archives_link」を呼び出しているのでget_archives_linkで用意されている形式が使用できます。
用意されている値
html | liタグで出力します |
link | aタグで出力します |
option | optionタグで出力します |
※記述しない場合はliタグで出力します。
before
リンク名の前に連結する文字列
after
リンク名の後に連結する文字列
show_post_count
投稿件数を表示する場合はtrue、表示しない場合はfalse
echo
表示する場合は1、文字列として取得する場合は0
※現在の最新版(3.5)では新たに「order(順序)」が追加されました!わーい。
order
初期値はDESC(昇順)なのでASC(降順)の設定を行う場合に便利に。
wp_get_archives('type=monthly&limit=12');
「&」繋ぎで表示したい形式で書くとその形式で表示されます。
※上の書き方だと月別に12か月分表示して欲しい。ってことになってます。
日別の場合はこんな感じ。
便利!!
getarchives_whereフィルターを使用する
でもでも。もっと条件を絞りたいという方。
月別!とか日別!じゃなくて!
カスタム投稿タイプで条件を絞りたい!とかね。
その場合はどうするの? 教えてよワードプレス様。
と思い調べてみたら「検索を行う直前にgetarchives_whereフィルターが実行される。」
と書いてある!
- getarchives_where
- getarchives_join
このフィルター達だわ。私が求めていたの。
フィルターを使えばよしなにカスタマイズ出来るって事ですね。流石ワードプレス様。
なのでfunctionにこう書きましたよ。
add_filter( 'getarchives_where' , 'my_getarchives_where_filter' , 10 , 2 );
function my_getarchives_where_filter( $where , $r ) {
global $wpdb;
$where .=" post_type = 'post'" , "post_type IN ( '取得したい投稿タイプ' ) AND taxonomy = '取得したいタクソノミ名' AND slug = '取得したいスラッグ名'" , $where );
};
add_filter( 'getarchives_join', 'my_getarchives_join', 10, 2 );
function my_getarchives_join( $join, $r) {
global $wpdb;
$join .= " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
INNER JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)";
return $join;
}
こんな感じでwhereとjoinを指定するフィルターを使用すると自由自在なのです!
やったね!
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。