изменить значение полей, созданных с помощью расширенных пользовательских полей, на фронте

Вопрос или проблема

Я создал поле для ввода номера whatsapp на главной странице сайта на wordpress, так как задняя часть простая, но мне нужно изменить ее в передней части для пользователей
введите описание изображения здесь

Я уже разместил ввод, где показываю информацию пользователя, другие поля уже идут по умолчанию в теме.

<div class="form-group">
  <div class="stm-label h4"><?php esc_html_e('Whatsapp', 'motors'); ?></div>
   <?php $author_id = get_the_author_meta('ID');
                       $author_badge = get_field('n_whatsapp', 'user_'. $author_id );
                      ?>
        <input class="form-control" type="text" name="stm_phone"
                               value="<?php echo esc_attr($author_badge); ?>"
                               placeholder="<?php esc_html_e('Включить whatsapp', 'motors'); ?>"/>
                </div>
                <input type="text" id="id_whatsapp" name="acf[n_whatsapp]" value="acf[n_whatsapp]">
                <?php acf_form(); ?>
              </div>
            </div>

Если вы хотите включить свои собственные поля в acf_form(), вам следует использовать некоторые из его параметров, чтобы разрешить форме их отправку. В противном случае ваши поля будут вне формы. В качестве примера вы могли бы использовать следующий код:

<?php
acf_form(
       array(
                'html_after_fields' => '<input type="text" id="id_whatsapp" name="acf[n_whatsapp]" value="acf[n_whatsapp]">',
            )
        );
?>

Вы можете проверить все параметры, которые принимает acf_form(), здесь: https://www.advancedcustomfields.com/resources/acf_form/

Надеюсь, это поможет.

Вы пропустили массив аргументов в функции ac_form. Вы можете показать поля acf, используя атрибут fields. Вы можете передать один или несколько ключей полей acf для отображения в форме.

Вы также можете использовать атрибут field_groups, если хотите показать сразу все поля группы в форме. Функция сохранения Acf автоматически сохранит значение после отправки формы.

Для аргументов массива, переданного в acf_form, пожалуйста, смотрите документацию => https://www.advancedcustomfields.com/resources/acf_form/

Ответ или решение

Чтобы изменить значение полей, созданных с помощью плагина Advanced Custom Fields (ACF) в передней части сайта на WordPress, вам необходимо правильно настроить форму и обеспечить корректную обработку данных, вводимых пользователями. В данном ответе мы рассмотрим, как это сделать, шаг за шагом, с учетом всех деталей.

1. Настройка формы ACF

Для начала, вам потребуется использовать функцию acf_form(), которая создает форму на основе ACF. Это позволит вам отображать и редактировать значения полей, которые были созданы ранее. Чтобы правильно настроить вашу форму, вы должны указать соответствующие аргументы в массиве.

Пример кода для настройки формы может выглядеть следующим образом:

<?php
acf_form(array(
    'post_id'       => 'user_' . get_the_author_meta('ID'),
    'field_groups'  => array('group_XXXXXXXXXX'), // Замените на ваш ID группы полей ACF
    'html_after_fields' => '<input type="text" id="id_whatsapp" name="acf[n_whatsapp]" value="'. esc_attr(get_field('n_whatsapp')) .'" placeholder="'. esc_html__('Включить WhatsApp', 'motors') .'" />',
    'submit_value'  => __('Сохранить', 'motors'),
));
?>

В этом коде:

  • post_id указывает, для какого пользователя сохраняются поля (в данном случае, текущий автор поста).
  • field_groups позволяет указать целую группу полей, которые должны отображаться в форме.
  • html_after_fields добавляет поле для ввода WhatsApp прямо в конец формы.
  • submit_value определяет текст кнопки отправки.

2. Обработка данных формы

Когда пользователь отправляет форму, ACF автоматически обрабатывает данные и сохраняет их в метаполях пользователя. Вы можете использовать фильтры или действия WordPress, если вам нужно добавить дополнительную обработку или валидацию.

3. Показ данных на сайте

После успешного сохранения значения поля, вы можете легко получить и отобразить его на сайте, используя следующую функцию:

<?php
$whatsapp_number = get_field('n_whatsapp', 'user_' . get_the_author_meta('ID'));
if ($whatsapp_number) {
    echo '<p>WhatsApp: ' . esc_html($whatsapp_number) . '</p>';
}
?>

4. Обработка ошибок и валидация

Важно обрабатывать возможные ошибки. Убедитесь, что вы проверяете, правильно ли вводятся данные, перед сохранением. Вы можете выполнить валидацию данных, используя хуки, такие как acf/validate_save. Например:

add_filter('acf/validate_value/name=n_whatsapp', 'validate_whatsapp', 10, 4);
function validate_whatsapp($valid, $value, $form, $field) {
    if ($valid && !preg_match('/^\+?[0-9]{10,15}$/', $value)) {
        $valid = 'Введите корректный номер WhatsApp.';
    }
    return $valid;
}

5. Заключение

Следуя описанным шагам, вы сможете создать форму для редактирования полей, созданных с помощью ACF, и позволить пользователям изменять значения непосредственно в интерфейсе сайта. Помните, что важен не только функционал, но и удобство использования, поэтому обеспечьте четкие инструкции для пользователей и интерфейс, который легко воспринимается.

Дополнительную информацию можно найти в документации ACF, где описаны все параметры и возможности функции acf_form(). Это позволит вам настраивать форму под свои нужды и расширять функциональность вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...