web-dev-qa-db-ja.com

Wp_queryからカテゴリを除外すると、最近の投稿ウィジェットが壊れます

こんにちは、

私のテーマにはブログ用に2つの別々のページがあります。メインのブログページ "news.php"には、標準的なニュース、考え、イベントの種類の投稿が含まれています。 2番目のブログ "questions.php"には、 "Ask a Question"カテゴリのみのブログ投稿があります。私のサイドバーには、デフォルトの "最近の投稿"ウィジェットが含まれています。

メインのブログページでは、「Ask a Question」カテゴリを除外するようにクエリが設定されています。

$args = array (
    'posts_per_page' => 7,
    'cat' => -16,
    'paged' => $paged,
);

$wp_query = new WP_Query( $args );

質問を投稿するブログページでは、[質問を投稿]カテゴリのみを表示するようにクエリが設定されています。

$args = array (
    'posts_per_page' => 7,
    'cat' => 16,
    'paged' => $paged,
);

$wp_query = new WP_Query( $args );

あなたが「最近の投稿」ウィジェットに到達するまで、すべてがうまく機能しているようです。標準のニュースページでは、ウィジェットはちゃんと表示され、ブログ投稿の適切なリストが表示されます。ただし、Ask a Questionページでは、ウィジェットはページだけでなく投稿も表示していますが、その一部は存在しません。例えば、これはリストにあります:

  1. 738
  2. リソース
  3. 別のテスト記事?私はそう思う!
  4. TEEEEESSSSSSTTTTT POST !!!
  5. ジャムを汲み上げ、それを汲み上げる!

クエリ内のquestions.phpからカテゴリリストをコメントアウトすれば、すべてうまくいきます。だから問題を引き起こす行は次のとおりです。

'cat' => 16,

なぜこれが起きているのか、あるいはどうすれば修正できるのかを誰かが私に理解してもらうことができるかもしれないと思っていました。ご清聴ありがとうございました。

マット

1
MattR

$wp_queryオブジェクトは、メインページのクエリを格納するために使用されます。

$wp_query = new WP_Query( $args );

デフォルトを消去しています。したがって、wp_reset_query()をリ​​セットする必要はありません。

この問題を解決するには、カスタムクエリオブジェクトを別の名前(おそらく$mr_custom_query)で保存し、それをループするときに次の形式を使用します。

if( $mr_custom_query->have_posts() ) : while( $mr_custom_query->have_posts() ) : $mr_custom_query-> the_post();

それでも動けない場合は、コーデックスの WP_Query ページにたくさんの素晴らしいコードスニペットがあります。

意図的に$wp_queryを使用してメインページのクエリを上書きする場合は、代わりに query_posts() 、またはもっと良いのは pre_get_posts フックを使用してください。

1
mrwweb

それは本当に奇妙です、私は基礎のために始めるでしょう、多分質問は何か他のものを運んでいる、追加してみてください

  <?php wp_reset_query() ?>

クエリの前に表示されている内容を確認してください。

0
andresmijares