Visualizzazione dell'archivio delle categorie dei custom post type

4 lug 2012, 18:24:10
Visualizzazioni: 24.9K
Voti: 6

Sono terribilmente in ritardo sulla festa dei Custom Post Type e ho iniziato a usarli solo di recente, quindi mi scuso se le mie domande sembrano idiote, ma non riesco a trovare una risposta alla mia domanda.

Ho impostato un custom post type chiamato actors con alcuni valori di campi personalizzati e (fondamentalmente) sto usando le categorie standard per separare questi attori in elenchi di uomini, donne e bambini:

'taxonomies' => array('category', 'post_tag')

...poiché pensavo che sarebbe stato un modo molto più pulito e ordinato di... beh, categorizzare gli attori. Tuttavia, sono completamente bloccato su come visualizzare effettivamente queste categorie in qualsiasi modo, forma o formato.

Ho un file personalizzato archive-actors.php che visualizza tutti gli attori, ma voglio essere in grado di filtrarli per categoria; ad esempio visualizzare solo gli uomini. Tuttavia, se provo con un URL standard come mysite.com/category/actors/men ottengo solo

Spiacenti, ma non ci sono ancora post nella categoria Uomini.

La stessa cosa accade se provo semplicemente mysite.com/category/men - in nessuno dei due casi viene utilizzato il template archive-actors.php.

Qualcuno può aiutarmi a dissipare la mia nebbia mentale e indicarmi la direzione giusta per poter filtrare questi fastidiosi attori?

Modifica:

Come accenna @mrwweb qui sotto (e ho dimenticato di menzionare che ci avevo provato), il seguente codice può essere aggiunto al file functions.php:

function query_post_type($query) {
    $post_types = get_post_types();

    if ( is_category() || is_tag()) {

        $post_type = get_query_var('actors');

        if ( $post_type ) {
            $post_type = $post_type;
        } else {
            $post_type = $post_types;
        }

        $query->set('post_type', $post_type);

        return $query;
    }
}

add_filter('pre_get_posts', 'query_post_type');

...come riferito qui che funziona, nel senso che visualizzerà i miei custom post type categorizzati nella pagina normale archive.php, ma non utilizza il mio archive-actors.php, che è fondamentale.

5
Commenti

archive-actors.php è il tuo template di archivio del tipo di post, non un template di archivio tassonomico. Questo è un comportamento normale e previsto.

Milo Milo
4 lug 2012 19:16:42

@Milo Capisco. Detto questo, esiste qualcosa come un archivio tassonomico personalizzato?

indextwo indextwo
4 lug 2012 19:34:47

esiste, ma è specifico per una tassonomia personalizzata. Se vuoi semplicemente forzare l'uso di archive-actors.php per le categorie, vedi la mia risposta

Milo Milo
4 lug 2012 19:48:50

Non usare get_query_var(), usa $query->get(). Inoltre - vuoi che questo influisca solo sulla query principale? In tal caso dovresti aggiungere un controllo $query->is_main_query() insieme a (is_category() || is_tag())

Stephen Harris Stephen Harris
4 lug 2012 19:53:35

6 anni dopo, questa è una domanda stupida e dimostra quanto fosse scarsa la mia comprensione dei CPT. Mi sto facendo degli occhiatacce abbastanza pesanti in questo momento.

indextwo indextwo
16 apr 2018 21:18:45
Tutte le risposte alla domanda 4
0

Puoi forzare l'uso del tuo template per le categorie con il filtro category_template:

function wpa57439_category_template( $templates = '' ){
    if( !is_array( $templates ) && !empty( $templates ) ) {
        $templates = locate_template( array( 'archive-attori.php', $templates ), false );
    } 
    elseif( empty( $templates ) ) {
        $templates = locate_template( 'archive-attori.php', false );
    }
    else {
        $new_template = locate_template( array( 'archive-attori.php' ) );
        if( !empty( $new_template ) ) array_unshift( $templates, $new_template );
    }
    return $templates;
}
add_filter( 'category_template', 'wpa57439_category_template' );

adattato da Filter Hierarchy nel codex.

4 lug 2012 19:49:24
2

Questo è il comportamento previsto per gli archivi delle categorie. Come trovato qui nei forum di Supporto, il seguente snippet dovrebbe risolvere il tuo problema (basta cambiare "article" con il tuo tipo di post):

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
  if(is_category() || is_tag()) {
    $post_type = get_query_var('post_type');
    if($post_type)
        $post_type = $post_type;
    else
        $post_type = array('post','articles','nav_menu_item');
    $query->set('post_type',$post_type);
    return $query;
    }
}

AGGIORNAMENTO: Ops. Ho preso lo snippet sbagliato. Volevo usare questo.

4 lug 2012 18:34:37
Commenti

Da solo quel frammento di codice non farà nulla; c'è una parentesi estranea alla fine e $query non è definito. Avevo trovato il thread a cui ti riferivi prima e l'ho provato nel contesto di un filtro pre_get_posts nel mio file functions.php; questo sembra funzionare, ma non utilizza il mio template personalizzato archive-attori.php, il che è frustrante.

indextwo indextwo
4 lug 2012 18:55:07

Il link al thread è sbagliato in diversi punti...

Stephen Harris Stephen Harris
4 lug 2012 19:45:42
0

In alternativa, puoi aggiungere una nuova regola wp_rewrite per creare una nuova struttura URL per visualizzare solo gli articoli in un determinato CPT e categoria. Qualcosa come il .gist che ho pubblicato qui:

[modifica: non posso incorporare .gists quindi ecco il codice e il link]

/**
* Questo potrebbe essere estrapolato e utilizzato per tag o qualsiasi altra tassonomia.
*/

add_action('init', 'category_cpt_rewrites');

function category_cpt_rewrites() {
    $custom_post_types = array('video', 'audio', 'photo', 'file'); //alcuni esempi di post type
    foreach ( $custom_post_types as $post_type ) {
        $rule = '^' . $post_type . '/category/(.+?)/?$';
        $rewrite = 'index.php?post_type=' . $post_type . '&category_name=$matches[1]';
        add_rewrite_rule($rule,$rewrite,'top');
    }
}

//assicurati di svuotare le regole
//questo prenderà la seguente struttura URL (esempio con CPT video e categoria politica) -> video/category/politica e restituirà gli articoli appartenenti alla categoria politica che sono nel custom post type "video".

//nota che se vuoi che questo sia veramente efficace, dovrai creare una funzione template personalizzata "the_category()" o simile per restituire la corretta struttura URL per un elenco di categorie appartenenti a un articolo di custom post type.
28 ott 2012 19:59:34
0

Template per Tassonomie

https://developer.wordpress.org/themes/template-files-section/taxonomy-templates/#custom-taxonomy

Quando lo slug della tua tassonomia di categoria è "actors-category":

Crearlo dal template di categoria: taxonomy-actors-category.php

23 mar 2023 21:52:36