自定义链接填 #pricing,保存后输入框里变成 https://example.com/#pricing,前台点击回到页面顶部,跳不到价格区块。换成完整地址加锚点也一样。日志里能对上时间点,这种反而好排。
菜单项保存时走 esc_url,相对片段会被补成当前页地址,主题输出时再处理一次就只留下路径。锚点在这条过滤链里被当成非法片段丢掉。这一点先确认清楚,后面就不用反复试。
// 保留片段 $url = esc_url($item->url, ['http', 'https']); // 确认最终输出 error_log($item->url);
「菜单锚点丢失」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
处理上按这个顺序:自定义链接直接填完整 URL 带上锚点 别只写 #;检查是否有插件在 wp_setup_nav_menu_item 上重写 url;前台输出用 esc_url 但别再套一层 kses 过滤。
结果对不对很好判断,点击菜单里的价格项页面滚到 #pricing 区块,地址栏锚点保留。
