Intereting Posts
esc_url возвращает неверный URL-адрес Изменение параметров выбора на основе предыдущего выбора с помощью PHP & AJAX Детская тема на основе набора инструментов не найдена Как изменить категорию на таксономию? Стиль очереди внутри короткого кода, но он загружен в нижней части страницы (перед сценариями нижнего колонтитула) Установки WAMP действуют, отличные от реальной установки при загрузке изображений Мета-ящик не отображается в моем настраиваемом типе сообщений Ошибка 404 при сохранении или просмотре одной конкретной страницы Вам нужно войти в систему с пользователем, у которого есть возможность редактировать сообщения? Пользовательский мета-ящик для всех настраиваемых типов сообщений Возможности CPT WordPress Настройка поля темы в почтовых сообщениях WordPress? Как добавить правила перезаписи, чтобы указать папку uploads в субдомен Исключить сообщения, которые имеют категорию «Без рубрики» изменить статус публикации, когда пользователи обновляют сообщения?

Разрешить вызов AJAX для других ролей, чем admin

На моем веб-сайте зарегистрированные пользователи (роль подписчика) могут отправлять черновики и, если администраторы проверяют их, они публикуются.

Я пытаюсь добавить окно тега в редактор интерфейса, используемый для отправки новых сообщений. Чтобы реализовать функцию автозаполнения, я делаю вызов AJAX по этому URL-адресу:

http://example.com/wp-admin/admin-ajax.php?action=ajax-tag-search&tax=post_tag 

Это отлично работает для пользователя-администратора, но он не работает для подписчиков. Кто-нибудь знает какой-либо способ достичь этого, не обращаясь к admin-ajax.php ?

Solutions Collecting From Web of "Разрешить вызов AJAX для других ролей, чем admin"

Все вызовы WordPress AJAX должны обрабатываться admin-ajax.php , так как они происходят во admin-ajax.php интерфейсе или в бэкэнд. Чтобы предоставить доступ, вам необходимо зарегистрировать callbackfuntion для вызова AJAX, добавьте эти строки в ваш файл:

 add_action( 'wp_ajax_prefix_update_post', 'prefix_update_post' ); add_action( 'wp_ajax_nopriv_prefix_update_post', 'prefix_update_post' ); 

Обязательно добавьте некоторую проверку в функцию prefix_update_post , так как пользователю без регистрации не разрешается отправлять проект.

Итак, эта строка должна сделать трюк:

 function prefix_update_post() { if ( current_user_can( 'edit_post' ) ) { // your goodies here } } 

Если все работает отлично, отлично, иначе вам может потребоваться отправить идентификатор пользователя с помощью вызова AJAX и проверить, имеют ли Пользователь правильные разрешения ( get_user_by('id', $userid) )

Почему бы не сделать своих пользователей, а не подписчиков? По умолчанию участники могут отправлять проекты сообщений, но не публиковать, плюс функция AJAX будет работать.

Если вы не хотите, чтобы вкладчики обращались к панели управления, вы можете оставить их в этом фрагменте:

 function wpse_77140_restrict_admin() { if ( ! current_user_can( 'publish_posts' ) ) wp_redirect( home_url() ); } add_action( 'admin_init', 'wpse_77140_restrict_admin' );