目标/信息
我正在尝试设置自定义搜索字段和自定义搜索结果页面以显示一类页面。我需要在单独的自定义搜索结果页面上显示这些结果,以便我可以自定义结果的显示方式,而不会影响默认搜索。
对于上下文,我正在设置一个用户可以搜索关键字的图库,相关页面将显示为缩略图网格,每个缩略图链接到包含有关图像的更多信息的页面。
每个包含图片和信息的页面都设置为images
类别下的页面(不是帖子)。
我不确定这是否相关,但在之前的项目中,我设置了默认搜索,以在我的functions.php中使用以下代码排除images
页面(类别ID为30)。我已尝试删除此代码,但这并未影响我在下面描述的问题。
/* Exclude a Category from Search Results */
add_filter( 'pre_get_posts' , 'search_exc_cats' );
function search_exc_cats( $query ) {
if( $query->is_admin )
return $query;
if( $query->is_search ) {
$query->set( 'category__not_in' , array( 30 ) ); // Cat ID
}
return $query;
}
我尝试过什么
我还在学习php,并花了很多时间在这上面无济于事。最近我尝试从this similar question调整一些代码。
我自己生成的自定义搜索表单如下所示:
<form class="search-form" action="<?php echo home_url( '/' ); ?>" method="get">
<input name="s" type="text" placeholder="Search Images" />
<input name="post_type" type="hidden" value="page" />
<input name="category_name" type="hidden" value="images" />
<input alt="Search" type="submit" value="Search" />
</form>
我已将以下代码添加到search.php的顶部以尝试重定向到另一个结果页面,在本例中为search-page.php,如果指定了帖子类型:
<?php
// store the post type from the URL string
$post_type = $_GET['post_type'];
// check to see if there was a post type in the
// URL string and if a results template for that
// post type actually exists
if ( isset( $post_type ) && locate_template( 'search-' . $post_type . '.php' ) ) {
// if so, load that template
get_template_part( 'search', $post_type );
// and then exit out
exit;
}
?>
注意:我直接从上面链接的类似问题中解决了这个问题。
我将search.php复制到search-page.php中,从上面删除了上面的代码。
问题
现在让我们在上面的自定义表单中搜索“marble”(一个image
页面中的一个术语)。 URL看起来正确(http://example.com/%3C?s=marble&post_type=page&category_name=images
),但我得到了404.此外,正常搜索(那些不在自定义表单中)现在将我带到白页 - 甚至不是404.当我删除上面的代码时从functions.php,默认搜索工作正常。 (自定义搜索仍然是404s。)
其他尝试
我也曾几次从Smashing杂志上阅读本指南 - Building An Advanced WordPress Search With WP_Query - 但无法完全找出与我相关的信息。
我已经尝试了其他几十个指南和问题,但其中大多数只涉及单独搜索特定的帖子类型(而不是类别)或从类别的单选按钮中搜索。我无法从中汲取任何有用的解决方案。
对我所尝试的内容有什么调整 - 或完全不同的解决方案 - 这有助于达到预期的效果吗?具体来说,如何为一种类型的网页类别创建自定义搜索表单,从而生成可自定义的单独搜索结果页面(独立于默认搜索结果页面)。
提前致谢。