メインのクエリを自分のカスタムクエリに置き換えます。事は私が手動ページングの煩わしさを通過したくないということです。私はフィルタposts_results
があることを知っていますが、私はそれを正確に使用する方法がわからない、私はそれにたくさんの情報を見つけることができませんでした。 pre_get_posts
はクエリを完全に置き換えるのではなく、単にクエリを変更するだけのようです。クエリを$posts
にダンプしようとしましたが、ページングが失われました。これを回避する方法はありますか?
私は$posts = wpdb->get_results($query);
を使ってメインのクエリを自分のものに置き換えます。
$query
は私のカスタムSQLです。 get_header()
の真下にスニペットを追加しています。カスタム分類法ページのメインクエリを編集しようとしています:taxonomy-mytax.php
。
状況
現在私のクライアントは製造業者(分類学)と製品(分類学)そして実際の製品(カスタム投稿タイプ)を持っています。彼らは、最も有利な製造業者による分類順に(製品カテゴリページ - taxonomy-producttax.php
に)製品の投稿を表示するように要求しました(分類法)。だから私は彼らが注文を宣言する番号を設定することができる製造業者の分類法に特別なフィールドを追加しました。この番号は$wpdb->terms.term_group
に保存されます。それでは、Product Categoryページで、メインのクエリを、すべての製品を取得して製造元のterm_group
の順序で並べるまったく新しいクエリに完全に置き換えようとしています。製品と製造業者の両方(両方の分類法)に注文があり、どちらも$wpdb->terms.term_gruop
に入れられて面倒でした。うまく機能するカスタムクエリを作成し、製造元の投稿をterm_group
の順番で表示します。 taxonomy-producttax.php
のメインのクエリを自分のカスタムSQLクエリに置き換えるだけですが、手動のページングには入りたくありませんでした。Wordpressに組み込まれているものを使用したいのです。
メインクエリを$wpdb
の出力に置き換えることはできません。主なクエリはWP_Query
オブジェクトです。 $wpdb
は単純な配列またはオブジェクトを返しますが、WP_Query
オブジェクトは返しません。
たとえあなたが生のSQLを問い合わせに入れることができたとしても(私の頭の後ろにある何かはあなたがそうすることができると私に思わせるが私はそれに誓うことはできない) var_dump($wp_query);
を試すと、単なるSQLクエリ以外にも多くのことが行われていることがわかります。オブジェクトを機能させるには、必要なページ区切りを含め、その他すべてのものを正しく設定する必要があります。
pre_get_posts
オブジェクトを変更するには、それを置き換えるのではなく、posts_where
およびおそらくWP_Query
のような他のクエリフィルタを使用する必要があります。 @Miloと@ChipBennettが要求したような詳細を知らずにあなたが提供することを躊躇しているのであれば、もっと多くの答えを与えることは不可能になるでしょう。
それは分類学のアーカイブページです。私の質問がするのは、ユーザーが設定したカテゴリー順で投稿を並べることです...だから私はselect、join、where、orderを変更する必要があります。
実際のコードを見なくても、より正確な答えを出すことは困難です。ただし、 pre_get_posts
actionフック以外に、 WordPressには、クエリをもっと早く操作するためのフィルタ がいくつかあります。
あなたのニーズに合うようにメインのクエリを操作できないという本当の理由はほとんどありません。
だから私は彼らが注文を宣言する番号を設定することができる製造業者の分類法に特別なフィールドを追加しました。この番号は
$wpdb->terms.term_group
に保存されます。それでは、Product Categoryページで、メインのクエリを、すべての製品を取得して製造元のterm_group
の順序で並べるまったく新しいクエリに完全に置き換えようとしています。製品と製造業者の両方(両方の分類法)に注文があり、どちらも$wpdb->terms.term_gruop
に入れられて面倒でした。うまく機能するカスタムクエリを作成し、製造元の投稿をterm_group
の順番で表示します。