update_post_meta y update_field solo funcionan al guardar la entrada
Uso Advanced Custom Fields (ACF) para almacenar datos en un campo personalizado. Tenía información de latitud y longitud almacenada por separado, pero necesitan estar en un solo campo personalizado, así que creé la siguiente función. $query
simplemente consulta todas las entradas relevantes.
<?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;
?>
Ahora la función anterior funciona. El campo map_coor se rellena con la latitud y longitud separadas por una coma (puedo ver la información en el campo).
Lo extraño es que si uso get_field('map_coor')
en el front-end no aparece nada. Si guardo la entrada correspondiente, entonces la información SÍ aparece.
En la función anterior también intenté usar la función update_field
(de ACF) así: update_field($post_id, 'map_coor', $coord)
pero el problema persiste.
Entonces mi pregunta es: ¿necesito modificar la función anterior o simplemente ejecutar una función que guarde todas las entradas? Si es lo segundo, ¿cómo hago eso? He encontrado el hook save_posts
pero no estoy seguro de cómo hacer que recorra todas las entradas.
El problema es que la función update_field de ACF funciona un poco diferente a update_post_meta. ¿Puedes verlo?
update_post_meta( $post_id, $meta_key, $meta_value, $prev_value );
update_field( $field_key, $value, $post_id );
Si usas update_post_meta, en mi opinión deberías usar get_post_meta para obtener los metadatos. Si usas update_field deberías usar the_field o get_field porque ACF almacena los pares clave/valor de una forma ligeramente diferente.

Si usas update_field deberías usar the_field o get_field porque ACF almacena los pares clave/valor de una manera ligeramente diferente esto no es del todo preciso. Es cierto que ACF almacena los valores de forma diferente, pero puedes usar update_field
y recuperar los contenidos con get_post_meta
sin problemas siempre y cuando uses update_field
correctamente. ¡Lo importante a tener en cuenta es que $field_key
no es lo mismo que $meta_key
!

Lo cambié a "debería, en mi opinión, usar". Lo que dijiste es absolutamente correcto, pero este asunto de "nombre-de-campo/referencia-de-campo" es muy a menudo el problema.

Gracias. Como describí en mi pregunta, he probado update_field
. Lo he usado en combinación con get_field
. Eso da el mismo resultado; el valor del campo se guarda, pero cuando consulto el campo personalizado en el front-end, devuelve vacío. Probaré update_post_meta
y reemplazaré get_field
con get_post_meta
.

Funciona cuando uso update_post_meta
y get_post_meta
. Sigo pensando que es extraño que update_field
y get_field
no den los mismos resultados. Marcaré la respuesta como aceptada, gracias de nuevo.
