我对搜索查询有问题。任何时候您提出其他查询,例如:
我的网站。com/?s=wordpress&;post\\u类型=第页
我的网站。com/?s=wordpress&;post\\u type=页面,post
我的网站。净/?s=wordpress&;cat=1
我的网站。净/?s=wordpress&;post\\U type=post&;标记=genesis post
我的网站。净/?s=wordpress&;post\\U type=post&;标签=论文帖子
它应该在特定范围内进行搜索(帖子类型、类别、标签)。
在我的例子中,无论我把什么作为附加参数,它似乎都不起作用,它将显示包含我正在搜索的单词的所有结果。
在我的帖子类型中,我有query_var
设置为true
所以在理论上,它应该是有效的。
我的搜索。php循环如下所示
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<div class="post">
<?php if ( \'post\' == get_post_type() ) : ?>
<p class="category"><?php the_category(\' \'); ?></p>
<?php else : ?>
<p class="category">Resource</p>
<?php endif; ?>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<?php the_excerpt(); ?>
</div><!-- /post -->
<?php endwhile; ?>
在我的searchform中使用隐藏输入。php也不起作用,
<form method="get" id="searchform" action="<?php bloginfo(\'url\'); ?>" class="search">
<input type="text" class="field" name="s" id="s" />
<input type="submit" class="submit" name="submit" value="Go" />
<input type="hidden" name="post_type" value="myposttype" />
</form>
它仍然会搜索普通帖子,而不仅仅是在myposttype CPT中。
知道为什么搜索查询不起作用吗?感谢您的帮助。
最合适的回答,由SO网友:Milo 整理而成
我已经发现了post_type
不会将搜索限制为该类型,只会将该类型添加到已搜索的数组中。
要构建复杂的搜索查询,您可以使用钩子pre_get_posts
并执行一些查询操作。
对于一个简单的示例,首先我添加自己的查询变量以传递到WordPress的已知查询变量数组:
function wpa53029_query_vars( $query_vars ){
$query_vars[] = \'my_type\';
return $query_vars;
}
add_filter( \'query_vars\', \'wpa53029_query_vars\' );
然后设置表单以传递post类型,如:
我的网站。com/?s=wordpress&;my\\u type=页面
我的网站。com/?s=wordpress&;my\\u type=页面,mycustomtype
然后在查询数据库之前添加一些代码来拦截该查询变量,并设置post类型:
function wpa53029_pre_get_posts( $query ){
if( isset( $query->query_vars[\'my_type\'] ) ){
$types = explode( \',\', $query->query_vars[\'my_type\'] );
$query->set( \'post_type\', $types );
}
return $query;
}
add_action( \'pre_get_posts\', \'wpa53029_pre_get_posts\' );
为了进行调试,请在
search.php
模板来查看如何设置所有内容,以及WordPress生成的用于查询数据库的实际SQL查询。WordPress使用
$wp_query
作为保存主查询的全局变量:
<pre>
<?php print_r( $wp_query ); ?>
</pre>