Come posso eseguire una query su un tipo di post personalizzato con una tassonomia personalizzata?


26

Per qualche motivo, trovo difficile trovare un post usando una tassonomia personalizzata ... qualcuno può svelare la mia stupidità?

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

query_posts($args); 

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

Dichiarazione di tassonomia:

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

Dichiarazione sul tipo di posta personalizzata:

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

}

Risposte:


37

I primi di tutti non lo usano query_posts()mai , leggi di più qui: Quando dovresti usare WP_Query vs query_posts () vs get_posts ()? .

Devi usare WP_Queryper recuperare i messaggi di cui hai bisogno. Leggi la documentazione per questo. Nel tuo caso la query potrebbe essere così:

$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();

2
Ho appena notato che sembra estrarre tutti i post con il tipo di post personalizzato "Annunci". Comunque questo sembra fare il lavoro: $ the_query = new WP_Query (array ('post_type' => 'Adverts', 'advert_tag' => 'policy'));
Stephen,

@Stephen {tax} è stato deprecato dalla versione 3.1 a favore di {tax_query} e è stato introdotto {tax_query}. questo funziona ancora ma non dovremmo usare le funzioni deprecate. tax_query viene utilizzato con una matrice di query di tassonomia. stavo lavorando sul tipo di Post personalizzato FAQ e ha funzionato per me più o meno allo stesso modo dell'argomento slug di tassonomia {tax} in WP_Query.
Aamer Shahzad,

16

sto usando questa query per recuperare post personalizzati (FAQs Posts) con la sua tassonomia personalizzata (faq_category). poiché il parametro {taxonomy} in args WP_Query è stato deprecato dalla v.3.1 e introdotto {tax_query}. di seguito è riportato il codice che funziona perfettamente.

$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();

Questa è la risposta corretta: la risposta accettata non filtra in base alla tassonomia poiché tax_query richiede una matrice di matrici. Questo metodo nidificato è essenziale per farlo funzionare. Grazie per la risposta)
Tom Dyer,

Sì, hai ragione, benvenuto Tom Dyer
Aamer Shahzad,

Sì, questo mi ha anche aiutato a far funzionare il modello di tassonomie. Grazie!
user3135691

Ehi @AamerShahzad Ho la stessa identica domanda e ho usato la tua risposta, ma la pagina non ha post. Potete aiutarmi qui? stackoverflow.com/questions/55783769/…
Desi

-1

Questa risposta non è più valida poiché wordpress modifica le informazioni sui parametri della tassonomia. si prega di utilizzare in questo modo. Funzionerà. Per me funziona. "tax_query" sostituisce con "tax". spero che funzionerà.

$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();

È esattamente l'opposto: taxera il vecchio modo, tax_queryè l'attuale (v3.1 +).
WebElaine,

Beh, sto lavorando v4.5 e funziona con me
mamunuzaman

WP è famoso per essere retrocompatibile. Il vecchio metodo funziona ancora, ma è stato deprecato, quindi alla fine potrebbe essere rimosso ed è più sicuro utilizzare il metodo più recente.
WebElaine
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.