En essayant de poster un article sur l'un des nouveaux blogs SE, je suis tombé sur le problème suivant. Je suis répertorié en tant qu'auteur , ce qui signifie que mes capacités sont quelque peu limitées. En particulier, je ne suis pas autorisé à publier du code HTML arbitraire , mais plutôt mes entrées sont d'abord transmises via l'analyseur kses. Cela semble être une bonne chose en général (je ne veux pas être tenu responsable du code HTML!), Mais cela interfère avec un élément du processeur de Markdown: les guillemets. Je ne peux pas écrire:
> this is a quote
parce que le >
est échappé par les routines kses. Maintenant, modifier le code kses pour permettre ce passage est délicat et constitue la mauvaise solution (parce que cela rendrait l’analyseur kses
trop lié à celui de Markdown; en fait, la bonne solution serait de valider les données après il avait été traité, mais peu importe ...). Ce n'est pas un gros problème car, bien sûr, je peux simplement utiliser les balises <blockquote>...</blockquote>
directement. Seulement cela éteint le processeur Markdown à l'intérieur. Puisque nous utilisons PHPMarkdownExtra (du moins, les tests semblent indiquer que nous le sommes), je peux utiliser l'attribut markdown="1"
fake pour activer Markdown à l'intérieur de la citation. Mais ceci est supprimé par kses car il ne figure pas sur la liste des attributs approuvés!
Toutefois, ajouter markdown
à la liste des attributs approuvés semble beaucoup plus facile que d’ajouter la prise en charge de la syntaxe > quote
; en particulier, il existe un tableau $allowedposttags
qui contient ces informations, ce qui signifie simplement changer ce tableau de manière évidente.
Mais, et c'est la question, où est le bon endroit pour faire cette modification? Clairement, modifier kses.php
est le dernier recours. Mon devine serait que le bon endroit serait que le fichier markdown.php
fasse cette modification (puisqu'il s'agit du fichier qui sait que Markdown va être utilisé ). Mais si je ne veux rien changer qui puisse être changé en amont, où devrais-je mettre le changement requis?
(Quand je dis "je" dans ce qui précède, je ne veux pas dire réellement "moi", car je veux que cela soit modifié sur les blogs de SE; expliquez-le donc dans un langage que Rebecca Chernoff peut comprendre!)
En détail, il y a la constante CUSTOM_TAGS
qui permet de définir $allowedposttags, $allowedtags, $allowedentitynames
.
Ensuite, vous pouvez simplement définir CUSTOM_TAGS
sur true et définir les globales dans une fonction accrochée avant que kses ne soit inclus.
Le premier crochet disponible pour déclencher une action définissant $allowedposttags
serait muplugins_loaded
, mais je ne sais pas si kses est chargé avant ou après.
// Set custom tags to override $allowedposttags, $allowedtags, $allowedentitynames
if ( ! defined( 'CUSTOM_TAGS' ) )
define( 'CUSTOM_TAGS', true );
Vous avez également la wp_kses_hook()
qui contient un filtre explicite:
apply_filters('pre_kses', $string, $allowed_html, $allowed_protocols);