【Wordpress/PHP】

現在、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; ?>

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/09/28 18:39:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント100pt
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...


※分からない所がある場合は、コメント欄を開けて置いてくださった方がやり取りし易いです。

id:asgi

ご回答ありがとうございます!

いただいたコード試してみましたが、うまく表示してくれないようでした。

希望としては現在のカテゴリーかつカテゴリー1に属する投稿を表示させたいので「category__and」の条件になるのかなと思っています。

$query_stringを外してquery_posts(array("category__and" => array($cat_now,1)));ですとうまく表示出来るのですが

posts_nav_linkがうまく機能せず2p以降も同じ内容が表示されてしまいます。

よろしければ、引き続きお願いできないでしょうか?

2010/09/27 11:01:48
  • id:rouge_2008
    次の記述の場合、$query_stringを渡しても上手く表示されませんでした。

    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()) : ?>
    (~ 略 ~)
  • id:asgi
    <?php $cat_now = get_query_var('cat'); ?>
    <?php query_posts(array('category__and'=>array($cat_now,1))); ?>

    <?php if (have_posts()) : ?>
    (~ 略 ~)
    で希望の表示にはなりましたが、やはりposts_nav_linkがうまく機能せず2p以降も同じ内容が表示されてしまいます。
  • id:rouge_2008
    先に投稿したコメントの記述を試してみてください。
    ※「'category__in'」を「category__and」に変更して、「,'paged'=>~」の指定を追加します。
  • id:asgi
    すみません。。。
    ちょっと内容がよく飲み込めずに自分でいただいたコードを改変していました。。。

    <?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()) : ?>
    (~ 略 ~)

    で希望の表示ができました!
    ありがとうございました!
  • id:rouge_2008
    どういたしまして。解決して良かったです。
    変更箇所だけコメントしていたので・・・
    「cat="5"」等、直接カテゴリを指定した場合は「$query_string」でも「'paged'=$paged」でも、どちらでも大丈夫なのですが、「category__and」や「category__in」等の場合には、「$query_string」の替わりに「'paged'=$paged」を指定する必要があるようです。(※「$paged」は「query_posts()」を実行するより前の箇所で定義しておきます。)


    ところで、「wp-pagenavi」を使用するのでしたら、「posts_nav_link」は必要ないと思いますが、動作テストの為に残しているだけでしょうか?
    「wp-pagenavi」にも前のページ、次のページへのリンクは表示されます。
  • id:asgi
    ありがとうございました!
    あ、そうなんです。

    技術系のブログでwp-pagenaviにもposts_nav_linkが
    使われているみたいなことを見ましたので確認用に入れておいたんです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません