2010-06-25 12 views
7

Tengo una plantilla de categoría: categoría projects.phpsubcategorías Wordpress Usar plantilla Categoría

Esta categoría tiene subcategorías, pero se están refiriendo a la plantilla para category.php instrucciones en lugar de la categoría padre. ¿Cómo puedo hacer que las subcategorías se refieran a las plantillas de categoría padre en el orden en cascada de las referencias de plantilla?

* Tenga en cuenta que estoy hablando de direcciones URL de nivel de categoría, no de publicaciones.

Respuesta

12

Una forma de hacer esto es conectar con la acción template_redirect en su archivo 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! ¡Eso es genial! ¿Hay alguna forma de resumirlo más y hacer que se aplique a TODAS las subcategorías de TODAS las categorías, en lugar de declararlas literalmente? – Matrym

+0

La respuesta de TheDeadMedic a su pregunta posterior debería funcionar. –

+1

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

1

Hasta donde sé; de acuerdo con la jerarquía de plantillas wp, category-samplecat.php solo se aplica a una categoría con el nombre slug "samplecat". Entonces no es posible hacerlo de esta manera.

Pero en el archivo category.php (que se aplica a cada categoría que no tiene un archivo de plantilla especial) puede hacer una comprobación condicional si la categoría actual es hija de "proyecto" (usando este método en mi answer para su otra pregunta) y si es así, puede aplicar la misma estructura de category-projects.php o incluir category-projects.php.

0

respuesta de Richard hace el trabajo pero será en gran medida interferir con otros plugins.

He encontrado una mejor alternativa que utiliza add_filter & template_include como el ejemplo a continuación

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; 
    } 
} 

crédito a https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/

Cuestiones relacionadas