Click here or hit escape to close this.

Validation et exclusion

Notice: this post is 7 years old, its content may be outdated.

Bon, j’ai partiellement résolu mes problèmes dus au passage à Php 5.3.2, et assez facilement.

Déjà, je me suis aperçu que mes pages n’étaient pas valides W3C pour le XHTML 1.1, et ceux à cause des captions, ces boites qui permettent d’insérer une image et de l’afficher, avec son commentaire, dans un joli cadre autour. La raison est simple, ces boites sont en fait des balises <div> insérées dans un paragraphe ; hors les spécifications d’XHTML 1.1 n’autorisent pas à mettre des <div> dans des <p>, d’où une erreur. Deux solutions à ça :

  • Mode bourrin dégueulasse : modifier à la main la fonction qui gère les captions. elle est trouve dans /wp-includes/media.php, il suffit de changer le <div …> en <span …>, et c’est valide ! Sauf qu’il faudra à nouveau modifier le fichier à chaque mise-à-jour de WordPress… bref, ça marche, mais c’est pas génial.
  • Mode intelligent : on surcharge le shortcode. Une API de WordPress qui permet de créer facilement et rapidement des… shortcodes, hé oui : http://codex.wordpress.org/Shortcode_API qui gère les captions. Ajoutez le code suivant dans le fichier de fonctions de votre thème (/wp-content/votrethème/functions.php) :
function W3CValidCaption($attr, $content = null) {

   extract(shortcode_atts(array(
       'id'    =&gt; '',
       'align' =&gt; 'alignnone',
       'width' =&gt; '',
       'caption' =&gt; ''
   ), $attr));

    if ( 1 &gt; (int) $width || empty($caption) )
       return $content;

   if ( $id ) $id = 'id="' . esc_attr($id) . '" ';

   return '<span>'
   . do_shortcode( $content ) . '<span class="wp-caption-text">' . $caption . '</span></span>';
}

add_shortcode('caption', 'W3CValidCaption');
add_shortcode('wp-caption', 'W3CValidCaption');

C’est une simple copie de la fonction img_caption_shortcode() du fichier /wp-includes/media.php, avec les retouches permettant la validation : le <div> devient un <span>, et du coup le <p> contenant le texte devient également un <span>. Si ce texte apparait à gauche ou à droite et pas au centre sous l’image comme auparavant, pensez à éditer la feuille de style de votre thème en changeant text-align: left; ou text-align: right; en text-align: center;. Voilà pour la validation 🙂

Reste l’exclusion, ou comment ne pas afficher les articles de certaines catégorie sur la page d’accueil. C’est ce que faisait jusqu’à maintenant le plugin Ace dont j’ai parlé la dernière fois, mais comme il ne fonctionne plus depuis la mise-à-jour de Php, j’ai du trouver autre chose. Et finalement, j’aurais du commencer directement par là puisque le Codex WordPress apporte une réponse efficacePar ici : http://codex.wordpress.org/The_Loop#Exclude_Posts_From_Some_Category, il suffit d’ajouter :


(-xx et -yy correspondent aux ID des catégories à ne pas afficher)

Juste avant


Dans votre fichier index de thème /wp-content/votrethème/index.php, et le tour est joué !