1

私はすでに有効な解決策を見つけているという点で、これは奇妙な質問です。しかし、なぜそれが機能したのか、なぜ機能するはずだったのに機能しなかったのかを理解したいと思います. 私がバカな理由を説明してくれたら、感謝します。

タスク: メイン ループを変更してカテゴリを除外し、ページごとに 2 つの投稿のみを表示します。

うまくいったのは次のとおりです。

    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    query_posts("cat=-17,-18&posts_per_page=2&paged=$paged");
    ?>

できなかったのは次のとおりです。

    <?php $query = new WP_Query( 'cat=-17', 'posts_per_page=2' ); ?>

これもしませんでした:

 <?php $query = array (
  'cat' => -17,
  'posts_per_page' => 2
    );
  $queryObject = new WP_Query($query);
?> 

だから:ここで何が起こっているのですか?

どうもありがとう、

-m

4

1 に答える 1

2

機能しない理由はいくつかあります。

1) $query = new WP_Query( 'cat=-17', 'posts_per_page=2' );2 つの引数を渡そうとしているため、機能しませんでした。文字列クエリを実行している場合は、次のようにする必要があります。

$query = new WP_Query( 'cat=-17&posts_per_page=2' );

2)2番目のクエリは正しいですが、それが「機能しない」理由は、コードから除外した後続のループである可能性が高いです。query_posts を使用している場合、グローバルな $wp_query オブジェクトを変更しているため、ループは次のようになります。

if(have_posts()) : while(have_posts()) : the_post();
    //Do stuff....
endwhile;endif;

しかし、WP_Query の新しいインスタンスを使用すると、見た目が変わる必要があります。固定コードは次のとおりです。

<?php
$query = array (
    'cat' => -17,
    'posts_per_page' => 2
);
$queryObject = new WP_Query($query);
if($queryObject->have_posts()) : while($queryObject->have_posts()) : $queryObject->the_post();
    //Do stuff....
endwhile;endif;

WP_Query の詳細はこちら:

http://codex.wordpress.org/Class_Reference/WP_Query

于 2013-02-15T23:26:59.447 に答える