web-dev-qa-db-fra.com

update_post_meta et update_field ne fonctionnent plus lors de l'enregistrement du message

J'utilise Advanced Custom Fields (ACF) pour stocker des données dans un champ personnalisé. J'avais des informations de latitude et de longitude stockées séparément, mais comme elles doivent être dans un champ personnalisé, j'ai créé la fonction ci-dessous. $query interroge simplement tous les messages pertinents.

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

?>

Maintenant, la fonction ci-dessus fonctionne. Le champ map_coor est rempli avec le lat et le long séparés par une virgule (je peux voir les informations dans le champ).

La chose étrange est que si j'utilise get_field('map_coor') sur le front-end rien ne se présente. Si j'enregistre le message correspondant, alors les informations s'affichent.

Dans la fonction ci-dessus, j'ai également essayé d'utiliser la fonction update_field (de ACF) comme ceci: update_field($post_id, 'map_coor', $coord) mais le problème est toujours là.

Donc ma question est: Dois-je modifier la fonction ci-dessus ou simplement exécuter une fonction qui enregistre toutes les publications? Si ce dernier est le cas; comment je fais ça? J'ai trouvé le hook save_posts mais je ne sais pas comment le laisser passer par tous les posts.

4
eskimo

Le problème est que la fonction update_field de ACF fonctionne un peu différemment de update_post_meta . Peux-tu le voir?

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

Si vous utilisez update_post_meta vous devriez, à mon avis, utiliser get_post_meta pour obtenir la méta. Si vous utilisez update_field , vous devez utiliser the_field ou get_field car ACF stocke les paires clé/valeur de manière légèrement différente.

10
realloc