Где я должен добавить необходимый код для добавления дополнительного атрибута в массив тегов kses?

При попытке опубликовать статью в одном из новых блога SE, я столкнулся с следующей проблемой. Я зарегистрирован как автор, что означает, что мои способности несколько ограничены. В частности, мне не разрешено публиковать произвольный HTML, а мои записи сначала отправляются через парсер kses. Это кажется хорошей вещью вообще (я не хочу быть ответственным за HTML!), Но это мешает одному куску процессора Markdown: кавычки. Я не могу написать:

> this is a quote 

потому что the > получает экранированные процедуры kses. Теперь, модифицируя код kses, чтобы это было сложно, и является неправильным решением (потому что это заставит синтаксический анализатор kses слишком сильно kses в Markdown, фактически, правильным решением было бы проверить данные после того, как они были обработаны , но не бери в голову …). Это не большая проблема, потому что, конечно, я могу просто использовать теги <blockquote>...</blockquote> . Только это отключает процессор Markdown внутри него. Поскольку мы используем PHPMarkdownExtra (по крайней мере, тесты, похоже, указывают на то, что мы есть), я могу использовать атрибут подделки markdown="1" чтобы включить Markdown внутри blockquote. Но это выводится kses, поскольку это не входит в список одобренных атрибутов!

Однако добавление markdown в список утвержденных атрибутов кажется намного проще, чем добавление поддержки синтаксиса > quote ; в частности, существует массив $allowedposttags который содержит эту информацию, поэтому это означает простое изменение этого массива очевидным образом.

Но, и в этом и заключается вопрос, где же место для этой модификации? Очевидно, что изменение kses.php является последним курортом. Я предполагаю , что Right Place будет для файла markdown.php делать эту модификацию (так как это файл, который знает, что Markdown будет использоваться). Но если я не хочу менять что-либо, что может быть изменено вверх по течению, где я должен внести необходимые изменения?

(Когда я говорю «Я» в приведенном выше, я на самом деле не имею в виду «меня», так как я хочу, чтобы это было изменено в блогах SE, поэтому, пожалуйста, объясните это на языке, который может понять Ребекка Чернов!)

В деталях есть константа CUSTOM_TAGS которая позволяет определять $allowedposttags, $allowedtags, $allowedentitynames .

Затем вы можете просто установить CUSTOM_TAGS в true и определить глобальные функции в функции, подключенной до включения kses.

Первый доступный крючок для $allowedposttags действия, определяющего $allowedposttags , будет muplugins_loaded , но я не знаю, загружается ли kses до или после него.

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

Вы также получили wp_kses_hook() который содержит самоочевидный фильтр:

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