是否可以在插件中定义一个独立于活动主题的自定义帖子类型模板?

时间:2012-06-19 作者:ZachM

我正在编写一个插件来管理开源项目的数据。我开发了一个对象模型,并成功地创建了所有自定义帖子类型和分类,还使用Members 插件。适当的用户可以创建、修改和删除自己的帖子,管理员可以批准这些帖子,也可以修改和删除任何人的帖子。

我的问题是,我想为单个项目和项目列表定义模板(我相信是单项目和归档-我从未在这个级别使用过Wordpress),但我不希望循环依赖当前主题来呈现单个项目或项目列表的页面。如果我使用的是TwentyTen主题,我希望它使用我的插件模板来处理这些自定义帖子类型。如果我使用的是TwentyEleven主题,我仍然希望它使用我的插件模板来定制这些帖子类型。

我希望这符合“it just works”的范例,但现在用户不能将文件夹放在插件目录中,他们必须在每次切换主题时将适当的文件添加到主题文件夹中。我已经签出了模板层次结构,文件名是正确的,但Wordpress不使用插件文件夹或插件/模板文件夹中的文件名。

谢谢

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

您需要使用template_include 过滤器,是所有模板包含的通用过滤器。

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

    if ( is_post_type_archive( $post_types ) && ! file_exists( get_stylesheet_directory() . \'/archive-project.php\' ) )
        $template = \'path/to/list/template/in/plugin/folder.php\';
    if ( is_singular( $post_types ) && ! file_exists( get_stylesheet_directory() . \'/single-project.php\' ) )
        $template = \'path/to/singular/template/in/plugin/folder.php\';

    return $template;
}
我还没有完全测试post类型存档位,您可能需要使用is_tax( $taxonomies ) 使其在关联的自定义分类法归档上工作。

结束

相关推荐

从非核心php文件访问BloInfo、Get_Option和plugins_url

我正在创建一个插件,插件目录中有一个php文件,可以通过自定义重写url直接访问该文件。我需要这个文件能够使用标题中提到的三个功能。目前,我正在包括wp负载。php文件,它使我能够访问所有这些函数。然而,我一直在读到不应该包括wp负载,因为它可能不总是在同一个位置,而且它包括可能不需要的wordpress文件。这就是我如何包含wp负载:$wp_base = explode($_SERVER[\'PHP_SELF\'], $_SERVER[\'SCRIPT_FILENAME\']); require