我的自定义帖子类型的自定义空结果页面

时间:2018-01-26 作者:Dani Aguado

我一直在寻找这个问题的解决方案,但找不到正确的答案。

根据老板的要求,我正在为我的网站开发一个定制的知识库插件。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创建这么大的插件,所以我开始学习。提前谢谢。

2 个回复
最合适的回答,由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 在函数名中:)

SO网友:onebc

这不是一个非常深入的答案,我不确定这是否适用于您的特定插件场景,但在我看来,与其在没有结果的情况下尝试重定向到另一个目标,不如直接在结果目标处处理它?例如,为什么不使用have\\u posts观察是否有任何帖子(结果),如果没有,则为用户提供再次搜索wiki的方法?

结束

相关推荐

Search Issue in the theme

如果我的理解没有错的话☻search.php 负责渲染部分和serachform.php 负责触发搜索事件,对吗?示例searchform.php 可能看起来像这样→<form role=\"search\" method=\"get\" class=\"search-form\" action=\"<?php echo home_url( \'/\' ); ?>\"> <label> <span class=\"scree