WordPress6.2.1以降+ブロックテーマで、テンプレートに挿入したショートコードが動かなくなった時の対処

公開日:2023(令和5)年5月17日/最終更新日:

WordPress Create Shortcodes | Personal WP Customization Notes (PWCN)

【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています



ブロックテーマ(ブロック形式でテンプレートを編集するタイプのテーマ)を有効にしているWordPressを、バージョン6.2.1へ更新したら、投稿や固定ページでショートコードがそのまま表示されるようになってしまったという状況に遭遇した方、ちょっとびっくりしたと思います。

今回の更新は6.2.xへの変更というセキュリティや不具合に関するマイナーアップデートなので、基本的にはすべての更新をオフにするというような措置をしていないサイトでは、100%自動で更新されます。そして、セキュリティ対策の1つとして、テンプレートに直接書いたショートコードを実行しないようにするというものが追加され、不具合?と思える症状が出ているのです(詳しくは後述します)。

そこで本ページでは、いきなりショートコードがそのままになってしまって困っている方のために、対処方法を大きく4つ紹介します。

ブロックテーマのテンプレートでショートコードを動かす方法

1.部分的にテンプレートパーツ化して挿入する

このセキュリティ更新では「テンプレートに直接挿入したショートコードは実行しない」という条件付きになっています。したがって、テンプレートパーツにショートコードを含むコンテンツを作り、それをテンプレートへ挿入すれば問題なく動作します。

テンプレートパーツはHTML上divタグで括られるようになっていますが、div要素は単なる部品ですよと認識されるだけなので、恐らくページ解析上問題は出ないと思います(専門家ではないので責任は持てません)

2.テンプレートのそのものをテンプレートパーツ化して挿入する

1を拡張した方法です。テンプレートパーツにして挿入すれば動作するのですから、部分的ではなく、投稿テンプレートの本文部分をすべてパーツにして、テンプレートへはパーツを挿入するという手法です。

ショートコードがたくさんあって部分的にパーツ化すると管理が大変になるという場合にはこの方法の方がおすすめです。

テンプレートパーツはHTML上divタグで括られるようになっていますが、div要素は単なる部品ですよと認識されるだけなので、恐らくページ解析上問題は出ないと思います(専門家ではないので責任は持てません)

3.テンプレートでもショートコードが実行される状態に戻す

これは、「6.2.1 を使い続けたいが、テンプレートのショートコードのサポートを復元する必要がある場合は、この回避策を試すことができます。」に掲載されている方法なのですが、あまりおすすめしません。というのも、冒頭で書いた通り、セキュリティ上のリスクとなると思われるものを放置することになってしまうからです。

6.2.1 を使い続けたいが、テンプレートのショートコードのサポートを復元する必要がある場合は、この回避策を試すことができます。」では、コードをプラグイン化して挿入するという形で紹介されていますが、プラグイン化なんて分からないという方のために一応以下からダウンロードできるようにしておきます。ダウンロード後、プラグインの追加から「プラグインのアップロード」を選択してアップロードインストール&有効化してください。

WordPress6.2.2以降でこのプラグインを有効にしていると、囲みショートコードが動作しなくなります(pタグが補完されて不具合がでます)ので、6.2.2へ更新後は必ず停止・削除してください

累計ダウンロード数:68回

このプラグインは、WordPress6.2.1、Twenty Twenty-Twoテーマで動作確認したものであり、環境によっては不具合が起こるかも知れません。不具合に関して責任は負えませんので了承の上使用ください。またコードについては上記リンク先ページのものをそのまま封入していますので、コードについてお問い合わせいただいてもお答えできません

4.ひとまずバージョン6.2へ戻す

何も解決はしませんが、ひとまず今起きていることだけ無効にしたい(やり過ごしたい)場合の緊急措置です。

冒頭で書いた通り、これはセキュリティアップデートなので、特別な措置をしている場合を除き、基本的に更新を拒否することはできません。

従って以下の措置が必要になります。

ただ、本当にやり過ごすという方法なので、こちらもおすすめはしません。

QA Analytics QA Analytics

テンプレートでショートコードが動作しなくなった理由

突然こうなるとびっくり..と言いたいところですが、諸所の開発のやり取りなど読んでいると以前からこの件は対処する予定だったようです(泣)。

以下のコアの開発ページでユーザー同士がやり取りをしていて、発言が進んでいます。

WordPress 6.2.1 ショートコード 一部のショートコードが機能しなくなりました。

テンプレート内にショートコードを直接展開するというのがセキュリティ上よろしくないということに対する対処のようですが、そもそもテーマテンプレートだけがどうして?というのがどこにも書かれていないことが混乱を招いているようです(私にもテンプレートはダメでテンプレートパーツや投稿・固定ページの本文はOKというのがなぜなのか分かりません..)。

証拠に、自身のサイトで同じ問題が発生しているなら(というかこのページを見てるのだから恐らく発生してるのでしょう)、以下のことに気づくと思います。

  • 「コンテンツ」ブロック(本文のブロック)に挿入したショートコードは問題なく機能している
  • テンプレートパーツに挿入したショートコードは問題なく機能している

つまり、前述した通りで、テンプレート内に直接挿入したショートコードは展開されない(動作させない)ということなのです。

上記追記部分のことがリスクとなる可能性があるということは、恐らく今後のバージョンアップで元に戻る可能性は低いのかなぁというのが至って個人的な見解です。

要は、テンプレートはその中に含まれるショートコードが実行されてはいけない場所に書かれたものまで実行されてしまう可能性があるが、テンプレートパーツはそれ自体が「テーマエディター」メニューが操作できる人(つまりはブロックテーマの編集権限のある人)でないと改変できない場所であるからということなんですね。

これは多分プラグインの設定画面やテーマのカスタマイザーを作ったことがあったり、フロントエンドの入力フォームや編集画面のカスタムフィールド保存用メタボックスを作ったことのある方なら、その画面を開くための権限を設けたり、そのフォームからの入力だけを受け付けるようにしたりしてセキュリティを保つ措置と似ていて、何となくピンとくる話ですね(こない?とすると危険なカスタマイズをしている方なのかも..)。

後述

2023年5月18日にこのサイトでもテンプレート内でショートコードを使っている部分をテンプレートパーツ化して挿入する措置を行いました。一応パーツ化したところはdiv要素で囲まれますが、div要素は特にHTML上で意味を持たない(何かの塊)ので、特に何かに影響が出るということでもないかと思います(専門家ではないので責任は持てません)。

まあ10年近くWordPressのお世話になってきて、普段の更新では「え?」となることはほとんどなかったのですが、今回はアナウンスなく(と認識しています)だったことと、たまたまその時間に他の機能を触っていたことから、何がどう影響しているのかに戸惑ってまごまごしました(泣)。

冒頭で紹介したやり取りによれば、今回の変更について、WordPressのセキュリティチーム自体(Automattic社)が関与しての措置ではなかったようなことが書かれていますが、今まで、公式の更新チーム?以外の変更が未チェックで有効になったことがあったのかなかったのかというのは定かではないですが、もしも今回のことで、チェックされずに何かの変更ができてしまうということであれば、今までの、また、これからの更新でも同様のことが起こるかもしれない、何か悪意のあるコードなどが挿入されていても気づかないなんてことがあったら..とちょっと飛躍的ですが不安がよぎりました。



Lolipop ServerMoshimo Ad x-serverMoshimo Ad

WordPress Trouble Shooting and Repair | Personal WP Customization Notes (PWCN)
【Polylang】プラグインの初期設定で誤った言語を指定してしまったときの対処(元の言語に戻す方法)