¿Cómo guardar un array con una sola metakey en postmeta?

6 ago 2011, 10:47:28
Vistas: 46.3K
Votos: 20

Tengo un array guardado en postmeta, donde cada clave del array se convierte en una metakey. Quiero modificar el código para guardar todo el array con una sola metakey. ¿Cómo puedo hacerlo? ¡Gracias!

$poddata = Array(
'pod_id' => $this->pod_id,
'url' => $this->url,
'name' => $this->name,
'description' => $this->description,
'service' => $this->service,
'status' =>$this->status,
'price' => $this->price
);

// Recorre cada elemento del array
foreach ( $poddata as $k => $v ){

if ( get_post_meta( $this->id, $k ) == '' )
add_post_meta( $this->id, $meta_box, $v, true );

elseif ( $v != get_post_meta( $this->id, $k, true ) )
update_post_meta( $this->id, $k, $v );

elseif ( $v == '' )
delete_post_meta( $this->id, $k, get_post_meta( $this->id, $k, true ) );

}
0
Todas las respuestas a la pregunta 1
14
32

No necesitas recorrer los valores. Simplemente usa update_post_meta($post_ID, {key}, {array of vals}), ¡debería funcionar!

<?php
$poddata = Array(
    'pod_id' => $this->pod_id,
    'url' => $this->url,
    'name' => $this->name,
    'description' => $this->description,
    'service' => $this->service,
    'status' =>$this->status,
    'price' => $this->price
    );

//Update inserta una nueva entrada si no existe, de lo contrario la actualiza
update_post_meta($post_ID, 'poddata', $poddata);
?>

¡Eso es todo! Cuando lo recuperes para usarlo, haz lo siguiente:

    $poddata = get_post_meta($post_ID, 'poddata');

$poddata es el arreglo de valores.

6 ago 2011 11:46:23
Comentarios

Intenté usar update_post_meta($post_ID, 'poddata', $postdata), después de guardar el post, veo que el meta no se guardó.

Jenny Jenny
6 ago 2011 11:49:40

Oh, lo siento, sí se guardó, no lo vi en la tabla de Campos Personalizados de WP. Acabo de encontrarlo en phpAdmin. ¡Gracias!

Jenny Jenny
6 ago 2011 11:59:04

Cuando recupero los datos con get_post_meta($post_ID, 'poddata'); Obtengo array(0) al hacer var_dump. ¿Cómo puedo obtener todo el array?

Jenny Jenny
6 ago 2011 12:28:26

¡De nada! Prueba usando print_r()... echo "<pre>"; print_r($poddata); echo "</pre>";

Rutwick Gangurde Rutwick Gangurde
6 ago 2011 12:30:21

print_r($poddata) muestra Array()

Jenny Jenny
6 ago 2011 12:47:40

Ohh... entonces los valores no se están almacenando. Estás obteniendo un array vacío. Probé el ejemplo localmente y funcionó bien. Intenta hacer un print_r del array de valores antes de actualizar update_post_meta. Probablemente no está obteniendo ningún valor.

Rutwick Gangurde Rutwick Gangurde
6 ago 2011 12:55:37

Está almacenado, puedo verlo en phpAdmin, las nuevas publicaciones tienen la metaclave "pod" y el valor del array. Simplemente no puedo recuperarlo.

Jenny Jenny
6 ago 2011 13:02:44

Prueba $poddata = get_post_meta($post_ID, 'poddata',true);

Bainternet Bainternet
6 ago 2011 13:10:14

Jenny, prueba también la solución anterior.

@Bainternet Deliberadamente omití el tercer parámetro, que es la bandera 'single', ya que el valor meta es un array en get_post_meta. ¿Es necesario cuando se trabaja con arrays en lugar de strings como valores meta? Solo lo uso cuando almaceno strings como valores meta.

Rutwick Gangurde Rutwick Gangurde
6 ago 2011 13:17:30

¡¡¡Genial!!! ¡El "true" funciona! ¡¡¡Gracias!!!

Jenny Jenny
6 ago 2011 13:25:01

El tercer parámetro "true" debe omitirse si tienes más de un campo con el mismo nombre, su valor puede ser una cadena, booleano, entero o array, pero ese no es el propósito de este parámetro.

Bainternet Bainternet
6 ago 2011 14:48:31

¡Gracias! ¡Ahora tengo una comprensión clara del parámetro 'true'!

Rutwick Gangurde Rutwick Gangurde
6 ago 2011 15:28:37

Actualiza o inserta. Pero ¿también elimina elementos que no existen en el nuevo array?

Peter Westerlund Peter Westerlund
28 ene 2023 20:37:09

Podrías usar json_encode() o serialize() para verlo en campos personalizados en la página de edición, supongo. Pero tendrás que decodificarlo cuando lo uses más tarde.

dw1 dw1
31 oct 2024 14:52:21
Mostrar los 9 comentarios restantes