如何在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
相关产品推荐
相关产品推荐

