update_post_meta și update_field funcționează doar la salvarea articolului
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.
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.

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
!

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ă.

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
.

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.
