Скрыть определенные виджеты от определенных пользовательских ролей в admin

Я ищу способ скрыть определенные виджеты от определенных типов пользователей на странице admin, Appearance> Widgets ?

Например, администраторы могут видеть все виджеты, но авторы могут видеть только несколько избранных?

Я заметил, что есть плагин Code Canyon, но для него также нужна инфраструктура, которую я не использую.

Solutions Collecting From Web of "Скрыть определенные виджеты от определенных пользовательских ролей в admin"

Вы должны проверять наличие ролей и возможностей в widgets_init action widgets_init и действовать соответственно.

 add_action( 'widgets_init', 'remove_widgets_wpse_89138' , 15 ); function remove_widgets_wpse_89138() { // http://codex.wordpress.org/Function_Reference/is_admin if( !is_admin() ) return; // Grab current user info global $current_user; // Check for specific user /* $username = $current_user->user_login; if( 'the_user_login' != $username) return; */ // Check for capability if( current_user_can( 'add_users' ) ) return; unregister_widget( 'WP_Widget_Pages' ); } 

Вопросы и ответы:

  • Предотвращение удаления виджетов

  • Ограничить количество виджетов в боковых панелях

У меня на самом деле есть класс, который я использую только для этого:

 /** * Hide_widgets_role_based * @author Ohad Raz <admin@bainternet.info> */ class Hide_widgets_role_based{ $has_selector = false; $js_selector = ''; $roles_hide =array(); /** * class constructor * @author Ohad Raz <admin@bainternet.info> * @param array $args [description] */ function __construct($args = array()){ if (is_admin()) add_action('widgets_init', array($this,'hide', 999)); } /** * the money function that hides the widgets on the admin side when the user has a specific role * @return void */ public function hide(){ global $pagenow; if ($pagenow == 'widgets.php'){ global $current_user; get_currentuserinfo(); $sperator = ""; foreach ($this->roles_hide as $role => $widgets) { if ($this->has_role($role)){ foreach ((array)$widgets as $w_id) { unregister_widget( $w_id ); } } } } } /** * add a widget to hide per role * @param string $role role name * @param string $widget widget id */ public function addHide($role,$widget){ if (is_array($widget)){ $tmp = isset($roles_hide[$role])? $roles_hide[$role]: array(); $roles_hide[$role] = array_merge($tmp, (array)$widget); }else{ $roles_hide[$role][] = $widget; } } /** * has_role check if a user has a role * @param int $user_id user id * @return boolean */ public function has_role($user_id = null){ if ( is_numeric( $user_id ) ) $user = get_userdata( $user_id ); else $user = wp_get_current_user(); if ( empty( $user ) ) return false; return in_array( $role, (array) $user->roles ); } } 

Применение:

 $widgets_hide = new Hide_widgets_role_based(); $widgets_hide->addHide('contributor',array('WP_Widget_Pages','WP_Widget_Calendar','WP_Widget_Links')); $widgets_hide->addHide('editor','WP_Widget_Links');