¿Cómo guardar un array con una sola metakey en postmeta?
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 ) );
}

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.

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

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

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?

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

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.

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

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.

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.

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

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