Подключение шаблонов в Wordpress

146
22 апреля 2018, 21:57

Здравствуйте, мне нужно подключить некоторые категории (рубрики) в отдельные шаблоны.

Например у меня есть две категории с 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 ) ) ... В чем ошибка?

Answer 1

Ошибка в том, что вы не учитываете процесс загрузки 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');
Answer 2

которые назвал 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

И не нужно в коде никаких условий выбора рубрик.

READ ALSO
Нужен совет по хранению фотографий для сайта обьявлений

Нужен совет по хранению фотографий для сайта обьявлений

Есть небольшой проект - сайт с объявлениями, где есть объявление и фотографии к немуЯ расскажу как сделал обработку и хранение фотографий,...

132
Помогите php mysql

Помогите php mysql

Помогите пожалуйста, есть скрипт и всё такое, он выводит новости из ДБ, мне надо что бы была возможность, добавлять в таблицу лайк, типо имеется...

132
Замена символов в строке (PHP)

Замена символов в строке (PHP)

Есть строкаЕсть массив, в котором записанно все вот так: "a" => "****",

145
GET request in php

GET request in php

Когда я посылаю в ссылке что то вроде href="topicphp?language=c++", на страницу topic

149