如果你有使用自訂角色和 WPML,那麼你可能會發現畫面上出現「You can only edit translations assigned to you.」這樣的訊息。這個訊息不會出現在登入帳號為「administrator」和「editor」的情況下。
攔截判斷使用權限 user_has_cap
可以在 WPML 中找到 has_user_rights_to_translate
這個方法,你會發現當中有這樣一段:
$user = User::getCurrent();
if ( User::isAdministrator( $user ) || User::isEditor( $user ) ) {
return true;
}
因此我們要想辦法攔截判斷使用權限的方法,此時可以使用 user_has_cap
這個 filter
function custom_user_has_cap($allcaps, $caps, $args, $user) {
// Check if the user is the one you want to modify capabilities for
if (in_array( 'customer_admin', (array) $user->roles )) {
// Add or remove capabilities as needed
$allcaps['editor'] = true;
}
return $allcaps;
}
add_filter('user_has_cap', 'custom_user_has_cap', 10, 4);
如果用戶有 customer_admin
角色時,加上 editor
的 capabilities.
攔截語言翻譯 pair
function custom_wpml_override_is_translator($is_translator, $user_id, $args) {
// find user
$user = get_user_by( 'id', $user_id );
if (in_array( 'editor', (array) $user->roles )) {
return true;
}
return $is_translator;
}
add_filter( 'wpml_override_is_translator', 'custom_wpml_override_is_translator', 10, 3 );