You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为WordPress的post_link过滤函数添加target="_blank"属性?

解决WordPress文章标题链接添加target="_blank"的问题

你当前的post_link过滤器确实能成功替换文章的链接URL,但它的局限性在于只返回纯URL字符串,没办法直接添加target="_blank"这种HTML标签属性——因为这个属性属于<a>标签本身,不是URL的一部分。

要实现点击原来源链接在新标签页打开的需求,我们需要换个思路:直接处理输出的标题链接HTML结构。这里提供两种可靠的方案:

方案一:通过the_title过滤器修改链接HTML(推荐)

这个方案不需要修改主题模板文件,完全用钩子实现,而且能精准控制只有带原来源的文章才添加新标签页属性:

// 保留原有的URL替换逻辑(确保链接指向原来源)
add_filter( 'post_link', 'title_link_to_original_source', 10, 2 );
function title_link_to_original_source( $url, $post ) {
    $original_url = get_post_meta( $post->ID, 'original_source', true );
    if ( $original_url ) {
        return $original_url;
    }
    return $url;
}

// 新增过滤器:给原来源链接添加target="_blank"和安全属性
add_filter( 'the_title', 'add_target_to_original_source_link', 10, 3 );
function add_target_to_original_source_link( $title, $post_id, $args ) {
    // 仅处理带链接的标题输出场景
    if ( ! empty( $args['link_before'] ) && ! empty( $args['link_after'] ) ) {
        $post = get_post( $post_id );
        $original_url = get_post_meta( $post->ID, 'original_source', true );
        
        if ( $original_url ) {
            // 构建带安全属性的新链接HTML
            return sprintf(
                '%s<a href="%s" target="_blank" rel="noopener noreferrer">%s</a>%s',
                $args['link_before'],
                esc_url( $original_url ),
                $title,
                $args['link_after']
            );
        }
    }
    // 没有原来源的文章,保持默认输出
    return $title;
}

关键说明:

  • 额外添加了rel="noopener noreferrer"属性,这是安全最佳实践,可以防止新打开的页面通过window.opener篡改原页面,避免钓鱼风险。
  • 这个过滤器只会在主题使用the_title()函数并传入链接参数时生效(比如大多数主题的文章列表页、详情页标题都是这么输出的)。

方案二:直接修改主题模板文件(适合熟悉主题开发的用户)

如果你愿意修改主题的模板文件(比如content.php、archive.php等),可以直接在输出标题链接的地方添加属性:

找到主题中输出标题链接的代码,通常类似这样:

<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

替换为:

<?php 
$original_url = get_post_meta( get_the_ID(), 'original_source', true );
$link_url = $original_url ? $original_url : get_permalink();
$target_attr = $original_url ? 'target="_blank" rel="noopener noreferrer"' : '';
?>
<a href="<?php echo esc_url( $link_url ); ?>" <?php echo $target_attr; ?>><?php the_title(); ?></a>

这种方式更直接,不需要额外的钩子,适合自定义程度高的场景。


内容的提问来源于stack exchange,提问作者Danny Geurts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:01:00