現在、Wordpressにて制作を行っているのですが、下記コードが意図していない表示をしており、困っております。
以下のコードでカテゴリーアーカイブにて現在のカテゴリー及びカテゴリーIDが1の投稿を出力したいと考えております。
ページ分割のプラグイン「wp-pagenavi」というものを正常に動かすために、
query_posts内に$query_stringsというタグを追加したところ、
いままでは現在のカテゴリー及びカテゴリーIDが1のエントリーが表示されていたのに
現在のカテゴリーの投稿しか表示されなくなってしまいました。
どなたかおわかりになる方おりましたら、是非ご教授頂けないでしょうか?
何卒よろしくお願い致します。
<?php
$cat_now = get_query_var('cat');
if (have_posts()) : query_posts($query_string .'&array("category__and" => array($cat_now,1))'); while (have_posts()) : the_post();?>
<p><a href="<?php the_permalink();?>"><?php the_title()?></a></p>
<?php endwhile;?>
<?php endif; ?>
query_posts($query_string .'&array("category__and" => array($cat_now,1))');
上記の箇所を次のように変更してみてください。
query_posts(array($query_string, 'category__in'=>array($cat_now,1)));
いずれかに含まれる場合という条件のようですので、「category__and」ではなく「category__in」を使用します。
子孫カテゴリを含んでもいい場合は、次のようにしても大丈夫です。
query_posts($query_string . '&cat="'.$cat_now.',1"');
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%A...
※分からない所がある場合は、コメント欄を開けて置いてくださった方がやり取りし易いです。
query_posts(array($query_string, 'category__in'=>array($cat_now,1)));
次のように変更してみてください。
// 事前に設定
<?php $paged = get_query_var('paged'); ?>
<?php query_posts(array('category__in'=>array($cat_now,1),'paged'=>$paged)); ?>
<?php if (have_posts()) : ?>
(~ 略 ~)
<?php query_posts(array('category__and'=>array($cat_now,1))); ?>
<?php if (have_posts()) : ?>
(~ 略 ~)
で希望の表示にはなりましたが、やはりposts_nav_linkがうまく機能せず2p以降も同じ内容が表示されてしまいます。
※「'category__in'」を「category__and」に変更して、「,'paged'=>~」の指定を追加します。
ちょっと内容がよく飲み込めずに自分でいただいたコードを改変していました。。。
<?php $paged = get_query_var('paged'); ?>
<?php $cat_now = get_query_var('cat'); ?>
<?php query_posts(array('category__in'=>array($cat_now,1),'paged'=>$paged)); ?>
<?php if (have_posts()) : ?>
(~ 略 ~)
で希望の表示ができました!
ありがとうございました!
変更箇所だけコメントしていたので・・・
「cat="5"」等、直接カテゴリを指定した場合は「$query_string」でも「'paged'=$paged」でも、どちらでも大丈夫なのですが、「category__and」や「category__in」等の場合には、「$query_string」の替わりに「'paged'=$paged」を指定する必要があるようです。(※「$paged」は「query_posts()」を実行するより前の箇所で定義しておきます。)
ところで、「wp-pagenavi」を使用するのでしたら、「posts_nav_link」は必要ないと思いますが、動作テストの為に残しているだけでしょうか?
「wp-pagenavi」にも前のページ、次のページへのリンクは表示されます。
あ、そうなんです。
技術系のブログでwp-pagenaviにもposts_nav_linkが
使われているみたいなことを見ましたので確認用に入れておいたんです。