如何在WordPress的functions.php中正确编写条件语句实现指定页面无限滚动
修复WordPress无限滚动的条件加载问题
你原来的代码问题出在把函数定义放在了条件判断内部——WordPress的after_setup_theme钩子会在主题初始化阶段就触发,这时候如果当前页面不满足条件,你的quailstudio_infinite_scroll_init函数根本没被定义,钩子调用时就会报错。
正确的写法是把函数定义放在全局作用域,然后在函数内部做页面类型判断,只有符合条件的页面才注册无限滚动支持。另外还要注意render参数需要指向一个实际的回调函数,你原来写的'render' => 'render'是无效的,得补上对应的渲染函数。
下面是修正后的完整代码,你可以直接放到functions.php里:
// 初始化无限滚动支持 function quailstudio_infinite_scroll_init() { // 仅在首页、归档页、分类页启用 if ( is_home() || is_archive() || is_category() ) { add_theme_support( 'infinite-scroll', array( 'type' => 'scroll', 'container' => 'content', // 对应页面中承载文章的容器ID 'wrapper' => false, 'render' => 'quailstudio_infinite_scroll_render', // 渲染新文章的回调函数 'posts_per_page' => 12, ) ); } } add_action( 'after_setup_theme', 'quailstudio_infinite_scroll_init' ); // 定义无限滚动的文章渲染函数 function quailstudio_infinite_scroll_render() { while ( have_posts() ) { the_post(); // 替换成你主题中用来显示单篇文章的模板片段 // 比如如果你的文章模板在template-parts/content.php,就用下面这句 get_template_part( 'template-parts/content' ); } }
几个关键说明:
- 函数位置调整:把
quailstudio_infinite_scroll_init放在全局作用域,确保钩子能找到这个函数。 - 回调函数补全:
render参数必须指向一个能渲染文章的函数,上面的示例用了WordPress标准的get_template_part方法,你需要根据自己主题的结构修改路径。 - 页面判断优化:其实
is_category()已经包含在is_archive()里了,保留is_category()只是为了更明确,去掉也不影响功能。 - 容器验证:确保你的页面里有ID为
content的元素,无限滚动会把新加载的文章插入到这个容器里。
内容的提问来源于stack exchange,提问作者Amaury Lemal
相关产品推荐
相关产品推荐

