Кастомный тип записи не отображается в результатах поиска

Вопрос или проблема

У меня есть пользовательский тип записи, который я хотел бы сделать доступным для поиска (я использую плагин поиска 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. Однако, как вы упомянули, вам не хватает некоторых настроек в функции регистрации пользовательского типа записей.

Вот что вам следует сделать:

  1. Проверьте регистрацию пользовательского типа записей: Во-первых, убедитесь, что вы добавили параметр 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'
           )
       );
    }
  2. Обновите параметры запроса поиска: Убедитесь, что ваш фильтр 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; 
    }
  3. Проверьте наличие записей: Убедитесь, что у вас действительно есть записи в пользовательском типе project, которые могут быть обнаружены при поиске.

  4. Проверьте кэширование: Иногда результаты могут не обновляться из-за кэширования. Если вы используете кэширование на сайте (например, через плагин кэширования), попробуйте очистить кэш.

  5. Настройки плагина Relevanssi: Если вы используете плагин Relevanssi, убедитесь, что он настроен на индексацию вашего пользовательского типа записей. Перейдите в настройки Relevanssi и проверьте, чтобы project был выбран в настройках индексации.

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

Оцените материал
Добавить комментарий

Капча загружается...