Как подвязать шаблон к категории с админки?
В общем
на сайте для рубрик будет несколько шаблонов
прикрутить можно так archive-катерогия.php
но нужно как то по другому, с возможностью с админки назначить шаблон для определенной категории
т.е будет 3 разных шаблона
а вот как реализовать выбор и прикреплениен с админки его?
Дополнительно:
Через ACF добавить select с нужными параметрами, в самом шаблоне archive.php проверять и в зависимости от выбранного селекта подрубать нужный шаблон
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Подвязать шаблон к категории «из админки» можно через term meta: у категории появляется поле выбора шаблона, а на фронте шаблон читает это значение и подключает нужную разметку. Править WordPress core для этого не нужно.
Добавить поле на экран редактирования категории:
add_action('category_edit_form_fields', function ($term) { $template = get_term_meta($term->term_id, 'category_template_type', true); ?> <tr class="form-field"> <th scope="row"><label for="category_template_type">Шаблон</label></th> <td> <select name="category_template_type" id="category_template_type"> <option value="default" <?php selected($template, 'default'); ?>>Обычный</option> <option value="landing" <?php selected($template, 'landing'); ?>>Лендинг</option> <option value="compact" <?php selected($template, 'compact'); ?>>Компактный</option> </select> </td> </tr> <?php });
Сохранение:
add_action('edited_category', function ($term_id) { if (isset($_POST['category_template_type'])) { update_term_meta($term_id, 'category_template_type', sanitize_key($_POST['category_template_type'])); } });
А в
category.phpили через фильтрtemplate_includeподключайте нужный файл. Главное — оставить fallback на обычный шаблон, чтобы категория не падала, если поле пустое или шаблон удалён.Более правильный вариант — не подключать файлы напрямую из значения поля, а сопоставлять разрешённые варианты с конкретными файлами. Так вы не получите небезопасный include и не сломаете сайт из-за случайного значения в базе:
add_filter('template_include', function ($template) { if (! is_category()) { return $template; } $term = get_queried_object(); $type = get_term_meta($term->term_id, 'category_template_type', true); $templates = [ 'landing' => get_stylesheet_directory() . '/category-landing.php', 'compact' => get_stylesheet_directory() . '/category-compact.php', ]; if (isset($templates[$type]) && file_exists($templates[$type])) { return $templates[$type]; } return $template; });
Так в админке редактор выбирает понятный вариант, а код сам решает, какой файл подключить. Если значение пустое, категория продолжит открываться через стандартный
category.phpилиarchive.php. Это безопаснее, чем создавать десятки файлов видаcategory-slug.phpи потом вручную помнить, какая рубрика где используется.