@angus さん、こんにちは。EDD からのニュースを以下にお伝えします。
WP Discourse プラグインの問題を特定しましたので、開発者へお伝えいただけますでしょうか。
問題は以下のファイルにあります:
lib/discourse-comment.php
具体的には、このフィルターです:
add_filter( ‘wp_kses_allowed_html’, array( $this, ‘extend_allowed_html’ ), 10, 2 );
デフォルトでは、彼らがフィルター処理している配列には以下が含まれています:
array (
‘align’ => true,
‘dir’ => true,
‘lang’ => true,
‘xml:lang’ => true,
‘aria-describedby’ => true,
‘aria-details’ => true,
‘aria-label’ => true,
‘aria-labelledby’ => true,
‘aria-hidden’ => true,
‘class’ => true,
‘id’ => true,
‘style’ => true,
‘title’ => true,
‘role’ => true,
‘data-*’ => true,
)
特に注目すべきは最後の項目です:‘data-*’
WP Discourse プラグインは、この配列に data-youtube-id 属性を追加するためにフィルター処理を行っていますが、その結果として意図せず data-* 属性が解除されてしまいます。これにより、wp_kses_post() 下で他のすべての data 属性が機能しなくなります。これが当社の PayPal コードに問題を引き起こしています。
ただし、はっきりさせておきますと、WP Discourse が PayPal への接続を切断しているわけではありません。接続されているかどうかを確認するコードが壊れているだけです。これは、当社のマークアップで data 属性を使用しており、WP Discourse のフィルターがそれを削除してしまうためです。
開発者への提案としては、配列を上書きするのではなく、$allowedposttags[‘div’] 配列を拡張することです。
以下のコードの代わりに:
$allowedposttags[‘div’] = array(
‘class’ => true,
‘id’ => true,
‘style’ => true,
‘title’ => true,
‘role’ => true,
‘data-youtube-id’ => array(),
);
以下のようにしてください:
$allowedposttags[‘div’][‘data-youtube-id’] = array();
これにより問題が解決し、彼らの機能もこれまで通り維持されるはずです。