私は自分の "作者"(私は "キャプテン"と名前を変えました)に彼らのチームメンバーと彼らのチームメンバーだけのユーザープロフィールにアクセスする能力を与えることを試みています。チームは、ユーザーメタボックスによって定義されます(これは、プロジェクトの他の部分に対するユーザー分類よりもうまく機能します)。著者はedit_users
機能を与えられました。
こんなことができると思っていました。
add_action('user_row_actions','captains_user_row_actions',10,2);
function captains_user_row_actions($actions, $user_object) { // remove the ability to edit a non-team-member
$current_user = wp_get_current_user();
$cap_team_id = get_user_meta($current_user->ID, 'team-meta', true);
$user_team_id = get_user_meta($user_object->ID, 'team-meta', true);
global $pagenow;
if ($pagenow=='users.php' && isset($user_object->caps['author']) && $cap_team_id != $user_team_id )
unset($actions['edit']);
return $actions;
}
どちらにしてもこれは不可能です。または何かが足りない。
私は次のコードをテストしませんでした、それはあなたが望むことをするべきです(または少なくとも正しい方向にあなたを向ける)。
function captains_user_row_actions($actions, $user) {
// remove the ability to edit a non-team-member
$cap_team_id = get_user_meta(wp_get_current_user()->ID, 'team-meta', true);
$user_team_id = get_user_meta($user->ID, 'team-meta', true);
if ('users.php' === $GLOBALS['pagenow'] && $cap_team_id !== $user_team_id)
unset($actions['edit']);
return $actions;
}
add_action('user_row_actions', 'captains_user_row_actions', 10, 2);
// EDITfunctions.php
ファイルに以下を追加して、直接編集も処理します。
function my_captain_func() {
$cap_team_id = get_user_meta(wp_get_current_user()->ID, 'team-meta', true);
$user_team_id = get_user_meta($_GET['user_id'], 'team-meta', true);
if ($cap_team_id !== $user_team_id && ! current_user_can('edit_pages')) {
wp_redirect(admin_url()); // or wherever you like
exit;
}
}
if ('user-edit.php' === $GLOBALS['pagenow'])
add_action('wp_loaded', 'my_captain_func');