问题现象
WordPress 站点一切功能正常,唯独页面(Page)无法输出正文内容。检查生成的 HTML 源码,发现 page.php 模板中的 the_content() 函数没有输出任何内容。
排查思路
问题几乎可以肯定是 the_content 过滤器(Filter)执行出错导致的。回想起当天曾修改过主题源码,目的是实现根据文章标签(Tags)自动替换图片的 alt 属性,以优化图片 SEO。这段代码正是挂载到了 the_content 这个钩子上。
问题分析与解决
回顾相关代码,发现我在其中使用了 if 语句来判断文章是否存在标签(Tag),如果存在,则执行替换操作。但问题在于:如果文章没有标签,代码中没有做任何处理,直接结束了。
关键在于,WordPress 的页面(Page)默认是没有标签(Tag)分类属性的(虽然可以通过插件或代码实现)。因此,当访问一个页面时,我的自定义函数因为判断条件不满足,又没有返回原始的 $content 变量,导致 the_content 过滤器没有输出任何内容。
解决方案
在 if 代码块后面添加 else 分支,确保在任何情况下都返回内容。
else {
return $content;
}
添加上述代码后,页面内容输出恢复正常。
经验总结
在编写修改 WordPress 核心过滤器的代码时,必须确保逻辑严谨,覆盖所有可能的分支情况。特别是要保证函数始终有返回值,否则会中断内容输出流程,导致难以排查的显示问题。