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

Aurélien Denis est le fondateur du projet WordPress Channel proposant tutoriels et podcasts librement téléchargeables. En 2010, il fonde Neticpro, une agence Web spécialisée WordPress. Il est aussi co-fondateur du site Protuts.net (tutoriels PC/Mac/Linux) et community manager pour l’Imagine Cup 2011/2012, une compétition mondiale organisée par Microsoft.

23 commentaires

  1. J’ai l’impression d’un déjà vu ;-)

  2. Fred

    Mais c’est super balaise, j’en cherchai vraiment. Je dois avouer que Aurélien me rend un grand service.Encore merci.

  3. 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 ?

    • 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

  4. 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

  5. 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

  6. SALUT ! Moi j’ai dû ajouter un simple « } » avant le ?> final pour que ça marche IMPECCABLEMENT.

    Merci pour ça !

  7. Bonjour,

    Auriez vous une idée de fonction qui fasse la même chose que ce plugin: http://wordpress.org/extend/plugins/ax-sidebar/?

    Merci.

  8. 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

    • 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. ;)

Rétrolien pour cet article

  1. 30 hacks PHP pour WordPress 3 | WordPress Channel

Laisser un commentaire