我创建了一个自定义的帖子类型,它不会显示在网站的任何地方。但是,我想从搜索表单访问数据。因为将有很多页面,我需要禁用正常搜索中显示的帖子类型,并创建第二个搜索页面,以便仅在自定义帖子类型中搜索关键字。
我读了很多页,人们给出了不同的建议,有时会说要避免某些功能,所以我不确定最新的方法是什么。
我首先将“search.php”剪切并粘贴到两个部分模板中,然后将“search.php”更改为
<?php
if(isset($_GET[\'search-type\'])) {
$type = $_GET[\'search-type\'];
if($type == \'custom-post-type\') {
get_template_part(\'/partials/search-custom-post-type\');
} else{
get_template_part(\'/partials/search-normal\');
}
}
else{
get_template_part(\'/partials/search-normal\');
}
?>
我读到我可以添加以下代码,它将允许我自定义搜索自定义帖子类型。php
$args = array( \'post_type\' => \'custom-post-type-name\' );
$args = array_merge( $args, $wp_query->query );
query_posts( $args );
然而,这没有任何作用。搜索仍然是一样的。
SO网友:WebElaine
对于主搜索页面,您可以使用pre_get_posts
有条件的:
if($query->is_main_query() && $query->is_search && !is_admin()) {
因此,只有当它是主查询,它是搜索查询,并且您不在管理中时,才可以调整查询。设置要索引的任何帖子类型
in the main search query.
下一步,设置自定义搜索。根据您希望如何设置,一个选项是创建一个页面模板,首先检查查询字符串(即提交的搜索)。如果它发现$_GET[\'customsearch\']
参数,通过使用自定义WP\\U查询仅从您的CPT中提取结果来显示搜索结果。如果没有,则显示搜索表单(带有customsearch
作为输入的名称)。
另一种选择是创建一个小部件,您可以将其粘贴到网站上的任何侧栏中,并将表单操作设置为带有自定义页面模板的页面,以便$_GET[\'customsearch\']
为空模板执行wp_redirect
在输出标题/等之前(您可以重定向到主页或任何最相关的页面),但如果有参数,它会显示搜索结果(再次使用自定义WP\\U查询)。