Cada meta clave de publicación puede tener múltiples valores. Entonces obtienes los valores por defecto como una matriz; La primera entrada ( 0
) es la más antigua.
get_post_custom()
recupera todas las claves meta con sus valores. Puede simplificar su código con:
$price = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );
Cuando el último parámetro para get_post_meta()
es TRUE
, WordPress devolverá un valor único: la primera entrada en el metavalor posterior para la clave dada.
La primera llamada a get_post_meta()
buscará y almacenará en caché todos los meta valores para esa ID de publicación en segundo plano, por lo que las llamadas posteriores no generarán consultas adicionales en la base de datos.
Un ejemplo
Digamos que creamos una meta clave de publicación llamada color
y la llenamos con tres valores diferentes para una publicación. Luego hacemos lo mismo con una llave 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 );
});
El último parámetro FALSE
le dice a WordPress que no haga que esta meta clave sea única , sino que permita valores múltiples para una clave.
La estructura resultante en nuestra postmeta
tabla se verá así:
Cada fila tiene un único meta_id
, pero cada uno post_id
puede tener múltiples meta_key
s, y cada uno meta_key
puede tener múltiples meta_value
s.
Ahora busquemos todos los valores personalizados para la publicación 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
y _edit_lock
son elementos internos de WordPress, lo ignoramos por el momento. Solo tenga en cuenta que también obtenemos estos valores como una matriz, aunque solo hay un valor.
color
y age
son matrices como todos los meta valores posteriores.
$custom['color'][0]
es blue
.
Ahora buscamos solo el color con 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',
)
Aquí obtenemos solo una parte de nuestros meta valores. $color[0]
es todavía blue
. Detrás de escena, WordPress ya ha obtenido todos los valores personalizados, por lo que un próximo hit para age
se serviría desde la caché.
En cuanto a rendimiento get_post_custom()
y get_post_meta()
son iguales.
Último intento: obtener el color con get_post_meta()
un solo valor.
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color', TRUE );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Resultado: blue
.
WordPress ha hecho lo que ha hecho en su código: ha tomado la clave de matriz 0
y ha devuelto el valor como una cadena.
Esta es la opción más legible, úsela para escribir código que sea fácil de entender.