使用插件文件夹中的Single.php,而不是默认的模板文件夹

时间:2015-11-30 作者:user3428971

我在想怎么用另一支单曲。我正在制作一个定制插件的php。这是一个自定义的帖子类型。

因为如果人们安装这个插件,他们就不会有定制的单一产品。php在其主题文件夹中。这就是为什么我希望它在插件文件夹中。

有没有办法更改此自定义帖子类型的single的路径。php或安装此插件后自动在主题文件夹中生成文件的方法?

提前感谢

3 个回复
最合适的回答,由SO网友:flomei 整理而成

我想一个钩子template_include 喜欢described here 这可能是一个正确的方法。

代码可以如下所示:

add_filter(\'template_include\', \'my_plugin_templates\');
function my_plugin_templates( $template ) {
    $post_types = array(\'post\');

    if (is_singular($post_types)) {
        $template = \'path/to/singular/template/in/plugin/folder.php\';
    }

    return $template;
}

SO网友:Mark Kaplun

插件不应该有任何不是小部件或短代码的视觉效果。如果你觉得有必要操纵主题文件,那么你很可能做错了。

*总会有例外,比如针对特定主题或做一些与主题无关的事情(如弹出窗口/灯箱),以至于几乎没有机会打破主题或得到糟糕的结果。

根据评论编辑这是一个边界线问题,没有任何白/黑类型的答案。根据你的描述,你应该做一个主题,而不是插件,但我知道你被分配了任务。正确的方法就像woocommerce一样-短代码和小部件显示作为CPT管理的内容,否则您很可能无法很好地处理所有主题

SO网友:kamleshpal

哪里get_custom_post_type_template 是WordPress在检索内容时应调用的函数。请注意,插件定义的过滤器函数必须返回模板文件的完整路径,否则生成的页面将为空。模板文件的条目应与single.php 文件在主题中有。For more information visit the site.

 <?php
    function get_custom_post_type_template($single_template) {
    global $post;

       if ($post->post_type == \'my_post_type\') {
          $single_template = dirname( __FILE__ ) . \'/post-type-template.php\';
       }
    return $single_template;
    }
    add_filter( \'single_template\', \'get_custom_post_type_template\' );
?>