Using WordPress ‘determine_locale’ PHP filter

The determine_locale WordPress PHP filter allows you to change the locale for the current request.

Usage

add_filter('determine_locale', 'my_custom_locale_function');
function my_custom_locale_function($locale) {
    // your custom code here
    return $locale;
}

Parameters

  • $locale (string) – The locale you want to set for the current request.

More information

See WordPress Developer Resources: determine_locale

Examples

Change the locale to French

This code sets the locale to French (fr_FR) for the current request:

add_filter('determine_locale', 'set_french_locale');
function set_french_locale($locale) {
    $locale = 'fr_FR';
    return $locale;
}

Change the locale based on user preference

This code changes the locale based on a user’s preference stored in user meta:

add_filter('determine_locale', 'set_user_preferred_locale');
function set_user_preferred_locale($locale) {
    if (is_user_logged_in()) {
        $user_id = get_current_user_id();
        $user_locale = get_user_meta($user_id, 'preferred_locale', true);
        if ($user_locale) {
            $locale = $user_locale;
        }
    }
    return $locale;
}

Change the locale based on a URL parameter

This code changes the locale based on a ‘lang’ URL parameter:

add_filter('determine_locale', 'set_locale_from_url');
function set_locale_from_url($locale) {
    if (isset($_GET['lang'])) {
        $locale = sanitize_text_field($_GET['lang']);
    }
    return $locale;
}

Change the locale based on browser language

This code sets the locale based on the user’s browser language:

add_filter('determine_locale', 'set_locale_from_browser');
function set_locale_from_browser($locale) {
    $browser_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    switch ($browser_language) {
        case 'fr':
            $locale = 'fr_FR';
            break;
        case 'es':
            $locale = 'es_ES';
            break;
        // Add more cases for different languages
        default:
            break;
    }
    return $locale;
}

Change the locale for a specific page

This code sets the locale to French (fr_FR) for a specific page with the ID 123:

add_filter('determine_locale', 'set_locale_for_specific_page');
function set_locale_for_specific_page($locale) {
    if (is_page(123)) {
        $locale = 'fr_FR';
    }
    return $locale;
}