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!
Milo
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
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
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