Listarea tuturor posturilor de tip personalizat dintr-o categorie dată?
Am un tip de postare personalizat myposttype
și taxonomia sa se numește myposttype_categories
.
myposttype_categories
are mai mulți termeni, cum ar fi foo
și bar
.
Întrebarea dificilă este - cum pot lista toate posturile myposttype care aparțin lui foo
(sau bar
)?
M-am gândit că acest cod ar trebui să funcționeze, dar nu funcționează:
$args = array(
'post_type' => 'myposttype',
'myposttype_categories'=> 'foo');
$loop = new WP_Query( $args );
Iar bucla este întotdeauna goală.
Am încercat posibil fiecare parametru de taxonomie pentru WP_Query() și am verificat și parametrii de categorie.
Există postări foarte vechi care abordează această problemă, dar se pare că tot nu funcționează după 3 ani...? Sau îmi scapă ceva?
http://wordpress.org/support/topic/wp_query-and-custom-taxonomies
http://core.trac.wordpress.org/ticket/13582
[editare]
Așa îmi înregistrez tipul de postare:
add_action('init', 'myposttype_register');
function myposttype_register() {
$labels = array(
'name' => _x('Myposttype', 'denumire generală tip postare'),
'singular_name' => _x('Myposttype item', 'element myposttype'),
'add_new' => _x('Add Myposttype', 'element myposttype'),
'add_new_item' => __('Adaugă Element Nou'),
'edit_item' => __('Editează Element'),
'new_item' => __('Element Nou'),
'view_item' => __('Vizualizează Element'),
'search_items' => __('Caută Elemente'),
'not_found' => __('Nu s-a găsit nimic'),
'not_found_in_trash' => __('Nu s-a găsit nimic în Coșul de gunoi'),
'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 );
}
Și taxonomia:
register_taxonomy("myposttype_categories", array("myposttype"), array("hierarchical" => true, "label" => "Categorii", "singular_label" => "Tip", "rewrite" => true));

Cum ar fi să încerci un 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);
Întrebare evidentă, ești sigur că aceste taxonomii/tipuri de postări există și că există postări asociate lor?
Actualizare
Interogarea pare să funcționeze corect pentru mine și pot afișa o listă cu postările adăugate cu acel termen/categorie. Am mutat apelul tău register_taxonomy
în funcția care rulează pe init
. Conform codex-ului, nu este recomandat să apelezi register_taxonomy
în afara unei acțiuni și aceasta ar putea fi cauza problemelor tale.
add_action('init', 'myposttype_register');
function myposttype_register() {
$labels = array(
'name' => _x('Myposttype', 'nume general tip postare'),
'singular_name' => _x('Element Myposttype', 'element myposttype'),
'add_new' => _x('Adaugă Myposttype', 'element myposttype'),
'add_new_item' => __('Adaugă element nou'),
'edit_item' => __('Editează element'),
'new_item' => __('Element nou'),
'view_item' => __('Vezi element'),
'search_items' => __('Caută elemente'),
'not_found' => __('Nimic găsit'),
'not_found_in_trash' => __('Nimic găsit în Coș'),
'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" => "Categorii", "singular_label" => "Tip", "rewrite" => true));
}
Și interogarea:
$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="Legătură permanentă către <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php
endwhile;
}
wp_reset_query();
Pentru ceea ce valorează, următoarele funcționează și ele ca argumente, deși dacă interoghezi o singură taxonomie, probabil nu ai nevoie să folosești tax_query
. Am folosit inițial pentru că am crezut că ai nevoie să găsești postări în ambii termeni.
$args = array( 'myposttype_categories'=> 'foo' );
și
$args = array(
'post_type' => 'myposttype',
'tax_query' => array(
array(
'taxonomy' => 'myposttype_categories',
'terms' => array('foo'),
'field' => 'slug'
)
)
);

Îmi returnează un obiect gol, ești sigur că funcționează? Apropo, voiam să afișez doar foo
sau bar
, nu pe ambele :) Și da, taxonomia mea există, există postări înregistrate sub ea.

Da, tocmai am verificat, se pare că tax_query funcționează corect doar cu tipul de postare post
, iar pentru tipurile personalizate de postări returnează nimic pentru array-uri precum: 'terms' => array('foo'
) sau totul pentru șiruri: 'terms' => 'foo'
. Ei bine, se pare că încă nu putem amesteca tipuri personalizate de postări ȘI filtrarea pe termeni? :(

Ai spus foo (sau bar), așa că am interpretat greșit că ai elemente în ambele categorii. Această interogare caută elemente care sunt în ambele, așa că dacă nu ai niciunul, ai primi un obiect gol. Pentru ceea ce valorează, tax_query
va funcționa cu orice tip de postare. Probabil ar trebui să postezi codul tău pentru înregistrarea tipului de postare și a taxonomiilor. Voi ajusta codul meu, deși dacă faci o interogare simplă, ceea ce ai postat ar trebui să funcționeze, motiv pentru care cred că trebuie să postezi mai mult cod.

PS - Nu am vrut să "țip" și să pun totul cu bold, am uitat că # înseamnă bold în markdown. Doamne!

E în regulă, tocmai am actualizat întrebarea mea cu codurile de înregistrare pentru tipurile personalizate de postări și taxonomii.

La naiba, ai dreptate, funcționează, dar se pare că nu în cazul meu. Ai vreo idee ce ar putea să o stric? Taxonomia există, termenii există, tipul personalizat de postare există, dar tot nu primesc niciun rezultat. Și când folosesc același cod pe Twenty Twelve funcționează perfect. Am încercat chiar să folosesc acest cod imediat după tag-ul body, înainte de orice potențiale loop-uri etc., dar nimic nu pare să ajute :/
