Вопрос или проблема
Редактировать: Теперь я узнал, что это Hybrid Core, и, похоже, иерархия шаблонов другая. Тем не менее, я все еще не решил свою проблему ниже.
В дополнение к заголовку. Я думаю, что если я могу выбрать шаблон в админке, он должен учитывать этот выбор. Но он не меняется. Я протестировал другой файл шаблона вместо стандартного, и он работает.
Это функция для добавления моего пользовательского типа поста. Это работает отлично.
add_action( 'init', 'register_cpt_location' );
function register_cpt_location() {
$labels = array(
'name' => _x( 'Места', 'info_location' ),
'singular_name' => _x( 'Место', 'info_location' )
);
$args = array(
'labels' => $labels,
'description' => 'Пользовательский тип поста для местоположения',
'hierarchical' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields', 'revisions', 'page-attributes' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 6,
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => true,
'has_archive' => true,
'query_var' => true,
'can_export' => true,
'rewrite' => array(
'slug' => 'location',
'with_front' => false,
'feeds' => true,
'pages' => true
),
'menu_icon' => 'dashicons-location',
'capability_type' => 'post'
);
register_post_type( 'info_location', $args );
}
Когда я добавляю шаблон для пользовательского типа поста (только для использования на нескольких постах), метабокс появляется с моим новым шаблоном. Тем не менее, живая страница все еще использует стандартный шаблон для пользовательского типа поста.
Стандартный шаблон – “info_location.php”.
Это моя информация для шаблона “info_location-fm.php”.
/*
* Название шаблона: Location-fm
* Тип поста шаблона: info_location
*/
показ показателя для шаблонов (ниже)
новый шаблон выбран и сохранен, все еще не работает (ниже)
в вашем коде:
$labels = array(
'name' => _x( 'Места', 'info_locaiton' ),
'singular_name' => _x( 'Место', 'info_location' )
);
используйте это:
$labels = array(
'name' => _x( 'Места', 'info_location' ),
'singular_name' => _x( 'Место', 'info_location' )
);
В переменной $labels значение массива name имеет другой слуг. Я думаю, это может быть проблемой. Поэтому вы можете исправить это и проверить. Или вы можете использовать плагин для пользовательских типов постов, чтобы легко создать пользовательский тип поста.
Надеюсь, это поможет!
Ответ или решение
Вопрос о том, почему выбраный шаблон для пользовательского типа записи в WordPress не применяется, может быть довольно запутанным, особенно если используется Hybrid Core, который имеет свою иерархию шаблонов. Давайте разберем эту проблему поэтапно и рассмотрим возможные решения.
Проблема
Вы создали пользовательский тип записи info_location
и добавили в него возможность выбора шаблона в административной панели. Тем не менее, несмотря на то что шаблон сохраняется, на живой странице продолжается отображение стандартного шаблона info_location.php
.
Возможные причины и решения
-
Ошибка в метаинформации шаблона:
Убедитесь, что ваш файл шаблонаinfo_location-fm.php
содержит корректные комментарии в заголовке, как вы указали:/* * Template Name: Location-fm * Template Post Type: info_location */
Если здесь есть опечатки или неверные значения, это может вызвать проблемы с выбором шаблона. В вашем случае, стоит проверить, правильно ли указано
Template Post Type
. -
Иерархия шаблонов:
WordPress использует иерархию шаблонов для определения, какой файл загружать. Убедитесь, что ваш пользовательский тип записиinfo_location
действительно позволяет применение пользовательских тем. Проверьте документацию Hybrid Core на наличие каких-либо специфичных для этой темы параметров, которые могут переопределить стандартное поведение. -
Недостаточная поддержка шаблонов:
Возможно, Hybrid Core не поддерживает функционал конкретно для пользовательских типов записей. Убедитесь, что методget_post_template()
правильно работает с вами селектируемым шаблоном. Если он не поддерживает изменения, вам может понадобиться написать кастомную функцию, которая будет проверять и применять ваш шаблон.Например:
add_filter('template_include', 'load_custom_template'); function load_custom_template($template) { if (is_singular('info_location')) { $custom_template = get_post_meta(get_the_ID(), '_wp_page_template', true); if ($custom_template && locate_template($custom_template)) { return locate_template($custom_template); } } return $template; }
-
Проблемы с метаданными:
Убедитесь, что метаданные для записи корректно сохраняются. Иногда очистка кэша или использование плагина для управления кэшированием может помешать отображению актуальной информации. Проверьте это, чтобы исключить кэш как источник проблемы. -
Корректность привязки меток:
В вашем коде есть небольшая, но важная ошибка в метках, которую вы уже упомянули:$labels = array( 'name' => _x('Locations', 'info_location'), // правильное имя метки 'singular_name' => _x('Location', 'info_location') );
Будьте внимательны к синтаксису и проверяйте, чтобы все значения использовали одно и то же название для корректного отображения.
Заключение
Если после выполнения всех шагов данная проблема не будет разрешена, рассмотрите возможность использования дополнительных плагинов для управления пользовательскими типами записей или обратитесь за поддержкой в сообществе. Также стоит обратиться к документации Hybrid Core, где могут быть указаны специфические настройки. Наконец, не забывайте делать резервные копии перед внесением изменений, чтобы избежать потери данных.