Вопрос или проблема
У меня есть пользовательский тип записи, который я хотел бы сделать доступным для поиска (я использую плагин поиска Relevanssi). У меня есть следующий код для добавления пользовательского типа записи:
add_action('init', 'eyewebz_create_post_types');
function eyewebz_create_post_types() {
register_post_type('project',
array( 'taxonomies' => array('category'),
'labels' => $labels,
'has_archive' => true,
'show_in_rest' => true,
'hierarchical' => true,
'public' => true,
'publicly_queryable' => true,
'supports' => array('title', 'editor', 'post-formats', 'page-attributes', 'thumbnail', 'excerpt'),
'menu_icon' => 'dashicons-index-card'
));
}
Этот тип записи должен отображаться в результатах поиска, но я не могу сделать это. Я пытался изменить pre_get_posts, как показано ниже, но все равно не получаю нужные результаты.
add_filter('pre_get_posts', 'extend_search_cpt');
function extend_search_cpt($query)
{
if($query->is_search) {
$query->set('post_type', array('post', 'page', 'project'));
}
return $query;
}
Если я использую var_dump запроса после того, как установил post_type, я вижу, что он включен в запрос, но все равно не получаю никаких пользовательских типов записей в результатах поиска. (Если я использую var_dump запроса до этого, в запросе нет никаких признаков post_type).
Есть идеи, в чем может быть проблема?
Пожалуйста, добавьте exclude_from_search со значением false внутри вашей функции регистрации пользовательского типа записи.
add_action('init', 'eyewebz_create_post_types');
function eyewebz_create_post_types() {
register_post_type('project',
array( 'taxonomies' => array('category'),
'labels' => $labels,
'has_archive' => true,
'show_in_rest' => true,
'hierarchical' => true,
'public' => true,
'publicly_queryable' => true,
'supports' => array('title', 'editor', 'post-formats',
'page-attributes', 'thumbnail', 'excerpt'),
'exclude_from_search' => false,
'menu_icon' => 'dashicons-index-card'
));
}
Ответ или решение
Если ваш пользовательский тип записей не отображается в результатах поиска, вам нужно убедиться, что он правильно зарегистрирован и включен в поисковые запросы. Я вижу, что вы уже добавили код для расширения результатов поиска с помощью фильтра pre_get_posts
. Однако, как вы упомянули, вам не хватает некоторых настроек в функции регистрации пользовательского типа записей.
Вот что вам следует сделать:
-
Проверьте регистрацию пользовательского типа записей: Во-первых, убедитесь, что вы добавили параметр
exclude_from_search
в массив параметровregister_post_type
. По умолчанию этот параметр установлен вtrue
, что означает, что пользовательский тип записей не будет включен в результаты поиска. Убедитесь, что он установлен вfalse
.Вот обновленный код для вашей функции
eyewebz_create_post_types
:add_action('init', 'eyewebz_create_post_types'); function eyewebz_create_post_types() { register_post_type('project', array( 'labels' => $labels, 'taxonomies' => array('category'), 'has_archive' => true, 'show_in_rest' => true, 'hierarchical' => true, 'public' => true, 'publicly_queryable' => true, 'supports' => array('title', 'editor', 'post-formats', 'page-attributes', 'thumbnail', 'excerpt'), 'exclude_from_search' => false, // Убедитесь, что этот параметр установлен в false 'menu_icon' => 'dashicons-index-card' ) ); }
-
Обновите параметры запроса поиска: Убедитесь, что ваш фильтр
pre_get_posts
правильно настроен для включения пользовательского типа записей в результаты поиска. В вашем коде это выглядит правильно, но убедитесь, что этот фильтр находится в области видимости, и больше ничего его не переопределяет.Ваш код для
pre_get_posts
выглядит корректно:add_filter('pre_get_posts', 'extend_search_cpt'); function extend_search_cpt($query) { if ($query->is_search && $query->is_main_query()) { // Также проверьте, что это основной запрос $query->set('post_type', array('post', 'page', 'project')); } return $query; }
-
Проверьте наличие записей: Убедитесь, что у вас действительно есть записи в пользовательском типе
project
, которые могут быть обнаружены при поиске. -
Проверьте кэширование: Иногда результаты могут не обновляться из-за кэширования. Если вы используете кэширование на сайте (например, через плагин кэширования), попробуйте очистить кэш.
-
Настройки плагина Relevanssi: Если вы используете плагин Relevanssi, убедитесь, что он настроен на индексацию вашего пользовательского типа записей. Перейдите в настройки Relevanssi и проверьте, чтобы
project
был выбран в настройках индексации.
После внесения этих изменений и проверок ваш пользовательский тип записей должен отображаться в результатах поиска. Если же проблема сохраняется, возможно, стоит проверить наличие конфликтов с другими плагинами или темами.