¿Cómo excluyo una taxonomía personalizada del bucle posterior

22

¿Hay una manera simple o fácil de excluir todas las publicaciones de una taxonomía personalizada en el bucle? He estado buscando altos y bajos, y ni SE, SO ni Google parecen tener una respuesta directa.

Sé que se puede hacer a través de una consulta WPDB, pero eso parece una gran cuerda para saltar por algo que debería ser bastante simple.

Thomas
fuente
55
¿Alguna publicación que tenga algún término en esa taxonomía, o se refiere a un término particular de su taxonomía personalizada? Ejemplo: si mi taxonomía es fruta y tengo dos términos, manzana y naranja, ¿me gustaría excluir todas las publicaciones que tienen fruta, o solo aquellas que tienen manzanas?
t31os
para extender @ t31os Q: post_tag, category, link_category, etc. son todas _ taxonomías integradas. Entonces, incluso si llama a las etiquetas de publicación "términos", sigue siendo solo una taxonomía (no jerárquica) y en el mismo "nivel" que la taxonomía de "categoría" (jerárquica).
Kaiser
Para continuar @ t31os ejemplo: estoy tratando de excluir todas las publicaciones que están en la fruta de la taxonomía (independientemente de si están en 'manzanas', 'peras' o 'naranjas').
Thomas

Respuestas:

13

Debería usar el NOT EXISTSoperador junto con pasar el slug de taxonomía, que le dice a la consulta que no incluya ninguna categoría elegida de su taxonomía personalizada dentro del ciclo.

Para excluir todas las publicaciones que están en la taxonomía "fruta" (independientemente del tipo de fruta), aquí está el fragmento:

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

$query = new WP_Query( $args );
aniskhan001
fuente
2
Esto parece que debería ser más eficiente que decir NOT INXX número de terms. Esa lista de términos podría crecer a un gran tamaño, pero esto debería cubrir todos los términos con el nombre de esa taxonomía.
italiansoda
Si bien esta es la respuesta a la pregunta del OP (votada), la mayoría de nosotros probablemente desee excluir un término específico o un conjunto de términos. Para eso, quieres esta respuesta .
Rinogo
26

La solución a esto no es realmente tan publicitada, pero debería serlo.

Puedes hacer lo siguiente:

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

El argumento del operador puede tomar otros términos, pero el código anterior básicamente dice que obtenga todas las publicaciones de la categoría 'taxonomía' que no tienen los términos 'gato' o 'perro'.

Dwayne Charrington
fuente
Inteligente. Pero aún así necesitaría ingresar manualmente cada término en esa taxonomía, ¿correcto?
Thomas
No te estoy siguiendo lo siento. En la matriz de términos, usted define los valores de los términos que desea excluir de su consulta de bucle. Si desea que sean dinámicos, quizás pueda agregar un metavalor personalizado a cada publicación y luego verificar el valor de esa metaclave en su consulta y configurarlo de esa manera si eso es lo que quiere decir.
Dwayne Charrington
Ah Entiendo lo que quieres decir, pero eso es realmente engorroso.
Thomas
Realmente no he buscado, pero seguramente debe haber un complemento que haga lo que estás preguntando.
Dwayne Charrington
8

A continuación, le mostramos cómo hacerlo para tipos de publicaciones personalizadas y taxonomías 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')

        ),
   )
);

Esto funcionó perfectamente para excluir la taxonomía personalizada del tipo de publicación personalizada. Solo quería agregar el código de bucle de consulta para terminar el fragmento: while ($ the_query-> have_posts ()): $ the_query-> the_post ();

Tim Bowen
fuente
0

Hice lo siguiente para excluir publicaciones de un determinado término de taxonomía:

$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 );
erachnid
fuente
0
query_posts( array(
    'post_type' => 'listings',
    'tax_query' => array(
        array(
            'taxonomy' => 'status',
            'field'    => 'slug',
            'terms'    => 'sold',
            'operator' => 'NOT IN'
            ),
        )
    )
);

Este código excluye status => vendido de post_type => listados

subhash jangid
fuente
-1

Utilizo el "complemento de WordPress" RYO 'Category Visibility' "que parece funcionar bastante bien.

Puede decidir en una página de administrador qué categorías son visibles o excluidas de varias áreas.

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

-Adán

adamf
fuente
44
Me parece que tener que instalar un complemento adicional para hacerlo es exagerado. Prefiero mantener mis dependencias al mínimo y seguramente debe haber una manera de que esto se haga en el bucle.
Thomas