WPML 裏如何讓自訂角色可以編輯其他人的翻譯

如果你有使用自訂角色和 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 );