Custom Post Types nelle Pagine delle Categorie

22 feb 2011, 19:47:27
Visualizzazioni: 43.2K
Voti: 6

Sto lavorando con un custom post type che utilizza le normali categorie di WordPress.
Sono in grado di modificare il mio template di categoria per visualizzare i miei custom post types esattamente come voglio.

Il problema è che, una volta fatto questo, anche i normali post del blog vengono influenzati.

Naturalmente posso limitare sia i normali post del blog che il post type a una sola categoria e creare un category-ID.php per lavorare solo con quella categoria.

Ma mi chiedo se esiste una soluzione più flessibile?
È possibile creare template di categoria specifici per i diversi tipi di post, cioè uno per mostrare i post normali, uno per mostrare i custom post types, ecc?

È possibile tutto questo? Se no, qual è il modo migliore per aggirare questo problema?

1
Commenti

Ho trovato una soluzione Il tuo template per la tassonomia personalizzata dovrebbe chiamarsi taxonomy-{taxonomy}.php. Ad esempio, se la tua tassonomia si chiamasse "cooking-categories" dovresti nominare il tuo file taxonomy-cooking-categories.php.

Kiran Kumar Kadavakollu Kiran Kumar Kadavakollu
4 apr 2019 11:34:48
Tutte le risposte alla domanda 4
0

Per i custom post type con tassonomia personalizzata, puoi creare un template specifico per quella tassonomia. Il tuo template per la tassonomia personalizzata dovrebbe chiamarsi taxonomy-{taxonomy}.php. Ad esempio, se la tua tassonomia si chiama "categorie-cucina", dovresti nominare il tuo file taxonomy-categorie-cucina.php.

Puoi trovare maggiori informazioni sui template file per gli archivi speciali di tassonomia nel codex qui: http://codex.wordpress.org/Template_Hierarchy#Custom_Taxonomies_display

22 feb 2011 20:13:13
0

Puoi basarti sul tipo di post in questo modo: supponi di avere category.php per i post regolari e your-custom-type-category.php per i post del tuo tipo personalizzato, quindi aggiungi semplicemente questo al tuo category.php regolare all'inizio.

<?php if (have_posts()){
    the_post();
    if( 'your_custom_type' == get_post_type( $post ) ) {
        rewind_posts();
        get_template_part('your-custom-type-category');
        exit();
    }
    rewind_posts();
}
?>

E ora ogni volta che viene richiesta una categoria, controllerà il tuo tipo di post personalizzato e, se trovato, utilizzerà your-custom-type-category.php come template, mentre tutti i post regolari verranno visualizzati utilizzando category.php senza modifiche.

Spero questo sia d'aiuto

22 feb 2011 20:36:29
0

Ciao @Kelvin Jayanoris:

C'è un motivo per cui non puoi semplicemente verificare il valore di $post->post_type con un'istruzione if..elseif all'interno del tuo Loop, in questo modo:

<?php if ($post->post_type=='foo'): ?>

   Inserisci qui l'HTML per il post type 'foo'...

<?php else if ($post->post_type=='bar'): ?>

   Inserisci qui l'HTML per il post type 'bar'...

<?php else if ($post->post_type=='post'): ?>

   Inserisci qui l'HTML per il post type 'post'...

<?php endif; ?>

Oppure c'è un motivo per cui non puoi creare la tua gerarchia di nomi di template sotto forma di file come post-foo.php, post-foo.php, post-post.php, sempre all'interno del tuo Loop? Questo codice potrebbe farlo:

<?php include("post-{$post->post_type}.php"); ?>
23 feb 2011 06:51:42
1
-1

Una soluzione più semplice se non vuoi creare nuovi file o passare attraverso il problema di modificare le tue query è usare questo nel tuo functions.php:

function sql_where_clause($sql) {
  if (is_category()) {
    $sql = str_replace("cms_posts.post_type = 'post'", "cms_posts.post_type='post' OR cms_posts.post_type = 'news' OR cms_posts.post_type='event'", $sql); 
  }
  return $sql;
}
add_filter('posts_where', 'sql_where_clause');

Ovviamente, dovrai modificarlo in modo che includa i tuoi custom post type. Ho fatto questo in modo che il mio category.php rispondesse a tutti i custom post type che volevo come se dovessero normalmente essere lì. Risparmia un sacco di problemi.

Modifica: Fai attenzione alla versione di WP su cui usi questo codice. Sembra che le versioni più vecchie di WP utilizzassero wp_posts invece di cms_posts, quindi verifica quali nomi di tabelle devi usare o otterrai risultati strani (praticamente non verrà mostrato nulla)

13 apr 2011 21:18:37
Commenti

Per quanto la mia memoria si estenda, WordPress non ha mai utilizzato cms_ di default e ha sempre usato wp_, anche se quel prefisso può essere cambiato sito per sito. La cosa corretta è usare $wpdb->posts piuttosto che indovinare qualsiasi prefisso specifico.

s_ha_dum s_ha_dum
5 giu 2013 15:53:21