WordPressのテンプレートをつくる際、デフォルトでそういう関数を用意していないのか!といいたくなるような部分ですが、今回はそのような部分をどのように実装するかまとめましたので、紹介いたします。

プラグインを使用する。

Archives for a category
というプラグインを使用します。
管理画面で「kwebble」をクリック。
「Disable canonical URLs.」というチェックボックスにチェックを入れて「update option」をクリックすれば完了。
後は下記のようにテンプレートに記述すればOK。

↓カテゴリIDが1の月別アーカイブを表示させる。
[php]
<?php wp_get_archives(‘cat=1’); ?>
[/php]

↓カテゴリIDが1と3の月別アーカイブを表示させる。
[php]
<?php wp_get_archives(‘cat=1,3’); ?>
[/php]

↓カテゴリIDが1の年別アーカイブを表示させる。
[php]
<?php wp_get_archives(‘type=yearly&cat=1’); ?>
[/php]

懸念事項
※パーマリンクは変更できません。
※開発から複数年経ち、アップデートされていないのでセキュリティ上問題がある可能性があります。

functions.phpに関数を追加

functions.phpに追加
[php]
function extend_date_archives_flush_rewrite_rules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action(‘init’, ‘extend_date_archives_flush_rewrite_rules’);
[/php]

[php]
function extend_date_archives_add_rewrite_rules($wp_rewrite) {
$rules = array();
$structures = array(
$wp_rewrite->get_category_permastruct() . $wp_rewrite->get_date_permastruct(),
$wp_rewrite->get_category_permastruct() . $wp_rewrite->get_month_permastruct(),
$wp_rewrite->get_category_permastruct() . $wp_rewrite->get_year_permastruct(),
);
foreach( $structures as $s ){
$rules += $wp_rewrite->generate_rewrite_rules($s);
}
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_action(‘generate_rewrite_rules’, ‘extend_date_archives_add_rewrite_rules’);
[/php]

[php]
function wp_get_cat_archives($opts, $cat) {
$args = wp_parse_args($opts, array(‘echo’ => ‘1’)); // default echo is 1.
$echo = $args[‘echo’] != ‘0’; // remember the original echo flag.
$args[‘echo’] = 0;
$args[‘cat’] = $cat;

$archives = wp_get_archives(build_query($args));
$archs = explode(‘</li>’, $archives);
$links = array();

$cat0 = get_the_category();
$cat_slug = $cat0[0]->category_nicename;

foreach ($archs as $archive) {
$link = preg_replace("/\/date\//", "/category/{$cat_slug}/date/", $archive);
array_push($links, $link);
}
$result = implode(‘</li>’, $links);

if ($echo) {
echo $result;
} else {
return $result;
}
}
[/php]

テンプレート側は以下のように記述
[php]
<?php
//IDを指定
$cat_ID = 0;
wp_get_cat_archives(‘type=monthly’, $cat_ID);
?>
[/php]

懸念事項
※パーマリンクをデフォルト以外で設定、複数カテゴリの指定をしたらうまく動作しないかもしれません。
参考:
WordPressでカテゴリの月別アーカイブとそのリストを作成
http://takenotes.jp/2013/08/07/wordpress-category-monthly-archives/
WordPress でカテゴリ別アーカイブ
http://qiita.com/shuhei/items/c364c0ea129a06e9f71a

ディスカッションに参加

1件のコメント

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です