web-dev-qa-db-fra.com

supprimer les liens des images en utilisant functions.php

Je cherche un moyen de supprimer le lien de pièce jointe des images dans le contenu du message.

Je voudrais ajouter ceci au functions.php dans mon thème. Je sais que vous pouvez désactiver ceci dans le message, image par image, mais je voudrais le faire une seule fois dans ma page functions.php. Des idées?

Merci bart

8
digitalbart
add_filter( 'the_content', 'attachment_image_link_remove_filter' );

function attachment_image_link_remove_filter( $content ) {
    $content =
        preg_replace(
            array('{<a(.*?)(wp-att|wp-content\/uploads)[^>]*><img}',
                '{ wp-image-[0-9]*" /></a>}'),
            array('<img','" />'),
            $content
        );
    return $content;
}

La regex pourrait être plus simple et malheureusement, cela vous prive également de la classe unique wp-image-xxx (où xxx est l'ID de la pièce jointe) de la balise <img>, mais c'est la plus sûre que je puisse trouver avec uniquement supprime les liens autour des images de pièce jointe et laisse intacts les liens dans le texte ainsi que les liens autour des images sans pièce jointe.

Si vous ne vous souciez pas des images sans pièce jointe et que vous voulez de toute façon que toutes les images du contenu de l'article ne soient pas encapsulées dans des liens, cela devrait suffire:

function attachment_image_link_remove_filter( $content ) {
    $content =
        preg_replace(array('{<a[^>]*><img}','{/></a>}'), array('<img','/>'), $content);
    return $content;
}

Je peux le voir casser des choses cependant, si l'intérieur d'une ancre se termine par un autre élément à fermeture automatique, tel qu'une balise <br />. Ce serait rare, évidemment, mais je recommanderais d'utiliser la première version, bien que plus longue.

5
Johannes Pille