WordPressでunfiltered_html権限の付与でHTMLエスケープを回避
WordPressをマルチサイトで運用しており、サイトごとにプロフィールを変えるため、1サイト1ユーザーを管理者の権限で作成して、別々のユーザーで投稿などをしていた。
しかし、TwitterやData URIによる画像の埋め込みなど行うと、なぜかプレビューや公開後に表示されない。同じ内容を特権管理ユーザーでプレビュー・投稿すると何も問題がない。
調べてうまく解決できたの対策を記す。WordPress 5.8.4で確認した。
調べたところ、ユーザーの権限にunfiltered_htmlがあり、これが付与されていないと、投稿時にHTMLがエスケープ処理されてしまうらしい。
unfileterd_htmlの権限が付与されるのは、特権管理者 (Super Admin) とシングルサイトの場合のみ管理者 (Administrator) と編集者 (Editor) のみとなる (Roles and Capabilities – WordPress.org Forums)。
マルチサイトの場合、特権管理者しかこの権限が付与されない。付与するにはfuncitons.php
などで権限を付与する必要がある。
具体的な方法は以下を参考にした。
上記サイトを参考に、「管理者 (administrator)」と「編集者 (editor)」の権限にunfiltered_htmlの権限を付与するプラグインが以下となる。
念のためGitHubでも公開している。
シングルサイトでは、add_cap()で権限を付与できるのだが、マルチサイトでは有効にならないため、方法が異なっている。おそらく、マルチサイトの書き方でシングルサイトもカバーできると予想するが、検証はできていない。
上記内容をテーマごとのfunctions.phpに記載してもいいのだが、マルチサイト全体で適用したいので、上記ファイルをwp-content/mu-plugins/
に配置する。
これでマルチサイト全体で、管理者権限のユーザーにunfiltered_htmlが適用され、画像やTwitterの埋め込みコードを問題なく投稿できる。
なお、これを実現するプラグイン「Unfiltered MU – WordPress plugin | WordPress.org」が公開されているので、これをインストールして使ったほうがいいかもしれない。こちらのプラグインも、管理者と編集者にunfileterd_htmlの権限を付与してくれる。
“WordPressでunfiltered_html権限の付与でHTMLエスケープを回避” に対して1件のコメントがあります。