it-swarm.com.de

Alle benutzerdefinierten Beitragstypen einer bestimmten Kategorie auflisten?

Ich habe einen benutzerdefinierten Beitragstyp myposttype und seine Taxonomie heißt myposttype_categories.

myposttype_categories enthält mehrere Begriffe wie foo und bar.

Die knifflige Frage ist: Wie liste ich alle Beiträge vom Typ mypost auf, die zu foo (oder bar) gehören?

Ich dachte, das sollte funktionieren, aber es funktioniert nicht:

$args = array( 
       'post_type' => 'myposttype', 
       'myposttype_categories'=> 'foo');
$loop = new WP_Query( $args );

Und die Schleife ist immer leer.

Ich habe möglicherweise jeden Taxonomie-Parameter für WP_Query () ausprobiert auch geprüft Kategorie-Parameter .

Es gibt sehr alte Beiträge, die sich mit dem Problem befassen, aber es scheint, dass es nach 3 Jahren immer noch nicht funktioniert ...? Oder vermisse ich etwas?

http://wordpress.org/support/topic/wp_query-and-custom-taxonomies

http://core.trac.wordpress.org/ticket/13582

[bearbeiten]

So registriere ich meinen Beitragstyp:

add_action('init', 'myposttype_register');  

function myposttype_register() {

    $labels = array(
        'name' => _x('Myposttype', 'post type general name'),
        'singular_name' => _x('Myposttype item', 'myposttype item'),
        'add_new' => _x('Add Myposttype', 'myposttype item'),
        'add_new_item' => __('Add New Item'),
        'edit_item' => __('Edit Item'),
        'new_item' => __('New Item'),
        'view_item' => __('View Item'),
        'search_items' => __('Search Items'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail','page-attributes','comments','trackbacks'),
        'show_in_nav_menus' => true,
      ); 

    register_post_type( 'myposttype' , $args );

}  

Und Taxonomie:

register_taxonomy("myposttype_categories", array("myposttype"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Type", "rewrite" => true));
1
Wordpressor

Was ist mit einem tax_query ?

$args = array( 
       'post_type' => 'myposttype', 
       'tax_query'=> array(
            'taxonomy' => 'myposttype_categories',
            'terms' => array('foo'),
            'field' => 'slug',
        )
);
$loop = new WP_Query( $args );
var_dump($loop);

Facepalm Frage, sind Sie sicher, dass diese Taxonomien/Beitragstypen existieren und dass unter ihnen Beiträge abgelegt sind?

Update

Die Abfrage scheint für mich in Ordnung zu sein und ich kann eine Liste der Posts anzeigen, die ich mit diesem Begriff/dieser Kategorie hinzugefügt habe. Ich habe Ihren register_taxonomy-Aufruf in die Funktion verschoben, die für init ausgelöst wird. Laut Codex ist es nicht ratsam, register_taxonomy außerhalb einer Aktion aufzurufen und könnte die Ursache für Ihre Probleme sein.

add_action('init', 'myposttype_register');

function myposttype_register() {

    $labels = array(
        'name' => _x('Myposttype', 'post type general name'),
        'singular_name' => _x('Myposttype item', 'myposttype item'),
        'add_new' => _x('Add Myposttype', 'myposttype item'),
        'add_new_item' => __('Add New Item'),
        'edit_item' => __('Edit Item'),
        'new_item' => __('New Item'),
        'view_item' => __('View Item'),
        'search_items' => __('Search Items'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail','page-attributes','comments','trackbacks'),
        'show_in_nav_menus' => true,
      );

    register_post_type( 'myposttype' , $args );

    register_taxonomy("myposttype_categories", array("myposttype"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Type", "rewrite" => true));

}

Und die Abfrage:

$args = array(
'post_type' => 'myposttype',
'myposttype_categories'=> 'foo');

$my_query = new WP_Query( $args );

if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php
    endwhile;
}

wp_reset_query();

Die beiden folgenden Argumente können auch als Argumente verwendet werden. Da Sie jedoch nur eine Taxonomie abfragen, müssen Sie den tax_query wahrscheinlich nicht verwenden. Ich habe das anfangs verwendet, weil ich dachte, Sie müssten in beiden Begriffen Beiträge finden.

$args = array( 'myposttype_categories'=> 'foo' );

und

$args = array(
    'post_type' => 'myposttype',
    'tax_query' => array(
        array(
        'taxonomy' => 'myposttype_categories',
        'terms' => array('foo'),
        'field' => 'slug'
        )
    )
);
5
helgatheviking