web-dev-qa-db-ja.com

挿入後のsrcタグのdata:image属性を許可するにはどうすればよいですか?

wp_post_insert()を使用して投稿を挿入しています。そして私の投稿の内容は次のようになります:

<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAN4AAAB6CA { ... }

しかし、挿入プロセスでは、Wordpress removesデータ属性です。したがって、上記のコードは次のようになります。

 <img src="image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAN4AAAB6CA { ... }

私はこのようなものを試しましたが運がありません:

function my_filter_allowed_html($allowed, $context){
if (is_array($context)) {
    return $allowed;
}

if ($context === 'post') {
    $allowed['img']['data'] = true;
    $allowed['src']['data'] = true;

}

return $allowed;
}
add_filter('wp_kses_allowed_html', 'my_filter_allowed_html', 10, 2);

どうすればこれを回避できますか?

2
tpbafk

naththedeveloper からStackOverflow answered に感謝し、うまくいきました。

さて、これは見つけるのが悪夢でしたが、WordPress wp_insert_postからフックするコードを調べた結果、解決したと思います。これをfunctions.phpファイルを確認し、機能することを確認します。

add_filter('kses_allowed_protocols', function ($protocols) {
    $protocols[] = 'data';

    return $protocols;
});

本質的にWordPressの内部には、コンテンツ内のURLのプロトコルをチェックし、望ましくないURLを取り除くフィルターがあります。デフォルトでは、サポートされているリストはデータプロトコルをサポートしていません。上記の関数は、それをサポートされるプロトコルのリストに追加するだけです。

このフィルターは、管理者の場合は実行されません。おそらくログアウトしたときにのみこの問題が発生するのはこのためです。

研究ありがとうございます。

1
tpbafk