我想使用wordpress搜索功能,但我希望它只搜索我的博客帖子并从查询中排除我的静态页面。这该怎么做?我并不反对使用插件。
答案 0 :(得分:37)
答案就在这里
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');
?>
答案 1 :(得分:14)
只需将<input type="hidden" name="post_type" value="post" />
添加到主题搜索表单...问候语!
答案 2 :(得分:3)
这个wp论坛页面有很多不同的示例,说明如何执行此操作,具体取决于您要编辑站点的位置(index.php或wp-includes / query.php是您认为的选项):
http://wordpress.org/support/topic/possible-search-only-posts-exclude-pages
答案 3 :(得分:2)
概述的解决方案很差。编辑核心会阻碍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'); ?>
可以从函数&amp;中省略参数。打电话,但我觉得它们很有帮助。这一切的关键是隐藏的输入'post_type',它将值传递给查询。默认值post
将确保仅返回帖子。
答案 4 :(得分:1)
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<?php if (is_search() && ($post->post_type=='page')) continue; ?>
试试这个并告诉我是否有效。
答案 5 :(得分:1)
如果您未指定其他帖子类型,此解决方案会使搜索仅检索帖子。如果您在其他搜索字段的隐藏字段中指定自定义帖子类型,则此方法不会产生干扰。
Index
答案 6 :(得分:0)
将查询与全局查询合并。
global $wp_query;
$args = array_merge( $wp_query->query, array( 'post_type' => 'post' ) );
query_posts( $args );
答案 7 :(得分:0)
您可以使用WP搜索http://wpsear.ch/,您可以配置要在结果中显示的帖子类型。
答案 8 :(得分:0)
'<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>;
答案 9 :(得分:0)
如果使用多个搜索表单,则以下代码可用于将特定表单限制为initDefaultData (index, done) {
...
}
个帖子。
post_type
有关更多详细信息:https://wordpress.org/support/topic/limit-a-specific-search-form-to-post-only/