分享各种网络资源
是我乃至整个互联网的精髓所在
最新消息:站点开启被动注册模式,详情点击这里了解
 您目前所在位置: 站点首页 » 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添加评论内容字数限制

      WordPress添加评论内容字数限制

      很久之前我们介绍过,如何添加文章内容字数限制,有兴趣的可以去了解一下: 那么今天给大家介绍的是,如何给WordPress评论内容中添加字数限...

      点击查看
    • Giphypress-WordPress文章内容中添加GIF图片

      Giphypress-WordPress文章内容中添加GIF图片

      看了标题之后,千万不要关闭这个页面,因为这个页面里面的内容可能跟你了解的不一样。 我们都知道 WordPress 可以通过添加媒体来上传 G...

      点击查看
    • 如何自定义WordPress登陆页面背景

      如何自定义WordPress登陆页面背景

      这个功能是一个小功能,但是就我了解到的,目前还是有很大一部分主题都是使用的了这个功能的,所以这里还是简单的介绍一下实现方法。 首先我们看到登...

      点击查看
    WordPress文章添加标签内链
    5 + 6 =
    • 昵称 (必填)  
    • 邮箱 (必填)
    • 网址 (选填)