wordpress 中自定义 post 类型中一个特定 post 的自定义模板

Custom template for one specific post in a custom post type in wordpress

我有一个小网络应用程序,我想 运行 在我的 WordPress 网站上自定义 post 类型的页面中。 所以我想创建一个新模板,将此应用程序的特定代码放在那里,并将此模板分配给自定义 post 类型页面。

遗憾的是 Wordpress 没有在我的 cpt 中显示模板。

模板文件名为 fretfind.php,第一行包含:

/*  
Template Name: Fretfind 
Template Post Type: guitar
*/

'guitar' 是 cpt 子弹。

有谁知道为什么它不显示此模板的选择选项。自定义 Post 类型模板是否有任何额外步骤?

或者通常有另一种好的做法是只在一个特定的 wordpress 页面上自定义 php 代码吗?类似于 post ID 的模板?

如果这是一个页面,您可以使用名为 page-{slug}.php 的模板文件,其中 {slug} 是特定页面的 slug(参见此处:https://developer.wordpress.org/themes/template-files-section/page-template-files/#page-templates-within-the-template-hierarchy)。

但是由于我们谈论的是 CPT,所以不幸的是只有 single-{$posttype}.php 而没有 single-{$posttype}-{$slug}.php(请参阅此处:https://developer.wordpress.org/themes/template-files-section/custom-post-type-template-files/#custom-post-type-templates

但是,您可以通过将此代码添加到主题的 functions.php:

来为 CPT 添加对此类模板文件的支持
add_filter( 'single_template', function( $template ) {
    global $post;
    if ( $post->post_type === 'guitar' ) {
        $locate_template = locate_template( "single-guitar-{$post->post_name}.php" );
        if ( ! empty( $locate_template ) ) {
            $template = $locate_template;
        }
    }
    return $template;
} );

然后使用模板文件 single-guitar-myspesificguitarslug.php(其中 myspesificguitarslug 是您希望应用此模板的 CPT 页面的 slug)