¿Diferentes opciones de formato de publicación por tipo de publicación personalizada?

4

Quiero agregar formatos de publicación para cada tipo de publicación. Por ejemplo, tengo un tipo de publicación 'Galería'. Quiero agregar 'imágenes', 'galerías' y 'videos' en esta publicación. En las publicaciones normales, quiero usar otra lista de formatos de entrada.

Lo intento:

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');

Cuando agrego una nueva publicación, funciona, pero cuando intento editarla, el formato de publicación no aparece.

¿Alguien tiene alguna idea de cómo debo hacerlo?

    
pregunta Mike 02.05.2011 - 00:47

3 respuestas

1

Intente agregar el soporte de formato de publicación en los argumentos cuando registre su tipo de publicación en lugar de usar add_post_type_support , como esto, por ejemplo:

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

Mira si tengo suerte.

    
respondido por el Javier Villanueva 02.05.2011 - 05:14
1

Puede cambiar la lista que aparece en el cuadro de meta del formato de publicación, pero cuando guarda la publicación, el valor enviado se compara con los formatos de publicación registrados y es probable que su código no se haya ejecutado allí.

Mi solución es registrar todos los formatos de publicación que usará con su tema, y luego limitarlos según el tipo de publicación reemplazando el meta box estándar por uno propio. Esto solo limitará las opciones disponibles en el cuadro de metadatos, no las restringirá cuando guarde una publicación, pero probablemente pueda agregar una comprobación adicional para evitar que los usuarios aventureros configuren formatos de publicación "no 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;
}
    
respondido por el Jan Fabry 04.05.2011 - 16:38
0

Los formatos de publicación son una taxonomía personalizada, registrada para el post-tipo "Publicación". Si desea utilizar la taxonomía "Formato de publicación" para un tipo de entrada diferente , deberá registrarlo para ese tipo de publicación, en lugar de simplemente habilitar el soporte para la opción "Publicar "post-tipo.

    
respondido por el Chip Bennett 02.05.2011 - 04:43

Lea otras preguntas en las etiquetas