Пользовательские типы записей и перенаправление шаблонов
У меня есть два пользовательских типа сообщений (например, post_type_1 и post_type_2), которые я хотел бы перенаправить на независимые шаблоны (single-post_type_1.php и single-post_type_2.php ) для обработки их отображения. Я не хочу помещать шаблоны отображения в папку темы, так как я хочу, чтобы они были автономными в соответствующих папках плагинов.
Как я могу заставить каждого из них зарегистрировать крючок template_redirect, не затрагивая другого? Или я должен использовать другой техника?
В настоящее время я делаю это в плагине 1:
add_action( 'template_redirect', 'template_redirect_1' );
function template_redirect_1() {
global $wp_query;
global $wp;
if ( $wp_query->query_vars['post_type'] === 'post_type_1' ) {
if ( have_posts() )
{
include( PATH_TO_PLUGIN_1 . '/views/single-post_type_1.php' );
die();
}
else
{
$wp_query->is_404 = true;
}
}
}
И это в плагине 2:
add_action( 'template_redirect', 'template_redirect_2' );
function template_redirect_2() {
global $wp_query;
global $wp;
if ( $wp_query->query_vars['post_type'] === 'post_type_2' ) {
if ( have_posts() )
{
include( PATH_TO_PLUGIN_2 . '/views/single-post_type_2.php' );
die();
}
else
{
$wp_query->is_404 = true;
}
}
}
Как только я зарегистрирую крючок template_redirect плагина 2, плагин 1 больше не работает.
Я что-то упускаю?
Как лучше всего это сделать?
1 answers
Для этого следует использовать фильтр template_include:
add_filter('template_include', 'wpse_44239_template_include', 1, 1);
function wpse_44239_template_include($template){
global $wp_query;
//Do your processing here and define $template as the full path to your alt template.
return $template;
}
template_redirect
это действие вызывается непосредственно перед отправкой заголовков для вывода отрисованного шаблона. Это удобный крючок для выполнения 404 перенаправлений и т. Д... но не следует использовать для включения других путей к шаблонам, так как WordPress делает это изначально с фильтром "template_include".
template_include
и single_template
крючки имеют дело ТОЛЬКО с путем шаблона, используемого для отображения содержимого. Это подходящее место для настройте путь к шаблону.
Обновление из комментария @Chipbennett:
single_template
был удален с 3.4. Вместо этого используйте {posttype}_template.