Intereting Posts

Разрешить вызов 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' );