Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<?php if (is_search() && ($post->post_type=='page')) continue; ?>

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

Ответ 6

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

   global $wp_query;    
   $args = array_merge( $wp_query->query, array( 'post_type' => 'post' ) );  
   query_posts( $args );

Ответ 7

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

Ответ 8

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

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');

Ответ 9

 '<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>;