我的网站上有几个搜索表单,我希望它们显示不同的结果。我的网站有一个非常严格的层次结构,父网站上的搜索表单应该只显示其子页面的结果。
我的计划是在包含特定页面id的不同父页面上包含不同的隐藏字段。在search.php
然后我想处理结果,过滤掉与父页面无关的页面和帖子。
有没有一种简单的方法可以实现这一点?
提前谢谢。
EDIT 1<这是我的search.php
<?php
if (have_posts()){
while(have_posts()){
the_post(); ?>
<div>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
<p><?php echo get_the_author(); ?> - <?php echo get_the_date(); ?></p>
<p><?php echo get_the_excerpt(); ?></p>
</div>
<?php
}
} else{ ?>
<h3>Sorry</h3>
<p>We are sorry but we could not find any matching articles on our site. Please try again with an other search request.</p>
<?php
get_search_form ();
}
?>
以及
searchform.php
:
<form role="search" method="get" id="searchform" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
<label>Search...</label>
<input type="text" name="s" id="s" value="<?php echo get_search_query(); ?>" placeholder="Search..." />
<input type="hidden" name="post_parent" value="<?php echo (int)get_the_ID(); ?>" />
<button type="submit"><i class="fa fa-search" aria-hidden="true"></i></button>
</form>
EDIT 2
我还补充道
<?php wp_reset_query(); ?>
在
if(have_posts()){}
. 这不会导致任何变化。页面仍会显示。
SO网友:Tom J Nowell
而pre_get_posts
过滤器将允许您在主查询发生之前修改它,允许您添加额外的要求,在这种情况下,这是不必要的!您可以使用URL和搜索表单来完成这一切
首先,将查询变量传递到WP_Query
可以在URL中使用。post_parent
成为您想要的查询变量。
如果我们有这个:
<form action="/" method="get">
<input type="text" name="s" />
<input type="hidden" name="post_parent" value="<?php echo (int)get_the_ID(); ?>"/>
<input type="hidden" name="post_type" value="page"/>
</form>
然后,任何搜索结果都将限于那些post\\u父级是搜索来源页面的用户。您将看到URL,如
/?s=test&post_parent=123
.
此技巧可用于按类别和作者过滤,例如,搜索类别:
/category/example/?s=test
仅显示日期存档中特定作者的帖子:
/2016/?author=123