自分なら次のことを試してみます。動かないかもしれませんが。
パーマリンクがデフォルトだとすると、ブラウザのurlのところに
site_url/?cat=4&year=2017とかsite_url/?cat=4&year=2016で呼び出せるのではないかなと。
リンクを作るときにyear=にあたる部分をどう作るかかなと。
記事がある年だけの配列をどうやって作るのかなと。
$years=array('2017','2016',記事のある年…);//wordpressの関数が使える?
foreach($years as $year){
'href="site_url/?cat=4&year='.$year.'"//適当なので完成させてください
}
パーマリンクがデフォルトじゃないとちょっとよくわからない。
WordPress の表示ロジックを理解する – Reloaded –
テンプレート階層
めんどくさいけど、直接書くとか。
<?php if(表示条件 赤なら?){ ?>//半角全角入り混じってる。
<a href="site_url/?cat=4&year=2017">2017</a>
<a href="site_url/?cat=4&year=2016">2016</a>
<a href="site_url/?cat=4&year=2015">2015</a>
<?php } ?>
ishitakaさま
ありがとうございます。
以前の記事も確認させていただいております。
ご教授いただいた通りでうまくいったと思ったのですが、
どうやらうまくいっていなかったようでした・・。
もう一度確認し、functions.phpへの記述と、
<?php if(have_posts()): ?>
<?php while(have_posts()): the_post(); ?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php endwhile; ?>
<?php endif; ?>
上記を以下に変更することでうまくいきました!
<h3><?php wp_get_archives("type=postbypost&limit=10&format=html&cat=4"); ?></h3>
ただ、吐き出されるタグが
<h3>
<li><a href='http:・・・'>記事01</a></li>
<li><a href='http:・・・'>記事02</a></li>
</h3>
となってしまうのを、
<h3><a href='http:・・・'>記事01</a></h3>
<h3><a href='http:・・・'>記事02</a></h3>
とするには良いでしょうか?
oisitさま
ご教授をありがとうございました。
上記の通りで、うまく記事の表示はできたのですが、
吐き出しのタグのところでつまづいております・・・。
ishitakaさま
<?php wp_get_archives("type=postbypost&limit=10&format=html&cat=4"); ?>
で、カテゴリーID4に属する記事のみが出たのですが、
その年度のものではないものも出てきてしまいました。
ご教授いただけますでしょうか。
宜しくお願いいたします。
繰り返しになってしまいますが、wp_get_archives にカテゴリー(cat)を指定するオプションはないですよ。
https://wpdocs.osdn.jp/テンプレートタグ/wp_get_archives
ishitakaさま
なるほど、わかりました。
Archives for a category のプラグインを使用して試してみているのですが、
こちらでも年度別のindexは表示されますが、
年度をクリックした時に、
http://・・・/2017?cat=4
このようなリンクになり、同じテンプレート(category-aaa.php)を読みにいってしまいます。
私は、Archives for a category プラグインというものを知らないので(公式ディレクトリないようですが?)、フォローすることができません。
Archives for a category プラグインの使用を明記したうえで、新たにトピックを立てた方がレスが付きやすいかなと思います。
お役に立てずにごめんなさい。
ishitakaさま
ご丁寧に教えていただき、大変感謝しております。
ありがとうございました。
Archives for a categoryの件については、新しいトピックにて質問させていただきます。
ちなみに、私が実現したいと思っている
特定カテゴリーの年度別index⇒その年度の一覧⇒個別記事
というのは無理なのでしょうか?
特定カテゴリーの年度別index⇒その年度の一覧⇒個別記事
「特定カテゴリーの年度別index」は下記のページが参考になるとおもいます。
http://qiita.com/shuhei/items/c364c0ea129a06e9f71a
「その年度の一覧」および「個別記事」はそのままで表示されるとおもいます。
ishitakaさま
functions.phpへ以下を記述
add_filter('getarchives_where', 'custom_archives_where', 10, 2);
add_filter('getarchives_join', 'custom_archives_join', 10, 2);
function custom_archives_join($x, $r) {
global $wpdb;
$cat_ID = $r['cat'];
if (isset($cat_ID)) {
return $x . " 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)";
} else {
return $x;
}
}
function custom_archives_where($x, $r) {
global $wpdb;
$cat_ID = $r['cat'];
if (isset($cat_ID)) {
return $x . " AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id IN ($cat_ID)";
} else {
$x;
}
}
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();
foreach ($archs as $archive) {
$link = preg_replace("/href='([^']+)'/", "href='$1?cat={$cat}'", $archive);
array_push($links, $link);
}
$result = implode('</li>', $links);
if ($echo) {
echo $result;
} else {
return $result;
}
}
category-aaa.phpへ以下を記述いたしましたが、
年度をクリックすると、同じcategory-aaa.phpが適用され、
その年度の記事一覧ではなく、年度のindexが表示されてしまいます。
<?php $cat_ID = 4;
wp_get_cat_archives('type=monthly', $cat_ID); ?>
こちらで吐き出されたタグはこのようになっております。
http://・・・/2017/03?cat=4
テンプレートが違うのでしょうか?
月別アーカイブ(type=monthly)を指定しているので月別のリストが表示されるとおもいますが・・・。
type=yearly ではないでしょうか。
その年度の記事一覧ではなく、年度のindexが表示されてしまいます。
「記事一覧」とは、カテゴリーアーカイブインデックスページ(category-aaa.php のメインクエリ)のことでしょうか?
当方でも検証してみましたが、問題なく表示されました。
「年度のindex」とは、wp_get_cat_archives の表示のことでしょうか?
category-aaa.php に記述していてる場合(表示条件などを指定していなければ)は、そのまま表示されるとおもいます。
oisit さんが紹介されているように「テンプレート階層」について、もう一度参照するといいとおもいます。
ishitakaさま
ご丁寧な回答をありがとうございます。
type=yearly でした・・。失礼しました。
申し訳ありません、ishitakaさまなら、どのようなテンプレート階層にされるか
教えていただいてもいいでしょうか?
category-aaa.phpで、「年度別index」wp_get_cat_archivesの表示
date.phpで、上記で吐き出された年度毎の記事一覧を表示
させたいと思っておりました。
投稿側では、タイトルと本文を入力し、カテゴリーaaaを選択。
この投稿された記事の年度を拾って、年度別に振り分けたいです。
何卒、宜しくお願いいたします。
どのようなテンプレート階層にされるか教えていただいてもいいでしょうか?
どのようなページ構成をお考えなのか把握できていないので提案できません。どのようなページ構成をお考えですか?
date.phpで、上記で吐き出された年度毎の記事一覧を表示
date.php は、通常は日付別アーカイブインデックスページ用なので、年度別のカテゴリーアーカイブは、category-{slug}.php でいいとおもいます。
条件が違うからといって異なるテンプレートが必要ということはないと思います。
スレ主さんがしたいことが、
特定カテゴリーの年度別index
カテゴリー4の一覧
その年度の一覧
カテゴリー4と2017年の一覧
と仮定すれば、archive.phpでどちらも、それぞれの条件に絞り込まれた記事の一覧は表示が可能だと思う。この場合、特に何もカスタマイズは必要ないように思います。
テンプレートは表示担当で、記事の絞り込みはメインループがしてくれるので、urlにクエリー文字列でcat、year等のパラメータを指定する。パラメータによって使われるテンプレートが決まるので同じテンプレートが指定される場合もある。
次に年度ごとのナビ2017、2016、2015というリンクが必要なら、カテゴリー4の一覧の場合という条件が出てくるので、専用のcategory-4.phpか、archive.phpかcategory.phpにif(カテゴリーが4なら)
で年度のナビを表示でいいのではないかと。
まとめるのが下手ですいません。
あと仮定が違っていれば無視してください。