はい、theme_mod関数は遅くなりますが、それほど大きくはないという答えと、違いよりも利点のほうが重要です。
テーマmodはオプションとして保存されます。したがって、本質的に、theme_mod関数はオプション関数のラッパーです。
まず、theme_modの設定は、特定のテーマ名をキーとする単一のオプションの配列として保存されることを理解してください。したがって、これを行うと:
set_theme_mod('aaa',123);
set_theme_mod('bbb',456);
その後、実際にデータベースで取得するのは、( 'aaa' => 123、 'bbb' => 456)のシリアル化された配列を含むtheme_mods_themenameという名前の単一オプション行です。
さて、get_theme_mod
それは実際には二つ作っているので、遅くなりますget_option
呼び出しを。まず、テーマの名前を取得します。次に、theme_mods_themename
オプションを取得します。そのため、速度が50%低下します。行われた残りの作業は主にフィルターにあり、追加のフィルターコールがありますが、そのフィルターで何かを持っている場合を除き、これは少し重要です。
オプションシステムは取得したデータをオブジェクトキャッシュに保存するため、ここでは複数のデータベース呼び出しを行っていないことに注意してください。最初に使用した場合のみ、データベースにヒットします。
set_theme_mod
それはそれは別となり、これらの同じ2つのgetオプションの呼び出しを行うので、多少遅くなりますget_option
再びテーマ名を取得するための呼び出しをした後、それがないupdate_option
今、変更オプションのフルセットで。これによりデータベースの更新が発生し、大量のデータを送信しているという事実が実際に顕著な減速の原因になります。数バイトの更新は、大きな行の更新よりも高速です。ただし、通常は気づくほどではありません。たくさんの設定がある場合を除き...
テーマmod関数は、おそらく全体的な最適化が原因であると考えられますが、子テーマのため、get_optionなどの代わりに引き続き使用する必要があります。
オプション行を直接使用する場合の問題は、オプション行を直接使用し、設定に特定のキー名を使用することです。
「AAA」というテーマがあり、そのテーマの別のサイトで使用する「BBB」という子テーマを作成する場合、「AAA」テーマでは「example」という名前のオプションを使用できます。1つのサイトを更新し、それがオプションを更新すると、同じオプションが子テーマに適用されるようになります。そうしたくない場合はどうすればよいですか?子テーマで別のオプション設定セットを使用する場合はどうなりますか?
キーの一部として実際のテーマ名(ハードコーディングされた値ではなく)を含めることにより、テーマmodは、サイト上の各「テーマ」が独自の設定セットを使用するようにします。私は前後に切り替えることができ、設定はそれらの間で転送されず、それらは私がそれらを設定した方法のままです。よりシンプルで、より明確で、より直感的です。
また、将来のコアの変更またはプラグインによってtheme_modsの動作が変更された場合は、変更することなく自動的にその利点が得られます。ラッパーは常に遅くなりますが、それは避けられない、ラッパーの性質です。それでも、あなたはまだ機械語ではなくPHPコードを書いています。このようなラッパーを使用して、物事を簡素化し、機能を分離します。テーマは、オプションがデータベースにどのように格納されるか、または命名がどのように機能するかを知っている必要はありません。theme_mod関数は、より簡潔でシンプルなソリューションを提供します。
/wp-includes
にoption.php
どこget_option()
に定義されており、でtheme.php
どこがget_theme_mod()
定義されている、あなたは、後者が実際に呼び出すことがわかりますget_option()
任意の必要なフィルタを適用し、それの延長として機能し、自分自身を。なぜ遅いのか説明できます。