web-dev-qa-db-ja.com

複数のget_post_meta値を効率的に取得する方法を教えてください。

複数のget_post_meta値を返すための解決策を探しています...

現在私は次のようにメタボックス配列を使用しています。

$meta_boxes[] = array(
'id' => 'setlist',
'title' => 'Setlist Information',
'pages' => array('post'),
'fields' => array(
    array(
        'name' => 'Setlist 1',                  // field name
        'desc' => 'Entry 1',                                    // field description, optional
        'id' => $prefix . 'setlist_1',              // field id, i.e. the meta key
        'type' => 'text',                   // text box
        'std' => '',                                            // default value, optional
        'style' => 'width: 100px',              // custom style for field, added in v3.1
    ),
            array(
        'name' => 'Setlist 2',                  
        'desc' => 'Entry 2',                                    
        'id' => $prefix . 'setlist_2',              
        'type' => 'text',                                       
        'std' => '',                                            
        'style' => 'width: 100px',              
    ),

などなど(つまりsetlist_3,4,5,6,7,8 ....)

私のsingle.phpには

<?php if ( get_post_meta( $post->ID, 'rw_setlist_1', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_1', true ); echo "</li>"; ?>
<?php endif; ?>
<?php if ( get_post_meta( $post->ID, 'rw_setlist_2', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_2', true ); echo "</li>"; ?>
 <?php endif; ?>
 <?php if ( get_post_meta( $post->ID, 'rw_setlist_3', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_3', true ); echo "</li>"; ?>
 <?php endif; ?>
 <?php if ( get_post_meta( $post->ID, 'rw_setlist_4', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_4', true ); echo "</li>"; ?>
 <?php endif; ?>
 <?php if ( get_post_meta( $post->ID, 'rw_setlist_5', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, 'rw_setlist_5', true ); echo "</li>"; ?>

セットリストの値は2から30の範囲です。

私は頭がおかしいと思っていますが、この方法では不要で長時間のロード時間が発生するように思えますが、正しいですか?それでは、配列内のすべての値を「より簡単な方法で」チェックするための、より効率的なスクリプトの作成方法を説明します。

5
mmaximalist

コードの設定方法が間違っています。カスタムフィールドごとに2つのデータベース呼び出しを行っています。このように2〜30のフィールドがある場合は、1回の呼び出しで60回以上データベースを呼び出すことができます。例: get_post_custom()

$custom_fields = get_post_custom($post->ID);
for ($i = 1; $i <= 30; $i++) { 
    if(isset($custom_fields["rw_setlist_$i"])){
        echo "<li>"; 
        echo $custom_fields["rw_setlist_$i"];
    echo "</li>"; 
    }
}
5
Bainternet

私はget_post_meta()(より正確にはそれが呼び出すget_metadata()関数)が1つの問い合わせで投稿のためのすべてのメタデータを取得し、その後の呼び出しのためにそれをキャッシュすると思います。コードの冗長性については、明示的に順序付けする必要がない場合は、それらすべてを単一のキーの下に保存して、それらを配列として取得するだけで済みます。

5
Milo