web-dev-qa-db-ja.com

kses allowed tags配列に追加の属性を追加するために必要なコードをどこに追加すればよいですか?

新しいSEブログの1つに記事を投稿しようとしたところ、次のような問題に遭遇しました。私は作家としてリストされていますが、これは私の能力がやや制限されていることを意味します。特に、私は任意のHTMLを投稿することは許可されていません、むしろ私のエントリーは最初にksesパーサーを通して送られます。これは一般的には良いことのように思えます(私はHTMLに対して責任を負わされたくありません!)が、それはMarkdownプロセッサの1つの部分、つまり引用符を妨害します。私は書くことができません:

> this is a quote

なぜなら>はksesルーチンによってエスケープされるからです。これを可能にするためにksesコードを修正するのはややこしく、間違った解決策です(ksesパーサがMarkdownのものにあまりにも密接に結びつくため、正しい解決策はデータを検証することですの後に処理されましたが、気にすることはありません...)。もちろん、私は<blockquote>...</blockquote>タグを直接使用できるので、これは大きな問題ではありません。それだけがその中のMarkdownプロセッサをオフにします。私たちはPHPMarkdownExtraを使っているので(少なくとも、テストは私たちがそうであることを示しているように思われる)、私はブロッククォートの中でMarkdownをオンにするためにmarkdown="1"偽属性を使うことができます。しかし、これは承認された属性のリストに載っていないので、ksesによって取り出されます。

しかし、markdownを承認済み属性のリストに追加することは、> quote構文のサポートを追加するよりもはるかに簡単に思えます。特にこの情報を保持する配列$allowedposttagsがありますので、それは明らかにその配列を単に変更することを意味します。

しかし、これが問題です。その変更を行う適切な場所はどこですか。明らかに、kses.phpを修正することは最後の手段です。私の推測は、正しい変更はmarkdown.phpファイルがこの変更を行うためのものであると思います(これはMarkdownが使用されることを知っているファイルだからです)。 )しかし、上流で変更される可能性のあるものを変更したくない場合は、必要な変更をどこに配置すればよいですか?

(上記で「私」と言っても、SEブログでこれを変更したいので、実際に「私」という意味ではありません。そのため、Rebecca Chernoffが理解できる言語で説明してください。)

2
Loop Space

詳しくはCUSTOM_TAGSを定義することを可能にする定数$allowedposttags, $allowedtags, $allowedentitynamesがあります。

そうすれば、単にCUSTOM_TAGSをtrueに設定して、ksesがインクルードされる前にフックされる関数でグローバルを定義することができます。

$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);
1
kaiser