欢迎访问晨星博客!

  • WordPress简单实现站内相对链接路径

    文章目录
    1. 方法分析
    2. 实现代码
    3. 注意事项

    前几天在晨星博客交流群(群号:565616228)中有用户提出了一个需求,希望在自己的站内使用相对地址,但是呢在网上找的教程要么太复杂需要修改WP程序的源代码要么就是没有什么卵用,于是来向我求助有没有简单有效的方案来使用相对地址,再然后就有了今天的这篇帖子给大家带来一种非常简单,而且非常有效的方法,并非网络上那些修改修改wp源文件或者wp-config.php配置文件这些治标不治本的方案,而是wp源码中内置的功能只需做下简单调用即可!

    201609257568670

    关于相对路径和绝对路径的解释和优缺点分析呢我已经在《绝对地址和相对地址的优缺点分析和使用建议》中进行了详细的说明。通过这篇文章我们可以链接到什么情况下适合用相对链接,什么时候用绝对链接比较合适!下面我们就来看看如何通过简单的一行代码来实现WP站内相对链接的功能的!

    方法分析

    要想简单的实现相对链接无非就是找到代码的源头,然后再源头进行匹配和替换,那么对于WP来说,我们的源头是在常规里面填写的网址,但是这个我们是不能去修改的,值得庆幸的是WP在一般情况下是没有直接调用常规里面设置的网址的,而是通过一个home_url() 的函数进行应用,我们要做的就是在home_url()这的函数的返回值中进行匹配和替换,如果跟网站域名相同那么就把域名去除,如果不同则直接返回网址,这样在兼容附件服务器的同时实现了站内相对链接的功能!

    实现代码

    实现相对链接功能,我们需要用到home_url()函数中提供的一个home_url过滤器,和WP内置的wp_make_link_relative函数来匹配替换跟主域相同的域名:

    1. add_filter( ‘home_url’, ‘wp_make_link_relative’ );

    这个时候我们可能会发现一些问题,sitemap与feed中也调用相对链接那么站外访问和搜索引擎抓取就会报错,下面我们需要对上面的代码进行优化:

    1. add_filter( ‘home_url’, ‘cx_remove_root’ );
    2. function cx_remove_root( $url ) {
    3.     if(!is_feed() || !get_query_var( ‘sitemap’ )){
    4.         $url = preg_replace( ‘|^(https?:)?//[^/]+(/?.*)|i’, ‘$2’, $url );
    5.         return ‘/’ . ltrim( $url, ‘/’ );
    6.     }else{
    7.         return $url;
    8.     }
    9. }
    这段代码兼容性就比较好了,sitemap与feed都可以继续使用绝对链接;这种方法相对来说比较方便和安全!

    注意事项

    1. 本教程只适用于代码比较规范的主题,不保证兼容所有主题;
    2. 教程中的代码添加到主题的functions.php文件中即可;

    声明:原创文章请勿转载,如需转载请注明出处!

    • 共 9 条评论

    请登陆后再发表您的观点吧!

    最新评论

    1. Q14966580246

      你站点头像https的吧,头像拉低了你站点的速度

    2. hxhsshsghs

      受益匪浅

    3. hxhsshsghs

      不错

    4. hxhsshsghs

    5. 2416421200

      算是长知识了。

    6. 遗忘@淡定^_^

      使用之后显示重定向,怎么解决?

      1. 小牛爱奋斗

        @遗忘@淡定^_^ 这个只是把链接前面的域名部分去掉,不会出现301的情况,可能是你网站有什么必须传入绝对路径,这个你可以做下排查!

    7. ebest

      哈哈,wordpress功能很全,各种各样的实现方法跟教程都能搜索到。

    账号登陆

    快捷登陆