При создании веб-сайта на 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. Независимо от того, решите ли вы изменить запрос, настроить форму поиска или использовать перехватчики и фильтры, эти методы помогут вам достичь цели — исключить определенный контент из индексации поисковых систем.