J'insère un message en utilisant wp_post_insert()
. Et le contenu de mon article ressemble à ceci:
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAN4AAAB6CA { ... }
mais sur le processus d'insertion, Wordpress removes
l'attribut de données. Donc, le code ci-dessus devient ceci:
<img src="image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAN4AAAB6CA { ... }
J'ai essayé quelque chose comme ça mais pas de chance:
function my_filter_allowed_html($allowed, $context){
if (is_array($context)) {
return $allowed;
}
if ($context === 'post') {
$allowed['img']['data'] = true;
$allowed['src']['data'] = true;
}
return $allowed;
}
add_filter('wp_kses_allowed_html', 'my_filter_allowed_html', 10, 2);
Comment puis-je éviter ça?
Merci à naththedeveloper de StackOverflow répond et cela a fonctionné.
Eh bien, c'était un cauchemar à trouver, mais je pense que je l'ai résolu après avoir fouillé le code WordPress qui se connecte via
wp_insert_post
. Veuillez l'ajouter à votrefunctions.php
fichier et vérifiez que cela fonctionne:
add_filter('kses_allowed_protocols', function ($protocols) {
$protocols[] = 'data';
return $protocols;
});
Essentiellement en interne dans WordPress, il existe un filtre qui vérifie le protocole de toutes les URL dans le contenu et supprime celles qu'il n'aime pas. Par défaut, la liste prise en charge ne prend pas en charge le protocole de données. La fonction ci-dessus l'ajoute simplement à la liste des protocoles pris en charge.
Ce filtre ne s'exécute pas si vous êtes administrateur, c'est probablement pourquoi vous ne voyez ce problème que lorsque vous êtes déconnecté.
Merci pour vos recherches.