现在的位置:首页>wordpress>正文

wordpress站内评论和文章外链转内链跳转改进增强版

2016年09月14日 ⁄ 共 4368字 评论 8 条

关于wordpress的评论链接,部落看到很多朋友都作了链接处理,也就是不再是单纯地显示评论者的链接地址,而是首先转换为内链,具体形式就是www.mfbuluo.com/goto?=这样的,好处的话,目前貌似真没有,如果从SEO的角度来说,正常情况,wordpress也是作了nofollow处理的.但文章中的内容,如果有链接的话,我们先进行转换,然后在指定的页面完成跳转,肯定是有好处的,一来可以实现销售链接的隐藏,二来的话,对网站的SEO也是能起来一定的作用的.

部落其实之前也一直没有注意过,还是前几天换了一个主题,发现了这个功能,这里直接将实现代码般过来.全面支持http和https两种格式.

另外,这个页面是采用自适应的方式展示的,所以无论您用什么主题,都可以使用.

wordpress站内评论和文章外链转内链跳转改进增强版的实现过程

首先我们需要在当前主题里新建一个页面,内容有点长,如果您不需要自适应,可以将后面的css部分代码去掉.如下:

  1. <?php
  2. // wordpress站内评论和文章外链转内链跳转 from www.mfbuluo.com
  3. $t_url = preg_replace('/^url=(.*)$/i','$1',$_SERVER["QUERY_STRING"]);
  4. if(!emptyempty($t_url)) {
  5.     preg_match('/(http|https):\/\//',$t_url,$matches);
  6.     if($matches){
  7.         $url=$t_url;
  8.         $title='页面加载中,请稍候...';
  9.     } else {
  10.         $title='加载中...';
  11.         echo "<script>setTimeout(function(){window.opener=null;window.close();}, 3000);</script>";
  12.     }
  13. }
  14. ?>
  15. <html>
  16. <head>
  17. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  18. <meta http-equiv="refresh" content="1;url='<?php echo $url;?>';">
  19. <title><?php echo $title;?></title>
  20. <style type="text/css">
  21. body {
  22.     background: #555
  23. }
  24. .loading {
  25.     -webkit-animation: fadein 2s;
  26.     -moz-animation: fadein 2s;
  27.     -o-animation: fadein 2s;
  28.     animation: fadein 2s
  29. }
  30. @-moz-keyframes fadein {
  31.     from {
  32.         opacity: 0
  33.     }
  34.     to {
  35.         opacity: 1
  36.     }
  37. }
  38. @-webkit-keyframes fadein {
  39.     from {
  40.         opacity: 0
  41.     }
  42.     to {
  43.         opacity: 1
  44.     }
  45. }
  46. @-o-keyframes fadein {
  47.     from {
  48.         opacity: 0
  49.     }
  50.     to {
  51.         opacity: 1
  52.     }
  53. }
  54. @keyframes fadein {
  55.     from {
  56.         opacity: 0
  57.     }
  58.     to {
  59.         opacity: 1
  60.     }
  61. }
  62. .spinner-wrapper {
  63.     position: absolute;
  64.     top: 0;
  65.     left: 0;
  66.     z-index: 300;
  67.     height: 100%;
  68.     min-width: 100%;
  69.     min-height: 100%;
  70.     background: rgba(255,255,255,0.93)
  71. }
  72. .spinner-text {
  73.     position: absolute;
  74.     top: 45%;
  75.     left: 50%;
  76.     margin-left: -100px;
  77.     margin-top: 2px;
  78.     color: #000;
  79.     letter-spacing: 1px;
  80.     font-size: 20px;
  81.     font-family: Arial
  82. }
  83. .spinner {
  84.     position: absolute;
  85.     top: 45%;
  86.     left: 50%;
  87.     display: block;
  88.     margin-left: -160px;
  89.     width: 1px;
  90.     height: 1px;
  91.     border: 20px solid rgba(255,0,0,1);
  92.     -webkit-border-radius: 50px;
  93.     -moz-border-radius: 50px;
  94.     border-radius: 50px;
  95.     border-left-color: transparent;
  96.     border-right-color: transparent;
  97.     -webkit-animation: spin 1.5s infinite;
  98.     -moz-animation: spin 1.5s infinite;
  99.     animation: spin 1.5s infinite
  100. }
  101. @-webkit-keyframes spin {
  102.     0%,100% {
  103.         -webkit-transform: rotate(0deg) scale(1)
  104.     }
  105.     50% {
  106.         -webkit-transform: rotate(720deg) scale(0.6)
  107.     }
  108. }
  109. @-moz-keyframes spin {
  110.     0%,100% {
  111.         -moz-transform: rotate(0deg) scale(1)
  112.     }
  113.     50% {
  114.         -moz-transform: rotate(720deg) scale(0.6)
  115.     }
  116. }
  117. @-o-keyframes spin {
  118.     0%,100% {
  119.         -o-transform: rotate(0deg) scale(1)
  120.     }
  121.     50% {
  122.         -o-transform: rotate(720deg) scale(0.6)
  123.     }
  124. }
  125. @keyframes spin {
  126.     0%,100% {
  127.         transform: rotate(0deg) scale(1)
  128.     }
  129.     50% {
  130.         transform: rotate(720deg) scale(0.6)
  131.     }
  132. }
  133. </style>
  134. </head>
  135. <body>
  136. <div class="loading">
  137.   <div class="spinner-wrapper">
  138.     <span class="spinner-text">页面加载中,请稍候...</span>
  139.     <span class="spinner"></span>
  140.   </div>
  141. </div>
  142. </body>
  143. </html>

布置完上面的代码后,我们再在当前前题的functions.php里面,加入以下代码:

  1. //文章内容中的 外链转内链并跳转  from www.mfbuluo.com
  2.     add_filter('the_content','link_to_jump',999);
  3.     function link_to_jump($content){
  4.         preg_match_all('/<a(.*?)href="(.*?)"(.*?)>/',$content,$matches);
  5.         if($matches){
  6.             foreach($matches[2] as $val){
  7.                 if(strpos($val,'://')!==false && strpos($val,home_url())===false && !preg_match('/\.(jpg|jepg|png|ico|bmp|gif|tiff)/i',$val) && !preg_match('/(ed2k|thunder|Flashget|flashget|qqdl):\/\//i',$val)){
  8.                     $content=str_replace("href=\"$val\"""href=\"".get_template_directory_uri()."/go.php?url=$val\" ",$content);
  9.                 }
  10.             }
  11.         }
  12.         return $content;
  13.     }
  14.     // 评论者链接跳转并新窗口打开    from www.mfbuluo.com
  15.     function commentauthor($comment_ID = 0) {
  16.         $url    = get_comment_author_url( $comment_ID );
  17.         $author = get_comment_author( $comment_ID );
  18.         if ( emptyempty$url ) || 'http://' == $url )
  19.         echo $author;
  20.         else
  21.         echo "<a href='".get_template_directory_uri()."/go.php?url=$url' rel='external nofollow' target='_blank' class='url'>$author</a>";
  22.     }

刷新一下页面,就能看到相关的链接已经转换为内链了.

小结

实现这个外链转内链的功能,wordpress这方面的插件也是相当多的,不过这个功能,既然可以用代码实现,又何必去用插件呢.

现在回过头来看以前那新做页面跳转的方法,简直弱爆了有没有.

评论 8 条 评论内容很精采,有内幕,而且绝对有干货

  1. 我爱动感单车网 2016年09月14日 09:59  @回复  Δ-49楼 回复

    认真学习下,一直挺想要了解下这个,因为咱正好用得着它哩。

  2. 我爱动感单车网 2016年09月14日 10:03  @回复  Δ-48楼 回复

    如果不需要“文章内容中的 外链转内链并跳转”,是不是将第二段代码的上半部分去掉即可?

  3. 菊部 2016年10月12日 15:50  @回复  Δ-47楼 回复

    直接新建页面复制过去是代码啊 难道我是操作错了?

    • 管理员 2016年10月12日 16:22  @回复  ∇地下1层 回复

      出现什么提示?先检查一下路径。

  4. 草根 2016年12月05日 03:22  @回复  Δ-46楼 回复

    WordPress实现评论链接跳转方法设置好多次了。。。内链这样确定可以?

    • 管理员 2016年12月05日 07:48  @回复  ∇地下1层 回复

      当然可以,不过您可以将路径再修改一下。

给我留言