问题背景
WooCommerce 的“我的账户(My account)“页面下有多个子页面,官方术语叫端点(Endpoint):订单、下载、地址、账户详情等。它们共用 My account 这一个页面,URL 不同(/my-account/orders/、/my-account/downloads/……),但页面标题都显示为”My account“。
结果就是:浏览器标签页上全是同一个标题,用户开多个标签分不清谁是谁;如果你用 Bricks 给 My account 做了自定义模板并在标题区输出 {post_title},同样无法区分当前在哪个端点。
解决办法:注册一个函数识别当前端点,返回对应的后缀文案,拼到标题后面。
Step 1:注册端点识别函数
在子主题的 functions.php(不需要开头 <?php 标签)或代码片段插件中添加:
function bl_get_endpoint_name(): string {
if ( is_wc_endpoint_url( 'orders' ) ) {
return ' - Orders';
} elseif ( is_wc_endpoint_url( 'downloads' ) ) {
return ' - Downloads';
} elseif ( is_wc_endpoint_url( 'edit-address' ) ) {
return ' - Addresses';
} elseif ( is_wc_endpoint_url( 'edit-account' ) ) {
return ' - Account details';
} else {
return '';
}
}
核心是 WooCommerce 自带的 is_wc_endpoint_url( '端点名' ) 判断函数:传入端点 slug,返回当前页面是否处于该端点。按顺序判断后返回对应后缀,都不是就返回空字符串(比如 My account 首页本身)。
Step 2:拼进页面标题
在 Bricks 模板中,把标题元素的动态数据设为:
{post_title}{echo:bl_get_endpoint_name}
这样在订单端点页,标题就会渲染成“My account - Orders”;在下载页变成“My account - Downloads”,以此类推。
Step 3:白名单化
Bricks 只允许执行白名单内的函数,把 bl_get_endpoint_name 加进去:
add_filter( 'bricks/code/echo_function_names', function() {
return [
'bl_get_endpoint_name'
];
} );
同样建议把站点其他自定义函数一并收集进来(Bricks → 设置 → 自定义代码 → Code review 可核对)。
小结
这套“is_wc_endpoint_url() 识别端点 + {echo:...} 动态输出“的方案,不止能改标题:任何需要按端点区分的输出——比如给不同端点页显示不同的提示横幅——都可以照这个模式做。WooCommerce 端点的完整清单可以查官方文档(woocommerce.com 开发者文档 Endpoints 一节),按需扩展 elseif 分支即可。
顺带一提,前端体验层面浏览器标题一变,用户多开标签页的辨识度立刻提升;对 SEO 来说每个端点页的 title 也各不相同,算是白捡的优化。