给Typecho的文章链接添加新窗口跳转及nofollow属性
in 建站教程书签 with 0 comment

给Typecho的文章链接添加新窗口跳转及nofollow属性

in 建站教程书签 with 0 comment

相信很多用过typecho程序的人都知道,发表的文章里带的链接都是直接本窗口打开的,这样对网站是非常不利的,极容易流失用户;本文章就为大家介绍下怎么给Typecho的文章链接添加新窗口跳转及nofollow属性。

网上很多关于给typecho文章内链接新窗口打开的方法基本都失效了,花费了大量时间却解决不了实际问题,非常让人恼火。

下面是帖子网就给大家整理了三种新的解决方法

方法一(推荐):

function.phpparseContent()里,修改为

function parseContent($obj){
    $options = Typecho_Widget::widget('Widget_Options');
    if(!empty($options->src_add) && !empty($options->cdn_add)){
        $obj->content = str_ireplace($options->src_add,$options->cdn_add,$obj->content);
    }
    $obj->content = preg_replace("/<a href=\"([^\"]*)\">/i", "<a href=\"\\1\" target=\"_blank\">", $obj->content);
    echo trim($obj->content);
}

如果需要添加rel=nofollow,则如下

function parseContent($obj){
    $options = Typecho_Widget::widget('Widget_Options');
    if(!empty($options->src_add) && !empty($options->cdn_add)){
        $obj->content = str_ireplace($options->src_add,$options->cdn_add,$obj->content);
    }
    $obj->content = preg_replace("/<a href=\"([^\"]*)\">/i", "<a href=\"\\1\" target=\"_blank\" rel=\"nofollow\">", $obj->content);
    echo trim($obj->content);
}

保存即可···

方法二:

在前端,通过Vanilla JS解决

逻辑是查找某个标签的id下所有的a标签,然后给每个添加属性,如下

var pageAnchors = document.getElementById('post-content').getElementsByTagName('a');
for (var i=0; i<pageAnchors.length; i++){
    pageAnchors[i].setAttribute('target', '_blank');
}

这样的是不可靠,在没有某个标签的id的情况下浏览器会报错,一报错,我就不舒服,解决如下

if(document.getElementById('post-content')){
    var pageAnchors = document.getElementById('post-content').getElementsByTagName('a');
    for (var i=0; i<pageAnchors.length; i++){
        pageAnchors[i].setAttribute('target', '_blank');
    }
}

套个方法,美化一下,如下

var pageTagretBlank = function(pageId) {
    if(document.getElementById(pageId)){
        var pageAnchors = document.getElementById(pageId).getElementsByTagName('a');
        for (var i=0; i<pageAnchors.length; i++){
            pageAnchors[i].setAttribute('target', '_blank');
        }
    }
};
pageTagretBlank('post-content');

如果我还需要添加rel=nofollow,则如下

var pageTagretBlank = function(pageId) {
    if(document.getElementById(pageId)){
        var pageAnchors = document.getElementById(pageId).getElementsByTagName('a');
        for (var i=0; i<pageAnchors.length; i++){
            pageAnchors[i].setAttribute('target', '_blank');
            postAnchors[i].setAttribute('rel', 'nofollow');
        }
    }
};
pageTagretBlank('post-content');

代码一般放在主题的footer.php就可以了

方法三:

修改Typecho系统代码

找到varMarkdown.php这个文件

self::$parser->hook('afterParseCode', array('Markdown', 'transerCodeClass'));后面,添加下面代码

self::$parser->hook('afterParseInline', array('Markdown', 'addLinkTargetBlank'));

然后在public static function transerCodeClass($html){}这个代码块后面,添加下面代码

/**
 * addLinkTargetBlank
 * 
 * @param string $html
 * @return string
 */
public static function addLinkTargetBlank($html)
{
    return preg_replace("/<a href=\"([^\"]*)\">/i", "<a href=\"\\1\" target=\"_blank\">", $html);
}

如果需要添加rel=nofollow,则如下

/**
 * addLinkTargetBlank
 * 
 * @param string $html
 * @return string
 */
public static function addLinkTargetBlank($html)
{
    return preg_replace("/<a href=\"([^\"]*)\">/i", "<a href=\"\\1\" target=\"_blank\" rel=\"nofollow\">", $html);
}


本文转载自:https://www.linpx.com/p/add-a-new-window-to-the-typecho-article-link.html , 由帖子网重新排版编辑。

Responses