Usted podría utilizar template_redirect como se muestra arriba, pero eso requerirá de salida, y se pisotea todo lo demás que WordPress normalmente haría para encontrar la plantilla actual. Es posible que desee dejar que eso suceda y luego aplicar la lógica a la plantilla actual.
El uso de algunos de lo que está arriba ...
add_action('template_include', 'mcd_set_template');
function mcd_set_template() {
return locate_template('templatename.php');
}
Eso es bastante simple, también puede pasar una matriz a locate_template() para definir una jerarquía. Si tuviera que usar 'template_redirect como se muestra arriba, aún debería usar locate_template, y así es como.
add_action('template_redirect', 'mcd_set_template');
function mcd_set_template() {
/**
* Order of templates in this array reflect their hierarchy.
* You'll want to have fallbacks like index.php in case yours is not found.
*/
$templates = array('templatename.php', 'othertemplate.php', 'index.php');
/**
* The first param will be prefixed to '_template' to create a filter
* The second will be passed to locate_template and loaded.
*/
include(get_query_template('mcd', $templates));
exit;
}
Por último, la mejor manera sería filtrar tipos específicos en lugar de toda la jerarquía. Por ejemplo, podría filtrar 'category_template' o 'page_template'. Eso sería más específica, se evitaría jugar con toda la jerarquía plantilla si no quiere - y le permite hacer más de WordPress parte del trabajo pesado
Por ejemplo:
add_filter('category_template', 'filter_category_template');
function filter_category_template($template){
/* Get current category */
$category = get_queried_object();
/* Create hierarchical list of desired templates */
$templates = array (
'category.php',
'custom-category-template.php',
'category-{$category->slug}.php',
'category-{$category->term_id}.php',
'index.php'
);
return locate_template($templates);
}
Puede, Por supuesto, cree esa matriz de plantillas jerárquicas cada vez que use locate_template(). Con este método, es fácil ver con qué facilidad podría crear todo tipo de jerarquías muy detalladas y específicas, ya sea como parte o separada de la jerarquía de plantillas nativa.
Lo sentimos, llamar a exit() o die() definitivamente no es una opción, porque mata el script una consulta antes de lo que debería ... Necesita filtrar template_loader.php @ line 42 –
Tenga en cuenta la palabra * correctamente * en el título: lo que hace el código que ha pegado es bastante cojo. ¿Por qué? Debido a que hook template_redirect ocurre antes de que el cargador de plantillas decida qué plantilla cargar ... –
He visto en BuddyPress bug-tracker que su sugerencia fue utilizada anteriormente, pero con una prioridad de 999, en lugar de la predeterminada 10. –