5 способов скрыть один тип сообщения из результатов поиска на вашем веб-сайте с помощью плагина CPT UI

При создании веб-сайта на WordPress вы можете столкнуться с необходимостью скрыть определенный тип сообщений из результатов поиска. Это может быть полезно, если у вас есть определенный контент, который вы хотите скрыть или исключить из индексации поисковых систем. В этой статье мы рассмотрим пять различных методов достижения этой цели с помощью плагина CPT UI, а также примеры кода для каждого метода.

Метод 1. Изменение запроса
Первый метод предполагает изменение запроса, используемого для получения результатов поиска. Используя фильтр pre_get_posts, вы можете изменить параметры запроса, чтобы исключить нужный тип сообщений. Вот пример фрагмента кода:

function exclude_post_type_from_search( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
        return;
    if ( $query->is_search ) {
        $post_type = get_query_var( 'post_type' );
        if ( $post_type && $post_type === 'your_post_type' ) {
            $query->set( 'post_type', '' );
        }
    }
}
add_action( 'pre_get_posts', 'exclude_post_type_from_search' );

Метод 2: настройка формы поиска
Другой подход — настроить форму поиска так, чтобы исключить определенный тип сообщений. Этого можно добиться, изменив функцию get_search_form. Вот пример фрагмента кода:

function customize_search_form( $form ) {
    $post_type = 'your_post_type';
    $form = str_replace( 'type="search"', 'type="search" name="post_type[]" value="' . $post_type . '" ', $form );
    return $form;
}
add_filter( 'get_search_form', 'customize_search_form' );

Метод 3: использование хука действия «pre_get_posts».
Хук действия «pre_get_posts» также можно использовать для исключения определенного типа сообщения из результатов поиска. Вот пример фрагмента кода:

function exclude_post_type_from_search( $query ) {
    if ( ! is_admin() && $query->is_search() && $query->is_main_query() ) {
        $post_type = 'your_post_type';
        $query->set( 'post_type', array( 'post', 'page' ) );
        $query->set( 'post_status', 'publish' );
    }
}
add_action( 'pre_get_posts', 'exclude_post_type_from_search' );

Метод 4: использование крючка фильтра «posts_where».
Хук фильтра «posts_where» позволяет вам изменить запрос SQL, используемый для получения результатов поиска. Вот пример фрагмента кода:

function exclude_post_type_from_search( $where, $query ) {
    global $wpdb;
    $post_type = 'your_post_type';
    if ( $query->is_search && ! is_admin() ) {
        $where .= " AND {$wpdb->posts}.post_type NOT IN ('{$post_type}')";
    }
    return $where;
}
add_filter( 'posts_where', 'exclude_post_type_from_search', 10, 2 );

Метод 5. Использование специального плагина
Если вы предпочитаете создать собственный плагин для реализации этой функции, вы можете использовать следующий фрагмент кода в качестве отправной точки:

/*
Plugin Name: Hide Post Type from Search Results
Plugin URI: https://your-website.com
Description: Hide a specific post type from search results.
Version: 1.0
Author: Your Name
Author URI: https://your-website.com
*/
function hide_post_type_from_search_results() {
    $post_type = 'your_post_type';
    if ( is_search() && ! is_admin() ) {
        set_query_var( 'post_type', array( 'post', 'page' ) );
    }
}
add_action( 'pre_get_posts', 'hide_post_type_from_search_results' );

Используя плагин CPT UI и методы, упомянутые в этой статье, вы можете легко скрыть один тип сообщения из результатов поиска на своем веб-сайте WordPress. Независимо от того, решите ли вы изменить запрос, настроить форму поиска или использовать перехватчики и фильтры, эти методы помогут вам достичь цели — исключить определенный контент из индексации поисковых систем.