it-swarm.com.de

Wo soll ich den erforderlichen Code hinzufügen, um dem Array kses allowed tags ein zusätzliches Attribut hinzuzufügen?

Beim Versuch, einen Artikel in einem der neuen SE-Blogs zu veröffentlichen, bin ich auf folgendes Problem gestoßen. Ich bin als Autor aufgeführt , was bedeutet, dass meine Fähigkeiten etwas eingeschränkt sind. Insbesondere darf ich kein beliebiges HTML posten, sondern meine Einträge werden zuerst über den kses-Parser gesendet. Dies scheint im Allgemeinen eine gute Sache zu sein (ich möchte nicht für HTML verantwortlich gemacht werden!), Aber es stört ein Teil des Markdown-Prozessors: Anführungszeichen. Ich kann nicht schreiben:

> this is a quote

weil der > von den kses-Routinen maskiert wird. Das Ändern des kses-Codes, um dies zu ermöglichen, ist schwierig und die falsche Lösung (da der kses -Parser dadurch zu eng mit dem Markdown-Code verbunden würde; die richtige Lösung wäre es, die Daten zu validieren nachdem verarbeitet wurde, aber egal ...). Dies ist kein großes Problem, da ich die <blockquote>...</blockquote>-Tags natürlich auch direkt verwenden kann. Nur so wird der darin enthaltene Markdown-Prozessor ausgeschaltet. Da wir PHPMarkdownExtra verwenden (zumindest scheinen Tests dies anzudeuten), kann ich das Attribut markdown="1" fake verwenden, um Markdown in der Blockquote zu aktivieren. Dies wird jedoch von kses behoben, da es nicht auf der Liste der genehmigten Attribute steht!

Das Hinzufügen von markdown zur Liste der genehmigten Attribute scheint jedoch viel einfacher zu sein als das Hinzufügen von Unterstützung für die > quote-Syntax. Insbesondere gibt es ein Array $allowedposttags, das diese Informationen enthält. Das bedeutet also, dass Sie das Array einfach auf offensichtliche Weise ändern müssen.

Aber, und das ist die Frage, wo ist der richtige Ort, um diese Änderung vorzunehmen? Das Ändern von kses.php ist eindeutig der letzte Ausweg. Mein Tipp wäre, dass der richtige Ort für die markdown.php-Datei wäre, um diese Änderung vorzunehmen (da dies die Datei ist, die weiß, dass Markdown verwendet wird ). Aber wenn ich nichts ändern möchte, was sich im Vorfeld ändern könnte, wo soll ich dann die erforderliche Änderung vornehmen?

(Wenn ich oben "Ich" sage, meine ich nicht "Ich", da ich möchte, dass dies in den SE-Blogs geändert wird. Erklären Sie dies bitte in einer Sprache, die Rebecca Chernoff verstehen kann!)

2
Loop Space

Im Detail gibt es die Konstante CUSTOM_TAGS, mit der $allowedposttags, $allowedtags, $allowedentitynames definiert werden kann.

Dann können Sie einfach CUSTOM_TAGS auf true setzen und die globalen Werte in einer Funktion definieren, die verknüpft ist, bevor kses eingeschlossen wird.

Der erste verfügbare Hook, der eine Aktion auslöst, die $allowedposttags definiert, ist muplugins_loaded, aber ich weiß nicht, ob kses davor oder danach geladen wird.

// Set custom tags to override $allowedposttags, $allowedtags, $allowedentitynames
if ( ! defined( 'CUSTOM_TAGS' ) )
    define( 'CUSTOM_TAGS', true );

Sie haben auch die wp_kses_hook(), die einen selbsterklärenden Filter enthält:

apply_filters('pre_kses', $string, $allowed_html, $allowed_protocols);
1
kaiser