Como faço para consultar um tipo de postagem personalizado com uma taxonomia personalizada?

26

Por alguma razão, estou achando difícil pegar as postagens usando uma taxonomia personalizada ... alguém pode desvendar minha 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;

Declaração de taxonomia:

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
  ),
));
  }

Declaração de tipo de postagem 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
fonte

Respostas:

37

Antes de tudo , nunca use query_posts()nunca , leia mais aqui: quando você deve usar o WP_Query vs query_posts () vs get_posts ()? .

Você precisa usar WP_Querypara buscar as postagens do que precisa. Leia a documentação para isso. No seu caso, a consulta pode ser assim:

$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
fonte
2
Só notei que parece puxar todas as postagens com o tipo de postagem personalizada 'Anúncios'. No entanto, isso parece fazer o trabalho: $ the_query = new WP_Query (array ('post_type' => 'Anúncios', 'advert_tag' => 'policy'));
7113 Stephen
@Stephen {tax} foi descontinuado desde a versão 3.1 a favor de {tax_query} e {tax_query} foi introduzida. isso ainda funciona, mas não devemos usar as funções obsoletas. tax_query é usado com uma matriz de consultas de taxonomia. eu estava trabalhando no tipo de postagem personalizada das perguntas frequentes e funcionou para mim da mesma maneira que o argumento de lesma de taxonomia {tax} no WP_Query.
Aamer Shahzad
16

Estou usando esta consulta para buscar postagens personalizadas (postagens de perguntas frequentes) com sua taxonomia personalizada (faq_category). desde que o parâmetro {taxonomy} nos argumentos WP_Query foi descontinuado desde a v.3.1 e introduziu {tax_query}. abaixo está o código que funciona perfeitamente.

$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
fonte
Esta é a resposta correta - a resposta aceita não será filtrada por taxonomia, pois o tax_query requer uma matriz de matrizes. Esse método aninhado é essencial para que isso funcione. Obrigado pela resposta)
Tom Dyer
sim você está certo, bem-vindo Tom Dyer
Aamer Shahzad
Sim, este também me ajudou a fazer o modelo de taxonomias funcionar. Obrigado!
user3135691
Hey @AamerShahzad Eu tenho exatamente a mesma pergunta e usei sua resposta, mas a página não está exibindo postagens. Você pode me ajudar aqui? stackoverflow.com/questions/55783769/…
Desi
-1

Esta resposta agora não é mais válida, pois o wordpress altera suas informações de parâmetro de taxonomia. por favor use desta maneira. Vai funcionar. Funciona para mim. "tax_query" substitui por "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
fonte
É exatamente o oposto - taxera o caminho antigo, tax_queryé o caminho atual (v3.1 +).
WebElaine
Bem, eu estou trabalhando v4.5 e funciona comigo
mamunuzaman
O WP é famoso por ser compatível com versões anteriores. A maneira antiga ainda funciona, mas foi preterida, portanto pode ser removida e é mais seguro usar o método mais recente.
WebElaine