在 WordPress 的文章內容中自動添加內部連結,比如對文章標籤的引用。這不僅可以提高網站的 SEO 效果,也可以增強使用者體驗,使得使用者更容易在你的網站上找到相關的內容。其實關於 WordPress 文章自動添加標籤內鏈的文章並不在少數,而且幾乎都是同一段程式碼,並且我也一直都在使用,今天剛好想要針對網站內鏈做些優化,所以幹脆連自動內鏈的功能都重寫一下。
其實程式碼非常簡單,但是看上去程式碼可能偏多,其主要這個版本的程式碼會將 img、a、code 標籤內的標籤文字替換為一個特殊標記 %&&&&&%,然後進行標籤文字的替換,最後再將特殊標記替換回原來的標籤文字。這樣可以避免在這些標籤內部替換標籤文字。廢話就不多說,直接上程式碼:
//WordPress 文章標籤自動內鏈
add_filter('the_content', 'fanly_auto_tags_link');
function fanly_auto_tags_link($content) {
$tags = get_the_tags(); //獲取當前文章的標籤
if($tags){
foreach ($tags as $tag) {
$link = get_tag_link($tag->term_id); //生成標籤連結
$tag_name = preg_quote($tag->name, '/'); //轉義標籤名
//提前保護<a>、<img>、<code>標籤內的內容
$content = preg_replace_callback('/(<a[^>]*>)(.*?)(<\/a>)/si', function($matches) use ($tag_name) {
return str_replace($tag_name, '%&&&&&%', $matches[0]);
}, $content);
$content = preg_replace_callback('/(<img[^>]*)(.*?)(' . $tag_name . ')(.*?)(>)/si', function($matches) use ($tag_name) {
return str_replace($tag_name, '%&&&&&%', $matches[0]);
}, $content);
$content = preg_replace_callback('/(<code[^>]*>)(.*?)(<\/code>)/si', function($matches) use ($tag_name) {
return str_replace($tag_name, '%&&&&&%', $matches[0]);
}, $content);
//替換內容中的標籤文字為連結,限制替換次數為 1
$content = preg_replace('/' . $tag_name . '/iu', '<a href="' . $link . '">' . $tag->name . '</a>', $content, 1);
//恢復被保護的標籤內的內容
$content = str_replace('%&&&&&%', $tag_name, $content);
}
}
return $content;
}
這段程式碼將會自動在文章內容中為每個標籤創建一個連結。首先,它獲取當前文章的所有標籤,然後對於每個標籤,生成一個到標籤歸檔頁面的連結。然後,它使用正則表達式查找內容中的標籤文字,並將其替換為連結。這裡,我們使用了 preg_replace_callback 函數來避免替換 HTML 標籤內的內容。
看上去規範很多了,其實這只是一個簡單的用法也是最偷懶的網站內鏈優化方式,但是由於每個人的使用場景不一樣,所以提供一個基礎的解決方案給大家參考吧,其實還可以進行一些增強甚至添加自定義連結。
更多關於 WordPress 優化及疑問可以添加 QQ 群:255308000
除非註明,否則均為泪雪博客原創文章,禁止任何形式轉載