• 歡迎訪問奇跡の海網站,本站不上傳任何資源,所有資源均來自于網絡,歡迎加入奇跡の海~!奇跡の海-WordPress QQ群
  • 本站下載資源為網絡上收集整理而來,并且以計算機技術研究交流為目的,版權歸原作者所有,僅供大家參考,學習,不存在任何商業目的與商業用途.
  • 本站系統鏡像均來自于官方原版,ed2k可視為P2P下載鏈接。所有操作系統默認均為試用版,如有正版密鑰可以有效激活,本站不提供任何激活和相關服務。

WordPress外鏈跳轉教程,兼容知更鳥暗箱下載和文章索引

WP其他 奇跡の海 2年前 (2017-07-25) 1144次瀏覽 已收錄 0個評論 掃描二維碼

一、原版代碼

//給外部鏈接加上跳轉,將此<a href="http://www.bavghg.tw/archives/tag/dm" title="查看更多關于代碼的文章" target="_blank">代碼</a>添加到wordpress主題目錄的functions.php里面即可
add_filter('the_content','the_content_nofollow',999);
function the_content_nofollow($content){
    preg_match_all('/href=&quot;(.*?)&quot;/',$content,$matches);
    if($matches){
	    foreach($matches[1] as $val){
		    if( strpos($val,home_url())===false){
                         $content=str_replace(&quot;href=\&quot;$val\&quot;&quot;, &quot;href=\&quot;$val\&quot; rel=\&quot;external nofollow\&quot; &quot;,$content);
		}
            }
       }
return $content;
}

代碼原理也挺簡單,通過匹配文章content內容,若發現存在外鏈,就給這個外鏈a標簽加上 rel=”nofollow”屬性。
這個代碼常規博客確實可以用,但有可能導致一些特殊鏈接失效,比如這個代碼很可能會讓知更鳥主題的下載按鈕無法彈出或者文章索引損壞,應該是替換過程中被破壞掉了。
針對這個問題,我對代碼進行了第一個改進:

二、改進代碼

//給外部鏈接加上跳轉
add_filter('the_content','the_content_nofollow',999);
function the_content_nofollow($content)
{
	preg_match_all('/<a(.*?)href="(.*?)"(.*?)>/',$content,$matches);
	if($matches){
		foreach($matches[2] as $val){
			if(strpos($val,'://')!==false && strpos($val,home_url())===false && !preg_match('/\.(jpg|jepg|png|ico|bmp|gif|tiff)/i',$val)){
			    $content=str_replace("href=\"$val\"", "href=\"".home_url()."/go/?url=$val\" ",$content);
			}
		}
	}
	return $content;
}

①、

加入了對常規http://或https://開頭的鏈接判斷,就能有效的繞過知更鳥主題的一些特殊鏈接,就因為這些特殊鏈接都不帶http://:

strpos($val,'://')!==false

②、

2014-11-26補充:加入了對 完整a標簽 判斷:

preg_match_all('/<a(.*?)href="(.*?)"(.*?)>/',$content,$matches);
...
foreach($matches[2] as $val){

主要目的是為了繞過高亮代碼中的一些外部鏈接,因為在代碼中出現自己博客的跳轉形式可能會破壞代碼功能,比如博客分享的《百度收錄查詢和顯示代碼》,若不過濾的話,其中的百度鏈接將會被加上跳轉,對使用者帶來困惑:
分享一個WordPress外鏈跳轉教程,兼容知更鳥暗箱下載和文章索引

③、

2015-08-31補充:加入對外鏈圖片的過濾
有朋友反饋使用后,外鏈圖片也跳轉了,導致暗箱跪了。確實會有這個情況,所以在代碼中加入了圖片的過濾:

!preg_match('/\.(jpg|jepg|png|ico|bmp|gif|tiff)/i',$val)

偶然翻看博客舊文章,又看到了以前分享的跳轉辦法,覺得可以和現在的外鏈處理代碼結合一下,或許可以相得益彰,更加完善!
詳細部署步驟如下:

三、最終代碼

①、新增跳轉

根據以前分享的方法,在網站根目錄新增一個文件夾,命名為go,并在go文件夾下新增一個index.php,內容如下:

<?php
    $url = $_GET['url'];
    Header("Location:$url");
?>

現在用瀏覽器訪問http://域名/go/?url=外鏈就能實現跳轉了, 比如訪問: http://zhangge.net/go/?url=http://www.baidu.com 就能跳轉到百度了。

②、新增robots規則:

為了防止搜索引擎抓取這種跳轉鏈接,我們可以在robots.txt里面新增禁止抓取/go的規則:

...以上內容略...
Disallow: /go
...以下內容略...

③、重寫外鏈

i. 替換文章內容中的外鏈
在主題目錄下的functions.php新增如下函數,即可將文章中的外鏈替換為go跳轉的形式:

//給外部鏈接加上跳轉
add_filter('the_content','the_content_nofollow',999);
function the_content_nofollow($content)
{
	preg_match_all('/<a(.*?)href="(.*?)"(.*?)>/',$content,$matches);
	if($matches){
		foreach($matches[2] as $val){
			if(strpos($val,'://')!==false && strpos($val,home_url())===false && !preg_match('/\.(jpg|jepg|png|ico|bmp|gif|tiff)/i',$val)){
			    $content=str_replace("href=\"$val\"", "href=\"".home_url()."/go/?url=$val\" ",$content);
			}
		}
	}
	return $content;
}

分享一個WordPress外鏈跳轉教程,兼容知更鳥暗箱下載和文章索引

ii. 替換評論者的鏈接

在主題目錄下的functions.php查找是否存在修改評論鏈接為新窗口commentauthor函數,如果存在則如下修改第8行,將$url修改為/go/?url=$url,其實就是在前面新增一個go跳轉即可,相同的道理!

//評論鏈接新窗口
function commentauthor($comment_ID = 0) {
    $url    = get_comment_author_url( $comment_ID );
    $author = get_comment_author( $comment_ID );
    if ( empty( $url ) || 'http://' == $url )
    echo $author;
    else
    echo "<a href='".home_url()."/go/?url=$url' rel='external nofollow' target='_blank' class='url'>$author</a>";
}

分享一個WordPress外鏈跳轉教程,兼容知更鳥暗箱下載和文章索引

Ps:

如果functions里面沒有這個評論新窗口的函數,請自己找到評論列表輸出的代碼位置(可能在comments.php),然后參考修改即可(國內主題一般都會有個評論新窗口函數,自己仔細找找看)!
iii. 知更鳥副標題轉載來源鏈接跳轉
其實知更鳥的轉載來源鏈接本身就有nofollow,不過強迫癥嘛,還是繼續修改下:
打開知更鳥主題目錄下的includes文件夾,找到source.php文件,如下修改$reprinted所在行即可:

echo '&#8260; 轉載:'.'<a href="'.home_url().'/go/?url='.$reprinted.'" rel="external nofollow" target="_blank">原文鏈接</a>';

分享一個WordPress外鏈跳轉教程,兼容知更鳥暗箱下載和文章索引
看到這里,相信你應該能輕松領悟方法了吧?就是在外鏈鏈接之前加上【http://博客域名/go/?url=】即可!需要修改博客哪個位置的外鏈,只要找到該位置對應的主題模板,然后參考上述代碼修改即可!
2015-07-16 最新補充:
有不少朋友留言要我分享張戈博客目前在用的跳轉頁面代碼,好吧,那就分享一下吧!

go.php 的代碼如下

<?php 
//$t_url=$_GET['url']; //此代碼無法支持帶請求參數的目的地址,已棄用!
$t_url = preg_replace('/^url=(.*)$/i','$1',$_SERVER["QUERY_STRING"]); //這個支持
if(!empty($t_url)) {
    preg_match('/(http|https):\/\//',$t_url,$matches);
	if($matches){
	    $url=$t_url;
	    $title='頁面加載中,請稍候...';
	} else {
	    preg_match('/\./i',$t_url,$matche);
	    if($matche){
	        $url='http://'.$t_url;
	        $title='頁面加載中,請稍候...';
	    } else {
	        $url='http://zhangge.net/';
	        $title='參數錯誤,正在返回首頁...';
	    }
	}
} else {
    $title='參數缺失,正在返回首頁...';
    $url='http://zhangge.net/';
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="refresh" content="1;url='<?php echo $url;?>';">
<title><?php echo $title;?></title>
<style>
body{background:#000}.loading{-webkit-animation:fadein 2s;-moz-animation:fadein 2s;-o-animation:fadein 2s;animation:fadein 2s}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-o-keyframes fadein{from{opacity:0}to{opacity:1}}@keyframes fadein{from{opacity:0}to{opacity:1}}.spinner-wrapper{position:absolute;top:0;left:0;z-index:300;height:100%;min-width:100%;min-height:100%;background:rgba(255,255,255,0.93)}.spinner-text{position:absolute;top:50%;left:50%;margin-left:-90px;margin-top: 2px;color:#BBB;letter-spacing:1px;font-weight:700;font-size:36px;font-family:Arial}.spinner{position:absolute;top:50%;left:50%;display:block;margin-left:-160px;width:1px;height:1px;border:25px solid rgba(100,100,100,0.2);-webkit-border-radius:50px;-moz-border-radius:50px;border-radius:50px;border-left-color:transparent;border-right-color:transparent;-webkit-animation:spin 1.5s infinite;-moz-animation:spin 1.5s infinite;animation:spin 1.5s infinite}@-webkit-keyframes spin{0%,100%{-webkit-transform:rotate(0deg) scale(1)}50%{-webkit-transform:rotate(720deg) scale(0.6)}}@-moz-keyframes spin{0%,100%{-moz-transform:rotate(0deg) scale(1)}50%{-moz-transform:rotate(720deg) scale(0.6)}}@-o-keyframes spin{0%,100%{-o-transform:rotate(0deg) scale(1)}50%{-o-transform:rotate(720deg) scale(0.6)}}@keyframes spin{0%,100%{transform:rotate(0deg) scale(1)}50%{transform:rotate(720deg) scale(0.6)}}
</style>
</head>
<body>
<div class="loading">
  <div class="spinner-wrapper">
    <span class="spinner-text">頁面加載中,請稍候...</span>
    <span class="spinner"></span>
  </div>
</div>
</body>
</html>

也可以保存為 index.php文件,然后上傳到網站根目錄下的go文件夾(沒有go文件夾就新建一個),實現

http://zhangge.net/go/?url=http://zhangge.net/ 

的跳轉形式。更簡單的評論者鏈接跳轉:如果想要讓評論者鏈接也弄成這種跳轉形式,只要在WordPress主題目錄下functions.php中插入如下代碼即可:

//評論者鏈接重定向
 add_filter('get_comment_author_link', 'add_redirect_comment_link', 5);
 add_filter('comment_text', 'add_redirect_comment_link', 99);
 function add_redirect_comment_link($text = ''){
	$text=str_replace('href="', 'href="'.get_option('home').'/go/?url=', $text);
    return $text;
 }

記得代碼中的“/go/?url=”需要根據實際使用的跳轉形式修改即可!


版權聲明:本站所有文章和資源使用CC BY-NC-SA 4.0協議授權發布 , 轉載應當以相同方式注明文章來自“SeaOMC.COM->WordPress外鏈跳轉教程,兼容知更鳥暗箱下載和文章索引!在下邊可以分享本文哦!
喜歡 (0)
[]
分享 (0)
奇跡の海
關于作者:
一個WordPress菜鳥!
發表我的評論
取消評論

表情 貼圖 加粗 刪除線 居中 斜體 簽到

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
中国福利彩票36选7开奖结果