¿Cómo consulto un tipo de publicación personalizado con una taxonomía personalizada?

26

Por alguna razón, me resulta difícil agarrar cualquier publicación usando una taxonomía personalizada ... ¿alguien puede desentrañar mi estupidez?

 $args = array(
    'post_type' => 'adverts',
    'advert_tag' => 'politics' // Doesn't seem to work.
  );

query_posts($args); 

while ( have_posts() ) : the_post();
 //Show Posts
endwhile;

Declaración de taxonomía:

add_action( 'init', 'add_custom_taxonomy', 0 );
function add_custom_taxonomy() {
register_taxonomy('advert_tag', 'Adverts', array(
  'hierarchical' => true,
  'labels' => array(
    'name' => _x( 'Advert Tags', 'taxonomy general name' ),
    'singular_name' => _x( 'Advert Tag', 'taxonomy singular name' ),
    'search_items' =>  __( 'Search Advert Tags' ),
    'all_items' => __( 'All Advert Tags' ),
    'parent_item' => __( 'Parent Advert Tag' ),
    'parent_item_colon' => __( 'Parent Advert Tag:' ),
    'edit_item' => __( 'Edit Advert Tag' ),
    'update_item' => __( 'Update Advert Tag' ),
    'add_new_item' => __( 'Add New Advert Tag' ),
    'new_item_name' => __( 'New Advert Tag Name' ),
    'menu_name' => __( 'Advert Tags' ),
  ),
  'rewrite' => array(
    'slug' => 'advert-tags',
    'with_front' => false,
    'hierarchical' => true
  ),
));
  }

Declaración de tipo de publicación personalizada:

  add_action( 'init', 'create_post_type' );
  function create_post_type() {
    register_post_type( 'Adverts',
    array(
        'labels' => array(
            'name' => __( 'Adverts' ),
            'singular_name' => __( 'Advert'),
            'add_new' => __( 'Add New' ),
            'add_new_item' => __( 'Add a New Advert' ),
            'edit' => __( 'Edit' ),
            'edit_item' => __( 'Edit Advert' ),
            'new_item' => __( 'New Advert' ),
            'view' => __( 'View' ),
            'view_item' => __( 'View Advert' ),
            'search_items' => __( 'Search Adverts' ),
            'not_found' => __( 'No Adverts found' ),
            'not_found_in_trash' => __( 'No Adverts found in Trash' ),
            ),
        'supports' => array(
                'title',
                'thumbnail',
            ),
        'has_archive' => true,
        'menu_position' => 10,
        'public' => true,
        'rewrite' => array( 'slug' => 'adverts' ),
        'taxonomies' => array('advert_tag')
    )
);

}

Stephen
fuente

Respuestas:

37

Los abetos de todos nunca usanquery_posts() , lea más sobre esto aquí: ¿ Cuándo debe usar WP_Query vs query_posts () vs get_posts ()? .

Tienes que usar WP_Querypara buscar publicaciones lo que necesitas. Lea la documentación para ello. En su caso, la consulta podría ser así:

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax_query' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();
Eugene Manuilov
fuente
2
Acabo de notar que parece extraer todas las publicaciones con el tipo de publicación personalizada 'Anuncios'. Sin embargo, esto parece hacer el trabajo: $ the_query = new WP_Query (array ('post_type' => 'Adverts', 'advert_tag' => 'policy'));
Stephen
@Stephen {tax} quedó en desuso desde la versión 3.1 a favor de {tax_query} y se introdujo {tax_query}. esto todavía funciona pero no debemos usar las funciones obsoletas. tax_query se usa con una serie de consultas de taxonomía. estaba trabajando en el tipo de publicación personalizada de preguntas frecuentes y funcionó para mí de la misma manera que el argumento de la taxonomía de {tax} en WP_Query.
Aamer Shahzad
16

Estoy usando esta consulta para obtener publicaciones personalizadas (publicaciones de preguntas frecuentes) con su taxonomía personalizada (faq_category). dado que el parámetro {taxonomía} en los argumentos de WP_Query quedó en desuso desde la v.3.1 e introdujo {tax_query}. a continuación se muestra el código que funciona perfectamente.

$query = new WP_Query( array(
    'post_type' => 'faqs',          // name of post type.
    'tax_query' => array(
        array(
            'taxonomy' => 'faq_category',   // taxonomy name
            'field' => 'term_id',           // term_id, slug or name
            'terms' => 48,                  // term id, term slug or term name
        )
    )
) );

while ( $query->have_posts() ) : $query->the_post();
    // do stuff here....
endwhile;

/**
 * reset the orignal query
 * we should use this to reset wp_query
 */
wp_reset_query();
Aamer Shahzad
fuente
Esta es la respuesta correcta: la respuesta aceptada no se filtrará por taxonomía ya que tax_query requiere una matriz de matrices. Este método anidado es esencial para que esto funcione. Gracias por su respuesta)
Tom Dyer
sí, tienes razón, bienvenido Tom Dyer
Aamer Shahzad
Sí, este también me ayudó a hacer que funcione la plantilla de taxonomías. ¡Gracias!
user3135691
Hola @AamerShahzad, tengo exactamente la misma pregunta y utilicé tu respuesta, pero la página no muestra publicaciones. ¿Me puede ayudar aquí? stackoverflow.com/questions/55783769/…
Desi
-1

Esta respuesta ya no es válida ya que WordPress cambia la información de sus parámetros de taxonomía. por favor use de esta manera. Funcionará. Esto funciona para mi. "tax_query" reemplaza con "tax". Espero que funcione.

$the_query = new WP_Query( array(
    'post_type' => 'Adverts',
    'tax' => array(
        array (
            'taxonomy' => 'advert_tag',
            'field' => 'slug',
            'terms' => 'politics',
        )
    ),
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    // Show Posts ...
endwhile;

/* Restore original Post Data 
 * NB: Because we are using new WP_Query we aren't stomping on the 
 * original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();
mamunuzaman
fuente
Es exactamente lo contrario: taxera la forma antigua, tax_queryes la forma actual (v3.1 +).
WebElaine
Bueno, estoy trabajando v4.5 y funciona conmigo
mamunuzaman
WP es famoso por ser compatible con versiones anteriores. La forma antigua todavía funciona, pero ha quedado en desuso, por lo que eventualmente se puede eliminar y es más seguro usar el método más nuevo.
WebElaine