为WPML登录用户启用“language filtering for ajax operations”功能
解决WPML AJAX语言过滤对登录用户生效的问题
WPML默认仅对未登录用户启用AJAX语言过滤的Cookie机制,登录用户的语言偏好会存储在用户元数据中,导致AJAX请求无法自动适配其语言设置。要让该功能对登录用户生效,可通过添加自定义代码实现:
- 添加以下代码到主题的
functions.php文件,或使用自定义代码插件(如Code Snippets):
// 为登录用户设置WPML语言Cookie add_action('init', 'wpml_set_language_cookie_for_logged_in_users'); function wpml_set_language_cookie_for_logged_in_users() { if (is_user_logged_in() && function_exists('wpml_get_current_language')) { $current_lang = wpml_get_current_language(); $cookie_name = 'wpml_language'; if (!isset($_COOKIE[$cookie_name]) || $_COOKIE[$cookie_name] !== $current_lang) { setcookie($cookie_name, $current_lang, time() + 30 * 24 * 60 * 60, COOKIEPATH, COOKIE_DOMAIN); } } } // 强制AJAX请求使用登录用户的WPML语言设置 add_filter('wpml_preferred_language', 'wpml_force_logged_in_user_language_for_ajax', 10, 2); function wpml_force_logged_in_user_language_for_ajax($preferred_lang, $default_lang) { if (is_user_logged_in() && wp_doing_ajax() && function_exists('wpml_get_current_language')) { return wpml_get_current_language(); } return $preferred_lang; }
代码说明:
- 第一部分会在用户登录时自动设置WPML语言Cookie,确保AJAX请求能获取到正确的语言标识
- 第二部分会在处理AJAX请求时,强制读取当前登录用户的WPML语言设置,替代默认的检测逻辑
注意事项:
- 修改主题文件前请做好备份,避免出现站点故障
- 完成设置后请清除浏览器缓存,确保Cookie正常生效
内容的提问来源于stack exchange,提问作者Mehedi Foysal
相关产品推荐
相关产品推荐

