Функция поиска Wordpress только для поиска сообщений - PullRequest
12 голосов
/ 16 ноября 2010

Я хочу использовать функцию поиска по wordpress, но я хочу, чтобы она только выполняла поиск в моих сообщениях в блоге и исключала мои статические страницы из запроса. Как это сделать? Я не против использования плагина.

Ответы [ 9 ]

37 голосов
/ 27 марта 2012

Ответ здесь

http://www.shilling.id.au/2011/06/23/wordpress-search-only-show-post-and-not-pages/

<?php
function SearchFilter($query) {
    if ($query->is_search) {
        $query->set('post_type', 'post');
    }
    return $query;
}
add_filter('pre_get_posts','SearchFilter');
?>
15 голосов
/ 08 марта 2013

Просто добавьте <input type="hidden" name="post_type" value="post" /> в форму поиска темы ... привет!

3 голосов
/ 16 ноября 2010

На этой странице форума wp есть несколько примеров того, как это сделать, в зависимости от того, где вы хотите редактировать свой сайт (я полагаю, index.php или wp-includes / query.php - это ваши варианты):

http://wordpress.org/support/topic/possible-search-only-posts-exclude-pages

2 голосов
/ 17 ноября 2010

Изложенные решения плохие. Редактирование ядра препятствует возможности обновления установки WordPress - вам придется повторять это изменение каждый раз, когда вы обновляете, что вы должны делать. Другое решение создает ненужную нагрузку на базу данных путем фильтрации результатов после их получения. Лучшее решение:

В файле functions.php вашей темы добавьте новую функцию для записи формы поиска:

function custom_search_form( $form, $value = "Search", $post_type = 'post' ) {
    $form_value = (isset($value)) ? $value : attribute_escape(apply_filters('the_search_query', get_search_query()));
    $form = '<form method="get" id="searchform" action="' . get_option('home') . '/" >
    <div>
        <input type="hidden" name="post_type" value="'.$post_type.'" />
        <input type="text" value="' . $form_value . '" name="s" id="s" />
        <input type="submit" id="searchsubmit" value="'.attribute_escape(__('Search')).'" />
    </div>
    </form>';
    return $form;
}

Теперь, в шаблоне, где вы хотите форму (или в любых созданных вами виджетах, это можно легко зарегистрировать как виджет), это:

<?= custom_search_form( null, 'Search posts', 'post'); ?>

Аргументы могут быть исключены из функции и вызова, но я считаю их полезными. Ключом ко всему этому является скрытый ввод 'post_type', который передает значение в запрос. По умолчанию post гарантирует, что будут возвращены только сообщения.

1 голос
/ 04 сентября 2015

Это решение позволяет при поиске получать только сообщения, если вы не указали другой тип сообщения. Этот метод не будет мешать, если вы укажете пользовательский тип записи в скрытом поле в другом поле поиска.

function searchFilter($query) {
    if ($query->is_search) {
        if ( !isset($query->query_vars['post_type']) ) {
            $query->set('post_type', 'post');
        }
    }
    return $query;
}
add_filter('pre_get_posts','searchFilter');
1 голос
/ 17 ноября 2010
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<?php if (is_search() && ($post->post_type=='page')) continue; ?>

Попробуйте это и скажите мне, если работает.

0 голосов
/ 23 мая 2017
 '<form role="search" method="get" id="searchform" class="searchform" action="' . esc_url( home_url( '/' ) ) . '">
                <div>
                    <label class="screen-reader-text" for="s">' . _x( 'Search for:', 'label' ) . '</label>
                    <input type="text" value="' . get_search_query() . '" name="s" id="s" />
                    <input type="submit" id="searchsubmit" value="'. esc_attr_x( 'Search', 'submit button' ) .'" />
                </div>'
            </form>; 
0 голосов
/ 03 февраля 2015

Вы можете использовать WP Search http://wpsear.ch/, и вы можете настроить, какие типы записей показывать в результатах.

0 голосов
/ 24 января 2014

Объединить запрос с глобальным запросом.

   global $wp_query;    
   $args = array_merge( $wp_query->query, array( 'post_type' => 'post' ) );  
   query_posts( $args );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...