0

検索結果をフィルター処理するための Wordpress クエリを作成しています。

logged_in_mentor_only_template.phpテンプレートを使用して結果を削除したいlogged_in_only_template.php(および 2 つの制限されたカテゴリからも)。

このクエリは機能しますが、投稿が返されなくなります。非常に奇妙なことに、ページは返されますが、投稿は返されません。(フィルタリングする投稿がないため、まだカテゴリ フィルタリングを追加していません!)

リストされた投稿とページで post_type フィルターを追加しようとしましたが、まだ何もありません。

どんな助けでも感謝します。

 query_posts(array_merge($wp_the_query->query, array(
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'logged_in_mentor_only_template.php',
            'compare' => '!='
        ),
        array(
            'key' => '_wp_page_template',
            'value' => 'logged_in_only_template.php',
            'compare' => '!='
        )
    )
)));
4

1 に答える 1

0

_wp_page_templatePosts will not have any を検索します_wp_page_template
したがって、ページのみを取得します。セットがある投稿/ページのみを返すため_wp_page_templateです。そのため、存在しないメタ キーを確認する必要があります。

WP 3.5 では、比較値 'NOT EXISTS' が追加されます。

3.5 までは、次の回避策をお勧めします。これらのメタ クエリ値を追加しないでください。ただし、ループ内でそれらを確認してください。

while (the_posts()): the_post();
    if (get_post_meta(GET_THE_ID(), '_wp_page_template', true) == 'logged_in_mentor_only_template.php' || get_post_meta(GET_THE_ID(), '_wp_page_template', true) == 'logged_in_mentor_only_template.php')
        continue; // skipp the rest of this round
    //Do the rest of your loop
endwhile;

2 番目のオプションは、テンプレートを含むすべての投稿を取得することです。
このクエリからすべての ID を取得します。
次に、以前にフェッチしたクエリの ID を除外する新しい wp_query を実行します。

最適なオプション
これらの回避策は、パフォーマンスが良くありません。
最善の選択肢は、WP 3.5 を数週間待つことです。12 月のどこかでリリースされるはずです。

于 2012-11-20T10:03:27.963 に答える