Intereting Posts
Создание динамических файлов верхнего и нижнего колонтитулов Сравнение десятичных знаков meta_query не работает правильно Где разместить архив- {post-type} .php Добавление параметра метки / фильтра в мой короткий код API настроек и 'type' => 'font' Могу ли я предотвратить «wp_user_level» от добавления в wp_usermeta при регистрации? Проблема пользователей (мульти-автор плюс многопользовательская) Добавление действия в функцию, вызываемую add_filter Могу ли я проверить, кто обновил статическую главную страницу в WordPress и время, которое было сделано Как я могу отложить чтение позиционирования в 3 дня для не зарегистрированного пользователя? Отключить исходящие веб-запросы IIRF + IIS 6 + WordPress не возвращает ошибку 404 Разрешить страницам, не связанным с SSL, использовать https или Force non-SSL-страницы для http? Несколько поддоменных имен – одна установка WP (не-Multisite) – по умолчанию Каждое имя субдомена для AUTHOR Archive Является ли get_permalink также каноническим URL?

Показать специальное содержимое для определенных ролей

Я думаю, что я очень близок к тому, что мне нужно, но просто нужно небольшое направление. Я пытаюсь показать виджет содержания в бэкэнд для пользователей определенной роли. Прямо сейчас, я просто проверяю его с пользователем, который играет роль subscriber .

Это прекрасно работает:

 <?php // Add a widget to the WordPress dashboard function wpc_dashboard_widget_function() { // Do whatever you want to render in here echo '<div> <h3>Special Offer One</h3> <div>Special Offer Text will go here!</div> </div>'; } function wpc_add_dashboard_widgets() { wp_add_dashboard_widget('wp_dashboard_widget', 'Special Offers Just For Vendors', 'wpc_dashboard_widget_function'); } add_action('wp_dashboard_setup', 'wpc_add_dashboard_widgets' ); ?> 

Но это показывает его всем пользователям. Я хотел бы показать только определенную роль и пытался использовать:

 if (!current_user_can('subscriber')): endif; 

наряду с этим, но это просто закручивает вещи, и специальный виджет вообще не отображается никому. Есть идеи?

Возможные причины –

  1. Функция current_user_can() требует ввода функции, а не роли пользователя , хотя она работает когда-то, но мы не должны использовать роль пользователя как вход для этой функции.
  2. вы передаете объект subscriber функции, которая является самой низкой возможной ролью, которую мы можем иметь в WordPress. Вот почему !current_user_can('subscriber') делает его недоступным для всех.

Посмотрите таблицу WordPress Documentations of Capabilities Vs Roles , используйте эту таблицу, чтобы определить, какие возможности вы можете использовать, чтобы скрыть или показать определенную роль. Чтобы показать окно Editor вы можете использовать функцию moderate_comments .

 Eg - if ( current_user_can ('moderate_comments') ) { //To see this visible you should have at-least Editor privileges } 

Заметка –

Я рекомендую использовать wp_get_current_user() . Это можно использовать для захвата роли пользователя и отображения определенного содержимого. Содержимое будет доступно только этому пользователю, даже пользователи с более высокими привилегиями могут его увидеть.

  // Add a widget to the WordPress dashboard function wpc_dashboard_widget_function() { global $wp_roles; $current_user = wp_get_current_user(); $roles = $current_user->roles; $role = array_shift($roles); if($role == 'administrator') { // This is only for Admins echo '<div><h4>Special Offer One</h4><div>Special Offer Text will go here!</div></div>'; } } function wpc_add_dashboard_widgets() { wp_add_dashboard_widget('wp_dashboard_widget', 'Special Offers Just For Vendors', 'wpc_dashboard_widget_function'); } add_action('wp_dashboard_setup', 'wpc_add_dashboard_widgets' );