如何设置自定义帖子类型的默认格式?

时间:2011-07-29 作者:Wookai

我为我的博客创建了一个自定义的帖子类型,以便更容易地分离内容。这种新的帖子类型支持不同的帖子格式,但大多数都是图库。

register_post_type(\'atelier\',
    array(
    \'label\' => \'L\\\'Atelier\',
    \'public\' => true,
    \'supports\' => array(\'title\', \'editor\', \'post-formats\')
    )
);
我看到可以在设置->写作中为帖子设置默认的帖子格式,是否可以为我新创建的帖子类型设置相同的格式?

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

一种选择是modify the global Default Post Format setting, via Dashboard -> Settings -> Writing.

请注意,此设置是全局设置,因此它将为支持post格式的所有post类型设置默认值。

如果您不需要博客帖子的帖子格式,只需为您的自定义帖子类型启用帖子格式支持,方法是删除博客帖子的帖子格式支持:

<?php
remove_post_type_support( \'post\', \'post-formats\' );
?>
(未经测试,但我看不出它为什么不起作用。)

SO网友:Michael Dozark

您可以使用option_default_post_format 过滤器:

add_filter( \'option_default_post_format\', \'slimline_default_post_format\' );

/**
 * Posts of post_type_1 will be asides by default, but all other post types
 * will be the default set on the Settings > Writing admin panel
 */
function slimline_default_post_format( $format ) {
    global $post_type;

    return ( \'post_type_1\' === $post_type ? \'aside\' : $format );
}
如果要为多个自定义帖子类型设置过滤器,我会编辑该函数以使用switch语句,如下所示:

function slimline_default_post_format( $format ) {
    global $post_type;

    switch( $post_type ) {
        case \'post_type_1\' :
            $format = \'aside\';
            break;
        case \'post_type_2\' :
            $format = \'quote\';
            break;
    }

    return $format;
}

SO网友:its_me

对于习惯不同PHP语法的初学者来说:@MichaelDozark的优秀答案中的代码块也可以写成:

/*
 * Posts of post_type_1 will be asides by default, but all other post types
 * will be the default set on the Settings > Writing admin panel
 */
add_filter( \'option_default_post_format\', \'custom_default_post_format\' );
function custom_default_post_format( $format ) {
    global $post_type;

    if( $post_type == \'post_type_1\' ) {
        $format = \'aside\';
    }

    return $format;
}
以及:

add_filter( \'option_default_post_format\', \'custom_default_post_format\' );
function custom_default_post_format( $format ) {
    global $post_type;

    if( $post_type == \'post_type_1\' ) {
        $format = \'aside\';
    } elseif ( $post_type == \'post_type_2\' ) {
        $format = \'quote\';
    }

    return $format;
}
Source: Examples for the switch statement 在PHP手册中

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register