Using WordPress ‘pre_determine_locale’ PHP filter

pre_determine_locale is a WordPress PHP filter that allows you to override the default locale determination process for the current request.

Usage

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

Parameters

  • $locale (string|null) – The locale you want to return and short-circuit. Default is null.

More information

See WordPress Developer Resources: pre_determine_locale

Examples

Change Locale Based on User Role

Change the locale for logged-in users with the “editor” role.

add_filter('pre_determine_locale', 'change_locale_for_editors');
function change_locale_for_editors($locale) {
if (current_user_can('editor')) {
$locale = 'en_GB';
}
return $locale;
}

Change Locale Based on URL Parameter

Set the locale based on the “lang” parameter in the URL.

add_filter('pre_determine_locale', 'change_locale_based_on_url_parameter');
function change_locale_based_on_url_parameter($locale) {
if (isset($_GET['lang']) && !empty($_GET['lang'])) {
$locale = sanitize_text_field($_GET['lang']);
}
return $locale;
}

Set the locale based on a cookie value.

add_filter('pre_determine_locale', 'change_locale_based_on_cookie');
function change_locale_based_on_cookie($locale) {
if (isset($_COOKIE['language']) && !empty($_COOKIE['language'])) {
$locale = sanitize_text_field($_COOKIE['language']);
}
return $locale;
}

Force Locale for Admin Area

Force a specific locale for the admin area.

add_filter('pre_determine_locale', 'force_locale_for_admin_area');
function force_locale_for_admin_area($locale) {
if (is_admin()) {
$locale = 'en_US';
}
return $locale;
}

Disable Locale Change

Prevent any changes to the site’s locale.

add_filter('pre_determine_locale', 'disable_locale_change');
function disable_locale_change($locale) {
return 'en_US';
}