WordPress Divi主题中Portfolio项目偏移与分页共存问题求助
解决Divi Portfolio模块偏移后分页失效的问题
我完全理解你遇到的困扰:给Divi的Portfolio模块手动添加偏移量后,分页功能直接失效,点击「旧条目」始终加载的是偏移后的第一页内容。这问题主要出在你的代码没有处理AJAX分页请求的偏移逻辑,还存在变量名不匹配的小错误。
问题根源拆解
你的现有代码有两个核心问题:
- 变量名错误:使用了未定义的
$paged和$posts_number,但实际应该用代码里已经定义的$et_paged和$args['posts_number'] - AJAX分支缺失偏移处理:分页的「旧条目」是通过AJAX请求加载的,但你的代码在AJAX分支里完全没处理偏移量,导致请求还是按默认无偏移的规则查询数据
修复后的完整代码
下面是修正后的代码,我标注了关键修改点:
// Native conditional tag only works on page load. Data update needs $conditional_tags data $is_front_page = et_fb_conditional_tag( 'is_front_page', $conditional_tags ); $is_search = et_fb_conditional_tag( 'is_search', $conditional_tags ); $offset_number = 3; // Prepare query arguments $query_args = array( 'posts_per_page' => (int) $args['posts_number'], 'post_type' => 'project', 'post_status' => 'publish', ); // Conditionally get paged data if ( defined( 'DOING_AJAX' ) && isset( $current_page[ 'paged'] ) ) { $et_paged = intval( $current_page[ 'paged' ] ); // --- 新增:AJAX分页请求时也计算偏移量 --- $query_args['offset'] = ( ( $et_paged - 1 ) * intval( $args['posts_number'] ) ) + intval( $offset_number ); } else { $et_paged = $is_front_page ? get_query_var( 'page' ) : get_query_var( 'paged' ); // --- 修复变量名:替换未定义的$paged和$posts_number --- $query_args['offset'] = ( ( $et_paged - 1 ) * intval( $args['posts_number'] ) ) + intval( $offset_number ); }
关键修改说明
- 统一变量命名:把未定义的
$paged替换为实际使用的$et_paged,$posts_number替换为模块配置里的$args['posts_number'],确保偏移计算逻辑不会出错 - AJAX请求添加偏移处理:原来的AJAX分支完全忽略了偏移规则,现在添加了和页面加载时一致的偏移计算,这样分页请求就能正确跳过前面的项目
- 保持逻辑一致性:页面初始化和AJAX分页请求使用完全相同的偏移计算规则,确保前后端返回的数据一致
额外注意事项
- 如果你需要给不同页面设置不同偏移量,可以在
$offset_number的赋值逻辑里加条件判断(比如通过get_the_ID()检查当前页面ID) - 测试分页时,确保你的Portfolio项目总数足够多(至少满足
偏移量 + 每页数量 * 2),这样才能看到明显的分页效果 - 如果你用了缓存插件,修改代码后记得清除缓存,避免旧代码残留影响测试
内容的提问来源于stack exchange,提问作者MindPhuq
相关产品推荐
相关产品推荐

