web-dev-qa-db-fra.com

Différentes options de format de publication par type de publication personnalisé?

Je souhaite ajouter des formats de publication pour chaque type de publication. Par exemple, j'ai un type de message "Galerie". Je souhaite ajouter des "images", des "galeries" et des "vidéos" dans cet article. Dans les publications normales, je souhaite utiliser une autre liste de formats de publication.

J'essaie:

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

Lorsque j'ajoute un nouveau message, cela fonctionne, mais lorsque j'essaie de le modifier, le format du message n'apparaît pas.

Est-ce que quelqu'un a une idée de comment je dois le faire?

4
Mike

Essayez d'ajouter le support du format de publication sur les arguments lorsque vous enregistrez votre type de publication au lieu d'utiliser add_post_type_support, comme ceci par exemple:

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

Voir si avoir de la chance.

1

Vous pouvez modifier la liste qui apparaît dans la boîte méta Format de publication, mais lorsque vous enregistrez la publication, la valeur soumise est vérifiée par rapport aux formats de publication enregistrés et votre code n'y a probablement pas été exécuté.

Ma solution consiste à enregistrer tous formats de publication que vous utiliserez avec votre thème, puis de les limiter en fonction du type de publication en remplaçant la méta-boîte standard par une de vos propres. Cela ne limitera que les options disponibles dans la boîte méta, cela ne les limitera pas lorsque vous enregistrez une publication, mais vous pouvez probablement ajouter une vérification supplémentaire pour empêcher les utilisateurs aventureux de définir des formats de publication "non autorisés".

// 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;
}
1
Jan Fabry

Post Formats sont une taxonomie personnalisée, enregistrée pour le type de post "Post". Si vous souhaitez utiliser la taxonomie "Format de publication" pour un type différent post-type, vous devez alors l'enregistrer pour ce type de publication plutôt que de simplement l'activer. Type de poste.

0
Chip Bennett