Intereting Posts
Как я могу считать только комментарии гостей? Архив для CPT Включить только одну категорию, но исключить, если она находится в категории из цикла breadcrumb должен показать все страницы и подстраницы Требовать возможности просмотра продукта Woocommerce WordPress add_admin_page не работает, даже параметры правильные? Отключить новые сообщения с уведомлением пользователей Запрос WordPress очень медленный, если order_by multi metabox Использование wp_localize_script для хранения URL-адреса шаблона в переменной, используемой в JS Как добавить кнопку загружаемого изображения (точно так же, как в пользовательском заголовке) в параметрах темы, которые я только что создал? Изменение в медиа-библиотеке влияет на изображения в опубликованных статьях Кнопка «Пред. / След.» С эскизом и текстом субтитров между страницами в однострочном столбце Похожие сообщения – NO plugin Как иметь отдельный раздел для специальной категории сообщений на целевой странице? WP_Query Авторы ИЛИ категории

Переопределение файла шаблона CPT через functions.php

Итак, я пытаюсь переопределить файл шаблона CPT. Проблема в том, что тема, с которой я работаю, настроена странным образом (или, по крайней мере, так, как я не могу понять), и хочет вытащить файл шаблона single-cpt.php, независимо от того, что я делаю. Даже если я назначу часть шаблона для сообщения, single-cpt переопределяет мой выбранный шаблон.

Итак, отлично, я решил переопределить этот шаблон в моих functions.php. После многого охоты, проб и ошибок, я понял это:

function is_post_type($type){ global $wp_query; if($type == get_post_type($wp_query->post->ID)) return true; return false; } function template_override() { if (is_single() && is_post_type('portfolio')){ return locate_template('template-portfolio.php'); } if (is_single() && is_post_type('product')){ return locate_template('woocommerce.php'); } } add_filter('template_include', 'template_override'); 

Это работает … кроме того, что у него был неудачный побочный эффект, теперь он хочет переопределить ВСЕ мои страницы с помощью этого настраиваемого шаблона. Вот почему я добавил этот призыв к файлу шаблона woocommerce темы, потому что сначала я думал, что он просто возился с сообщениями … но NOPE, оказывается, это возится с КАЖДОЙ страницей. Так что, очевидно, я что-то напутал в своем коде … Я просто не могу понять, что. Я попробовал около миллиона других вариантов, чтобы попытаться вызвать этот файл шаблона, и это единственный, который работал до сих пор. К сожалению, это, кажется, превосходит все.

Итак, что мне не хватает?

Solutions Collecting From Web of "Переопределение файла шаблона CPT через functions.php"

Функция template_override() ничего не возвращает, если ваши условия не выполняются, что нарушит все, что не соответствует вашим условиям. Вам необходимо передать существующий шаблон через:

 function wpse_283378_template_override( $template ) { // My conditions. return $template; } add_filter('template_include', 'wpse_283378_template_override'); 

Кроме того, is_post_type() и template_override() являются очень универсальными именами для функций, что увеличивает риск конфликта с другими плагинами и темами, придает им что-то уникальное для вашего проекта.

Определение функции is_post_type() в любом случае является излишним. Просто замените is_single() на is_singular( 'portfolio' ) :

 function wpse_283378_template_override( $template ) { if ( is_singular( 'portfolio' ) ) { $new_template = locate_template( 'template-portfolio.php' ); if ( $new_template != '' ) { return $new_template; } } return $template; } add_filter('template_include', 'wpse_283378_template_override'); 

Обратите внимание, что я также проверял, существует ли файл шаблона, прежде чем возвращать его, таким образом, если он не будет возвращен к умолчанию, а не даст вам белый экран.