Исключение страниц из результатов поиска WordPress

29 апр. 2014 г., 19:27:34
Просмотры: 13.5K
Голосов: 5

Как исключить страницы для авторизованных пользователей из результатов поиска WordPress?

1
Комментарии

Вы уже искали на сайте? Что вы пробовали? Где у вас возникли трудности? Пожалуйста, [отредактируйте] свой пост, добавив информацию о ваших попытках. Спасибо.

kaiser kaiser
29 апр. 2014 г. 20:09:52
Все ответы на вопрос 3
3
18

Добавьте этот код в файл functions.php вашей дочерней темы, используя редактор кода, например Notepad++.

Вам потребуется заменить ID страниц в коде на свои собственные.

Исключение определенных страниц из результатов поиска

add_filter( 'pre_get_posts', 'exclude_pages_search_when_logged_in' );
function exclude_pages_search_when_logged_in($query) {
    if ( $query->is_search && is_user_logged_in() )
        $query->set( 'post__not_in', array( 1, 2, 3, 4, 5 ) ); 

    return $query;
}

Исключение всех страниц из результатов поиска

add_action('pre_get_posts','exclude_all_pages_search');
function exclude_all_pages_search($query) {
    if (
        ! is_admin()
        && $query->is_main_query()
        && $query->is_search
        && is_user_logged_in()
    )
        $query->set( 'post_type', 'post' );
}

Источник http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts#Exclude_Pages_from_Search_Results

29 апр. 2014 г. 20:07:47
Комментарии

Возможно, вам также понадобится проверка $query->is_main_query() при исключении определенной страницы.

Z. Zlatev Z. Zlatev
4 окт. 2015 г. 16:27:35

я также хотел больше, чем просто записи. $query->set('post_type', array( 'post', 'OTHER_POSTTYPE' ) );

Adeerlike Adeerlike
9 нояб. 2015 г. 14:37:56

Может кто-нибудь, пожалуйста, прокомментировать вторую функцию, чтобы я мог понять, что делает каждая часть. Спасибо :)

Pete Pete
18 апр. 2016 г. 16:12:13
1
-1

Добавьте следующий код в файл functions.php вашей темы

Этот код отлично работает на сайте моего клиента.

//Исключить всё, кроме записей, из поиска WordPress

if (!is_admin()) {
    function wse_search_filter($query) {
        if ($query->is_search) {
            $query->set('post_type', 'post');
        }
        return $query;
    }
    add_filter('pre_get_posts','wse_search_filter');
}
31 дек. 2019 г. 14:28:02
Комментарии

Чем это отличается / лучше, чем опубликованный и принятый ответ?

kero kero
31 дек. 2019 г. 14:35:14
0
-2

Вы можете использовать этот код в файле вашей темы functions.php. Обратите внимание, что я не тестировал этот код.

add_filter( 'pre_get_posts', 'SearchFilter' );
function SearchFilter( $query ) {
    if ( $query->is_search ) {
        $query->set( 'post__not_in', array( 2, 5, 12, 14, 20 ) );
    }

    return $query;
}

Идея взята с WPBeginner.

Условия использования на момент написания: "(...) Вы можете ссылаться на наши сниппеты и хаки в своих блогах/сайтах при условии, что вы указываете полную ссылку на оригинальную статью.

29 апр. 2014 г. 19:45:14