WooCommerce订单分页异常:跳转地址正确但内容重复
解决WooCommerce订单分页URL修改后内容重复问题
1. 先搞定Rewrite规则,让WordPress识别新的分页参数
你把URL改成了/orders/page/2,但WordPress默认认的是paged参数,得先加规则把page/数字转成查询能用的参数。在主题的functions.php里加这段代码:
function custom_orders_rewrite_rule() { add_rewrite_rule( '^my-account/orders/page/([0-9]+)/?$', 'index.php?my-account=orders&paged=$matches[1]', 'top' ); } add_action('init', 'custom_orders_rewrite_rule');
加完必须去后台「设置→固定链接」页面,点一下保存按钮刷新规则,不然白加。
2. 让自定义订单查询正确读取当前页码
你之前写的自定义查询里,大概率没正确获取当前分页的数字。改成这样:
// 获取当前页码,默认是1 $current_page = get_query_var('paged', 1); // 查询订单时带上分页参数 $customer_orders = wc_get_orders(array( 'customer_id' => get_current_user_id(), 'limit' => 10, // 这里的数字要和你每页想显示的订单数一致 'paged' => $current_page, 'paginate' => true, // 必须开分页功能 ));
要是你用的是WC_Order_Query类,也要确保paged参数传对,paginate设为true。
3. 修正模板里的分页链接生成逻辑
在orders.php模板的分页代码里,要让链接生成和新URL匹配,比如用paginate_links的话这么写:
$pagination_args = array( 'base' => trailingslashit(get_permalink(get_option('woocommerce_myaccount_page_id'))) . 'orders/page/%#%/', 'format' => 'page/%#%/', 'current' => max(1, get_query_var('paged')), 'total' => $customer_orders->max_num_pages, 'prev_text' => __('上一页', 'woocommerce'), 'next_text' => __('下一页', 'woocommerce'), ); echo paginate_links($pagination_args);
这里的base要严格对应你改后的URL结构,保证分页链接能指向正确地址。
4. 排查冲突
要是上面几步都没用,试试:
- 禁用所有非WooCommerce的插件,看是不是插件抢了分页参数
- 切换到WordPress默认主题(比如Twenty Twenty-Four),排查是不是主题代码干扰了查询
内容的提问来源于stack exchange,提问作者social.reza
相关产品推荐
相关产品推荐

