ポストループからカスタム分類を除外する方法


22

ループ内のカスタム分類からすべての投稿を除外する簡単な方法はありますか?私は高くも低くも見えてきましたが、SE、SO、Googleのいずれもまっすぐな答えがないようです。

WPDBクエリを介して実行できることは知っていますが、それはかなり単純なものにジャンプするための大きなロープのように思えます。


5
その分類法に何らかの用語がある投稿、またはカスタム分類法の特定の用語を参照している投稿はありますか?例:分類が果物で、リンゴとオレンジの2つの用語がある場合、果物を含むすべての投稿、またはリンゴを含む投稿のみを除外しますか?
t31os

@ t31osを拡張するにはQ:post_tag、category、link_categoryなどはすべて_builtin分類法です。そのため、投稿タグを「用語」と呼んでも、それはまだ分類(非階層)であり、「カテゴリー」(階層)分類と同じ「レベル」にあります。
カイザー

@ t31osの例を続けるために:分類法のフルーツに含まれるすべての投稿を除外しようとしています(「りんご」、「梨」、「オレンジ」のいずれであるかに関係なく)。
トーマス

回答:


13

NOT EXISTS分類スラグを渡すことで演算子を使用すると、ループ内にカスタム分類から選択したカテゴリが含まれないようにクエリに指示できます。

分類法 "fruit"(フルーツの種類に関係なく)にあるすべての投稿を除外するためのスニペットは次のとおりです。

$args = array(
    'post_type'      => 'post',
    'tax_query'      => array(
        array(
            'taxonomy' => 'fruit',
            'operator' => 'NOT EXISTS'
        )
    )
);

$query = new WP_Query( $args );

2
これはNOT INXXの数を言うよりも効率的であるように見えるterms。その用語のリストは大きくなる可能性がありますが、これはその分類法の名前を持つすべての用語をカバーするはずです。
イタリアのソーダ

これがOPの質問に対する回答(賛成)ですが、ほとんどの人は特定の用語または用語セットを除外したいでしょう。そのためには、この答えが必要です。
rinogo

26

これに対する解決策は実際には公表されていませんが、公表されるべきです。

次のことができます。

$args['tax_query'] = array(
    array(
        'taxonomy' => 'category',
        'terms' => array('cat', 'dog'),
        'field' => 'slug',
        'operator' => 'NOT IN',
    ),
);
query_posts($args);

演算子の引数には他の用語も使用できますが、上記のコードは基本的に、「cat」または「dog」という用語を持たない分類「category」からすべての投稿を取得することを示しています。


賢い。しかし、その分類のすべての用語を手動で入力する必要がありますか?
トーマス

ごめんなさい。用語配列では、ループクエリから除外する用語値を定義します。それらを動的にしたい場合は、各投稿にカスタムメタ値を追加し、クエリでそのメタキーの値を確認し、それが意味する場合はそのように設定できます。
ドウェインチャーリントン

あ。意味はわかりますが、それは本当に面倒です。
トーマス

私は実際に見ていませんが、そのときあなたが求めていることをするプラグインが必ずあるはずです。
ドウェインチャーリントン

8

カスタムの投稿タイプとカスタムの分類法を行う方法は次のとおりです。

$happening = new WP_Query(
array( 
  'post_type'  => 'news',        // only query News post type
  'tax_query' => array(
    array(
        'taxonomy'  => 'news-cat',
        'field'     => 'slug',
        'terms'     => 'media', // exclude items media items in the news-cat custom taxonomy
        'operator'  => 'NOT IN')

        ),
   )
);

これは、カスタムポストタイプからカスタム分類を除外するために完全に機能しました。


0

特定の分類用語から投稿を除外するために、次のことを行いました。

$argos = array( 
    'tax_query' =>  array (
        array(
            'taxonomy' => 'topics', // My Custom Taxonomy
            'terms' => 'college', // My Taxonomy Term that I wanted to exclude
            'field' => 'slug', // Whether I am passing term Slug or term ID
            'operator' => 'NOT IN', // Selection operator - use IN to include, NOT IN to exclude
        ),
    ),
    'post_type'=>'page', // Post type I want to show, can be a custom post type too
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order'=>'ASC',
    'post_parent' =>$post->ID // show child posts or pages of current page/post
); 

$query = new WP_Query( $args );

0
query_posts( array(
    'post_type' => 'listings',
    'tax_query' => array(
        array(
            'taxonomy' => 'status',
            'field'    => 'slug',
            'terms'    => 'sold',
            'operator' => 'NOT IN'
            ),
        )
    )
);

このコードは、ステータス=> post_typeから販売=>リストを除外します


-1

私は「RYO 'Category Visibility' WordPress Plugin」を使用していますが、これはかなりうまくいくようです。

管理者ページで、どのカテゴリを表示するか、さまざまな領域から除外するかを決定できます。

http://ryowebsite.com/wp-plugins/category-visibility/

-アダム


4
これを行うために追加のプラグインをインストールする必要があると私は思えます。依存関係を最小限に抑えたいので、ループ内でこれを行う方法が必ず必要です。
トーマス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.