2010-06-25 7 views
7

Ho un modello di categoria: categoria-projects.phpFai sottocategorie Wordpress categoria d'uso Template

Questa categoria contiene sottocategorie, ma stanno riferendosi al modello category.php per le istruzioni invece di categoria superiore. Come faccio a fare in modo che le sottocategorie facciano riferimento a modelli di categorie padre nell'ordine a cascata dei riferimenti ai modelli?

* Nota, sto parlando di URL di livello di categoria, non di post.

risposta

12

Un modo per farlo è quello di agganciare in azione template_redirect nel file functions.php:

function myTemplateSelect() { 
    if (is_category() && !is_feed()) { 
     if (is_category(get_cat_id('projects')) || cat_is_ancestor_of(get_cat_id('projects'), get_query_var('cat'))) { 
      load_template(TEMPLATEPATH . '/category-projects.php'); 
      exit; 
     } 
    } 
} 

add_action('template_redirect', 'myTemplateSelect'); 
+0

Woooooahhhhhh! È fantastico! Esiste un modo per estenderlo ulteriormente e applicarlo a TUTTE le sottocategorie di TUTTE le categorie, piuttosto che dichiararle letteralmente? – Matrym

+0

La risposta di DeadMedic alla domanda successiva dovrebbe funzionare. –

+1

http://stackoverflow.com/questions/3119961/make-all-wordpress-categories-use-their-parent-category-template – Matrym

1

Per quanto ne so; in base alla gerarchia dei modelli wp, category-samplecat.php si applica solo a una categoria con nome slug "samplecat". Quindi non è possibile farlo in questo modo.

Ma nel file category.php (che si applica a tutte le categorie che non hanno un file modello speciale) è possibile effettuare un controllo condizionale se la categoria corrente è un figlio di "progetto" (utilizzando questo metodo nel mio answer in la tua altra domanda) e se è così puoi applicare la stessa struttura di category-projects.php ad essa o includere category-projects.php.

0

la risposta di Richard funziona ma sarà fortemente interferire con altri plugin.

ho trovato un'alternativa migliore usando add_filter & template_include come nell'esempio qui sotto

add_filter('template_include', 'my_callback'); 

function my_callback($original_template) { 
    if (some_condition()) { 
     return SOME_PATH . '/some-custom-file.php'; 
    } else { 
     return $original_template; 
    } 
} 

credito al https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/