Como posso recuperar vários valores get_post_meta de forma eficiente?

Estou procurando uma solução para retornar vários valores get_post_meta …

Atualmente estou usando uma matriz de checkbox de caracteres da seguinte maneira:

$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, ie 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', ), 

e assim por diante (ou seja, setlist_3,4,5,6,7,8 ….)

No meu single.php eu tenho:

 ID, 'rw_setlist_1', true ) ) : echo "
  • "; echo get_post_meta( $post->ID, 'rw_setlist_1', true ); echo "
  • "; ?> ID, 'rw_setlist_2', true ) ) : echo "
  • "; echo get_post_meta( $post->ID, 'rw_setlist_2', true ); echo "
  • "; ?> ID, 'rw_setlist_3', true ) ) : echo "
  • "; echo get_post_meta( $post->ID, 'rw_setlist_3', true ); echo "
  • "; ?> ID, 'rw_setlist_4', true ) ) : echo "
  • "; echo get_post_meta( $post->ID, 'rw_setlist_4', true ); echo "
  • "; ?> ID, 'rw_setlist_5', true ) ) : echo "
  • "; echo get_post_meta( $post->ID, 'rw_setlist_5', true ); echo "
  • "; ?>

    Os valores da set-list podem variar de 2 a 30 …

    Me chame de louco, mas eu sinto como se esse método causasse tempos de carregamento desnecessários e longos, estou certo? Então, como eu iria sobre a criação de um script mais eficiente para isso que verificaria todos os valores na matriz de uma maneira “mais simples”.

    Solutions Collecting From Web of "Como posso recuperar vários valores get_post_meta de forma eficiente?"

    A maneira como o seu código está configurado está errada, você está fazendo duas chamadas de database para cada campo personalizado e se você tiver entre 2-30 campos como este, isso significa que você faz mais de 60 chamadas para o database, o que pode ser feito com uma única chamada usando get_post_custom() para ex:

     $custom_fields = get_post_custom($post->ID); for ($i = 1; $i < = 30; $i++) { if(isset($custom_fields["rw_setlist_$i"])){ echo "
  • "; echo $custom_fields["rw_setlist_$i"]; echo ""; } }
  • Eu acredito que get_post_meta() (ou mais precisamente, a function get_metadata() ele chama) recupera todos os metadados para uma publicação em uma consulta e, em seguida, armazena em cache para chamadas subseqüentes. Quanto à verbosidade do seu código, se eles não precisam ser explicitamente ordenados, você poderia apenas salvá-los todos sob uma única chave e agarrá-los como uma matriz.