我一直在寻找这个问题的解决方案,但找不到正确的答案。
根据老板的要求,我正在为我的网站开发一个定制的知识库插件。around插件不能满足他的需要,所以我需要创建自己的插件。
我有一个自定义的帖子类型叫做wikicon_recurso
它有自己的分类法、元数据等。
我现在遇到的问题是我自己的“Wiki”中的搜索功能。当有人单击菜单上的“Wikicon”时,它将重定向到存档模板,我已对其进行了修改,以便显示搜索表单和添加到wiki的最后帖子。
当搜索返回结果时,它会重定向到my search-wikicon\\u recurso。php中的插件文件夹,并显示我想要的结果。
I\'m having trouble to modify the template when no results are found. 例如,我有一个“测试”资源,当我找到测试时,我会被重定向到搜索模板,这很酷。但是如果我找到Hello,因为没有结果,我会被重定向到默认的Wordpress/Theme无结果页面,其中搜索表单没有使用post\\u type参数,正在查找所有内容。
How can I modify the destination of empty results to my Search Template, for example, so they can search again?
实际上,在我的插件上,我重定向到如下模板:
add_filter( \'template_include\', \'include_template_function\', 1 );
function include_template_function( $template_path ) {
if ( get_post_type() == \'wikicon_recurso\' ) {
if ( is_singular() ) {
$template_path = plugin_dir_path( __FILE__ ) . \'/single-wikicon_recurso.php\';
}
elseif (is_search()) {
$template_path = plugin_dir_path( __FILE__ ) . \'/search-wikicon_recurso.php\';
}
elseif (is_archive()) {
$template_path = plugin_dir_path( __FILE__ ) . \'/archive-wikicon_recurso.php\';
}
}
return $template_path;
}
这是我在这里找到的其他答案的搜索表。它显示在archive-wikicon\\u recurso上。php和search-wikicon\\u递归。php:
<form role="search" action="<?php echo site_url(\'/\'); ?>" method="get" id="searchform">
<input type="text" name="s" placeholder="Search query"/>
<input type="hidden" name="post_type" value="wikicon_recurso" />
<input type="submit" alt="Search" value="Search" />
</form>
我尝试了这个页面上的多个答案,并在谷歌上进行了进一步的搜索,但我无法做出任何有用的答案。
我不得不说,这是我第一次为Wordpress创建这么大的插件,所以我开始学习。提前谢谢。
最合适的回答,由SO网友:Vlad Olaru 整理而成
问题是,当搜索查询中没有帖子时,WordPress不会在全局WP\\U查询中设置帖子类型(get_post_type()
依赖于此)。因此,当没有搜索结果时,get_post_type()
将返回false,并且将跳过所有自定义模板逻辑。
您还可以考虑查看请求参数,并检查post类型是否存在以及值是否正确。另外,请注意,您没有为您的自定义帖子类型处理404(is_404()
). 以下是您的函数在考虑这两种情况时的外观:
function wikicon_include_templates( $template_path ) {
if ( \'wikicon_recurso\' === get_post_type() || \'wikicon_recurso\' === get_query_var(\'post_type\') ) {
if ( is_singular() ) {
$template_path = plugin_dir_path( __FILE__ ) . \'/single-wikicon_recurso.php\';
}
elseif ( is_search() ) {
$template_path = plugin_dir_path( __FILE__ ) . \'/search-wikicon_recurso.php\';
}
elseif ( is_archive() || is_404() ) {
$template_path = plugin_dir_path( __FILE__ ) . \'/archive-wikicon_recurso.php\';
}
}
return $template_path;
}
add_filter( \'template_include\', \'wikicon_include_templates\', 999, 1 );
以下几点提示:
我在函数中添加了前缀,因为这样做是一种很好的做法(include_template_function
是一个很普通的名字)没有必要包括_function
在函数名中:)如果你想确保没有其他插件或主题会过滤模板并覆盖你的逻辑(并且让你的头撞到墙上想知道为什么它不起作用),你应该使用一个大的优先级数字,比如999,以确保你的逻辑最后执行如果这样做有效,请告诉我。