如何在WordPress的functions.php中添加过滤器修改插件链接rel属性?
用functions.php修改插件的rel属性(避免插件更新丢失修改)
优先方案:找插件专属过滤器钩子(最精准)
先去插件代码里找输出那两个带rel="nofollow"链接的地方,看有没有用apply_filters()函数。比如插件里可能写了这样的代码:
echo apply_filters('xxx_plugin_link_html', '<a href="xxx" rel="nofollow">链接文本</a>');
这里的xxx_plugin_link_html就是我们要抓的钩子名称。找到后,在主题的functions.php里加这段代码:
// 替换rel属性值 function change_rel_attribute($html) { return str_replace('rel="nofollow"', 'rel="sponsored nofollow"', $html); } // 挂钩插件的过滤器,优先级10(默认,可按需调整) add_filter('xxx_plugin_link_html', 'change_rel_attribute', 10);
备选方案:全局内容过滤(找不到专属钩子时用)
如果找不到插件的专属钩子,就用全局的内容过滤器,但最好加个判断,只在插件相关的内容里替换,别影响全站其他链接:
function global_change_rel_nofollow($content) { // 这里替换成插件内容特有的标识,比如插件的短代码、专属CSS类名 if (strpos($content, 'plugin-specific-mark') !== false) { $content = str_replace('rel="nofollow"', 'rel="sponsored nofollow"', $content); } return $content; } // 挂钩文章内容过滤器,优先级设20,确保在插件输出之后执行 add_filter('the_content', 'global_change_rel_nofollow', 20);
最后备选:输出缓冲全局替换
要是上面两种都不行,就用输出缓冲抓整个页面内容来替换,但这种方法可能和其他插件冲突,谨慎用:
function buffer_change_rel() { ob_start(function($buffer) { return str_replace('rel="nofollow"', 'rel="sponsored nofollow"', $buffer); }); } add_action('wp_head', 'buffer_change_rel'); // 页面结束时输出缓冲内容 function flush_buffer() { ob_end_flush(); } add_action('wp_footer', 'flush_buffer');
注意点
- 注意插件里的引号:如果插件用的是单引号
rel='nofollow',代码里也要改成单引号匹配; - 修改
functions.php前一定要备份文件,写错语法会导致网站打不开; - 优先用第一种方法,精准不扰民。
内容的提问来源于stack exchange,提问作者Andrejs
相关产品推荐
相关产品推荐

