分享各种网络资源
是我乃至整个互联网的精髓所在
最新公告:
  • 开启被动注册模式,详情点击这里,同时接小单,QQ:330733312
  • 目前站点正在不断折腾和调试中,如有问题请见谅
     您目前所在位置: 站点首页 » WordPress » WordPress 代码 » WordPress文章添加标签内链
  • WordPress文章添加标签内链

  • 问题描述
  • 相关代码
  • 解决办法
  • WordPress文章添加标签内链-BanYuner

    问题描述

    这个功能其实很久之前我使用过,但是为什么后来没有使用呢,因为跟我目前使用的目录代码冲突了,冲突表现形式为,如果H2标签中含有标签关键字,那么就会被内链,但是目录是不能显示带有连接形式的H标签文字的,请看下图:
    WordPress文章添加标签内链-BanYuner

    我们可以看到目录中是有5个标题的,但是实际上呢,它省略了几个标题,如下图:
    WordPress文章添加标签内链-BanYuner

    这个我也是使用的H2标签,按照代码的功能来说的话,这个标题应该是可以被纳入目录中的,可以并没有被纳入,那么为什么会这样呢?我的想法就是因为目录中含有链接,就会影响代码的匹配等问题。

    那么如何解决呢?这里我首先附上标签内链的代码:

    相关代码

    /* 自动为文章内的标签添加内链开始 */
    $match_num_from = 1;        //一篇文章中同一个标签少于几次不自动链接
    $match_num_to = 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"';
    $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;
    }
    add_filter('the_content','tag_link',1);
    /* 自动为文章内的标签添加内链结束 */
    

    代码方面直接丢在functions.php中即可。

    解决办法

    我目前的解决办法就是很简单的不断尝试的出来的,也不知道有什么后遗症或者有什么问题,至少现在还没有看到什么问题的。解决办法如下:

    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, '$'),__('查看所有关于 %s 的文章'))."\"";
    $url .= ' target="_blank"';
    $url .= ">".addcslashes($cleankeyword, '$')."</a>";
    $limit = rand($match_num_from,$match_num_to);
    $content = preg_replace( '|(<a[^>]+>)(.*)('.$keyword.')(.*)(</a[^>]*>)|U'.$case, '$1$2%&&&&&%$4$5', $content);
    $content = preg_replace( '|(<img)(.*?)('.$keyword.')(.*?)(>)|U'.$case, '$1$2%&&&&&%$4$5', $content);
    $content = preg_replace( '|(<h[^>]+>)(.*)('.$keyword.')(.*)(</h[^>]*>)|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($keyword), $content);
    }
    }
    return $content;
    }
    add_filter('the_content','tag_link',1);
    

    大家可以看到,我添加了一行代码:

    $content = preg_replace( '|(<h[^>]+>)(.*)('.$keyword.')(.*)(</h[^>]*>)|U'.$case, '$1$2%&&&&&%$4$5', $content);
    

    并且修改了:

    $content = str_replace( '%&&&&&%', stripslashes($keyword), $content);
    

    中的ex_wordkeyword,这样一来就可以解决了。说实话,原理我并不知道,我就一点点的尝试修改后得出的结果,如果有大神可以帮忙再完善一下或者推翻重来都是极好的。

    关注我们 打赏 分享此文

    微信扫码,关注我们

    扫码,支持我

    WordPress文章添加标签内链

    支付宝(点击图片切换)

    扫码,支持我

    WordPress文章添加标签内链

    微信(点击图片切换)

    扫码,手机看

    WordPress文章添加标签内链
    匿名

    个人评价:┃草根博主┃站点无技术含量┃文章内容不够吸引人┃转载内容随处可见┃资源均来自网络┃分享是我的宗旨,也是这个站点存在意义,分享的东西你现在可能不需要,但是我相信只要在某个时间你需要的时候能在这里找到,那么我就是成功的

    
    WordPress文章添加标签内链
    4 + 3 =