如何在WordPress文章第一段后添加相关文章并避免重复显示
解决YARPP相关文章重复显示的问题
我明白你的困扰了——直接把yarpp_related()赋值给变量会导致重复显示,核心原因是yarpp_related()默认是直接输出内容,而非返回字符串,再加上YARPP插件可能开启了自动插入的设置,就会出现两次展示的情况。
下面是调整后的完整代码,既能实现仅在第一段后显示相关文章,又能彻底避免重复:
/** Add YARPP related posts after first paragraph **/ function insert_yarpp_after_first_paragraph( $text ) { // 仅在单篇文章页面生效 if ( is_single() ) : // 捕获YARPP的输出(避免它直接echo内容) ob_start(); // 调用YARPP并设置关键参数 if(function_exists('yarpp_related')) { $related_posts_html = yarpp_related(array( 'limit' => 2, 'echo' => false // 核心:让函数返回HTML字符串而非直接输出 )); } $related_posts_html = ob_get_clean(); // 只有存在相关文章内容时才插入 if ( !empty($related_posts_html) ) { $split_by = "\n"; $insert_after = 1; // 指定在第1段后插入 $paragraphs = explode( $split_by, $text); $len = count( $paragraphs ); // 如果文章段落数不足1,就插在内容末尾 if ( $len < $insert_after ) { $insert_after = $len; } // 将相关文章插入到段落数组的指定位置 array_splice( $paragraphs, $insert_after, 0, $related_posts_html ); // 重新拼接成完整内容 $new_text = implode( $split_by, $paragraphs ); return $new_text; } endif; // 非单页或无相关文章时,返回原内容 return $text; } add_filter('the_content', 'insert_yarpp_after_first_paragraph');
关键调整说明:
'echo' => false:这是YARPP的隐藏参数,设置后函数会返回HTML字符串,而不是直接输出内容,这样我们就能精准控制插入位置,不会提前输出导致重复。- 输出缓冲处理:用
ob_start()和ob_get_clean()做一层兜底,确保即使YARPP的echo参数未生效,也能正确捕获内容而非直接输出。 - 空值判断:如果没有匹配到相关文章,就不插入任何内容,保持原文章结构的完整性。
最后记得去YARPP插件的设置页面,关闭自动插入相关文章的选项(比如“在文章开头/末尾显示”),彻底杜绝重复显示的可能。
内容的提问来源于stack exchange,提问作者Aamir Usman
相关产品推荐
相关产品推荐

