文章底部相关推荐三张卡片,封面和标题一模一样,点进去都是同一篇,换了篇文章再看,三张卡又同时换成另一篇。乍看像缓存或者权限的锅,追下去往往不是。

foreach ($related as $p) {
  echo esc_html(get_the_title($p->ID));
  echo esc_url(get_permalink($p->ID));
}
wp_reset_postdata();

追下去是这么回事:循环里用的是全局 $post 和 the_title(),foreach 拿到的 $related_post 没有 setup_postdata,三个卡片输出的都是循环结束后残留的那一条。取数本身没问题,模板变量把结果盖掉了。

「相关推荐重复」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

具体做法是,循环里显式用 $related_post->ID 取标题和链接,别依赖全局 post;或者循环内调 setup_postdata($related_post),用完 wp_reset_postdata;取数时用 post__not_in 排除当前文章,避免推荐到自己。

验收就看一点,打开任意一篇文章,三张推荐卡片标题各不相同,也没有当前这篇。

作者 9823189