Cum să salvezi un array cu o singură metakey în postmeta?

6 aug. 2011, 10:47:28
Vizualizări: 46.3K
Voturi: 20

Am un array salvat în postmeta, unde fiecare cheie din array devine o metakey. Vreau să modific codul pentru a salva întregul array cu o singură metakey. Cum pot face asta? Mulțumesc!

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

// Parcurge fiecare element din 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
Toate răspunsurile la întrebare 1
14
32

Nu este nevoie să parcurgi valorile. Pur și simplu folosește update_post_meta($post_ID, {cheie}, {array de valori}), ar trebui să funcționeze!

<?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 inserează o nouă intrare dacă nu există, altfel o actualizează
update_post_meta($post_ID, 'poddata', $poddata);
?>

Atât! Când vrei să obții datele pentru utilizare, folosește următoarea comandă:

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

$poddata reprezintă array-ul de valori.

6 aug. 2011 11:46:23
Comentarii

Am încercat update_post_meta($post_ID, 'poddata', $postdata), după salvarea postării, văd că metadatele nu au fost salvate.

Jenny Jenny
6 aug. 2011 11:49:40

oh, scuze, s-au salvat, nu le-am văzut în tabelul WP Custom Fields. Le-am găsit doar în phpAdmin. Mulțumesc!

Jenny Jenny
6 aug. 2011 11:59:04

Când încerc să preiau datele prin get_post_meta($post_ID, 'poddata'); Prin var_dump primesc array(0). Cum pot obține întregul array?

Jenny Jenny
6 aug. 2011 12:28:26

Cu plăcere! Încearcă să folosești print_r()... echo "<pre>"; print_r($poddata); echo "</pre>";

Rutwick Gangurde Rutwick Gangurde
6 aug. 2011 12:30:21

print_r($poddata) afișează Array()

Jenny Jenny
6 aug. 2011 12:47:40

Ohh... atunci valorile nu sunt stocate. Obții un array gol. Am testat exemplul local și a funcționat corect. Încearcă un print_r al array-ului de valori înainte de update_post_meta. Probabil nu primește nicio valoare.

Rutwick Gangurde Rutwick Gangurde
6 aug. 2011 12:55:37

Este stocat, îl pot vedea în phpAdmin, noile postări au metakey "pod" și valoarea array-ului. Doar că nu îl pot prelua.

Jenny Jenny
6 aug. 2011 13:02:44

Încearcă $poddata = get_post_meta($post_ID, 'poddata',true);

Bainternet Bainternet
6 aug. 2011 13:10:14

Jenny, încearcă și soluția de mai sus.

@Bainternet Am omis intenționat al treilea parametru, care este flag-ul 'single', deoarece valoarea meta este un array în get_post_meta. Este necesar atunci când lucrezi cu array-uri în loc de șiruri de caractere ca valori meta? Îl folosesc doar când stochez șiruri de caractere ca valori meta.

Rutwick Gangurde Rutwick Gangurde
6 aug. 2011 13:17:30

Excelent!!! "true" funcționează! Mulțumesc!!!

Jenny Jenny
6 aug. 2011 13:25:01

Parametrul "true" al treilea ar trebui sărit dacă ai mai multe câmpuri cu același nume, valoarea lui poate fi un string, boolean, integer sau array dar nu despre asta este acest parametru.

Bainternet Bainternet
6 aug. 2011 14:48:31

Mulțumesc! Acum am o înțelegere clară despre parametrul 'true'!

Rutwick Gangurde Rutwick Gangurde
6 aug. 2011 15:28:37

Actualizează sau inserează. Dar șterge și elementele care nu există în noul array?

Peter Westerlund Peter Westerlund
28 ian. 2023 20:37:09

Poți folosi json_encode() sau serialize() pentru a le vedea în câmpurile personalizate pe pagina de editare, cred. Dar va trebui să le decodifici când le folosești mai târziu.

dw1 dw1
31 oct. 2024 14:52:21
Arată celelalte 9 comentarii