update_post_meta y update_field solo funcionan al guardar la entrada

1 nov 2013, 12:40:03
Vistas: 24.6K
Votos: 6

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.

0
Todas las respuestas a la pregunta 1
5
12

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.

1 nov 2013 16:47:48
Comentarios

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!

Milo Milo
1 nov 2013 17:02:10

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.

realloc realloc
1 nov 2013 17:06:48

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.

eskimo eskimo
1 nov 2013 19:18:53

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.

eskimo eskimo
1 nov 2013 19:35:55

Estoy usando update_post_meta() y get_field() y funciona -- `update_field() no funcionaba pero todavía no sé por qué.

Alex Steinberg Alex Steinberg
25 jun 2018 19:30:43