久しぶりにサイト構築の機会がありJetEngineを触っていたところ、『Custom Meta Storage (Beta)』なるものに気づきました。メタフィールドのストレージをデフォルトのpostmetaテーブルとは切り分けるという新機能らしいです。
いつのまに・・・
Chat GPTに聞くと2022年と言い張りますが、CrocoBlockの記事『How to Create Custom Meta Storage for CPT — JetEngine | Crocoblock』が2024年の8月、記事内動画が7、8月くらいなので、おそらくは2024年夏、つい最近のことだと思います。
これは画期的です。
CPTやカスタムメタフィールドのデータは表面上分けて管理されていますが、裏側では分けられておらず、すべてのデータがデフォルトの投稿と同じpostmetaテーブルに格納されていました。このためデータ数が多くなってくるとpostmetaテーブルを参照する回数が膨大となり読み込み速度に影響を与える問題がありました。
そこでCrocoblockが提唱・提供を始めたのがCCT(カスタム・コンテンツ・タイプ)。postmetaとは切り離されたテーブルにデータを格納するので読み込み負荷を低減するのですが、複雑な構成を作ろうとするとやや面倒でした。具体的にはCCTではコンテンツごとにシングルページを持ちません。『Has Single Page』機能を有効にすることでCPTと同期する形のシングルページを持たせることもできますが、Dynamic Fieldで値を呼び出すときや、Form Builderでフロントエンドから記事を投稿させるときのForm関連付けなど、とにかくマニアックで面倒くさく大変でした。
RelationsでCCTに親子関係を持たせると更に大変です。Dynamic Fieldでは、current CPTから関連CCTを呼び出し、そのCCTの親あるいは子CCTが持つMeta Fieldを取りに行くので処理が大変複雑です。
今回のこの『Custom Meta Storage』は、上記の問題を解決する手段として用意されたと思われます。
これにより、
このような場合はCPT『Custom Meta Storage』を選択、
このような場合はCCT。
といった切り分けとなってくるでしょう。
ただ、まだ日が浅く、何よりBeta機能となっておりますので、すぐに飛びつくのは時期尚早かもしれません。具体的には次のような問題が生じる可能性があります。
十分な経験があり自己処理できない方は、Betaが外れてから使用した方が良いでしょう。特に、従来のCPTを『Custom Meta Storage』に切り替えるようなことは、何が起きるか分かりませんのでおすすめしません(私はクライアントのサイトなど大事なデータでは絶対に行いません)。
あともう一つ。
JetEngineでは、MetaデータをCPTごとに直接作成する場合と、Meta Boxesに作成してCPTと関連付ける方法が用意されています。『Custom Meta Storage』は、CPTに直接作成する場合にのみ提供されており、Meta Boxesに作成する場合は従来通りpostmetaテーブルに格納されてしまいますので覚えておきましょう。
以上、JetEngineの『Custom Meta Storage』についてでした。
441-8102
愛知県豊橋市山田一番町120
0120-115-118