web-dev-qa-db-ja.com

Tag.phpでクエリを実行する

私はおそらく密集しています、しかし私はここでの問題が何であるかについて理解することができないようです。

私が開発しているサイトではカスタムループを使用しており、アーカイブ済みとマークされた投稿を除外するクエリを使用しています。

Tag.phpテンプレートを編集したいのは、フロントエンドにカスタムメタを出力して、アーカイブページのすべての投稿の外観を微調整するためです。

ほとんどのサイトでは完璧に機能しますが、tag.phpではタグクラウドが壊れ、クリックされたすべてのタグが完全な投稿リストを表示します。

クエリを削除してもタグクラウドは正常に機能しますが、アーカイブされた投稿は表示されたままで、必要なレイアウトになっていません。

私が使っているクエリコードは:

// The Queries
   $args = array(
      'post_type' => array('post', 'report', 'analysis', 'guest-blog'),
      'order'     => 'DESC',
      'meta_query'     => array(
            array(
               'key'     => 'epi_pubarchive',
               'value'   => 1,
               'compare' => '!=',
           )
      )
   );

 $the_query = new WP_Query( $args );

メタキーepi_pubarchiveは、メタボックスを使用して作成されたチェックボックスで、基本的にボックスがチェックされているかどうかをチェックします。

私はmeta_queryを削除し、それを基本的なpost_typeとorder argsで試してみましたが、それでもうまくいきません。

タグテンプレートとクエリに関する問題が何か知っている人はいますか?

望ましい結果を達成するためのより良い方法はありますか?

4
Jon Watson

これは、メインのクエリが破棄され、カスタムクエリに置き換えられているためです。カスタムタグにそのタグを探すように指示していないのですが、なぜでしょうか。また、同じ理由でページネーションが壊れていることに気付くかもしれません。新しいクエリにどのページが表示されているのかわかりませんでした。

さらに、その主なクエリは高価です。なぜあなたはそれを捨てていますか!代わりに修正しないのはなぜでしょうか。

あなたが毎朝ラッテをもらうためにあなたの友人を送ったと想像してみてください、そして20分の旅行の後の毎日、あなたは箱にコーヒーを投げ、「代わりに私は乳糖不耐症です、ホットチョコレートをください」。それから、彼らはさらに20分の旅に出かけて、あなたの友人をイライラさせてホットチョコレートを取ってきました、そしてあなたは20の代わりに40分待っていました。頭が変わった、ホットチョコレートが欲しい?」

メインクエリのオプションを変更する前にpre_get_postsフィルタを使用してください。 1ページあたりの投稿数を変更する方法は次のとおりです。

add_filter( 'pre_get_posts', function( \WP_Query $query ) {
    if ( $query->is_tag() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', 5 );
    }
} );

他のオプションも変更するために$query->setを使うことができます、そしてあなたはあなたの投稿タイプと分類の除外を設定するためにこれをするべきです。

データストレージとパフォーマンスに関する最後のメモ

あなたは決してXYZ以外を探すべきではありません、あなたはあなたが探しているものではなく、探しているものを言いたいのです。それは遅く、そしてスケールしません。時にはすべてを手に入れた後にPHPで手動で削除する方が速いのです!

アーカイブされた用語に投稿を追加する代わりに、未読/アーカイブされていない用語を使用して代わりにそれらを探すことを検討しますか?

4
Tom J Nowell