Вопрос или проблема
Я автоматически сгенерировал значение текстового поля из другого поля в ACF pro. Поле отображает данные, но я не могу использовать их нигде. Я предполагаю, что оно не сохраняется и не обновляется. Вот мой код
function pm_load_field( $field ) {
$user = get_field("select_a_project_manager");
if( $user ): ?>
<div class="author-box">
<h3><?php $user['display_name']; ?></h3>
</div>
<?php endif;
$field['value'] = $user['display_name'];
return $field; }
add_filter('acf/load_field/name=pmname', 'pm_load_field');
Как я могу показать это в шаблоне?
.
Ответ или решение
Когда вы работаете с плагином Advanced Custom Fields (ACF) Pro, иногда могут возникать сложности с сохранением авто-заполненных полей. Вы описали ситуацию, в которой значение из одного поля не сохраняется в другом. Давайте подробно разберем возможные причины проблемы и предложим решения.
Анализ вашей реализации
Ваш код имеет следующие ключевые элементы:
-
Получение значения: Вы используете функцию
get_field("select_a_project_manager")
, чтобы получить информацию о выбранном пользователе. -
Отображение имени пользователя: Вы проверяете, есть ли значение в переменной
$user
, и выводите имя пользователя с помощьюdisplay_name
. -
Шаг возврата поля: Вы присваиваете
$field['value']
значение имени пользователя, что позволяет пополнить поле с названиемpmname
.
Однако, есть несколько моментов, которые стоит учитывать:
Причины проблемы
-
Необходимость сохранения данных: При использовании функции
load_field
данные, присвоенные полю через$field['value']
, не сохраняются в базе данных. Они только отображаются на стороне пользователя. Чтобы поле сохраняло данные, вам нужно использовать хукacf/save_post
. -
Отсутствие указания на сохранение: Если вы просто загружаете значение, необходимо убедиться, что это значение сохраняется при отправке формы. Назначенные поля должны быть обработаны соответствующим образом.
Решение проблемы
Чтобы ваше поле сохраняло значение автозаполненного поля, вам нужно добавить обработчик для сохранения данных. Вы можете сделать это следующим образом:
function pm_save_field( $post_id ) {
// Проверить, существует ли поле
if( isset($_POST['acf']['field_5ef9d32c2b1d2'])) { // Замените 'field_5ef9d32c2b1d2' на ваш ключ поля ACF
$user = get_field("select_a_project_manager", $post_id);
if( $user ) {
// Сохранить имя пользователя
update_field('pmname', $user['display_name'], $post_id);
}
}
}
add_action('acf/save_post', 'pm_save_field');
Отображение в шаблоне
После того как вы убедились, что значение сохраняется, вы можете вывести его в вашем шаблоне следующим образом:
$pmname = get_field('pmname');
if($pmname) {
echo '<div class="author-box">';
echo '<h3>' . esc_html($pmname) . '</h3>';
echo '</div>';
}
Заключение
Суть проблемы связана с тем, что вы использовали фильтр acf/load_field
для заполнения поля значением, но не предусмотрели его сохранение при отправке формы. Следуя предложенному коду для обработки и сохранения данных, а также уточняя способ отображения значений в шаблоне, вы сможете успешно решить вашу задачу. Рекомендуется также тестировать код на наличие ошибок после внесения изменений, чтобы убедиться в его корректной работе.
Если у вас есть дополнительные вопросы или требуется помощь с другими аспектами работы ACF, не стесняйтесь обращаться.