Как добавить пользовательское поле в верхнюю часть формы комментариев WordPress для зарегистрированных и анонимных пользователей

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

Это продолжение этого вопроса.

Как упоминалось в том вопросе, при подключении к форме добавления комментария есть два хука:

  • comment_form_logged_in_after
  • comment_form_after_fields

Первый предназначен для зарегистрированных пользователей, а второй — для анонимных. Как видно из ответа на тот вопрос, одно действие появляется перед основным текстовым полем комментария, а другое — после.

Существует ли действие WordPress (или комбинация действий и/или фильтров), чтобы отобразить моё пользовательское поле комментария как для входящих, так и для не входящих пользователей в одном и том же месте, т.е. сразу перед основным текстовым полем комментария?

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

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

Вот пошаговая инструкция по добавлению пользовательского поля:

  1. Создайте функцию для отображения пользовательского поля.
    В этой функции вы можете определить HTML-код для вашего нового поля, например, текстовое поле или текстовую область.

  2. Используйте хук comment_form_before для добавления поля.
    Этот хук будет срабатывать как для зарегистрированных, так и для незарегистрированных пользователей, что позволит вам разместить поле в одном и том же месте.

  3. Обработайте сохранение данных.
    Не забудьте реализовать сохранение и отображение введенных данных, если это необходимо.

Пример кода:

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

// Функция для отображения пользовательского поля
function my_custom_comment_field() {
    echo '<p class="comment-form-custom-field">
            <label for="custom_field">' . __('Ваше поле') . '</label>
            <input id="custom_field" name="custom_field" type="text" value="" size="30" /></p>';
}

// Хук для добавления пользовательского поля перед текстовым полем комментария
add_action('comment_form_before', 'my_custom_comment_field');

// Сохранение пользовательского поля в базе данных
function save_custom_comment_field($comment_id) {
    if (isset($_POST['custom_field'])) {
        $custom_field_value = sanitize_text_field($_POST['custom_field']);
        add_comment_meta($comment_id, 'custom_field', $custom_field_value);
    }
}
add_action('comment_post', 'save_custom_comment_field');

// Отображение пользовательского поля в админке комментариев
function display_custom_field_in_admin($comment) {
    $custom_field_value = get_comment_meta($comment->comment_ID, 'custom_field', true);
    if ($custom_field_value) {
        echo '<p><strong>' . __('Ваше поле') . ':</strong> ' . esc_html($custom_field_value) . '</p>';
    }
}
add_action('comment_text', 'display_custom_field_in_admin');

Объяснение кода:

  1. my_custom_comment_field: Эта функция выводит HTML для дополнительного поля перед текстовым полем комментария. Вы можете изменить текст метки и тип ввода по мере необходимости.

  2. add_action(‘comment_form_before’, ‘my_custom_comment_field’): Этот хук добавляет кастомное поле в форму комментариев перед основным текстовым полем.

  3. save_custom_comment_field: Эта функция обрабатывает сохранение значения пользовательского поля после отправки комментария. Мы используем sanitize_text_field для очистки данных перед их сохранением.

  4. display_custom_field_in_admin: Эта дополнительная функция отображает пользовательское поле в админке WordPress, чтобы вы могли видеть, что было введено пользователями.

Таким образом, вы сможете добавить пользовательское поле в форму комментариев как для зарегистрированных, так и для незарегистрированных пользователей в одном и том же месте.

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

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