Вы можете использовать template_redirect, как показано выше, но для этого требуется выход, и он попирает все остальное, что WordPress обычно делает для поиска текущего шаблона. Вы можете позволить этому случиться, а затем применить логику к текущему шаблону.
Используя кое-что из вышеперечисленного ...
add_action('template_include', 'mcd_set_template');
function mcd_set_template() {
return locate_template('templatename.php');
}
Это довольно просто, вы также можете передать массив в locate_template () для определения иерархии. Если бы вы использовали 'template_redirect, как показано выше, вы все равно должны использовать locate_template, и вот как.
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;
}
Наконец, лучший способ - фильтровать определенные типы вместо всей иерархии. Например, вы можете отфильтровать 'category_template' или 'page_template'. Это было бы более конкретно, это позволило бы избежать путаницы со всей иерархией шаблонов, если вы этого не хотите - и это позволяет WordPress выполнять большую часть тяжелой работы
Например:
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);
}
Конечно, вы можете создать этот массив иерархических шаблонов в любое время, когда используете locate_template (). Используя этот метод, легко увидеть, как легко можно создавать всевозможные очень подробные и специфичные иерархии как в составе собственной иерархии шаблонов, так и отдельно от нее.