OneNav主题修改日志-4:顶部右上用户中心按钮语言链接修正(Polylang)

功能模块:用户已登录情况下,顶部右上菜单中 “用户中心”和“投稿收录”按钮的多语言错位修改

页面位置:首页/全局已登录状态 → 顶部右上菜单按钮

修改文件数量:3个文件

功能概述

问题背景:站点使用 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)。

验证步骤

  1. 切换到中文首页 warpnav.com,登录后打开顶部用户菜单:
    • 点击“用户中心”应进入 warpnav.com/user
    • 点击“收录投稿”应进入 warpnav.com/contribute
  2. 切换到英文首页 warpnav.com/en,登录后打开顶部用户菜单:
    • 点击“User Center”应进入 warpnav.com/en/user
    • 点击“Contribute”应进入 warpnav.com/en/contributions
  3. 若使用多域名(例如 en.warpnav.com),确认链接根域名符合 pll_home_url($cur) 的配置。
  4. 确认 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_urlpll_current_languagepll_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
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...