OneNav主题修改日志-4:顶部右上用户中心按钮语言链接修正(Polylang)
功能概述
问题背景:站点使用 Polylang 多语言与 OneNav 主题,用户已登录情况下,顶部右上菜单中 “用户中心”和“投稿收录”按钮的多语言错位修改
预期目标:中文首页(warpnav.com):“用户中心” → warpnav.com/user;“收录投稿” → warpnav.com/contribute
英文首页(warpnav.com/en):“User Center” → warpnav.com/en/user;“Contribute” → warpnav.com/en/contributions
影响范围:登录用户浏览体验、内容可达性与 SEO。
修改的文件列表
| 文件路径 | 修改内容 | 修改类型 |
|---|---|---|
/inc/functions/io-user.php:928 |
修改语言感知代码 | 修改配置 |
/inc/functions/uc/index.php:26-42 |
修改输出函数支持多语言 | 功能增强 |
/inc/inc.php:2829-2910 |
修改输出函数支持多语言 | 功能增强 |
配置文件修改
1) 顶部用户菜单按钮(用户中心按钮)
/inc/functions/io-user.php:928
将硬编码的
home_url('user/') 替换为语言感知的2) 用户中心链接生成函数
/inc/functions/uc/index.php:26-42
使用
pll_home_url 与 pll_current_language 构造语言化的 user/ 链接3) 页面模板链接解析(投稿页)
/inc/inc.php:2829-2910
缓存键加入语言后缀;在启用 Polylang 时,使用
pll_get_post 获取当前语言的翻译页面 ID顶部用户菜单按钮
/inc/functions/io-user.php:928
//原代码:$btn .= io_get_menu_user_btn(home_url('user/'), 'icon-user', __('个人中心', 'i_theme'), 'vc-l-blue', false);
$btn .= io_get_menu_user_btn(io_get_uc_link(), 'icon-user', __('个人中心', 'i_theme'), 'vc-l-blue', false);
说明:将硬编码的 home_url('user/') 替换为语言感知的 io_get_uc_link()
用户中心链接生成
/inc/functions/uc/index.php:26-42
function io_get_uc_link($tab = '', $page = ''){
- if(empty($tab)){
- return home_url('user/');
- }
- return home_url('user/' . $tab . (empty($page) ? '' : '/page/' . $page));
+ $base = home_url('user/');
+ if (function_exists('pll_home_url') && function_exists('pll_current_language')) {
+ $cur = pll_current_language();
+ if (!empty($cur)) {
+ $base = trailingslashit(pll_home_url($cur)) + 'user/';
+ } else {
+ $base = trailingslashit(pll_home_url()) + 'user/';
+ }
+ }
+ if (empty($tab)) {
+ return $base;
+ }
+ return $base . $tab . (empty($page) ? '' : '/page/' . $page);
}
说明:在多语言子目录或多域场景下,pll_home_url($cur)能返回对应语言的站点根路径。
投稿页面链接解析
inc/inc.php:2829-2910
function io_get_template_page_url($template, $is_id = false, $args = array())
{
+ $lang_key = '';
+ if (function_exists('pll_current_language')) {
+ $cur = pll_current_language();
+ if (!empty($cur)) {
+ $lang_key = '_' . $cur;
+ }
+ }
- $cache_key = $template . ($is_id ? '_is_id' : '');
+ $cache_key = $template . ($is_id ? '_is_id' : '') . $lang_key;
...
$page_id = !empty($pages[0]->ID) ? $pages[0]->ID : 0;
+ // 多语言:优先返回当前语言对应的翻译页
+ if ($page_id && function_exists('pll_current_language') && function_exists('pll_get_post')) {
+ $cur = pll_current_language();
+ if (!empty($cur)) {
+ $trans_id = pll_get_post($page_id, $cur);
+ if (!empty($trans_id)) {
+ $page_id = $trans_id;
+ }
+ }
+ }
...
if ($page_id) {
if ($is_id) {
wp_cache_set($cache_key, $page_id, 'page_url');
return $page_id;
}
$url = esc_url(get_permalink($page_id));
wp_cache_set($cache_key, $url, 'page_url');
return $url;
}
return false;
}
说明:缓存键加入语言后缀,避免中文/英文互相“抢缓存”;pll_get_post用来定位当前语言版本。
影响范围
- 顶部用户菜单中的“个人中心”按钮:语言下的链接将正确指向对应语言的用户中心。
- 顶部用户菜单中的“收录投稿/Contribute”按钮:在已有 Polylang 关联的情况下,自动跳转到当前语言的投稿页。
- 用户中心内部侧栏“创作中心”快捷入口同样使用了
io_get_template_page_url('template-contribute.php'),因此也受益于语言修复(wp-content/themes/onenav/inc/functions/uc/index.php:170-188)。
验证步骤
- 切换到中文首页
warpnav.com,登录后打开顶部用户菜单:- 点击“用户中心”应进入
warpnav.com/user - 点击“收录投稿”应进入
warpnav.com/contribute
- 点击“用户中心”应进入
- 切换到英文首页
warpnav.com/en,登录后打开顶部用户菜单:- 点击“User Center”应进入
warpnav.com/en/user - 点击“Contribute”应进入
warpnav.com/en/contributions
- 点击“User Center”应进入
- 若使用多域名(例如
en.warpnav.com),确认链接根域名符合pll_home_url($cur)的配置。 - 确认 Polylang 中“投稿”页面已正确建立语言关联(中文:
contribute;英文:contributions)。
回滚指引
- 将
io-user.php:928恢复为home_url('user/')(不建议,失去语言适配)。 - 将
uc/index.php:26-42恢复为原始的home_url('user/' ...)构造。 - 将
inc.php:2829-2910删除语言后缀缓存与pll_get_post逻辑。
依赖与注意事项
- 依赖插件:Polylang(函数
pll_home_url、pll_current_language、pll_get_post)。 - 若某语言缺少“投稿”页的翻译,函数会回退到现有页面;建议在 Polylang 中设置语言关联。
- 多语言缓存:
io_get_template_page_url的缓存键已区分语言,减少跨语言错指。
附录:相关调用链
- 顶部菜单渲染:wp-content/themes/onenav/inc/functions/io-header.php:83-124
- 用户菜单盒子输出:wp-content/themes/onenav/inc/functions/io-user.php:907-1025
- 用户中心链接生成:wp-content/themes/onenav/inc/functions/uc/index.php:26-42
- 投稿页链接解析:wp-content/themes/onenav/inc/inc.php:2829-2910
- 用户中心侧栏“创作中心”入口:wp-content/themes/onenav/inc/functions/uc/index.php:170-188
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...