Вопрос или проблема
Это продолжение этого вопроса.
Как упоминалось в том вопросе, при подключении к форме добавления комментария есть два хука:
- comment_form_logged_in_after
- comment_form_after_fields
Первый предназначен для зарегистрированных пользователей, а второй — для анонимных. Как видно из ответа на тот вопрос, одно действие появляется перед основным текстовым полем комментария, а другое — после.
Существует ли действие WordPress (или комбинация действий и/или фильтров), чтобы отобразить моё пользовательское поле комментария как для входящих, так и для не входящих пользователей в одном и том же месте, т.е. сразу перед основным текстовым полем комментария?
Ответ или решение
Чтобы добавить пользовательское поле в верхнюю часть формы комментариев WordPress как для зарегистрированных, так и для незарегистрированных пользователей (гостей), вы можете использовать хук comment_form_before
для обоих типов пользователей. Этот хук позволяет добавлять содержимое перед основной текстовой областью комментариев, что соответствует вашему запросу.
Вот пошаговая инструкция по добавлению пользовательского поля:
-
Создайте функцию для отображения пользовательского поля.
В этой функции вы можете определить HTML-код для вашего нового поля, например, текстовое поле или текстовую область. -
Используйте хук
comment_form_before
для добавления поля.
Этот хук будет срабатывать как для зарегистрированных, так и для незарегистрированных пользователей, что позволит вам разместить поле в одном и том же месте. -
Обработайте сохранение данных.
Не забудьте реализовать сохранение и отображение введенных данных, если это необходимо.
Пример кода:
Добавьте следующий код в файл 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');
Объяснение кода:
-
my_custom_comment_field: Эта функция выводит HTML для дополнительного поля перед текстовым полем комментария. Вы можете изменить текст метки и тип ввода по мере необходимости.
-
add_action(‘comment_form_before’, ‘my_custom_comment_field’): Этот хук добавляет кастомное поле в форму комментариев перед основным текстовым полем.
-
save_custom_comment_field: Эта функция обрабатывает сохранение значения пользовательского поля после отправки комментария. Мы используем
sanitize_text_field
для очистки данных перед их сохранением. -
display_custom_field_in_admin: Эта дополнительная функция отображает пользовательское поле в админке WordPress, чтобы вы могли видеть, что было введено пользователями.
Таким образом, вы сможете добавить пользовательское поле в форму комментариев как для зарегистрированных, так и для незарегистрированных пользователей в одном и том же месте.