Вопрос или проблема
С административной стороны я отправляю форму в admin-post.php. Я хочу вывести сообщение об успешном завершении внизу формы. Я новичок в WordPress, что я делал, показано ниже.
код формы admin.php?page=add-products
<form action="<?php echo admin_url('admin-post.php') ?>" method="post">
<table>
<input type="hidden" name="action" value="add_product_from_admin">
<tr><td>Имя</td><td><input type="text" name="pr_name" id="pr_name"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" name="pr_submit" id="pr_submit" value="Сохранить продукты"></td></tr>
</table>
</form>
add_action( 'admin_post_add_product_from_admin', 'add_product_into_data_base' );
function add_product_into_data_base() {
//некоторые операции с базой данных
wp_redirect(admin_url('admin.php?page=add-products&message=success'));
}
Вам нужно передать переменную и её значение методом GET, чтобы отобразить сообщение об успешном завершении, что вы уже делаете.
Теперь в вашем PHP-файле отобразите сообщение на основе параметра GET и его значения.
if($_GET['message'] == 'success'){
//отобразите ваше сообщение
}
<form action="<?php echo admin_url('admin-post.php') ?>" method="post">
<table>
<input type="hidden" name="action" value="add_product_from_admin">
<tr>
<td>Имя</td>
<td><input type="text" name="pr_name" id="pr_name"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="pr_submit" id="pr_submit" value="Сохранить продукты"></td>
</tr>
</table>
</form>
Обработайте запрос формы через admin_post с именем действия – add_product_from_admin
add_action( 'admin_post_add_product_from_admin', 'add_product_into_data_base' );
function add_product_into_data_base() {
//некоторые операции с базой данных
// Установите временную переменную с сообщением об успехе
set_transient('product_added_success', 'Продукт успешно добавлен', 5);
wp_redirect(admin_url('admin.php?page=add-products'));
exit();
}
// Добавьте уведомление для успешно добавленного продукта
function display_product_added_notice() {
$message = get_transient('product_added_success');
if ($message) {
?>
<div class="notice notice-success is-dismissible">
<p><?php echo esc_html($message); ?></p>
</div>
<?php
// Удалите временную переменную после отображения уведомления
delete_transient('product_added_success');
}
}
add_action('admin_notices', 'display_product_added_notice');
.
Ответ или решение
Чтобы отобразить сообщение об успешной отправке формы на странице формы в административной части WordPress, нам необходимо правильно настроить процесс обработки формы и механизм передачи сообщения. Давайте разберем этот процесс шаг за шагом.
Шаг 1: Создание формы
Ваша форма должна отправлять данные на admin-post.php
. Код формы, который вы привели, выглядит корректно. Вот как он выглядит с комментариями:
<form action="<?php echo admin_url('admin-post.php'); ?>" method="post">
<table>
<input type="hidden" name="action" value="add_product_from_admin">
<tr>
<td>Name</td>
<td><input type="text" name="pr_name" id="pr_name"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="pr_submit" id="pr_submit" value="Save Products">
</td>
</tr>
</table>
</form>
Шаг 2: Обработка данных формы
Необходимо добавить обработчик, который будет позволять вам выполнять действия с данными формы и перенаправлять пользователя с сообщением об успехе. Ниже приведен пример функции, которую вы можете использовать:
add_action('admin_post_add_product_from_admin', 'add_product_into_data_base');
function add_product_into_data_base() {
// Здесь выполните операции с базой данных (добавление продукта и т.д.)
// Устанавливаем временное сообщение об успешной операции
set_transient('product_added_success', 'Продукт успешно добавлен', 5); // Хранить 5 секунд
// Перенаправляем обратно на страницу с формой
wp_redirect(admin_url('admin.php?page=add-products'));
exit();
}
Шаг 3: Отображение сообщения об успехе
Теперь, чтобы отобразить сообщение об успешной отправке формы, вам необходимо добавить код, который будет проверять наличие сообщения и выводить его на экран. Это можно сделать с помощью функции admin_notices
:
function display_product_added_notice() {
$message = get_transient('product_added_success');
if ($message) {
?>
<div class="notice notice-success is-dismissible">
<p><?php echo esc_html($message); ?></p>
</div>
<?php
// Удаляем транзиент, чтобы сообщение отобразилось только один раз
delete_transient('product_added_success');
}
}
add_action('admin_notices', 'display_product_added_notice');
Заключение
Таким образом, мы создали рабочий механизм, который позволяет вам отправлять данные формы, выполнять необходимые операции в базе данных и отображать сообщение об успешном добавлении продукта. Использование transient позволяет нам отображать уведомление только один раз, что улучшает пользовательский опыт.
SEO-оптимизация
Если вы решите публиковать этот пост на блоге, рекомендуется использовать ключевые слова, такие как "WordPress отправка формы", "Сообщение об успехе в WordPress", "Добавление продукта в WordPress", чтобы улучшить поисковую видимость вашего контента.
Следуйте лучшим практикам в написании кода и дизайне интерфейсов, чтобы обеспечить наилучший опыт для ваших пользователей.