Вордпресс действие admin_post для аутентифицированных пользователей, не являющихся администраторами – Отправка формы

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

Я пытаюсь отправить форму, используя:

`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. Однако, вы отметили, что действия не выполняются для аутентифицированных пользователей без административных прав, и вместо этого происходит перенаправление на главную страницу.

Применение

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

  1. Проверить конфликты с плагинами:

    • Деактивировать все плагины поочерёдно и протестировать отправку формы после каждого отключения. Это помогает выявить плагин, вызывающий конфликт.
  2. Проверить действия и фильтры:

    • Убедитесь, что используемые вами действия и фильтры правильны, и они зарегистрированы корректно. В вашем случае использование admin_post_ непреднамеренно блокировалось из-за конфликта.
  3. Логику обработки данных:

    • Убедитесь, что код, обрабатывающий форму, корректно обрабатывает данные и возвращает или перенаправляет пользователя на ожидаемую страницу.

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

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

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