Como excluir uma taxonomia personalizada do loop de postagem


22

Existe uma maneira simples ou fácil de excluir todas as postagens de uma taxonomia personalizada no loop? Eu estive olhando alto e baixo, e nem SE, SO ou Google parecem ter uma resposta direta.

Eu sei que isso pode ser feito através de uma consulta WPDB, mas isso parece uma corda enorme para pular para algo que deve ser bastante simples.


5
Alguma postagem com algum termo nessa taxonomia ou você está se referindo a um termo específico de sua taxonomia personalizada? Exemplo: se minha taxonomia for fruta e eu tiver dois termos, maçã e laranja, eu gostaria de excluir todas as postagens que contêm frutas ou apenas aquelas que têm maçãs?
T31os

para estender @ t31os Q: post_tag, category, link_category, etc. são todas taxonomias construídas. Portanto, mesmo se você chamar as tags de postagem de "termos", ainda será apenas uma taxonomia (não hierárquica) e no mesmo "nível" que a taxonomia de "categoria" (hierárquica).
kaiser

Para continuar no exemplo @ t31os: estou tentando excluir todas as postagens que estão no fruto da taxonomia (independentemente de estarem em 'maçãs', 'peras' ou 'laranjas').
Thomas

Respostas:


13

Você deseja usar o NOT EXISTSoperador juntamente com a passagem da lesma de taxonomia, que informa à consulta para não incluir nenhuma categoria escolhida de sua taxonomia customizada dentro do loop.

Para excluir todas as postagens que estão na taxonomia "fruta" (independentemente do tipo de fruta), aqui está o trecho:

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

$query = new WP_Query( $args );

2
Parece que deve ser mais eficiente do que dizer o NOT INnúmero XX terms. Essa lista de termos pode crescer em um tamanho grande, mas deve abranger todos os termos com o nome dessa taxonomia.
Italiansoda

Embora essa seja a resposta para a pergunta do OP (votada), a maioria de nós provavelmente deseja excluir um termo específico ou conjunto de termos. Para isso, você quer esta resposta .
rinogo 02/08

26

A solução para isso não é realmente tão divulgada, mas deveria ser.

Você pode fazer o seguinte:

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

O argumento do operador pode usar outros termos, mas o código acima está basicamente dizendo obter todas as postagens da 'categoria' da taxonomia que não têm os termos 'gato' ou 'cachorro'.


Inteligente. Mas então eu ainda precisaria inserir manualmente todos os termos nessa taxonomia, correto?
Thomas

Eu não estou te seguindo desculpe. Na matriz de termos, você define os valores dos termos que deseja excluir da consulta de loop. Se você quiser que eles sejam dinâmicos, talvez possa adicionar um meta-valor personalizado a cada postagem e, em seguida, verificar o valor dessa meta-chave na sua consulta e defini-lo dessa maneira, se é isso que você quer dizer.
Dwayne Charrington

Ah Entendo o que você quer dizer, mas isso é realmente complicado.
Thomas

Eu realmente não olhei, mas certamente deve haver um plugin que faça o que você está pedindo então?
Dwayne Charrington 27/03

8

Veja como fazer isso para tipos de postagem personalizados e taxonomias personalizadas:

$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')

        ),
   )
);

Isso funcionou perfeitamente para excluir a taxonomia customizada do tipo de postagem customizada. Só queria adicionar o código do loop de consulta para finalizar o trecho: while ($ the_query-> have_posts ()): $ the_query-> the_post ();


0

Fiz o seguinte para excluir postagens de um determinado termo de taxonomia:

$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'
            ),
        )
    )
);

Este código exclui status => vendido a partir de post_type => listagens


-1

Eu uso o "Plugin WordPress RYO 'Visibilidade da Categoria'" que parece funcionar muito bem.

Você pode decidir em uma página de administrador quais categorias são visíveis ou excluídas de várias áreas.

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

-Adão


4
Parece-me que ter que instalar um plugin adicional para fazer isso é exagerado. Prefiro manter minhas dependências no mínimo e, certamente, deve haver uma maneira de fazer isso em loop.
Thomas
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.