返回
WooCommerce 自定义端点上的 WP_Query 分页:常见问题解答和解决方案
php
2024-03-16 22:44:27
自定义 WooCommerce 端点上的 WP_Query 分页:终极指南
问题:分页链接不工作
在 WooCommerce 自定义“我的账户”端点中使用 WP_Query 添加带分页的产品列表时,您可能会遇到一个问题,即 get_query_var('paged') 总为 0,导致分页链接无法正常工作。
原因:主查询丢失
默认情况下,WP_Query 使用主查询来确定当前页码。然而,在自定义端点中,主查询不存在。因此,get_query_var('paged') 无法正确获取当前页码。
解决方案:手动设置当前页码
要解决此问题,我们需要手动设置当前页码。我们可以通过以下步骤来实现:
- 获取原始查询字符串 :首先,我们需要获取原始查询字符串,其中包含分页信息。可以使用 get_query_vars() 函数来获取查询字符串。
- 解析页码 :接下来,我们需要从查询字符串中解析出页码。可以使用 parse_str() 函数来解析查询字符串并提取 'paged' 参数。
- 设置当前页码 :最后,我们可以使用 set_query_var() 函数来设置 WP_Query 的当前页码。
通过添加此更改,我们可以确保在自定义端点上正确使用 WP_Query 进行分页。现在,get_query_var('paged') 将包含正确的当前页码,分页链接将正常工作。
代码示例
以下是一个更新后的代码示例,其中包含手动设置当前页码的步骤:
$query_vars = get_query_vars();
parse_str($query_vars['custom_endpoint_query'], $custom_endpoint_query);
$paged = (isset($custom_endpoint_query['paged'])) ? $custom_endpoint_query['paged'] : 1;
$args = array(
'post_type' => 'product',
'posts_per_page' => 5,
'paged' => $paged
);
$query = new \WP_Query( $args );
while( $query->have_posts() ):
$query->the_post();
echo get_the_title().'<br>';
endwhile;
echo paginate_links( array(
'base' => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
'total' => $query->max_num_pages,
'current' => max( 1, get_query_var( 'paged' ) ),
'format' => '?paged=%#%',
'show_all' => false,
'type' => 'plain',
'end_size' => 2,
'mid_size' => 1,
'prev_next' => true,
'prev_text' => sprintf( '<i></i> %1$s', __( 'Newer Posts', 'text-domain' ) ),
'next_text' => sprintf( '%1$s <i></i>', __( 'Older Posts', 'text-domain' ) ),
'add_args' => false,
'add_fragment' => '',
) );
常见问题解答
1. 为什么我需要手动设置当前页码?
因为在自定义端点中,主查询不存在,WP_Query 无法正确获取当前页码。
2. 如何获取原始查询字符串?
可以使用 get_query_vars() 函数来获取原始查询字符串。
3. 如何从查询字符串中解析出页码?
可以使用 parse_str() 函数来解析查询字符串并提取 'paged' 参数。
4. 如何设置当前页码?
可以使用 set_query_var() 函数来设置 WP_Query 的当前页码。
5. 如何确保分页链接正常工作?
通过正确设置当前页码,您可以确保分页链接正常工作。