Można użyć template_redirect jak wykazano powyżej, ale to wymaga wyjścia, a to depcze wszystko, co WordPress normalnie robi, aby znaleźć aktualny szablon. Możesz to umożliwić, a następnie zastosować logikę do bieżącego szablonu.
Korzystanie część tego, co jest powyżej ...
add_action('template_include', 'mcd_set_template');
function mcd_set_template() {
return locate_template('templatename.php');
}
To jest dość proste, można również przekazać tablicę do locate_template(), aby określić hierarchię. Jeśli miałbyś używać 'template_redirect, jak pokazano powyżej, nadal powinieneś używać locate_template, i tak właśnie jest.
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;
}
Wreszcie, najlepszym sposobem byłoby filtrowanie określonych typów zamiast całej hierarchii. Na przykład możesz filtrować "category_template" lub "page_template". To byłoby bardziej szczegółowe, byłoby uniknąć brudząc z całej hierarchii szablonu, jeśli nie chcesz - i pozwala zrobić więcej WordPress podnoszenia ciężkich
Na przykład:
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);
}
Można z Oczywiście utwórz tę tablicę hierarchicznych szablonów za każdym razem, gdy użyjesz locate_template(). Korzystając z tej metody, można łatwo zobaczyć, jak łatwo można tworzyć wszelkiego rodzaju bardzo szczegółowe i szczegółowe hierarchie w ramach lub niezależnie od macierzystej hierarchii szablonów.
Niestety, wywołanie exit() lub die() zdecydowanie nie jest opcją - ponieważ zabija skrypt jedno zapytanie szybciej niż powinno ... Musisz filtrować template_loader.php @ line 42 –
Proszę zwrócić uwagę na słowo * właściwie * w tytule - to, co wkleił kod, jest raczej kiepskie. Czemu? Ponieważ hook template_redirect ma miejsce, zanim szablon ładujący zdecyduje, który szablon wczytać ... –
Widziałem w bug-tracker BuddyPressa, że twoja sugestia była tam wcześniej używana - ale z priorytetem 999 - zamiast domyślnego 10. –