wordpressで投稿時にhtmlタグが削除される権限問題について(instagram,twitterの埋め込み時)

ユーザーに投稿者権限を与えて、インスタグラムやtwitterを投稿して欲しいときに、レイアウトが崩れるという問題が発生してしまいました。

その時の原因と対策を紹介したいと思います。

早速原因ですが、どうやら一部のhtmlタグは管理者権限でないと投稿できないという仕様であることが判明。しかも投稿できないならまだしも自動的に削除されるという仕様。

最初にしらべて見つかった記事は以下の記事でした。

wordpressでiframeが無効になる現象を解決する方法

それでinstagramを投稿したときに削除されるタグを調べて、以下のように個別にタグを追加しました。

最初は以下のように使える属性を追加しようと思いましたが、うまく行きませんでした。

function test_save_pre($content){
    global $allowedposttags;

    // 使える属性を指定する
		$allowedposttags['blockquote'] = array_merge($allowedposttags['blockquote'],array(
			'data-instgrm-version' => true,
			'style'=>true
		));
		$allowedposttags['time'] = array(
			'datetime' => array() ,
			'style'=>array()
			);
		$allowedposttags['script'] = array(
			'async' => array(),
			'defer'=>array(),
			'src'=>array(),
			'defer'=>array()
			);

    return $content;
}

果たして、この方法が一番いいのか。。。

改めて考え直す。
そういえば管理者だけにその権限があるならば、そういう権限ロールがあるんじゃないか。
そう思いはじめて調べてみたら、、、

ありました。

unfiltered_html

というすばらしい権限が。

htmlフィルタをかけないという権限。これを加えれば解決するんじゃないか。

さっそく投稿者にこの権限を追加しました。
ちなみに投稿者はauthorという名称です。

その他は
管理者:Administrator
編集者:Editor
投稿者:Author
寄稿者:Contributor
購読者:Subscriber

となっています。ちなみに全く新しい権限グループを作成することも可能ですが、ここでは割愛します。

function add_theme_caps(){
    $role = get_role( 'author' );
    $role->add_cap( 'unfiltered_html' );
}
add_action( 'admin_init', 'add_theme_caps' );

このコードをfunctions.phpの最後に挿入します。

get_role は指定した権限の種類を配列形式で取得し、
add_capは権限一覧にある権限を追加することが出来ます。

そして、試してみると、、、

投稿出来た!!

もっと早く気づくべきやった。。。

終わり。