Cada meta-chave de postagem pode ter vários valores. Então você obtém os valores por padrão como uma matriz; a primeira entrada ( 0
) é a mais antiga.
get_post_custom()
busca todas as meta chaves com seus valores. Você pode simplificar seu código com:
$price = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );
Quando o último parâmetro for get_post_meta()
for TRUE
, o WordPress retornará um único valor: a primeira entrada no meta-valor da postagem para a chave especificada.
A primeira chamada para get_post_meta()
buscará e armazenará em cache todos os meta-valores para esse ID de postagem em segundo plano; portanto, as chamadas posteriores não resultarão em consultas adicionais ao banco de dados.
Um exemplo
Digamos que criamos uma meta-chave de postagem chamada color
e a preenchemos com três valores diferentes para uma postagem. Então fazemos o mesmo com uma chave age
.
add_action( 'wp_loaded', function() {
foreach ( array ( 'blue', 'red', 'yellow' ) as $color )
add_post_meta( 561, 'color', $color, FALSE );
foreach ( array ( '14', '40', '104' ) as $age )
add_post_meta( 561, 'age', $age, FALSE );
});
O último parâmetro FALSE
diz ao WordPress para não tornar essa meta-chave exclusiva - mas permitir vários valores para uma chave.
A estrutura resultante em nossa postmeta
tabela ficará assim:
Cada linha tem um único meta_id
, mas cada um post_id
pode ter vários meta_key
s e cada um meta_key
pode ter vários meta_value
s.
Agora vamos buscar todos os valores personalizados para a postagem 561:
add_action( 'shutdown', function(){
$custom = get_post_custom( 561 );
print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});
Resultado:
array (
'_edit_last' =>
array (
0 => '1',
),
'_edit_lock' =>
array (
0 => '1367617428:1',
),
'color' =>
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
),
'age' =>
array (
0 => '14',
1 => '40',
2 => '104',
),
)
_edit_last
e _edit_lock
são internos do WordPress, ignoramos isso por enquanto. Observe que também obtemos esses valores e uma matriz, embora exista apenas um valor.
color
e age
são matrizes como todos os valores meta pós.
$custom['color'][0]
é blue
.
Agora, buscamos apenas a cor com get_post_meta()
:
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color' );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Resultado:
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
)
Temos aqui apenas uma parte dos nossos meta-valores. $color[0]
ainda está blue
. Nos bastidores, o WordPress já buscou todos os valores personalizados, portanto, um próximo hit age
seria veiculado no cache.
Em termos de desempenho get_post_custom()
e get_post_meta()
são iguais.
Última tentativa: obtenha a cor get_post_meta()
como um único valor.
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color', TRUE );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Resultado: blue
.
O WordPress fez o que você fez no seu código: Ele pegou a chave da matriz 0
e retornou o valor como uma string.
Essa é a opção mais legível, use-a para escrever um código fácil de entender.