定番ブログエンジンの「WordPress」を使って複数人でサイトを運営していると、本文中のHTMLタグや属性が保存時に削除されてしまう問題に悩まされることがある。
この現象は、権限の少ない「寄稿者」や「投稿者」に分類されているユーザーが記事を保存する際に発生する。そのため、執筆担当者から問題を報告されても、管理者のアカウントでは再現出来ずに、解決に苦労することも多い。
HTMLタグが削除されるのは、十分に信頼できない執筆者が有害なHTMLを埋め込んだりできないようにするためだが、動画などの埋め込みによく使われる「iframe」タグも使えなくなってしまうので困ることが多い。
これらのHTMLタグの使用制限を解除する方法としては、権限を「編集者」以上にするのが手軽だが、「編集者」権限では他の人の投稿の編集など、多くの操作が許可されてしまう。
HTMLタグ使用制限だけを解除したければ、テーマディレクトリの「functions.php」にフィルタ処理を追加し、許可する操作のリストを上書きしてやろう。
また、フィルタを使えば、許可するHTMLタグ・属性のリストを上書きして、特定のタグのみ制限を解除することも可能だ。
WordPressでは、管理画面にアクセスできるユーザーにも「管理者」「編集者」「投稿者」「寄稿者」の4段階の権限グループがある。HTMLタグの制限は「投稿者」「寄稿者」のみに適用されるので、信頼できるメンバーならば「編集者」や「管理者」の権限を与えておくといいだろう。
・ユーザーの種類と権限 - WordPress Codex 日本語版
add_filter('user_has_cap','allow_unfiltered_html',10,3); function allow_unfiltered_html($allcaps, $cap, $args ){ $allcaps['unfiltered_html']=$allcaps['edit_posts']; return($allcaps); }
ハンドルネームしか知らない外注のライターなど、十分に信頼できない執筆者のHTMLタグ使用制限を解除したい場合は、テーマファイルのディレクトリにある「functions.php」に上記のコードを追加しよう。記事編集権限のあるユーザーに無制限のHTMLタグ使用が許可されるぞ。
add_filter('wp_kses_allowed_html','allow_embeddings',10,2); function allow_embeddings($tags,$context){ if($context=='post'){ $tags['iframe']=array( 'class'=>array(), 'src'=>array(), 'width'=>array(), 'height'=>array(), 'frameborder'=>array(), 'scrolling'=>array(), 'allowtransparency'=>array(), 'marginheight'=>array(), 'marginwidth'=>array() ); $tags['script']=array( 'src'=>array(), 'type'=>array(), ); $tags['embed']=array( 'style'=>array(), 'type'=>array(), 'id'=>array(), 'height'=>array(), 'width'=>array(), 'src'=>array(), 'object'=>array( 'height'=>array(), 'width'=>array(), 'param'=>array( 'name'=>array(), 'value'=>array() ) ) ); $tags['object']=array( 'height'=>array(), 'width'=>array(), 'param'=>array( 'name'=>array(), 'value'=>array() ), 'embed'=>array( 'style'=>array(), 'type'=>array(), 'id'=>array(), 'height'=>array(), 'width'=>array(), 'src'=>array() ) ); } return($tags); }
特定のタグの制限を解除したい場合は、上記のように「wp_kses_allowed_html」のフィルタ処理を追加しよう。この例では、動画などの埋め込みに使われるiframe、script、embed、objectのタグと主要属性を許可している。