You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress永久链接中正确使用锚点实现页面跳转?

解决WordPress文章链接锚点被替换失效的问题

以下是几种适配你需求的解决方案,均可通过子主题的functions.php实现:

方案1:保留手动编辑永久链接时的#符号

WordPress默认会将永久链接slug中的#替换为-,可以通过过滤sanitize_title函数阻止这个行为,让手动添加的锚点符号保留:

add_filter('sanitize_title', 'preserve_hash_in_permalink', 10, 3);
function preserve_hash_in_permalink($title, $raw_title, $context) {
    // 仅在保存文章slug时生效
    if ($context === 'save') {
        // 先用临时标记替换#,避免被默认规则处理
        $title = str_replace('#', 'TEMP_HASH', $title);
        // 执行默认的slug清理逻辑
        $title = sanitize_title_with_dashes($title);
        // 把临时标记换回#
        $title = str_replace('TEMP_HASH', '#', $title);
    }
    return $title;
}

添加这段代码后,你在编辑文章永久链接时输入myUrl/#my-anchor,系统会保留#符号,生成的链接可正常跳转到对应锚点位置。

方案2:自动给所有文章链接追加固定锚点#layout

如果只需要所有文章链接都跳转到文章内的#layout位置,无需自定义锚点,可通过post_link钩子自动给链接追加锚点:

add_filter('post_link', 'append_layout_anchor_to_post_links', 10, 3);
function append_layout_anchor_to_post_links($permalink, $post, $leavename) {
    // 仅针对文章类型(如需排除页面可添加判断)
    if ($post->post_type === 'post') {
        $permalink .= '#layout';
    }
    return $permalink;
}

这段代码会让所有文章的前台、后台链接自动带上#layout,点击后直接跳转到目标位置。

方案3:手动插入完整带锚点的链接

如果不想修改代码,也可以在插入文章链接时,直接手动输入完整URL(比如https://yourdomain.com/my-post/#my-anchor),而非仅编辑slug部分。WordPress不会修改完整URL中的#符号,锚点功能可正常生效。

注意事项

  • 修改functions.php前请备份文件,避免代码错误导致网站无法访问。
  • 方案1中,#是浏览器端的锚点标记,不会影响服务器对链接的解析,无需担心兼容性问题。

内容的提问来源于stack exchange,提问作者Redyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:03:28