自定义投递类型的自定义投递格式

时间:2011-10-30 作者:Rothbert

意见的权重似乎倾向于使用自定义帖子类型,而不是自定义帖子格式。

我有几个自定义的帖子类型,我想以一种非公开的方式(即不是类别、标记或自定义分类法)在4种不同的格式中设置样式。

自定义post格式似乎为这一点提供了一个理想的解决方案-它们是内置的功能,易于实现,附带方便的元框,易于与条件语句一起应用等。

主要的缺点是它们不容易定制-我可以rename them 为了清楚起见。

因此,考虑到普遍的想法,创建相同功能的更好方法是什么。

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

你有几个选择,所以我会澄清你能做什么。

使用以下内容创建自定义帖子类型模板页single-customposttype.php 并利用模板层次结构,http://codex.wordpress.org/Template_Hierarchy

使用条件查询在循环中设置样式(或使用的任何样式),如下所示if (post type= your custom one) style it this way;. 或者使用其他WordPress条件。http://codex.wordpress.org/Class_Reference/WP_Query

使用后端组织的分类法,自定义分类法不必是公共的。

使用自定义帖子类型的帖子格式,CPT可以支持post-formats,http://codex.wordpress.org/Function_Reference/register_post_type

大多数人会选择选项一,但这取决于你想做什么。

SO网友:Matth

Rothbert,您删除了主题文件中分类法的可见性。

“自定义帖子类型”和“帖子格式”之间的关键区别在于“自定义”一词

换句话说,您不能更改自定义帖子格式的名称。您被限制为WordPress本机的默认值10。您不能添加新的帖子格式。并且不能更改现有名称。

SO网友:JPollock

您可以在CPT中启用对post格式的支持。注册post类型时,请在“supports”参数中设置post格式。

SO网友:Aurovrata

我觉得这很有趣blog piece by Nathan Swartz 这基本上是通过使用自定义分类法为任何帖子类型创建自定义帖子格式。我在这里复制他的代码,所以如果他的博客消失了,他的解决方案在这里仍然存在。

涉及的基本步骤包括:

创建自定义分类法并将其分配给帖子

// hook into the init action and call custom_post_formats_taxonomies when it fires
add_action( \'init\', \'custom_post_formats_taxonomies\', 0 );
// create a new taxonomy we\'re calling \'format\'
function custom_post_formats_taxonomies() {
    // Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
        \'name\'              => _x( \'Formats\', \'taxonomy general name\', \'textdomain\' ),
        \'singular_name\'     => _x( \'Format\', \'taxonomy singular name\', \'textdomain\' ),
        \'search_items\'      => __( \'Search Formats\', \'textdomain\' ),
        \'all_items\'         => __( \'All Formats\', \'textdomain\' ),
        \'parent_item\'       => __( \'Parent Format\', \'textdomain\' ),
        \'parent_item_colon\' => __( \'Parent Format:\', \'textdomain\' ),
        \'edit_item\'         => __( \'Edit Format\', \'textdomain\' ),
        \'update_item\'       => __( \'Update Format\', \'textdomain\' ),
        \'add_new_item\'      => __( \'Add New Format\', \'textdomain\' ),
        \'new_item_name\'     => __( \'New Format Name\', \'textdomain\' ),
        \'menu_name\'         => __( \'Format\', \'textdomain\' ),
    );

    $args = array(
        \'hierarchical\'      => true,
        \'labels\'            => $labels,
        \'show_ui\'           => true,
        \'show_admin_column\' => true,
        \'query_var\'         => true,
        \'rewrite\'           => array( \'slug\' => \'format\' ),
        \'capabilities\' => array(
            \'manage_terms\' => \'\',
            \'edit_terms\' => \'\',
            \'delete_terms\' => \'\',
            \'assign_terms\' => \'edit_posts\'
        ),
        \'public\' => true,
        \'show_in_nav_menus\' => false,
        \'show_tagcloud\' => false,
    );
    register_taxonomy( \'format\', array( \'post\' ), $args ); // our new \'format\' taxonomy
}

// programmatically create a few format terms
function example_insert_default_format() { // later we\'ll define this as our default, so all posts have to have at least one format
    wp_insert_term(
        \'Default\',
        \'format\',
        array(
          \'description\' => \'\',
          \'slug\'        => \'default\'
        )
    );
}
add_action( \'init\', \'example_insert_default_format\' );

// repeat the following 11 lines for each format you want
function example_insert_map_format() {
    wp_insert_term(
        \'Map\', // change this to
        \'format\',
        array(
          \'description\' => \'Adds a large map to the top of your post.\',
          \'slug\'        => \'map\'
        )
    );
}
add_action( \'init\', \'example_insert_map_format\' );

// make sure there\'s a default Format type and that it\'s chosen if they didn\'t choose one
function moseyhome_default_format_term( $post_id, $post ) {
    if ( \'publish\' === $post->post_status ) {
        $defaults = array(
            \'format\' => \'default\' // change \'default\' to whatever term slug you created above that you want to be the default
            );
        $taxonomies = get_object_taxonomies( $post->post_type );
        foreach ( (array) $taxonomies as $taxonomy ) {
            $terms = wp_get_post_terms( $post_id, $taxonomy );
            if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
                wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
            }
        }
    }
}
add_action( \'save_post\', \'moseyhome_default_format_term\', 100, 2 );

// replace checkboxes for the format taxonomy with radio buttons and a custom meta box
function wpse_139269_term_radio_checklist( $args ) {
    if ( ! empty( $args[\'taxonomy\'] ) && $args[\'taxonomy\'] === \'format\' ) {
        if ( empty( $args[\'walker\'] ) || is_a( $args[\'walker\'], \'Walker\' ) ) { // Don\'t override 3rd party walkers.
            if ( ! class_exists( \'WPSE_139269_Walker_Category_Radio_Checklist\' ) ) {
                class WPSE_139269_Walker_Category_Radio_Checklist extends Walker_Category_Checklist {
                    function walk( $elements, $max_depth, $args = array() ) {
                        $output = parent::walk( $elements, $max_depth, $args );
                        $output = str_replace(
                            array( \'type="checkbox"\', "type=\'checkbox\'" ),
                            array( \'type="radio"\', "type=\'radio\'" ),
                            $output
                        );
                        return $output;
                    }
                }
            }
            $args[\'walker\'] = new WPSE_139269_Walker_Category_Radio_Checklist;
        }
    }
    return $args;
}

add_filter( \'wp_terms_checklist_args\', \'wpse_139269_term_radio_checklist\' );

结束

相关推荐