Функция поиска Wordpress только для поиска сообщений


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

Author: Sourav Ghosh, 2010-11-16

9 answers

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

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

 3
Author: wajiw, 2010-11-16 20:59:59

Ответ здесь

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');
?>
 36
Author: THRIVE, 2012-03-27 08:22:05

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

 12
Author: Marcos, 2013-03-08 02:14:33

Изложенные решения являются плохими. Редактирование ядра препятствует возможности обновления установки 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 гарантирует, что будут возвращены только сообщения.

 2
Author: Gavin, 2010-11-16 21:31:02
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<?php if (is_search() && ($post->post_type=='page')) continue; ?>

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

 1
Author: fomicz, 2010-11-16 21:03:00

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

   global $wp_query;    
   $args = array_merge( $wp_query->query, array( 'post_type' => 'post' ) );  
   query_posts( $args );
 0
Author: simanchala, 2014-08-05 03:56:21

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

 0
Author: Hmayak Tigranyan, 2015-02-02 21:13:38

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

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');
 0
Author: Gustavo, 2015-09-04 17:24:37
 '<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
Author: Gowthaman, 2017-05-23 13:51:59