web-dev-qa-db-fra.com

Comment autoriser l'attribut data: image dans la balise src pendant la post-insertion?

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?

2
tpbafk

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 à votre functions.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.

1
tpbafk