web-dev-qa-db-fra.com

Supprimer les balises P des images

J'utilise WordPress 4.2.2 et chaque fois que j'ajoute une image au wysiwyg, elle enveloppe l'image générée dans une balise de paragraphe. Je dois enlever ces étiquettes. Tout ce que je semble trouver en ligne date de 2011 et ne semble pas fonctionner.

J'ai essayé de mettre des choses dans le functions.php comme:

function filter_ptags_on_images($content){
  return preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
}
add_filter('the_content', 'filter_ptags_on_images');

Rien ne semble fonctionner. Comment puis-je accomplir cela.

Au fait, j'utilise le thème de démarrage wysiwyg et JointsWP d'ACF Pro et mes images NE SONT PAS enveloppées dans une balise de lien si cela fait une différence.

2
agon024

1) Filtrez wpautop () avec ACF:

function filter_ptags_on_images($content) {
    $content = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
    return preg_replace('/<p>\s*(<iframe .*>*.<\/iframe>)\s*<\/p>/iU', '\1', $content);
}
add_filter('acf_the_content', 'filter_ptags_on_images');
add_filter('the_content', 'filter_ptags_on_images');

Si vous avez les deux, essayez de vérifier avec une priorité ultérieure sur add_filter. Il est possible que le thème, le plugin ou acf vous prévaut ....

add_filter('acf_the_content', 'filter_ptags_on_images', 9999);
add_filter('the_content', 'filter_ptags_on_images', 9999);

2) Modifier wpautop ():

<?php
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'custom_wpautop' );
function custom_wpautop() {
 // copy wpautop() code at https://core.trac.wordpress.org/browser/tags/4.2.2/src/wp-includes/formatting.php#L373 and add img to the $allblocks variable
}

3) Ceci est cependant beaucoup de code pour une tâche. Essayez d’essayer ceci: https://wordpress.org/plugins/preserved-html-editor-markup-plus

4) Vous pouvez essayer ceci bien que cela ne soit pas aussi bon que la méthode que vous essayez d'accomplir puisque celle-ci est faite avec javascript.

<script type="text/javascript">
jQuery(document).ready(function($){
    $('p > img').unwrap();
});
</script>

5) si c'est juste le style qui a tout gâché et que vous ne vous souciez pas du balisage:

<style type="text/css">
p > img {
    margin: 0 !important;
}
</style>
8
Bryan Willis