Я хочу использовать функцию поиска wordpress, но я хочу, чтобы она только просматривала мои сообщения в блоге и исключала мои статические страницы из запроса. Как это сделать? Я не против использования плагина.
Wordpress Search Функция только для поиска сообщений
Ответ 1
На этой странице форума wp есть множество различных примеров того, как это сделать, в зависимости от того, где вы хотите отредактировать свой сайт (index.php или wp-includes/query.php - это ваши варианты, которые я считаю):
http://wordpress.org/support/topic/possible-search-only-posts-exclude-pages
Ответ 2
Ответ здесь
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');
?>
Ответ 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>;