まだまだ手探りでカスタマイズを進めているTT2(Twenty Twenty-Two)テーマですが、問題が発生しました。

それは、新規作成したテンプレートが編集も削除もできなくなってしまうという現象です。

具体的には、編集して保存しようとすると、以下のように「保存に失敗しました」という赤い帯が表示されて編集を保存できず..

【TT2】作成した投稿や固定ページのテンプレートで編集も削除もできなくなる原因と対処|Personal WP Customization Notes (PWCN)

ダメなら削除とテーマエディタから削除を試みるも、以下のように「URLとリクエストメソッドに一致するルートが見つかりませんでした」と表示されて削除できず..

【TT2】作成した投稿や固定ページのテンプレートで編集も削除もできなくなる原因と対処|Personal WP Customization Notes (PWCN)

という状況です。

同様の現象が出てしまった方のために、この現象が発生する原因と、再編集・削除を可能にする方法を、自身の備忘録も兼ねて紹介しておきます。

原因はテンプレート名の文字列

テンプレートの「新規」をクリックした後で表示される以下の画面で名前が設定できるようになっていますが、問題は名前に使う文字列の種類。

どうやら日本語のようなマルチバイト文字を使うと、テンプレートの編集後の保存・削除でデータベース上のテンプレートが訪ね当たらず、エラーとなってしまうようです。

【TT2】作成した投稿や固定ページのテンプレートで編集も削除もできなくなる原因と対処|Personal WP Customization Notes (PWCN)

編集も削除もできなくなってしまったテンプレートの削除方法

そのテンプレートが使えないということだけですから、テーマエディターなどの一覧に表示されていても気にならないようでしたら、そのまま放置でいいでしょう。

ただ、きちんと?すっきり削除したい!という場合には、サイトのデータが収容されているデータベースを編集する必要があります。

データベースはWordPressを動作させる上で重要なものです。データベース?という方や、phpMyAdminを使ったデータベース編集に慣れていない方は、無理にこの措置をせず、放置されることをおすすめします。

1.サーバーのphpMyAdminを使って、データの一部を変更する

トラブルにならぬよう、分かる方だけに..という意味を込めて、ここからは詳細な説明は省いて専門用語全開で説明しますので、少しでも疑問のある方はやはり放置が望ましいでしょう。

さて、ブロックテーマ(Twenty Twenty-Twoだけなのかは不明)のテンプレートやテンプレートパーツは、なぜか投稿の保存先と同じ「posts」テーブルに保存されています。

「posts」テーブルを開いて、「post_type」列の値が「wp_template_part」になっているもののうち、「post_name」列の値が以下の図のように日本語がURLエンコードされているものが、編集・削除できないテンプレートです。

本当にそのテンプレートなのかは、「post_title」列の値が削除・編集できないテンプレートの名前になっているかで判断できます。

【TT2】作成した投稿や固定ページのテンプレートで編集も削除もできなくなる原因と対処|Personal WP Customization Notes (PWCN)

そして問題となっている「post_name」の値を以下の図のように適当なものに書き換えます。

「wp-custom-template-」の部分は残した方がよさそうです(消してテストはしていません)

【TT2】作成した投稿や固定ページのテンプレートで編集も削除もできなくなる原因と対処|Personal WP Customization Notes (PWCN)

これでデータベース側の処置は終了です。

最悪の場合WordPressが動作しなくなる可能性がありますから、間違ってもこのデータをデータベース上で削除しないでください。

2.テーマエディターで編集・削除できるかを確認

データベース上の措置が終わったら、サイトの管理画面からテーマエディターを開き、先ほどエラーとなっていたテンプレートの編集や削除を行ってみてください(削除してしまうと元に戻せないのでご注意ください)。

下図のように問題なく編集・削除ができれば処置は完了です。

【TT2】作成した投稿や固定ページのテンプレートで編集も削除もできなくなる原因と対処|Personal WP Customization Notes (PWCN)

データベース上ではIDでいろいろなものが繋がっているので、そのままテンプレートを使い続けても問題ないとは思いますが、個人的には気持ち悪い感じがするので一旦削除してテンプレートを作り直した方がいいと考えます。

テンプレート名を日本語にしたいときは

ここまでテンプレート名が日本語(マルチバイト文字)だと、正しくテンプレート名が認識できずに、削除や編集ができないことを書いてきました。

でも、テンプレートエディターで管理したり、投稿や固定ページでのテンプレート選択時に日本語で表示できないのはちょっと困りますね。

そんな時は、以下の手順でテンプレートを作成すれば、日本語で表記されるようになります。

  1. 半角英数字でテンプレートを追加する
  2. テンプレートの編集で名前を日本語に変更する

このようにすると、ひとまずテンプレートを半角英数字で作成することで、テンプレートスラグ(と呼ぶのかは不明ですが、投稿などでいうパーマリンク)が正常に設定されて、ここまでに紹介した問題が出ることがなくなります。

そして、テンプレート名はいわば投稿でいう「タイトル」なので、後から自由に変更しても何ら問題なく使えるようになるのです。

なぜこの現象が起きるのか

ここからは、なぜ今回のような現象が起こるのかを、もう少し詳しく書いておきます。仕組みに興味のない方は読まなくてもよいかも知れません。

問題の根源はカスタム投稿タイプ!?

ブロックテーマのテンプレートやテンプレートパーツは、投稿や固定ページと同じ「投稿タイプ」で管理しています。

これに伴って、テンプレート、テンプレートパーツも投稿や固定ページと同じ「posts」というデータベーステーブルに一緒に保存されるようになっています。

そして、カスタム投稿タイプは基本的に、パーマリンク設定の設定が及ばずに、「タイトル」がそのまま「スラグ(パーマリンク)」としてデータベーステーブル内に登録される仕組みになっていて、日本語などのマルチバイト文字はコードに変換されて保存されます。

通常のカスタム投稿タイプでは、この仕組みで保存されていても、きちんと呼び出されるのですが、テーマエディターのテンプレート・テンプレートパーツでは読み込みがうまくいかないため、本ページのような不具合が発生するものと思われます。

今後WordPress本体(テーマエディター)のバージョンアップによってこの問題は解消されていくかもしれませんが、少なくともバージョン6.1.1の段階で、この問題は解消されていません。

従って、前述したように、以下の段取りでテンプレートやテンプレートパーツを追加することで、日本語環境でも問題なく編集・削除できるようになりますから、当面はそれで対処していきましょう。

  1. 半角英数字でテンプレートを追加する
  2. テンプレートの編集で名前を日本語に変更する