そもそもは、カテゴリーアーカイブページで、そのカテゴリーの記事を1件だけ表示したかったんです。
普通に考えれば、WordPress各種設定で表示記事件数選んでおしまいなんですが、とあるプラグイン入れたら記事が全部出るようになってしまいました。
プラグインの使用をやめればいいのですが、そういうわけにもいかず…。
で、仕方ないので、
query_posts()というWP用のテンプレートタグを使用することにしました。
これは、ループタグの条件を指定するという、よくわからない(でもよく使われる)タグです。
エントリー記事を何件出すかとか、どういう順番で出すかとか、決まったカテゴリーの記事は出さないとか、そういう指定ができるタグです。
これで、エントリー記事を1件出すという指定をしました。
<? query_posts('showposts=1'); ?>
そうしたら、カテゴリー無視で一番新しい記事が1件表示されるようになりました。つまり、どのカテゴリーを見ても同じ記事が表示されるように…。
まるでget_post()のような動作をしています。
get_post()は、最新記事を取得するタグです。
どうしてquery_postsで最新記事をとってくるのかさっぱりわからないですが、しょうがないので、カテゴリーも指定することにしました。
<? query_posts('cat=1'); ?>
これで、カテゴリーIDが1の記事を呼び出します。
しかし、これだと、どのカテゴリーでもカテゴリーID1の記事が出てしまいます。
cat=○の部分に各カテゴリーのIDが入って欲しい。しかも自動的に。
(IF文を駆使すれば、手作業でも出来ると思いますが、今後を考えるとちょっと現実的ではありませんでした)
で、がんばってみました。
そしたらナントカなった(ような気がする)ので、追記より。
<? foreach((get_the_category()) as $cat) { $cat->cat_ID ; } $query = 'cat=' . $cat->cat_ID. '&showposts=1'; query_posts($query); ?>
かるく説明を。
get_the_category()) as $cat
$cat->cat_ID ;
ここで現カテゴリーID取得。
このタグはループの中でしか使えない(らしい)ので、foreachで囲む。
foreachは、擬似ループというか、ループ外ループというか、1回しか使えないループタグの代わりのループ?みたいな?よくわかりません。
$query = 'cat=' . $cat->cat_ID. '&showposts=1';
で、取得したカテゴリーIDをcat=○の部分に代入して、記事を1件呼び出す記述も追加。
それを数学でいうところのX($queryのこと)に代入。
query_posts($query);
で、それをquery_postsに指定。
正直こんなことしなくてもなんとかなると思うんですが、もう、何がなにやら分からなくなったので、これでヨシとします。
最近のコメント