web-dev-qa-db-fra.com

Comment définir un format par défaut pour un type de publication personnalisé?

J'ai créé un type de message personnalisé pour mon blog, afin de permettre une séparation plus facile du contenu. Ce nouveau type de message prend en charge différents formats de message, mais la plupart d’entre eux seront des galeries.

register_post_type('atelier',
    array(
    'label' => 'L\'Atelier',
    'public' => true,
    'supports' => array('title', 'editor', 'post-formats')
    )
);

J'ai vu qu'il est possible dans Paramètres -> Écriture de définir le format de publication par défaut pour les publications. Est-il possible de faire de même pour le type de publication que je viens de créer?

7
Wookai

Une option serait de modifier le réglage global du format de post par défaut, via Dashboard -> Settings -> Writing .

Notez que ce paramètre est global , de sorte qu'il définirait par défaut les types all post prenant en charge les formats de publication.

Si vous n'avez pas besoin de formats de publication pour les publications de blog, vous pouvez simplement activer le support post-format only pour votre type de publication personnalisée, en en supprimant la prise en charge post-format des publications de blog:

<?php
remove_post_type_support( 'post', 'post-formats' );
?>

(Non testé, mais je ne vois pas pourquoi cela ne fonctionnerait pas.)

3
Chip Bennett

Vous pouvez gérer cela en utilisant le filtre 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 );
}

Si vous souhaitez configurer le filtre pour plusieurs types de publication personnalisés, modifiez la fonction pour utiliser une instruction switch, comme ceci:

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;
}
9
Michael Dozark

Pour les débutants habitués à une syntaxe différente PHP: Les blocs de code contenus dans l'excellente réponse de @ MichaelDozark peuvent également s'écrire comme suit:

/*
 * 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;
}

Et:

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: Exemples pour l'instruction switch dans le manuel PHP.

0
its_me