返回

WooCommerce 自定义端点上的 WP_Query 分页:常见问题解答和解决方案

php

自定义 WooCommerce 端点上的 WP_Query 分页:终极指南

问题:分页链接不工作

在 WooCommerce 自定义“我的账户”端点中使用 WP_Query 添加带分页的产品列表时,您可能会遇到一个问题,即 get_query_var('paged') 总为 0,导致分页链接无法正常工作。

原因:主查询丢失

默认情况下,WP_Query 使用主查询来确定当前页码。然而,在自定义端点中,主查询不存在。因此,get_query_var('paged') 无法正确获取当前页码。

解决方案:手动设置当前页码

要解决此问题,我们需要手动设置当前页码。我们可以通过以下步骤来实现:

  1. 获取原始查询字符串 :首先,我们需要获取原始查询字符串,其中包含分页信息。可以使用 get_query_vars() 函数来获取查询字符串。
  2. 解析页码 :接下来,我们需要从查询字符串中解析出页码。可以使用 parse_str() 函数来解析查询字符串并提取 'paged' 参数。
  3. 设置当前页码 :最后,我们可以使用 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. 如何确保分页链接正常工作?

通过正确设置当前页码,您可以确保分页链接正常工作。