Здравствуйте, мне нужно подключить некоторые категории (рубрики) в отдельные шаблоны.
Например у меня есть две категории с id 24 и 27 и я их хочу подключить в отдельные шаблонные файлы которые назвал features.php и portfolio.php пытаюсь подключить через function.php с помощью фильтра template_include, но почему-то не проходит проверка на тег-функцию is_category и не выполняется скрипт
if (is_category(['24']) || is_category(['27'])){
function my_template() {
if( is_category( 27 ) ){
return get_template_directory() . '/portfolio.php';
}
if( is_category( 24 ) ){
return get_template_directory() . '/features.php';
}
}
add_filter('template_include', 'my_template');
}
Но если убрать проверку if (is_category(['24']) || is_category(['27'])){
то в таком случае код срабатывает и подключаются нужные категории в нужных шаблонах, но при этом не работают остальные шаблоны сайта ни index.php, ни category.php, ни single.php ни любой другой.
И что странно если убрать проверку if (is_category(['24']) || is_category(['27'])){ то код ниже отрабатывает и получается
if( is_category( 27 ) ){
return get_template_directory() . '/portfolio.php';
}
этот код срабатывает хотя здесь такая же проверка if( is_category( 27 ) ) ... В чем ошибка?
Ошибка в том, что вы не учитываете процесс загрузки WordPress. Код functions.php исполняется задолго до формирования главного цикла WordPress, а именно тогда устанавливаются переменные, которые способны "правильно ответить на вопрос" is_category(). Другими словами, во время выполнения вашего
if (is_category(['24']) || is_category(['27'])){
WordPress ни сном ни духом не в курсе, какие там категории существуют.
но при этом не работают остальные шаблоны сайта
Естественно, потому что вы гробите шаблон, возвращая из своей функции null. Читайте документацию.
В общем, надо так:
function my_template( $template ) {
if( is_category( 27 ) ){
return get_template_directory() . '/portfolio.php';
}
if( is_category( 24 ) ){
return get_template_directory() . '/features.php';
}
return $template;
}
add_filter('template_include', 'my_template');
которые назвал features.php и portfolio.php
Неправильно назвал. Нужно category-{slug}.php или category-{id}.php
См https://codex.wordpress.org/%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2#.D0.9E.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5_.D1.80.D1.83.D0.B1.D1.80.D0.B8.D0.BA.D0.B8
И не нужно в коде никаких условий выбора рубрик.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей