WordPress

カスタムHTMLブロック内で要素や属性が消える対策

記事内に商品プロモーションを含む場合があります

WordPressのブロックエディタ上のカスタムHTMLブロックに入力した一部のHTMLタグや属性が、投稿を保存するタイミングで消えてしまうことがありました。この記事ではその原因と対策を解説します。

タグや属性が消える原因

WordPressがデフォルトで備えている「kses」というライブラリによって、「特権管理者」以外のユーザーが入力したHTMLタグや属性の一部がセキュリティ対策として消去してしまうのが原因です。

開発者は普段から特権管理者で作業することが多いので、下位権限のユーザーがポストした投稿が崩れているのを見るまで、この現象に遭遇しないと思います。私も初見では何が起きてるのかわかりませんでした。

解決方法

この現象は、wp_kses_allowed_htmlのフィルターフックをカスタマイズすることで解決できます。

たとえば、

・divタグのstyle属性
・sourceタグのsrcset属性
・pictureタグ

の3つを消えないようにしたければ以下のようなコードをfunctions.phpに追加します。

function set_wp_kses_allowed_html($tags, $context)
{
  if ($context === 'post') {
    $tags['div']['style'] = true;
    $tags['source']['srcset'] = true;
    $tags['picture'] = true;
  }
  return $tags;
}
add_filter('wp_kses_allowed_html', 'set_wp_kses_allowed_html', 10, 2);

このような記述を消去されたくないタグや属性に対して追記していくだけです。

===

コレカラウェブはWordPress・SEOを中心にお仕事を承っております。ポートフォリオを掲載していますので、こちらも併せてご覧ください。まずはお気軽にお問い合わせくださいませ。

「いいね!」と思ったら、クリックお願いいたします<m(__)m>
にほんブログ村 IT技術ブログ WordPressへ にほんブログ村 IT技術ブログ Web製作へ にほんブログ村 その他生活ブログ フリーランス(ITエンジニア系)へ
WordPressランキング Webサイト・CGIランキング フリーランスランキング

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA