Listarea tuturor posturilor de tip personalizat dintr-o categorie dată?

16 feb. 2013, 01:40:12
Vizualizări: 31.8K
Voturi: 2

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));
3
Comentarii

cum arată codul tău care iterează prin rezultatele interogării tale? cum arată codul tău care înregistrează tipul de postare și taxonomia?

Milo Milo
16 feb. 2013 01:57:30

Am verificat totul de la WP_Query până la detestatul query_posts, atât taxonomia cât și tipurile personalizate de postări sunt ok, codul care iterează rezultatele de asemenea, funcționează pentru tine filtrarea postărilor personalizate folosind termeni? Pentru că mă tem că pur și simplu nu funcționează și asta e problema. Toate exemplele din Codex folosesc tipul de postare 'post'...

Wordpressor Wordpressor
16 feb. 2013 06:09:43

codul tău de mai sus funcționează bine pentru mine, de aceea am întrebat despre codul de înregistrare al tipului de postare și taxonomiei și cum arată bucla ta. este într-adevăr posibil să faci ceea ce vrei, doar că ai o problemă în codul tău în altă parte.

Milo Milo
16 feb. 2013 06:28:43
Toate răspunsurile la întrebare 1
7

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'
        )
    )
);
16 feb. 2013 03:59:12
Comentarii

Î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.

Wordpressor Wordpressor
16 feb. 2013 05:37:47

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? :(

Wordpressor Wordpressor
16 feb. 2013 06:04:04

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.

helgatheviking helgatheviking
16 feb. 2013 16:23:21

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

helgatheviking helgatheviking
16 feb. 2013 16:24:22

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

Wordpressor Wordpressor
16 feb. 2013 18:17:47

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 :/

Wordpressor Wordpressor
17 feb. 2013 00:43:27

Ceva intră în conflict în tema ta, presupun. Va trebui să analizezi fișierul functions.php bucată cu bucată. Poate să comentezi tot și apoi să adaugi încet fiecare funcție înapoi? Este cea mai proastă variantă.

helgatheviking helgatheviking
17 feb. 2013 01:35:23
Arată celelalte 2 comentarii