답변:
먼저, 활성화시 추가 한 모든 항목 이 제거시 제거되어야 합니다. 예제 코드 가 포함 된 간단한 자습서를 받았습니다 .
나는 MU에 대해 많이 알지 못하지만 내가 알 수있는 한 역할 객체는 모든 블로그에서 전역 적입니다. 이 작은 플러그인을 사용 해보고 얻을 수있는 것을보십시오.
<?php
/*
Plugin Name: MU Roles check
Plugin URI: https://github.com/franz-josef-kaiser/
Description: Check roles during viewing a blog
Author: Franz Josef Kaiser
Author URI: https://plus.google.com/u/0/107110219316412982437
Version: 0.1
Text Domain: murc
License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
/**
* Show the blog data and the role names in this blog
* Also shows if the custom capability was successfully added, or displays n/a for the role
*
* @return void
*/
function wpse35165_role_check()
{
$blog = get_current_site();
$custom_cap = 'name_of_your_custom_capability';
$html = "<hr /><table>";
$html .= "<caption>List roles in (Blog) {$blog->site_name} / ID#{$blog->id}</caption>"
$html .= "<thead><tr><th>Role Name</th><th>Capabilties</th></tr></thead><tbody>";
foreach ( $GLOBALS['wp_roles'] as $name => $role_obj )
{
$cap = in_array( $custom_cap, $role_obj->caps ) ? $custom_cap : 'n/a';
$cap = $cap OR in_array( $custom_cap, $role_obj->allcaps ) ? $custom_cap : 'n/a';
$html .= "<tr><td>{$name}</td><td>{$cap}</td></tr>";
}
$html .= '</tbody></table>';
print $html;
}
add_action( 'shutdown', 'wpse35165_role_check' );
/**
* Add the capability to the role objects
* Should be in your activation function and done before you inspect with your plugin
*
* @return void
*/
function wpse35165_add_cap()
{
$custom_cap = 'name_of_your_custom_capability';
$min_cap = 'the_minimum_required_built_in_cap'; // Check "Roles and objects table in codex!
$grant = true;
foreach ( $GLOBALS['wp_roles'] as $role_obj )
{
if (
! $role_obj->has_cap( $custom_cap )
AND $role_obj->has_cap( $min_cap )
)
$role_obj->add_cap( $custom_cap, $grant );
}
}
참고 : 액세스 권한을 부여하지 않고 역할에 기능을 추가 할 수 있습니다 $grant = false;
. 두 번째 인수 만 설정하면 됩니다. 이를 통해 단일 사용자를 화이트리스트에 추가하여 마지막 인수를 포함하여 한도를 간단히 추가 할 수 있습니다.
현재 작업중 인 플러그인의 경우 역할 기반 별로 플러그인 설정 (즉, 해당 관리자 메뉴 페이지)에 대한 액세스 권한을 부여 / 제한하고 싶었습니다 .
따라서에 새로운 플러그인 전용 capability
을 추가 해야했습니다user roles
.
불행히도 카이저의 대답 은 더 이상 작동하지 않는 것 같습니다. 따라서 위에서 언급 한 기능을 허용하는 방법을 알아 내려고 시간을 보냈습니다.
코드를 여러분과 공유하기 전에 여기에 모든 내용이 일반 텍스트로 표시되어 있습니다.
THE_NEW_CAP
특정 내장 기능 이있는 역할에 새 기능 을 추가하십시오 BUILT_IN_CAP
(필자의 경우 :) edit_pages
.위 코드는 코드로 변환 된 것입니다.
class WPSE35165Plugin {
public function __construct() {
// Register hooks
register_activation_hook(__FILE__, array(__CLASS__, 'activation'));
register_deactivation_hook(__FILE__, array(__CLASS__, 'deactivation'));
// Add actions
add_action('admin_menu', array(__CLASS__, 'admin_menu'));
}
public function activation() {
self::add_cap();
}
// Add the new capability to all roles having a certain built-in capability
private static function add_cap() {
$roles = get_editable_roles();
foreach ($GLOBALS['wp_roles']->role_objects as $key => $role) {
if (isset($roles[$key]) && $role->has_cap('BUILT_IN_CAP')) {
$role->add_cap('THE_NEW_CAP');
}
}
}
// Add plugin menu pages to admin menu
public function admin_menu() {
// Remove the following line if you don't care about new roles
// that have been created after plugin activation
self::add_cap();
// Set up the plugin admin menu
add_menu_page('Menu', 'Menu', 'THE_NEW_CAP', …);
add_submenu_page('wpse35165', 'Submenu', 'Submenu', 'THE_NEW_CAP', ...);
}
public function deactivation() {
self::remove_cap();
}
// Remove the plugin-specific custom capability
private static function remove_cap() {
$roles = get_editable_roles();
foreach ($GLOBALS['wp_roles']->role_objects as $key => $role) {
if (isset($roles[$key]) && $role->has_cap('THE_NEW_CAP')) {
$role->remove_cap('THE_NEW_CAP');
}
}
}
}
참고 : 대문자 기능을 사용하지 마십시오. 이것은 가독성을위한 것입니다.
get_editable_roles()
편집하려는 역할을 가져 오려면 사용하십시오 . 당신은 것입니다 , 그렇지 않으면 플러그인을 휴식.
이것은 나를 위해 작동합니다 :
add_action('admin_init', 'add_custom_cap');
function add_custom_cap()
{
$custom_cap = 'test_cap';
$min_cap = 'read';
$grant = true;
$to_role = 'your_user_role';
$role = 'user_role';
foreach ( $GLOBALS['wp_roles'] as $role_obj )
{
if (is_object($role_obj[$role])) {
if (!$role_obj[$role]->has_cap( $custom_cap ) && $role_obj[$role]->has_cap( $min_cap )) {
$role_obj[$role]->add_cap( $custom_cap, $grant );
}
}
}
}