Ogni meta chiave post può avere più valori. Quindi ottieni i valori di default come un array; la prima voce ( 0
) è la più vecchia.
get_post_custom()
recupera tutte le meta-chiavi con i loro valori. Puoi semplificare il tuo codice con:
$price = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );
Quando l'ultimo parametro per get_post_meta()
è TRUE
, WordPress restituirà un singolo valore: la prima voce nel meta valore post per la chiave specificata.
La prima chiamata a get_post_meta()
recupererà e memorizzerà nella cache tutti i meta valori per quell'ID post in background, quindi le chiamate successive non daranno luogo a query aggiuntive sul database.
Un esempio
Diciamo, creiamo una meta chiave post denominata color
e la riempiamo con tre valori diversi per un post. Quindi facciamo lo stesso con una chiave 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 );
});
L'ultimo parametro FALSE
dice a WordPress di non rendere unica questa meta-chiave , ma di consentire invece più valori per una chiave.
La struttura risultante nella nostra postmeta
tabella sarà simile a questa:
Ogni riga ha un unico meta_id
, ma ognuna post_id
può avere più meta_key
s e ognuna meta_key
può avere più meta_value
s.
Ora prendiamo tutti i valori personalizzati per il post 561:
add_action( 'shutdown', function(){
$custom = get_post_custom( 561 );
print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});
Risultato:
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
sono interni di WordPress, per il momento lo ignoriamo. Basta notare che questi valori sono anche un array, anche se esiste un solo valore.
color
e age
sono matrici come tutti i meta-valori post.
$custom['color'][0]
lo è blue
.
Ora prendiamo solo il colore con get_post_meta()
:
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color' );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Risultato:
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
)
Otteniamo solo un pezzo dei nostri meta valori qui. $color[0]
è ancora blue
. Dietro le quinte, WordPress ha già recuperato tutti i valori personalizzati, quindi un colpo successivo per age
sarebbe servito dalla cache.
In termini di prestazioni get_post_custom()
e get_post_meta()
sono uguali.
Ultimo tentativo: ottieni il colore get_post_meta()
come valore singolo.
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color', TRUE );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Risultato: blue
.
WordPress ha fatto ciò che hai fatto nel tuo codice: ha preso la chiave dell'array 0
e ha restituito il valore come stringa.
Questa è l'opzione più leggibile, usala per scrivere codice facile da capire.