Wie frage ich einen benutzerdefinierten Beitragstyp mit einer benutzerdefinierten Taxonomie ab?

26

Aus irgendeinem Grund finde ich es schwierig, mithilfe einer benutzerdefinierten Taxonomie Beiträge zu erhalten ... kann jemand meine Dummheit enträtseln?

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

query_posts($args); 

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

Taxonomieerklärung:

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

Benutzerdefinierte Post-Typ-Deklaration:

  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
quelle

Antworten:

37

Firs of All verwenden query_posts()nie , lesen Sie mehr darüber hier: Wann sollten Sie WP_Query vs query_posts () vs get_posts () verwenden? .

Sie müssen verwenden WP_Query, um Beiträge abzurufen, was Sie benötigen. Lesen Sie die Dokumentation dazu. In Ihrem Fall könnte die Abfrage folgendermaßen aussehen:

$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
quelle
2
Gerade bemerkt, dass es scheint, alle Beiträge mit dem benutzerdefinierten Beitragstyp "Anzeigen" zu ziehen. Dies scheint jedoch die Aufgabe zu erfüllen: $ the_query = new WP_Query (Array ('post_type' => 'Adverts', 'advert_tag' => 'politics');
Stephen
@Stephen {tax} ist veraltet, seit Version 3.1 zugunsten von {tax_query} und {tax_query} eingeführt wurde. Dies funktioniert immer noch, aber wir sollten nicht die veralteten Funktionen verwenden. tax_query wird mit einem Array von Taxonomie-Abfragen verwendet. Ich habe am Typ "Benutzerdefinierte Posts" für häufig gestellte Fragen gearbeitet und es hat bei mir fast genauso funktioniert wie das {tax} taxonomy slug-Argument in WP_Query.
Aamer Shahzad
16

Ich benutze diese Abfrage, um benutzerdefinierte Posts (FAQs Posts) mit seiner benutzerdefinierten Taxonomie (faq_category) abzurufen. Parameter since {taxonomy} in WP_Query args ist seit Version 3.1 veraltet und hat {tax_query} eingeführt. Unten ist der Code, der perfekt funktioniert.

$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
quelle
Dies ist die richtige Antwort. Die akzeptierte Antwort wird nicht nach Taxonomie gefiltert, da für die tax_query ein Array von Arrays erforderlich ist. Diese verschachtelte Methode ist wichtig, damit dies funktioniert. Vielen Dank für Ihre Antwort)
Tom Dyer
ja, du hast recht, willkommen Tom Dyer
Aamer Shahzad
Ja, dies hat mir auch geholfen, die Taxonomie-Vorlage zum Laufen zu bringen. Vielen Dank!
user3135691
Hey @AamerShahzad Ich habe genau die gleiche Frage und ich habe Ihre Antwort verwendet, aber die Seite zieht keine Beiträge. Kannst du mir hier raushelfen? stackoverflow.com/questions/55783769/…
Desi
-1

Diese Antwort ist jetzt nicht mehr gültig, da WordPress ihre Taxonomie-Parameterinformationen ändert. Bitte benutze diesen Weg. Es wird klappen. Für mich geht das. "tax_query" wird durch "tax" ersetzt. hoffe es wird funktionieren.

$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
quelle
Es ist genau das Gegenteil - taxwar der alte Weg, tax_queryist der aktuelle (v3.1 +) Weg.
WebElaine
Nun, ich arbeite v4.5 und es funktioniert mit mir
mamunuzaman
WP ist berühmt für seine Abwärtskompatibilität. Der alte Weg funktioniert immer noch, aber er ist veraltet, sodass er möglicherweise entfernt wird und es sicherer ist, die neuere Methode zu verwenden.
WebElaine