Вопрос или проблема
Я пытаюсь отправить форму, используя:
`admin_post` && `admin_post_nopriv`
действия.
Это шорткод для поиска пользователей:
add_shortcode( 'search_users', 'search_users' );
function search_users( $atts ,$content = null ) {
ob_start();?>
<div class="search-box-main-container">
<form method="POST" id="sul-searchform" action="<?php echo home_url() . '/wp-admin/admin-post.php' ?>" class="search-form">
<div class="search-box-container">
<input type="text" class="search-box" name="search" id="sul-s"/>
</div>
<div class="submit-container">
<input type="hidden" name="action" value="search_users_action">
<input type="submit" class="search-box-submit" name="submit" id="sul-searchsubmit"
value="Search"/>
</div>
</form>
</div>
<?php
$output = ob_get_contents();
ob_end_clean();
return $output;
}
И эти действия:
add_action( 'admin_post_search_users_action', 'list_users' );
add_action( 'admin_post_nopriv_search_users_action', 'list_users' );
function list_users() {
$search = (isset($_POST['search'])) ?sanitize_text_field($_POST['search']) : false;
wp_redirect( home_url() . '/user-listing?search=" . $search );
}
Они работают только для администраторов и неавторизованных пользователей. Для авторизованных пользователей без прав администратора действия не вызываются. Просто происходит перенаправление на главную страницу!
Существует ли другое действие для обработки авторизованных пользователей без прав администратора?
Я обнаружил, что проблема была связана с другим плагином на моем сайте. После его деактивации все работает нормально. Итак, действие admin_post
используется для всех авторизованных пользователей (администраторов и неадминистраторов).
.
Ответ или решение
Вопрос об использовании действий admin_post
и admin_post_nopriv
в WordPress для обработки отправки формы вызывает некоторые трудности, особенно когда пользователи аутентифицированы, но не имеют административных привилегий. Рассмотрим решение этой проблемы через призму теории, примера и практического применения.
Теория
В WordPress, хуки admin_post_
и admin_post_nopriv_
используются для обработки форм, отправленных через панель администратора и фронтенд соответствующих страниц. Эти действия принимаются WordPress и позволяют разработчикам обрабатывать данные формы после её отправки. Для аутентифицированных пользователей (как администраторов, так и не-администраторов), используется хук admin_post_
, а для неаутентифицированных (гостей) — admin_post_nopriv_
.
Пример
В вашем сценарии вы создали шорткод search_users
, который выводит форму поиска пользователей. Форма отправляется на URL /wp-admin/admin-post.php
, что приводит к вызову функции, связанной с действиями admin_post_search_users_action
и admin_post_nopriv_search_users_action
. Однако, вы отметили, что действия не выполняются для аутентифицированных пользователей без административных прав, и вместо этого происходит перенаправление на главную страницу.
Применение
Исходя из последующего уточнения, причиной проблемы был конфликт с другим плагином. В реальной практике, когда процессы формы кажутся нерабочими для определённой категории пользователей, стоит:
-
Проверить конфликты с плагинами:
- Деактивировать все плагины поочерёдно и протестировать отправку формы после каждого отключения. Это помогает выявить плагин, вызывающий конфликт.
-
Проверить действия и фильтры:
- Убедитесь, что используемые вами действия и фильтры правильны, и они зарегистрированы корректно. В вашем случае использование
admin_post_
непреднамеренно блокировалось из-за конфликта.
- Убедитесь, что используемые вами действия и фильтры правильны, и они зарегистрированы корректно. В вашем случае использование
-
Логику обработки данных:
- Убедитесь, что код, обрабатывающий форму, корректно обрабатывает данные и возвращает или перенаправляет пользователя на ожидаемую страницу.
В заключении, описанный вами случай подчеркивает важность отладки в разработке WordPress. Правильное использование хуков и понимание взаимодействия между плагинами может существенно повлиять на функциональность вашего сайта. Обработка отправки форм в WordPress — мощный инструмент, и, при правильной настройке, позволяет гибко управлять пользовательскими данными.