Cada clave meta de la publicación puede tener varios 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. Podrías simplificar tu 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 solo valor: la primera entrada en el valor meta posterior de la clave dada.
La primera llamada a get_post_meta()
buscará y almacenará en caché todos valores meta para esa ID de publicación en segundo plano, por lo que las llamadas posteriores no darán lugar a consultas de base de datos adicionales.
Un ejemplo
Supongamos que creamos una clave de metadatos de publicación denominada color
y la rellenamos con tres valores diferentes para una publicación. Luego hacemos lo mismo con una clave 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 no que haga que esta meta clave sea única , pero que permita múltiples valores para una clave en su lugar.
La estructura resultante en nuestra tabla postmeta
se verá así:
Cada fila tiene un único meta_id
, pero cada post_id
puede tener múltiples meta_key
s, y cada meta_key
puede tener múltiples meta_value
s.
Ahora vamos a buscar 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 internos de WordPress, ignoramos eso por el momento. Tenga en cuenta que también obtenemos estos valores y una matriz, aunque solo hay un valor.
color
y age
son matrices, como todos los valores meta del post.
$custom['color'][0]
es blue
.
Ahora obtenemos 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í solo obtenemos una parte de nuestros valores meta. $color[0]
sigue siendo blue
. Detrás de escena, WordPress ya ha recuperado todos valores personalizados, por lo que un próximo golpe para age
se serviría desde el caché.
En términos de rendimiento, get_post_custom()
y get_post_meta()
son iguales.
Último intento: obtenga el color con get_post_meta()
como 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 has hecho en tu 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, utilícela para escribir código que sea fácil de entender.