web-dev-qa-db-ja.com

ページ付けが正しいようにWP_Queryから投稿を削除する方法

私はカスタム投稿タイプを使用していて、ホームページの1ページに20個表示しています。 QP_Queryを使っています。

カスタム投稿タイプ(mixtapesと呼ばれる)のカスタムフィールドの1つに、「未リリース」というチェックボックス(true/falseに設定)があります。基本的に、ループに含めたくない投稿です。

これまでのところ、whileループの中に、 'unreleased'が 'true'に設定されていない場合にのみ表示するように条件付きifを設定しました。未公開アルバムが1枚しかない場合、40の投稿(2ページ)が表示されます(1ページになるはずですが、2ページが表示されます)。 2ページ目には、結果はありません。

同様に私がリリースされている「トップ10」アルバムを見せたいとき、未発表のものは実際のループから削除されていないため、実際には9のみを表示します。

ループが特定のcustom_field条件で削除された投稿を追跡し続けるように、どうすればこれを解決できますか?

Thnkas

1
Tallboy

すべての投稿をクエリしてから基準に一致するものだけを表示するのではなく、基準に一致する投稿をクエリします。 WP_Query を使うと、その メタキー/メタ値 属性.

たとえば、ループの前のどこかで、カスタムフィールドunreleasedが 'false'になっている投稿を取得するには、次のようにします。

global $wp_query;
$customField = array( 'meta_key' => 'unreleased', 'meta_value' => 'false' );
$args = array_merge( $wp_query->query,$customField);
query_posts( $args );

これが最も効果的な方法ではありませんが、最も簡単な方法です。メタキー/値クエリを既存のクエリとマージします(これにはページ区切り引数が含まれます)。

WP_Queryquery_posts がここで使うべき正しいことであるかどうかを決める必要があります(ではない場合ページ上のメインクエリでは、代わりに get_posts を使用する必要があります - それは同じパラメータを受け入れます)。

注:get_postsまたはWP_Queryを使用することを決定した場合(ただしmain照会を変更するquery_postsと一緒に使用しない場合)は、マージしないでください。 (どちらを使うべきかよくわからない場合は、これを公式に参照してください。 'すばらしい答え' :D)

2
Stephen Harris