Quand il s’agit de travailler avec the_content, c’est simple.
- Configurez un filtre qui est accroché à the_content,
- définir une fonction qui accepte le contenu des messages entrants,
- apportez vos modifications,
- renvoie le contenu modifié.
Et la plupart du temps, c’est tout ce qui est nécessaire. Mais il y a des moments où vous voudrez peut-être faire des choses plus avancées.
Par exemple, vous souhaiterez peut-être inclure le contenu d’un modèle externe. Ou peut-être voudrez-vous ajouter des attributs aux images que vous trouverez dans le message.
Il peut être difficile de le faire en utilisant une expression régulière (car HTML est un langage non régulier) mais avec l’aide de DOMDocument de PHP, ce n’est pas si mal.
L’idée derrière ce code que je suis sur le point de montrer est la suivante:
- rechercher les balises img dans le message,
- parcourir tout ce qui est trouvé,
- ajouter les attributs,
- enregistrer le HTML,
- retourner le résultat.
Notez que vous devrez peut-être ajuster cela en fonction de vos propres besoins, mais le code de base dont vous aurez besoin est :
<?php
private function addImageAttributes($content)
{
$content = mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8");
$document = new DOMDocument();
libxml_use_internal_errors(true);
$document->loadHTML(utf8_decode($content));
$images = $document->getElementsByTagName('img');
foreach ($images as $image) {
$image->setAttribute('data-example', 'true');
}
return $document->saveHTML();
}
Pour ceux qui ne connaissent pas DOMDocument et ce qui se passe dans le code ci-dessus (par exemple, pourquoi certaines fonctions sont appelées avant de traiter le balisage), voici un bref aperçu :
- mb_convert_encode .Cela prendra le codage de caractères des données entrantes et le convertira en UTF-8 (basé sur le code ci-dessus, mais cela peut être quelque chose de différent).
- libxml_use_internal_errors. Cela désactivera tout rapport d’erreur et nous tous, en tant que programmeur, récupérerons les erreurs par nous-mêmes.
- utf8_decode. Cela décode les informations d’une chaîne de UTF-8 à ISO-8859-1. La raison pour laquelle nous faisons cela est que la plupart des pages auront un jeu de caractères défini comme ce dernier et nous avons besoin qu’il soit codé sur le premier pour le traiter.
Cela dit, je recommande également de lire sur DOMDocument pour plus d’informations sur tout ce qui se passe ci-dessus.
Néanmoins, une fois que vous utilisez la fonction comme ci-dessus, vous aurez un attribut d’ exemple de données personnalisé avec une valeur true sur les images tout au long de votre publication.