尝试从插件添加我的自定义帖子类型的页面模板,但它不会显示在模板下拉列表中,除非文件在主题中

时间:2021-04-30 作者:rugbert

“我有一个自定义的帖子类型”;出版物;在我的mu插件中;出版物插件;,我想包括一个可选的页面模板,用于此CPT以及常规帖子和页面。

我的模板包含必需的内容:

<?php

/*
Template Name: Publication special
Template Post Type: publication, page, post
*/
我使用的是;“theme\\u page\\u templates”主题;筛选以向我的插件的可选页面模板添加路径:

function wp234234_theme_page_templates( $theme_templates ) {
    $theme_templates[\'/absolute/path/to/template-publication-special.php\'] = \'Publication special\'
    return $theme_templates;
}
如果var\\u转储$theme\\u templates变量,我将看到如下内容

[archive-chart.search.php] => Search Page
[template-bootstrap.php] => Bootstrap
[template-donate.php] => Donation Page
[template-fullpage.php] => Full Page
[template-page-staff.php] => Staff Page
[template-search.php] => Search Page
[template-signup.php] => Signup Page
[template-publication-special.php] => Publication Special
但如果我创建一个新的;出版物“;我无法在中看到模板;“页面属性”;但是,它可用于页面。如果我将模板文件从插件移动到主题tho,它现在将在页面和;出版物;

我是否还需要运行另一个过滤器,以便我的CPT和常规ol页面都可以使用这个过滤器?

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

您使用的过滤器挂钩是theme_<post type>_templates, 这意味着<post type> part是动态的,它是您希望将自定义模板添加到模板下拉列表中的帖子类型。因此,由于模板已为三种帖子类型启用,您可以这样做以将模板添加到下拉列表中:

add_filter( \'theme_publication_templates\', \'wp234234_theme_page_templates\' ); // publication CPT
add_filter( \'theme_page_templates\', \'wp234234_theme_page_templates\' );        // regular Pages
add_filter( \'theme_post_templates\', \'wp234234_theme_page_templates\' );        // regular Posts
或者您可以使用theme_templates hook: (注意:此挂钩在上述挂钩之前运行。)

add_filter( \'theme_templates\', \'wpse_387479_theme_templates\', 10, 4 );
function wpse_387479_theme_templates( $post_templates, $theme, $post, $post_type ) {
    if ( in_array( $post_type, array( \'publication\', \'page\', \'post\' ) ) ) {
        $post_templates[\'/absolute/path/to/template-publication-special.php\'] = \'Publication special\';
    }

    return $post_templates;
}
附言:只需更改;出版物“;如果我使用的是错误的,请输入正确的帖子类型?

相关推荐

Apply filters on date format

我使用Wordpress主题,其中格式日期和时间直接编码为两种格式:<?php the_time(\'d M\'); ?> <?php the_time(\'H:i\'); ?> 我想要的:显示wordpress选项中定义的日期和时间我不想在子主题中创建修改过的模板,我更喜欢使用函数。我已经在函数中添加了php。php此代码有效:add_filter( \'the_time\', \'changer_date_format\', 10, 1 ); //o