*

wordpressのアーカイブページ、子カテゴリごとに記事一覧を表示させる

公開日: : wordpress, トラブルシューティング

自分のサイトはカテゴリの階層をあまり深くしない(つまり、子カテゴリ・サブカテゴリなどを作成しない)んですが、年末、知人のサイトをボランティアでリニューアルする作業を請負いました。

 

知人がなんだか細かい指示を出してくるなーーと思ったら、子カテゴリがある場合でも、親カテゴリのアーカイブページには、全部一緒に分類もされずに表示されているので、ユーザービリティ悪いのではないかということなんです。
 
私としては、メニュバーでナビゲートしてるので、子カテゴリがある場合は、わざわざ親カテゴリをクリックして、記事一覧を見るだろうか、という疑問が残りますが、管理人の依頼なので仕方がありません。
 
必死に検索してもなかなかよいサンプルがなく、困りましたが、ついに行き着いたのがこちら。
 
 
それでやってみたら、カテゴリアーカイブは大丈夫でしたが、ほかのアーカイブ(月別、タグ別など)が表示されない!
 
がびーーん!
 
数日放置したあと、時間がとれたので最初にディフォルト(今回はWedding Bells)のテンプレに戻ってみてアーカイブページを見ると、
 
<?php if (have_posts()) : ?>
 
   <?php $post = $posts[0]; // Hack. Set $post so that the_date() works. ?>
   <?php /* If this is a category archive */ if (is_category()) { ?>
<h2 class="pagetitle">Archive for the ‘<?php single_cat_title(); ?>’ Category</h2>
   <?php /* If this is a tag archive */ } elseif( is_tag() ) { ?>
<h2 class="pagetitle">Posts Tagged ‘<?php single_tag_title(); ?>’</h2>
   <?php /* If this is a daily archive */ } elseif (is_day()) { ?>
<h2 class="pagetitle">Archive for <?php the_time('F jS, Y'); ?></h2>
   <?php /* If this is a monthly archive */ } elseif (is_month()) { ?>
<h2 class="pagetitle">Archive for <?php the_time('F, Y'); ?></h2>
   <?php /* If this is a yearly archive */ } elseif (is_year()) { ?>
<h2 class="pagetitle">Archive for <?php the_time('Y'); ?></h2>
 <?php /* If this is an author archive */ } elseif (is_author()) { ?>
<h2 class="pagetitle">Author Archive</h2>
   <?php /* If this is a paged archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
 
という感じに書いてあったので、なるほど、カテゴリアーカイブの条件分岐部分にこれを挿入すればいいのだなと思ってやったら・・・
 
うまくいったんだけど、記事リストが二重に出てくる部分がある。
 
そうでないカテゴリもあったので、親カテゴリにもチェックが入っているせいかなと思ったんだけど、それでも改善されない。
 
悩んでもう一度テンプレを見ると、
下の部分に
 
<?php while (have_posts()) : the_post(); ?>
 
<div <?php post_class('archive-post'); ?>>
 
<h3 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
<small>Posted on <?php the_time('l, F jS, Y') ?></small>
</div>
 
<?php endwhile; ?>
がある。
 
これが問題だ。
 
ここを削除すると、二重は出てこないが、やはりほかのアーカイブが表示されないので、仕方ないから、ベタなやり方だけど、それぞれの条件分岐の下に
 
<?php if (have_posts()) : the_post(); ?>
 
<div <?php post_class('archive-post'); ?>>
 
<h3 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
<small>Posted on <?php the_time('l, F jS, Y') ?></small>
</div>
 
<?php endif; ?>
 
と書いてやった。
 
そしたら見事成功。
 
この辺の条件分岐、もう少しスマートに書けると思うんだけど、取り急ぎこれで対処。

関連記事

背筋も凍る怖い話

・・・というのは、夏にするものだが、海を越えて夏真っ盛りの異国から。 今日は、ほったらかしにして

記事を読む

Webページからのメッセージ・out of memory at line:12

知人の管理するサイトを無料奉仕でリニューアルしてたのだが、もうすぐ完成! というところで大きな問

記事を読む

wordpressのテーマ Delicateでトップページの記事リストで日本語のタイトルが表示されない

この度新しいサイトを立ち上げ、最低限のシンプルさでそこそこ見栄えのするテーマはないかなということで

記事を読む

【wordpress】post_typeで全部の投稿タイプを指定したいとき

1年ぶりの投稿です。   最近、仕事関係でカスタムフィールドの特定のフィールドが

記事を読む

wordpress カテゴリごとのRSSフィードを作成する

公式サイトでもタグリファレンスがあったが http://codex.wordpress.org/

記事を読む

暑さとノートブックのモニターの関係

このトラブルについてはこちらでも書いたが、ここ数日、気温が低くなって、日中でもモニターが映るようにな

記事を読む

Warning: Invalid argument supplied for foreach().

このエラーは基本、レスポンスの部分が間違ってたりするときに出るのだが、こういう場合も出るのかーーと

記事を読む

jqueryのドロップダウンメニューがフラッシュの下に行ってしまう

主人の仕事の案件で、こういうカッコいいドロップダウンメニューを使ってというリクエストがありまして。

記事を読む

Can’t call method ”label” on unblessed reference movable typeのエラーを修復する方法

昨日、夜1時過ぎ、バングラサイトのとあるサイトの記事を別サイトに移管、そのサイトを削除。はっ、と思い

記事を読む

デザインのカスタマイズ

次なる手順は、デザインのカスタマイズ。 wpではテーマという。 バナーの写真変更はかなり簡単にできた

記事を読む

PAGE TOP ↑