J'ai récemment ajouté une légende à mon image dans WordPress et il existe maintenant une balise <p></p>
vide après la balise <img>
. Cela a brisé mon style.
Quelqu'un peut-il dire comment l'enlever?
Merci pour l'aide.
wpautop
:Ceci est probablement de wpautop
. Pour résoudre ce problème, écrivez d'abord le CODE suivant dans le fichier functions.php
de votre thème:
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
Si cela ne résout pas le problème, cela peut signifier que <p></p>
est entré dans votre base de données ou vous avez une nouvelle ligne vide dans votre [caption][/caption]
Shortcode. Accédez à l'article et supprimez le <p></p>
ou le empty new line
à partir du mode Text
de l'éditeur WordPress.
Ceci devrait régler votre problème.
Vous pouvez utiliser le code CSS pour masquer <p></p>
sous la forme cette réponse suggéré. Cependant, avec cette méthode, il sera toujours dans votre HTML & ça ne sert à rien de le créer puis de le cacher entièrement avec CSS. Il est préférable de l'enlever dans ce cas avec le code ci-dessus.
Cependant, si vous souhaitez conserver wpautop
pour une raison quelconque (vous l'utilisez peut-être pour le formatage ailleurs sur le site), vous pouvez uniquement cibler les balises <p></p>
dans les légendes avec les CSS suivants:
.wp-caption > p:empty {
display: none;
}
Ceci conservera le formatage de wpautop
ailleurs sur votre site et résoudra en même temps le problème d'affichage des légendes.
Vous pouvez le faire sur le hook do_shortcode_tag
.
function remove_empty_wp_caption_text($output, $tag) {
if ($tag === 'caption') {
$output = str_replace('<p class="wp-caption-text"> </p>', '', $output);
}
return $output;
}
add_filter('do_shortcode_tag', 'remove_empty_wp_caption_text', 10, 2);
Ce qui est bien avec cette approche, c'est que la fonction ne sera pas exécutée à moins que le shortcode [caption]
soit appelé.
Vous pouvez également le supprimer en utilisant str_replace
pour remplacer les balises p par le filtre the_content
:
function wpse256087_content_filter($content) {
$content = str_replace( '<p></p>', '', $content );
return $content;
}
add_filter( 'the_content', 'wpse256087_content_filter' );
Il n'est pas recommandé de remplacer la fonctionnalité native de WordPress. Au lieu de cela, vous pouvez masquer les éléments vides en utilisant CSS
p:empty {
display: none;
}
Ce sera les éléments vides.