为PHP生成的外部链接自动添加rel="nofollow"属性的技术咨询
给动态生成的社交链接自动添加rel="nofollow"的方案
嘿,针对你这段WordPress主题里生成社交链接的代码,我有两个可行的方案,看你需求选:
方案一:智能判断外部链接(推荐)
如果你的链接里既有内部又有外部,这个方案会自动给外部链接加上rel="nofollow":
1. 先加一个判断外部链接的辅助函数
把这段代码放到你主题的functions.php文件里:
function is_external_link( $url ) { // 解析当前站点域名 $site_host = parse_url( get_site_url(), PHP_URL_HOST ); // 解析目标链接域名 $link_host = parse_url( $url, PHP_URL_HOST ); // 如果链接没有主机名(相对链接),就是内部链接 if ( empty( $link_host ) ) { return false; } // 不区分大小写比较域名,判断是否外部 return strtolower( $link_host ) !== strtolower( $site_host ); }
2. 修改原链接生成代码
替换你原来的那段代码,动态插入rel属性:
<div class="header-social"> <?php foreach( $mts_options['mts_header_social'] as $header_icons ) : ?> <?php if( ! empty( $header_icons['mts_header_icon'] ) && isset( $header_icons['mts_header_icon'] ) ) : ?> <?php // 判断是否为外部链接 $external_rel = is_external_link( $header_icons['mts_header_icon_link'] ) ? 'rel="nofollow"' : ''; // 顺便加上WordPress安全转义,避免XSS风险 $link_url = esc_url( $header_icons['mts_header_icon_link'] ); $icon_class = esc_attr( $header_icons['mts_header_icon'] ); $bg_color = esc_attr( $header_icons['mts_header_icon_bg_color'] ); ?> <a href="<?php echo $link_url; ?>" class="header-<?php echo $icon_class; ?>" style="background: <?php echo $bg_color; ?>" <?php echo $external_rel; ?> target="_blank"> <!-- 原代码的target属性这里保留,你可以根据实际情况调整 --> <!-- 这里是你的图标内容,比如<i class="fa fa-<?php echo $icon_class; ?>"></i>之类的 --> </a> <?php endif; ?> <?php endforeach; ?> </div>
方案二:直接全局添加(适合所有链接都是外部的情况)
如果这些社交链接全是指向外部平台(比如Facebook、Twitter),那不用判断,直接在<a>标签里硬加rel="nofollow"就行,更简单:
<div class="header-social"> <?php foreach( $mts_options['mts_header_social'] as $header_icons ) : ?> <?php if( ! empty( $header_icons['mts_header_icon'] ) && isset( $header_icons['mts_header_icon'] ) ) : ?> <a href="<?php echo esc_url( $header_icons['mts_header_icon_link'] ); ?>" class="header-<?php echo esc_attr( $header_icons['mts_header_icon'] ); ?>" style="background: <?php echo esc_attr( $header_icons['mts_header_icon_bg_color'] ); ?>" rel="nofollow" target="_blank"> <!-- 图标内容 --> </a> <?php endif; ?> <?php endforeach; ?> </div>
小提示
我在代码里加了esc_url()和esc_attr(),这是WordPress开发的最佳实践,能有效防止XSS安全漏洞,建议不要去掉哦!
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

