Come salvare un array con una sola metakey in postmeta?

6 ago 2011, 10:47:28
Visualizzazioni: 46.3K
Voti: 20

Ho un array salvato in postmeta, dove ogni chiave dell'array diventa una metakey. Voglio modificare il codice per salvare l'intero array con una sola metakey. Come posso farlo? Grazie!

$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
);

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
Tutte le risposte alla domanda 1
14
32

Non è necessario ciclare tra i valori. Basta usare update_post_meta($post_ID, {key}, {array di valori}), dovrebbe funzionare!

<?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 inserisce una nuova voce se non esiste, altrimenti la aggiorna
update_post_meta($post_ID, 'poddata', $poddata);
?>

Ecco fatto! Quando lo recuperi per l'utilizzo, fai così:

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

$poddata è l'array di valori.

6 ago 2011 11:46:23
Commenti

Ho provato update_post_meta($post_ID, 'poddata', $postdata), dopo aver salvato il post, vedo che il meta non viene salvato.

Jenny Jenny
6 ago 2011 11:49:40

oh, scusa, è stato salvato, non lo vedevo nella tabella WP Custom Fields. L'ho appena trovato in phpAdmin. Grazie!

Jenny Jenny
6 ago 2011 11:59:04

Quando recupero i dati con get_post_meta($post_ID, 'poddata'); ottengo array(0) dal var_dump. Come posso ottenere l'intero array?

Jenny Jenny
6 ago 2011 12:28:26

Prego! Prova a usare print_r()... echo "<pre>"; print_r($poddata); echo "</pre>";

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

print_r($poddata) mostra Array()

Jenny Jenny
6 ago 2011 12:47:40

Oh... allora i valori non sono memorizzati. Stai ottenendo un array vuoto. Ho provato l'esempio localmente e ha funzionato bene. Prova un print_r dell'array di valori prima di update_post_meta. Probabilmente non sta ricevendo alcun valore.

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

È memorizzato, posso vederlo in phpAdmin, i nuovi post hanno una metachiave "pod" e il valore dell'array. Solo che non riesco a recuperarlo.

Jenny Jenny
6 ago 2011 13:02:44

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

Bainternet Bainternet
6 ago 2011 13:10:14

Jenny, prova anche la soluzione sopra.

@Bainternet Ho deliberatamente saltato il terzo parametro, che è il flag 'single', poiché il valore meta è un array in get_post_meta. È necessario quando si gestiscono array invece di stringhe come valori meta? Lo uso solo quando memorizzo stringhe come valori meta.

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

Fantastico!!! il "true" funziona! Grazie!!!

Jenny Jenny
6 ago 2011 13:25:01

Il terzo parametro "true" dovrebbe essere omesso se hai più campi con lo stesso nome, il suo valore può essere una stringa, booleano, intero o array ma non è questo lo scopo del parametro.

Bainternet Bainternet
6 ago 2011 14:48:31

Grazie! Ora ho capito chiaramente il parametro 'true'!

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

Aggiorna o inserisce. Ma cancella anche gli elementi che non esistono nel nuovo array?

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

Potresti usare json_encode() o serialize() per visualizzarlo nei campi personalizzati nella pagina di modifica, credo. Ma dovrai decodificarlo quando lo utilizzerai in seguito.

dw1 dw1
31 ott 2024 14:52:21
Mostra i restanti 9 commenti