update_post_meta și update_field funcționează doar la salvarea articolului

1 nov. 2013, 12:40:03
Vizualizări: 24.6K
Voturi: 6

Folosesc Advanced Custom Fields (ACF) pentru a stoca date într-un câmp personalizat. Aveam informații despre latitudine și longitudine stocate separat, dar acestea trebuie să fie într-un singur câmp personalizat, așa că am creat funcția de mai jos. $query doar interoghează toate articolele relevante.

<?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;

?>

Funcția de mai sus funcționează. Câmpul map_coor este populat cu latitudinea și longitudinea separate prin virgulă (pot vedea informațiile în câmp).

Ciudat este că dacă folosesc get_field('map_coor') în frontend nu se afișează nimic. Dacă salvez articolul corespunzător, atunci informațiile SE afișează.

În funcția de mai sus am încercat să folosesc și funcția update_field (din ACF) astfel: update_field($post_id, 'map_coor', $coord) dar problema persistă.

Așadar întrebarea mea este: trebuie să modific funcția de mai sus sau doar să rulez o funcție care salvează toate articolele? Dacă este cazul celui din urmă, cum fac asta? Am găsit hook-ul save_posts dar nu sunt sigur cum să-l fac să parcurgă toate articolele.

0
Toate răspunsurile la întrebare 1
5
12

Problema este că funcția update_field din ACF funcționează puțin diferit față de update_post_meta. Poți observa asta?

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

Dacă folosești update_post_meta, în opinia mea, ar trebui să folosești get_post_meta pentru a obține metadatele. Dacă folosești update_field, ar trebui să utilizezi the_field sau get_field pentru că ACF stochează perechile cheie/valoare într-un mod puțin diferit.

1 nov. 2013 16:47:48
Comentarii

Dacă folosești update_field, trebuie să utilizezi the_field sau get_field deoarece ACF stochează perechile cheie/valoare într-un mod ușor diferit acest lucru nu este în întregime corect. Este adevărat că ACF stochează valorile diferit, dar poți folosi update_field și să recuperezi conținutul cu get_post_meta fără probleme, atâta timp cât folosești update_field corect. Lucrul important de reținut este că $field_key nu este același lucru cu $meta_key!

Milo Milo
1 nov. 2013 17:02:10

Am schimbat asta în "ar trebui, în opinia mea, să folosești". Ceea ce ai spus este absolut corect, dar această problemă legată de "numele-câmpului/referința-câmpului" este foarte des întâlnită.

realloc realloc
1 nov. 2013 17:06:48

Mulțumesc. După cum am descris în întrebarea mea, am încercat update_field. L-am folosit în combinație cu get_field. Rezultatul este același; valoarea câmpului este salvată, dar când interoghez câmpul personalizat pe front-end, acesta returnează gol. Voi încerca update_post_meta și voi înlocui get_field cu get_post_meta.

eskimo eskimo
1 nov. 2013 19:18:53

Funcționează când folosesc update_post_meta și get_post_meta. Totuși, mi se pare ciudat că update_field și get_field nu dau aceleași rezultate. Voi marca răspunsul ca acceptat, mulțumesc din nou.

eskimo eskimo
1 nov. 2013 19:35:55

Folosesc update_post_meta() și get_field() și funcționează -- `update_field() nu funcționa dar încă nu înțeleg de ce.

Alex Steinberg Alex Steinberg
25 iun. 2018 19:30:43