Intereting Posts
Измените значение настраиваемого поля из последнего сообщения из формата «видео»? Как сохранить данные из отправленной формы из виджета Как показать под заголовками полный путь к категории? Посты запросов в соответствии с определенными значениями метаданных Напомните пользователю об их учетной записи, если они не использовали его в течение 6 месяцев Справка по статическому блогу на главной странице в блоге Добавить что-то к началу содержимого Получение списка категорий для пользовательских типов сообщений Плагин WPML Не отображает многоязычные меню Показать последние сообщения в формате таблицы Можно ли предварительно установить содержимое виджета с помощью скрипта плагина? Понимание и использование did_action () в условном выражении Хороший рейтинговый плагин, который не зависит от внешней службы? Как обновить постоянную ссылку повсюду для пользовательского типа сообщений? Извлечение показанного изображения из ссылки, упомянутой в сообщении блога

Переопределение файла шаблона 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'); 

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