Intereting Posts
Не можем ли мы использовать строки, определенные как константы PHP, если мы хотим перевести их в плагин? Параметры плагина, пресеты и фильтры: можете ли вы помочь мне улучшить мой рабочий процесс? Как изменить количество категорий, перечисленных на панели управления? WP-Admin 404 после миграции – SSL на сайт без SSL Возможно ли иметь собственный тип сообщения с фидом, но без архива? Двадцать семнадцать страниц Я хочу, чтобы файл attachment.php возвращал изображение выдержка не появляется Исключить из поиска все пользовательские сообщения, которые НЕ относятся к таксономии Отключить параметр редактирования в медиатеке Как читать сгенерированные значения из функции, расположенной в заголовке, полученной в ответ Ajax Неустранимая ошибка Вызов функции-члена функции () на не-объекте вычислять значения из поля и вставлять их в настраиваемые поля при публикации или обновлении сообщения INSERT в фатальной ошибке строки таблицы Почему я получаю ошибку PHP в функции add_filter?

Действие admin_post не используется, если доступ администратора недоступен пользователю

Прямо сейчас пользователи с определенной ролью будут перенаправлены с помощью hook в admin_init зависимости от следующих условных

 if (is_admin() && in_array($role_id, $user->roles)) 

Однако это не позволяет зарегистрированному пользователю с этой ролью использовать admin_post действия admin_post . Итак, есть ли способ перенаправить доступ или функции панели управления только администратором?

Я осмотрел лучший способ справиться с представлением формы WordPress и прочитать, что admin_post – это крючок для использования, но теперь кажется, что я не могу использовать это сейчас, если роль перенаправляется при доступе к wp_admin/admin-post.php ?

Solutions Collecting From Web of "Действие admin_post не используется, если доступ администратора недоступен пользователю"

Как насчет (1) current_screen ? action hook или условие для (2) get_current_screen() в вашем условном wp_redirect а затем вызов wp_redirect ?

Оба дают вам WP_Screen object который имеет несколько параметров, включая свойство $parent_base которое также может при необходимости включать более широкое включение.

Вот список свойств из кода:

$ action Любое действие, связанное с экраном. «добавить» для экранов * -add.php и * -new.php. Пусто.

$ base Основной тип экрана. Обычно это то же самое, что и $ id, но с любыми типами сообщений и таксономиями. Например, для $ id «edit-post» базой является «редактировать».

$ id Уникальный идентификатор экрана.

$ is_network Независимо от того, находится ли экран в сетевом админе.

$ is_user Независимо от того, находится ли экран в администраторе пользователя.

$ parent_base Основной родительский пункт меню. Это происходит из $ parent_file, удаляя строку запроса и любое расширение .php. $ parent_file значения 'edit.php? post_type = page' и 'edit.php? post_type = post' имеют $ parent_base 'edit'.

$ parent_file $ parent_file для экрана в системе меню администратора. Некоторыми значениями $ parent_file являются «edit.php? Post_type = page», «edit.php» и «options-general.php».

$ post_type Тип сообщения, связанный с экраном, если он есть. Экран 'edit.php? Post_type = page' имеет тип сообщения 'page'. Экран «edit-tags.php? Taxonomy = $ taxonomy & post_type = page» имеет тип сообщения «страница».

$ таксономия Таксономия, связанная с экраном, если таковая имеется. Экран «edit-tags.php? Taxonomy = category» имеет таксономию «категории».

Просто быстрый пример возможного использования, а не рабочий код:

 add_action( 'current_screen', 'my_function' ); function my_function( $current_screen ) { //true for anything other than page prefixed with edit.php if ( $current_screen->parent_base !== 'edit' ) { //get user role here, then: if ( in_array( $user->roles ) ) { //send to /wp-admin/ //note: for multisite I don't think admin_url() is the function you need wp_redirect( admin_url() ); } } } 

В вашем конкретном случае может быть более подходящий подход, но в целом я использовал что-то подобное открытому / закрытому доступу к экрану post_type или профиля пользователя, не затрагивая возможности входа пользователя в систему.