Ajouter une seconde zone d’extrait dans la création d’articles de WordPress

Par défaut, chaque article de WordPress peut être accompagné d’un extrait facultatif, utile pour ajouter une introduction. Cependant, comment faire pour en ajouter un second et gérer ainsi du contenu additionnel en lien direct avec votre article ?


Pour info, ce bout de code provient tout droit du forum officiel de WordPress (version anglaise) et l’auteur n’est autre que Justin Tadlock. Par contre, la procédure n’est pas spécifiée et le néophyte aura bien du mal à comprendre la démarche.

Étape n°1 – Modification du fichier functions.php

Pour ajouter un deuxième champ d’extrait, ouvrez votre fichier functions.php à partir du menu Apparence puis Éditeur. Je suppose que vous êtes déjà connecté sur votre administration WordPress.

Capture d'écran - Ajout de code dans functions.php
Création de la seconde zone d’extrait

En fin de fichier, ajoutez les lignes de code suivante :

<?php
add_action( 'admin_menu', 'my_create_post_meta_box' );
add_action( 'save_post', 'my_save_post_meta_box', 10, 2 );

function my_create_post_meta_box() {
	add_meta_box( 'my-meta-box', 'Second Excerpt', 'my_post_meta_box', 'post', 'normal', 'high' );
}

function my_post_meta_box( $object, $box ) { ?>
	<p>
		<label for="second-excerpt">Second Excerpt</label>
		<br />
		<textarea name="second-excerpt" id="second-excerpt" cols="60" rows="4" tabindex="30" style="width: 97%;"><?php echo wp_specialchars( get_post_meta( $object->ID, 'Second Excerpt', true ), 1 ); ?></textarea>
		<input type="hidden" name="my_meta_box_nonce" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
	</p>
<?php }

function my_save_post_meta_box( $post_id, $post ) {

	if ( !wp_verify_nonce( $_POST['my_meta_box_nonce'], plugin_basename( __FILE__ ) ) )
		return $post_id;

	if ( !current_user_can( 'edit_post', $post_id ) )
		return $post_id;

	$meta_value = get_post_meta( $post_id, 'Second Excerpt', true );
	$new_meta_value = stripslashes( $_POST['second-excerpt'] );

	if ( $new_meta_value && '' == $meta_value )
		add_post_meta( $post_id, 'Second Excerpt', $new_meta_value, true );

	elseif ( $new_meta_value != $meta_value )
		update_post_meta( $post_id, 'Second Excerpt', $new_meta_value );

	elseif ( '' == $new_meta_value && $meta_value )
		delete_post_meta( $post_id, 'Second Excerpt', $meta_value );

?>

Libre à vous de traduire certains éléments en français… mais soyez sûr de vos modifications !

Étape n°2 – Définition de l’emplacement de la seconde zone d’extrait

La deuxième étape consiste à modifier à nouveau votre thème pour indiquer où sera inséré ce fameux champ additionnel.

Dans notre exemple, nous supposerons que vous souhaitez l’afficher juste en-dessous de la première zone d’extrait par défaut de WordPress… mais ces lignes de code peuvent être collées là où vous le souhaitez !

Dans l’éditeur de thème, ouvrez donc le fichier single.php puis ajoutez les lignes suivantes après <?php the_excerpt(); ?> ou avant <?php the_content(); ?> dans la situation où vous n’utiliseriez pas le premier extrait.

 <?php if ( get_post_meta($post->ID, 'Second Excerpt', true) ) : ?>
 <?php echo get_post_meta($post->ID, 'Second Excerpt', true) ?>
 <?php endif; ?>

N’oubliez pas de sauvegarder vos modifications.

Étape n°3 – Vérification avec un article de test

Capture d'écran - Second champ d'extrait dans les articles WordPress
Complétez ce deuxième champ d’extrait pour vos articles

Rendez-vous ensuite dans le module Articles puis faites Ajouter. Remarquez l’apparition d’une deuxième zone d’extrait.

Constatez le bon fonctionnement de cette astuce sur une page d’article en insérant du texte d’exemple.

Capture d'écran - Aperçu d'un article avec double extrait
Deux extraits figurent dans cet article !

Du contenu HTML peut être ajouté tout comme dans la zone d’extrait traditionnelle.

Cette zone additionnelle pourra contenir des informations contextuelles et être utilisée comme zone de push auprès de vos visiteurs… intéressant, non ?

Crédits photo : jazzmasterson

31 commentaires

  1. Guillaume

    bonjour, j’étais super content car je cherchai sa exactement, mais j’ai un gros problème, depuis que j’ai ajouté la ligne de code à ‘fonction.php’ j’obtiens cette ligne de code à chaque fois que l’on poste un commentaire, que l’on vote, et lorsque moi meme je poste un nouvelle article…
    Pourriez vous m’aider SVP ?

    1. Guillaume

      pardons voila ligne de code : Warning: Cannot modify header information – headers already sent by (output started at /xxx/xxx/xxx/xxx/www/wp-content/themes/xxx/functions.php:137) in /xxx/xxx/xxx/xxx/www/wp-includes/pluggable.php on line 890

      1. Guillaume

        ah ben j’ai plongé sur ce problème toute le journée en en faite c’été les retours à la ligne après le  » ?>  » à la fin, désolé du dérangement mais sinon super code !!!

  2. Marc-Aurèle GEFFROY

    J’ai bien vérifié le code que je colle dans functions.php, mais j’obtiens tout le temps une erreur du type :
    Parse error: syntax error, unexpected $end in /homepages/26/d117867942/htdocs/wp-content/themes/labaulebeach/functions.php on line 533

    je ne comprends pas

  3. Laurent

    Bonjour,
    Je viens déterrer ce très bon article, car j’ai une question ! J’ai fouiné un peu partout et je me demandais si ce « second excerpt », vu qu’il gère le HMTL, le fait il aussi pour les shortcodes ?

    Merci

      1. Laurent

        En fait c’est tout simple, j’aimerais juste savoir si dans cet excerpt, l’utilisation de shortcodes est supportée.
        Mais j’ai trouvé la réponse tout seul.
        En fait j’aimerais désormais appliquer cet ajout aux custom post types.

  4. Thierry

    Aurélien tu dis dans la vidéo qu’il faut ajouter le script que tu donnes au debut du fichier function.php et tu te contredit dans le texte en disant qu’il faut mettre le script à la fin de function.php ,,,,??,

    faut le mettre ou au début ? ou à la fin ? finalement

    1. Aurélien Denis auteur de l’article

      En fait, il faut l’insérer entre les balises PHP c’est tout. Le mettre au début ou à la fin simplifie la gestion c’est tout. C’est plus facile d’identifier la modification en cas d’erreurs.

  5. Kotas

    Genial ! Bravo ! Par contre je recherche a peu pret la m chose mais avec le titre d’un article et un sous titre de cet article qui s’afficherais avant l’extrait…

  6. noemie

    Bonjour
    C’est super, mais j’ai tenté de l’utiliser, puis ai effacé l’information contenu dans l’excerpt, et maintenant, il est impossible de sauvegarder une information à nouveau dans ce 2 excerpt
    Une idée de la ligne de code à modifier ?
    Merci d’avance

      1. noemie

        J’avais mis un shortcode dans le second excerpt, puis l’ai effacé, et maintenant quoique j’écrive dans le second excertpt, la zone ne sauvegarde pas le contenu. (la zone reste vide)

Laisser un commentaire