single-{cpt}.php ignored

时间:2016-01-28 作者:Lucio Crusca

我创建了一个插件,它注册了一个名为evento\\u type的自定义帖子类型:

register_post_type( \'evento_type\', ...
CPT存档页是archive-evento\\u类型。它保存在插件的根目录中。它就像一个符咒。我认为CPT的单个帖子页面应该命名为single-evento\\u类型。它应该保存在插件的根目录中,就像归档页面一样。我已经创建了single-evento\\u类型。但是Wordpress一直忽略它,而是使用默认的贴子页面,不管有多少

flush_rewrite_rules();
我通过手动切换permalinks设置来分散代码和强制permalinks重新创建的次数。WP一直在使用我的CPT归档页面(这是正确的),并愉快地忽略了我的单个帖子页面。

我正在使用WP 4.4.1和Wiz主题,如果这很重要的话。我在google上搜索了很多关于这个问题的信息,但到目前为止,我找到的每一个解决方案都是刷新重写规则或双倍三亿次检查文件名,我已经完成了这项工作。

如何使WP使用我的single-evento\\u类型。php而不是默认值?

在米洛的评论后编辑:我想知道我怎么会这么瞎。WP也没有加载归档模板,因为我正在用一个标准页面和一个短代码人工生成归档页面。。。我忘了这个,呃。。。,我假设WP会自动查找我的归档事件类型。php文件。。。

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

任何模板文件都必须位于当前活动主题文件夹中。如果它们位于不同的位置,则不会自动加载,而是需要编码和修改WordPress模板系统确定的模板文件位置:

add_filter( \'template_include\', \'envento_type_templates\', 99 );
function portfolio_page_template( $template ) {

    if ( is_archive( \'evento_type\' )  ) {
        // Full path to archive-evento_type.php file in
        // the plugin directoy
        $template = plugin_dir_path( __FILE__ ) . \'archive-evento_type.php\';
    }

    if ( is_singular( \'evento_type\' )  ) {
        // Full path to single-evento_type.php file in
        // the plugin directoy
        $template = plugin_dir_path( __FILE__ ) . \'single-evento_type.php\';
    }

    return $template;
}
您也可以使用locate_template() 检查主题中是否已存在模板文件。这将允许主题开发人员覆盖插件创建的默认布局和设计。

add_filter( \'template_include\', \'envento_type_templates\', 99 );
function portfolio_page_template( $template ) {

    if ( is_archive( \'evento_type\' ) && ! locate_template( \'archive-evento_type.php\' ) ) {
        // Full path to archive-evento_type.php file in
        // the plugin directoy
        $template = plugin_dir_path( __FILE__ ) . \'archive-evento_type.php\';
    }

    if ( is_singular( \'evento_type\' ) && ! locate_template( \'single-evento_type.php\' ) ) {
        // Full path to single-evento_type.php file in
        // the plugin directoy
        $template = plugin_dir_path( __FILE__ ) . \'single-evento_type.php\';
    }

    return $template;
}
PD:这和permalinks没有关系。