update_post_meta и update_field работают только при сохранении записи
Я использую Advanced Custom Fields (ACF) для хранения данных в произвольном поле. У меня были отдельно сохранены данные широты и долготы, но теперь они должны быть в одном пользовательском поле, поэтому я создал следующую функцию. $query
просто делает запрос всех соответствующих записей.
<?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;
?>
Функция выше работает. Поле map_coor заполняется значениями широты и долготы, разделенными запятой (я вижу эту информацию в поле).
Странно то, что когда я использую get_field('map_coor')
во фронтенде, ничего не отображается. Если я сохраняю соответствующую запись, тогда информация ДЕЙСТВИТЕЛЬНО появляется.
В функции выше я также пробовал использовать функцию update_field
(из ACF) таким образом: update_field($post_id, 'map_coor', $coord)
, но проблема остается.
Итак, мой вопрос: нужно ли мне изменить функцию выше или просто запустить функцию, которая сохранит все записи? Если верен второй вариант, как это сделать? Я нашел хук save_posts
, но не уверен, как заставить его обработать все записи.
Проблема в том, что функция update_field из ACF работает немного иначе, чем update_post_meta. Видите разницу?
update_post_meta( $post_id, $meta_key, $meta_value, $prev_value );
update_field( $field_key, $value, $post_id );
Если вы используете update_post_meta, то, на мой взгляд, следует применять get_post_meta для получения метаданных. Если же вы используете update_field, то правильнее применять the_field или get_field, потому что ACF хранит пары ключ/значение немного по-другому.

Если вы используете update_field, то должны использовать the_field или get_field, потому что ACF хранит пары ключ/значение немного по-другому — это не совсем верно. Действительно, ACF хранит значения иначе, но вы можете использовать update_field
и получать содержимое с помощью get_post_meta
без проблем, если правильно используете update_field
. Важно помнить, что $field_key
и $meta_key
— это не одно и то же!

Я изменил формулировку на "по моему мнению, следует использовать". То, что вы сказали, абсолютно верно, но именно эта путаница с "именем поля/ссылкой на поле" часто вызывает проблемы.

Спасибо. Как я уже описал в своем вопросе, я пробовал update_field
. Использовал его в комбинации с get_field
. Результат тот же: значение поля сохраняется, но при запросе произвольного поля на фронтенде возвращается пустое значение. Попробую update_post_meta
и заменю get_field
на get_post_meta
.

Это работает, когда я использую update_post_meta
и get_post_meta
. Всё равно странно, что update_field
и get_field
дают разные результаты. Отмечу ответ как принятый, ещё раз спасибо.
