web-dev-qa-db-ja.com

高度なカスタムフィールド - クエリ効率

テスト目的のために、私はpage.phpを編集して他に何もないようにしました:

<?php while ( have_posts() ) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php $site_options = get_fields('options'); ?>
<?php endwhile; ?>

Get_header、get_footerを削除し、ACFプラグインのみを有効にしました。まだ開発の初期段階にあり、初期テストをいくつか行っているためです。 get_fieldsを呼び出さずにページを表示すると9つのクエリがレポートされますが、get_fieldsを使用してページにアクセスすると72のクエリにジャンプします。それは1つか2つのクエリによってぶつかるべきであるように思えます…63ではなく。

クエリは以下を使用して報告されます。

get_num_queries();

Get_options呼び出しからの結果:

Array(
[main_ad_-_image] => Array
    (
        [id] => 25
        [alt] => TEST
        [title] => lg-social_media
        [caption] => 
        [description] => 
        [mime_type] => image/png
        [url] => {urlhere}
        [width] => 460
        [height] => 260
        [sizes] => Array
            (
                [thumbnail] => {urlhere}/wp-content/uploads/lg-social_media-150x150.png
                [thumbnail-width] => 150
                [thumbnail-height] => 150
                [medium] => {urlhere}/wp-content/uploads/lg-social_media-220x124.png
                [medium-width] => 220
                [medium-height] => 124
                [large] => {urlhere}/wp-content/uploads/lg-social_media.png
                [large-width] => 460
                [large-height] => 260
            )

    )

[main_ad_-_url_type] => ext
[main_ad_-_url] => www.google.com
[small_ad_1_-_image] => Array
    (
        [id] => 28
        [alt] => Fake Text
        [title] => fake-text
        [caption] => 
        [description] => 
        [mime_type] => image/png
        [url] => {urlhere}/wp-content/uploads/fake-text.png
        [width] => 220
        [height] => 120
        [sizes] => Array
            (
                [thumbnail] => {urlhere}/wp-content/uploads/sm-fake-text-150x120.png
                [thumbnail-width] => 150
                [thumbnail-height] => 120
                [medium] => {urlhere}/wp-content/uploads/sm-fake-text.png
                [medium-width] => 220
                [medium-height] => 120
                [large] => {urlhere}/wp-content/uploads/sm-fake-text.png
                [large-width] => 220
                [large-height] => 120
            )

    )

[small_ad_1_-_url_type] => ext
[small_ad_2_-_image] => Array
    (
        [id] => 30
        [alt] => Fake Text 2
        [title] => fake-text2
        [caption] => 
        [description] => 
        [mime_type] => image/png
        [url] => {urlhere}/wp-content/uploads/fake-text2.png
        [width] => 220
        [height] => 120
        [sizes] => Array
            (
                [thumbnail] => {urlhere}/wp-content/uploads/fake-text2-150x120.png
                [thumbnail-width] => 150
                [thumbnail-height] => 120
                [medium] => {urlhere}/wp-content/uploads/fake-text2.png
                [medium-width] => 220
                [medium-height] => 120
                [large] => {urlhere}/wp-content/uploads/fake-text2.png
                [large-width] => 220
                [large-height] => 120
            )

    )

[small_ad_1_-_url] => www.google.com
[main_ad_-_page] => {urlhere}
[small_ad_2_-_url_type] => ext
[small_ad_2_-_url] => www.google.com
[small_ad_3_-_image] => Array
    (
        [id] => 27
        [alt] => Fake Text 3
        [title] => fake-text3
        [caption] => 
        [description] => 
        [mime_type] => image/png
        [url] => {urlhere}/wp-content/uploads/fake-text3.png
        [width] => 220
        [height] => 120
        [sizes] => Array
            (
                [thumbnail] => {urlhere}/wp-content/uploads/fake-text3-150x120.png
                [thumbnail-width] => 150
                [thumbnail-height] => 120
                [medium] => {urlhere}/wp-content/uploads/fake-text3.png
                [medium-width] => 220
                [medium-height] => 120
                [large] => {urlhere}/wp-content/uploads/fake-text3.png
                [large-width] => 220
                [large-height] => 120
            )

    )

[small_ad_3_-_url_type] => ext
[small_ad_3_-_url] => www.google.com
[small_ad_4_-_image] => Array
    (
        [id] => 29
        [alt] => Fake Text 4
        [title] => fake-text4
        [caption] => 
        [description] => 
        [mime_type] => image/png
        [url] => {urlhere}/wp-content/uploads/fake-text4.png
        [width] => 220
        [height] => 120
        [sizes] => Array
            (
                [thumbnail] => {urlhere}/wp-content/uploads/fake-text4-150x120.png
                [thumbnail-width] => 150
                [thumbnail-height] => 120
                [medium] => {urlhere}/wp-content/uploads/fake-text4.png
                [medium-width] => 220
                [medium-height] => 120
                [large] => {urlhere}/wp-content/uploads/fake-text4.png
                [large-width] => 220
                [large-height] => 120
            )

    )

[small_ad_4_-_url_type] => ext
[small_ad_4_-_url] => www.google.com
[facebook] => www.facebook.com
[Twitter] => Twitter.com
[youtube] => www.youtube.com
[office_address] => text
[office_address_-_google_url] => test
[office_-_phone] => 1234567890
[office_-_800_#] => 8001234567
[office_-_email] => [email protected])

私はこれについて心配するべきですか?

3
Nate

これが予想以上に多くのクエリを生成する理由はいくつかあります。

まず、ACFはフィールドを2つの異なるデータとして格納します。1つはそのフィールドに関する情報、選択した設定、出力のフォーマット方法などを含み、もう1つはそのフィールドに割り当てられた実際の値を含みます。つまり、フィールドごとに追加のクエリ、つまりフィールドデータとフィールドのメタデータがあります。

もう一つの理由はあなたが持っているフィールドの種類とあなたがどのようにフォーマットオプションを設定したかに関係しています。たとえば、画像フィールドには、選択した画像オブジェクトを読み込むオプションがあります。つまり、各画像参照について、ACFは添付画像のURLとメタデータをクエリする必要があります。これにより、各画像に対して追加のクエリが生成されます。

あなたはこれについて心配するべきですか?

まず、ACFのドキュメントでは、フィールド名がわかっている場合や、ページを読み込むたびにそのデータのすべてを使用しない場合はget_fieldsの使用をお勧めします。関数は効率の悪いLIKEクエリを使用してすべてのフィールド名を検索します。 。

パフォーマンスが問題になる場合は、できることがいくつかあります。1.キャッシュプラグインを使用して負荷を軽減する、または2.データが変更されたときに自分でキャッシュする。 acf/save_post アクションをフックして、すべてのデータを単一のオプションの配列として保存すると、フロントエンドの単一のget_optionクエリですべてのデータを読み込むことができます。

8
Milo