Filtraggio delle tassonomie personalizzate

15 feb 2013, 23:39:09
Visualizzazioni: 39.8K
Voti: 6

Questo è un cross post dai forum di WordPress, di cui mi scuso, ma è passata quasi una settimana senza ricevere risposta quindi spero che qualcuno qui possa aiutare. Se riceverò una risposta in uno dei due posti, aggiornerò il post con un link.

Sto cercando di estendere le funzionalità del tema personalizzato del mio cliente e sto avendo problemi nel tentativo di far estrarre a query_posts() un elenco di tassonomie personalizzate filtrate per categoria. La creazione del custom post type in functions.php è questa:

//Custom Post Types
add_action('init', 'create_myportfoliotype');
function create_myportfoliotype() {
    $myportfoliotype_args = array(
        'label' => __('Portfolio'),
        'singular_label' => __('Portfolio'),
        'public' => true,
        'show_ui' => true,
        'menu_position' => 5,
        'capability_type' => 'post',
        'hierarchical' => false,
        'publicly_queryable' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false ),
        'can_export' => true,
        'supports' => array(
            'title', 
            'editor', 
            'post-thumbnails',
            'custom-fields',
            'page-attributes',
            'author',
            'thumbnail'
          )
       );
  register_post_type('myportfoliotype',$myportfoliotype_args);
}


//Tassonomie
register_taxonomy("categories", array("myportfoliotype"), array("hierarchical" => true, "label" => "Categoria", "singular_label" => "Categoria", "rewrite" => true));
register_taxonomy( 'tags', array("homepage"), array( 'hierarchical' => false, 'label' => 'Tag', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'specifics', array("myportfoliotype"), array( 'hierarchical' => false, 'label' => 'Specifiche', 'query_var' => true, 'rewrite' => true ) );

Attualmente il sito ha una pagina che estrae tutti i post, poi filtra ciò che è visibile tramite jQuery. La query che estrae i post è questa:

query_posts( array( 'post_type' => 'myportfoliotype', 'paged' => $paged, 'posts_per_page' => 80))

Questo funziona, ma come ho detto estrae tutto. Quello che vogliono ora sono 2 template personalizzati che estraggano solo 2 categorie specifiche ciascuno. Non posso fare il filtraggio tramite jQuery poiché visivamente non funziona in questo caso. Sto cercando di estrarre solo le 2 categorie, ma per qualche motivo nessuna variazione del seguente codice sembra funzionare:

query_posts( array( 'post_type' => 'myportfoliotype', 'paged' => $paged, 'posts_per_page' => 80, 'tag_id' => '9' ))

Tutto quello che ho provato o estrae ancora tutti i post, o non ne estrae nessuno.

P.S. Qualcuno conosce una funzione per visualizzare la query grezza che query_posts genera? Se potessi vedere quale query effettiva viene eseguita con ogni variazione e confrontarla con le informazioni in wp_postmeta, potrebbe aiutare a capire dove si trova il problema.

0
Tutte le risposte alla domanda 1
2
13

Non è una domanda difficile, ma dovresti leggere attentamente il Codex. In particolare la parte tax_query di WP_Query.

La tua chiamata query_posts proposta è errata. Dovrebbe essere così:

query_posts( array(  
    'post_type' => 'myportfoliotype', 
    'paged' => $paged, 
    'posts_per_page' => 80, 
    'tax_query' => array( 
        array( 
            'taxonomy' => 'category', // oppure tag o tassonomia personalizzata
            'field' => 'id', 
            'terms' => array('9') 
        ) 
    ) 
) );

Inoltre, per ottenere una maggiore efficienza nell'uso delle query al database, dovresti considerare di utilizzare il hook pre_get_posts invece di query_posts

16 feb 2013 01:07:48
Commenti

Grazie, ha funzionato una volta corretti gli errori di battitura. Non avevo capito che query_posts accettasse gli stessi parametri di WP_Query, e il parametro tax_query non è elencato nella documentazione di query_posts(). Inoltre, mi dispiace, mi servono ancora 9 punti di reputazione prima di poterti votare, ma lo farei se potessi. :)

Michael VanDeMar Michael VanDeMar
16 feb 2013 06:56:45

Tutto ok, non devi votare, è sufficiente se segni la risposta come corretta ;)

david.binda david.binda
16 feb 2013 12:33:27