wordpress 有很强大的插件 WP keyword link 可以根据文章标签(TAG)为文章页面生成内链,但是本文要介绍的是一个更好的不用插件的方法来实现相同的效果。
在主题文件包的functions.php 的结束符 ?>之前加上如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | //TAG连接数量 $match_num_from = 1; //一个关键字少于多少不替换 $match_num_to = 2; //一个关键字最多替换 //连接到WordPress的模块 add_filter( 'the_content' , 'tag_link' ,1); //按长度排序 function tag_sort( $a , $b ){ if ( $a ->name == $b ->name ) return 0; return ( strlen ( $a ->name) > strlen ( $b ->name) ) ? -1 : 1; } //改变标签关键字 function tag_link( $content ){ global $match_num_from , $match_num_to ; $posttags = get_the_tags(); if ( $posttags ) { usort( $posttags , "tag_sort" ); foreach ( $posttags as $tag ) { $link = get_tag_link( $tag ->term_id); $keyword = $tag ->name; //连接代码 $cleankeyword = stripslashes ( $keyword ); $url = "<a href=\"$link\" title=\"" . str_replace ( '%s' , addcslashes ( $cleankeyword , '$' ),__( 'View all posts in %s' )). "\"" ; $url .= ' target="_blank" class="tag_link"' ; $url .= ">" . addcslashes ( $cleankeyword , '$' ). "</a>" ; $limit = rand( $match_num_from , $match_num_to ); //不连接的 代码 $content = preg_replace( '|(<a[^>]+>)(.*)(' . $ex_word . ')(.*)(</a[^>]*>)|U' . $case , '$1$2%&&&&&%$4$5' , $content ); $content = preg_replace( '|(<img)(.*?)(' . $ex_word . ')(.*?)(>)|U' . $case , '$1$2%&&&&&%$4$5' , $content ); $cleankeyword = preg_quote( $cleankeyword , '\'' ); $regEx = '\'(?!((<.*?)|(<a.*?)))(' . $cleankeyword . ')(?!(([^<>]*?)>)|([^>]*?</a>))\'s' . $case ; $content = preg_replace( $regEx , $url , $content , $limit ); $content = str_replace ( '%&&&&&%' , stripslashes ( $ex_word ), $content ); } } return $content ; } |
这样,当文章包含与TAG一致的关键字时,该关键字会自动生成内链,指向TAG标签页。(本例限制内链生成次数上限为2次)