Diferentes opções de formato de postagem por tipo de postagem personalizada?

4

Eu quero adicionar formatos de postagem para cada tipo de postagem. Por exemplo, tenho um tipo de post 'Galeria'. Quero adicionar "imagens", "galerias" e "vídeos" nesta postagem. Em postagens normais, quero usar outra lista de formatos de postagem.

Eu tento:

function postf()
{
    global $post_ID;

    $postType = get_post_type( $post_ID );

    if( $_GET['post_type'] || $postType == 'gallery-custompost' )
    {
        add_theme_support( 'post-formats', array( 'image', 'gallery', 'video' ) );
        add_post_type_support( 'gallery-custompost', 'post-formats' );
    }
}
add_action('init', 'postf');

Quando eu adiciono uma nova postagem, ela funciona, mas quando tento editá-la, o formato da postagem não aparece.

Alguém tem alguma ideia de como devo fazer isso?

    
por Mike 02.05.2011 / 00:47

3 respostas

1

Tente adicionar o suporte ao formato de postagem nos argumentos ao registrar seu tipo de postagem, em vez de usar add_post_type_support , como este, por exemplo:

$args = array(
    ...
    'supports' => array('title', 'editor', 'author', 'post-formats')
); 
register_post_type('gallery-custompost', $args);

Veja se tem alguma sorte.

    
por Javier Villanueva 02.05.2011 / 05:14
1

Você pode alterar a lista que aparece na caixa meta do formato de postagem, mas quando você salva a postagem, o valor enviado é verificado em relação aos formatos de postagem registrados, e seu código provavelmente não foi executado lá.

Minha solução é registrar todos formatos de postagem que você usará com o seu tema e, em seguida, limitá-los com base no tipo de postagem, substituindo a caixa meta padrão por uma. Isso limitará apenas as opções disponíveis na caixa meta, não as restringirá quando você salvar uma postagem, mas provavelmente você poderá adicionar uma verificação extra para impedir que os usuários aventureiros definam formatos de postagens "não permitidos".

// Register all post types that we will use
add_action( 'after_setup_theme', 'wpse16136_after_setup_theme', 11 );
function wpse16136_after_setup_theme()
{
    add_theme_support( 'post-formats', array( 'aside', 'gallery', 'video' ) );
}

// Register our custom post type, and link the post formats to the post types
// Yes, you can (ab)use add_post_type_support to save extra data like this
add_action( 'init', 'wpse16136_init' );
function wpse16136_init()
{
    register_post_type( 'wpse16136', array(
        'public' => true,
        'label' => 'WPSE 16136',
        'supports' => array( 'title', 'editor' ),
    ) );
    add_post_type_support( 'wpse16136', 'post-formats', array( 'gallery', 'video' ) );
    add_post_type_support( 'post', 'post-formats', array( 'aside', 'gallery' ) );
}

// Replace the standard meta box callback with our own
add_action( 'add_meta_boxes', 'wpse16136_add_meta_boxes' );
function wpse16136_add_meta_boxes( $post_type )
{
    if ( ! get_post_type_object( $post_type ) ) {
        // It's a comment or a link, or something else
        return;
    }
    remove_meta_box( 'formatdiv', $post_type, 'side' );
    add_meta_box( 'wpse16136_formatdiv', _x( 'Format', 'post format' ), 'wpse16136_post_format_meta_box', $post_type, 'side', 'core' );
}

// This is almost a duplicate of the original meta box
function wpse16136_post_format_meta_box( $post, $box ) {
    if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) :
    $post_formats = get_theme_support( 'post-formats' );

    // This is our extra code
    // If the post type has registered post formats, use those instead
    if ( is_array( $GLOBALS['_wp_post_type_features'][$post->post_type]['post-formats'] ) ) {
        $post_formats = $GLOBALS['_wp_post_type_features'][$post->post_type]['post-formats'];
    }

    if ( is_array( $post_formats[0] ) ) :
        $post_format = get_post_format( $post->ID );
        if ( !$post_format )
            $post_format = '0';
        $post_format_display = get_post_format_string( $post_format );
        // Add in the current one if it isn't there yet, in case the current theme doesn't support it
        if ( $post_format && !in_array( $post_format, $post_formats[0] ) )
            $post_formats[0][] = $post_format;
    ?>
    <div id="post-formats-select">
        <input type="radio" name="post_format" class="post-format" id="post-format-0" value="0" <?php checked( $post_format, '0' ); ?> /> <label for="post-format-0"><?php _e('Standard'); ?></label>
        <?php foreach ( $post_formats[0] as $format ) : ?>
        <br /><input type="radio" name="post_format" class="post-format" id="post-format-<?php echo esc_attr( $format ); ?>" value="<?php echo esc_attr( $format ); ?>" <?php checked( $post_format, $format ); ?> /> <label for="post-format-<?php echo esc_attr( $format ); ?>"><?php echo esc_html( get_post_format_string( $format ) ); ?></label>
        <?php endforeach; ?><br />
    </div>
    <?php endif; endif;
}
    
por Jan Fabry 04.05.2011 / 16:38
0

Post Formatos são uma taxonomia personalizada, registrada para o tipo de postagem "Post". Se você quiser usar a taxonomia "Post Format" para um tipo de post diferente , precisará registrá-la para esse tipo de postagem, em vez de simplesmente ativar o suporte para ela para o "Post "post-type.

    
por Chip Bennett 02.05.2011 / 04:43