update_post_meta e update_field funzionano solo quando si salva il post

1 nov 2013, 12:40:03
Visualizzazioni: 24.6K
Voti: 6

Uso Advanced Custom Fields (ACF) per memorizzare i dati in un campo personalizzato. Avevo le informazioni di latitudine e longitudine memorizzate separatamente, ma ho bisogno che siano in un unico campo personalizzato, quindi ho creato la funzione qui sotto. $query esegue semplicemente una query su tutti i post pertinenti.

<?php 
$query = query_custom_posts(); if($query->have_posts()): 
while ($query->have_posts()): $query->the_post();
if(get_field('map_lat') && get_field('map_lng')):

$lat = get_field('map_lat');
$long = get_field('map_lng');
$coord = $lat.','.$long;
$post_id = get_the_ID();

update_post_meta($post_id, 'map_coor', $coord);


endif; endwhile; wp_reset_query(); endif;

?>

Ora la funzione sopra funziona. Il campo map_coor viene popolato con lat e long separati da una virgola (posso vedere le informazioni nel campo).

La cosa strana è che se uso get_field('map_coor') nel front-end non appare nulla. Se salvo il post corrispondente, allora le informazioni VENGONO mostrate.

Nella funzione sopra ho anche provato a utilizzare la funzione update_field (da ACF) in questo modo: update_field($post_id, 'map_coor', $coord) ma il problema persiste.

Quindi la mia domanda è: devo modificare la funzione sopra o semplicemente eseguire una funzione che salva tutti i post? Se è quest'ultimo il caso, come posso farlo? Ho trovato l'hook save_posts ma non sono sicuro di come farlo funzionare per tutti i post.

0
Tutte le risposte alla domanda 1
5
12

Il problema è che la funzione update_field di ACF funziona in modo leggermente diverso da update_post_meta. Riesci a vederlo?

update_post_meta( $post_id, $meta_key, $meta_value, $prev_value );
update_field( $field_key, $value, $post_id );

Se usi update_post_meta dovresti, secondo me, usare get_post_meta per ottenere i meta. Se usi update_field dovresti usare the_field o get_field perché ACF memorizza le coppie chiave/valore in modo leggermente diverso.

1 nov 2013 16:47:48
Commenti

Se utilizzi update_field devi usare the_field o get_field perché ACF memorizza le coppie chiave/valore in modo leggermente diverso questa affermazione non è del tutto accurata. È vero che ACF memorizza i valori in modo diverso, ma puoi usare update_field e recuperare i contenuti con get_post_meta senza problemi, purché usi update_field correttamente. La cosa importante da notare è che $field_key non è la stessa cosa di $meta_key!

Milo Milo
1 nov 2013 17:02:10

Ho modificato la frase in "dovrebbe secondo me usare". Quello che hai detto è assolutamente corretto, ma questa questione del "nome-campo/riferimento-campo" è molto spesso il problema.

realloc realloc
1 nov 2013 17:06:48

Grazie. Come ho descritto nella mia domanda, ho provato update_field. L'ho usato in combinazione con get_field. Il risultato è lo stesso; il valore del campo viene salvato, ma quando interrogo il campo personalizzato sul front-end risulta vuoto. Proverò con update_post_meta e sostituirò get_field con get_post_meta.

eskimo eskimo
1 nov 2013 19:18:53

Funziona quando uso update_post_meta e get_post_meta. Trovo comunque strano che update_field e get_field non diano gli stessi risultati. Segnerò la risposta come accettata, grazie ancora.

eskimo eskimo
1 nov 2013 19:35:55

Sto usando update_post_meta() e get_field() e funziona -- `update_field() non funzionava ma ancora non capisco perché.

Alex Steinberg Alex Steinberg
25 giu 2018 19:30:43