WooCommerce 中自定义端点上的 WP_Query 分页

问题描述 投票:0回答:3

我创建了一个类,为 WooCommerce 我的帐户创建

custom endpoint
,在此端点上,我尝试使用
WP_Query
添加带有分页的产品列表。

这是代码:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( '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' => '',
        ) );

分页链接显示得很好,页面链接数量也正确。

问题在于 get_query_var('paged') 始终为 0。

我用

var_dump get_query_var('paged')
检查过。我猜测这与我在端点上创建 WP_Query 实例有关。

任何人都知道带有分页功能的

WP_Query
是否可以在自定义端点上工作?

php wordpress woocommerce wordpress-theming woocommerce-theming
3个回答
1
投票

睡个好觉后,今天早上我又重新审视这个问题,并以新的眼光看待问题,我可以看到是什么导致了问题。

由于这是一个自定义端点,“

paged
”变量被添加到自定义端点查询变量中,在本例中称为“列表”。

如果我

var_dump
listings
查询变量,我会得到
page/2
等。所以我写了

if( empty( get_query_var('listings') ) ):
    $paged = 1;
else:
    $paged_array = explode('/',get_query_var('listings'));
    $paged = $paged_array[1];
endif;

$args = array(
    'post_type' => 'product',
    'posts_per_page' => 10,
    'paged' => $paged
);

这使我能够获得分页变量,现在分页可以工作了。

看起来有点像黑客,但不知道如何从端点获取分页变量


0
投票

经过一周的努力,我今天终于可以解决这个问题了。

1。在子主题的functions.php中添加自定义端点: 在子主题的functions.php 文件中注册您的自定义端点。

function register_custom_endpoints()      
{add_rewrite_endpoint('listings', EP_PERMALINK | EP_PAGES);               
} 
add_action('init', 'register_custom_endpoints');

2。在模板文件中设置分页:

$paged = get_query_var('listings') ? get_query_var('listings') : 1; $args = array( 'post_type' => 'attachment', 'post_mime_type' => 'image', 'post_status' => 'inherit', 'tag__in' => array($first_tag), 'post__not_in' => array($post->ID), 'orderby' => 'publish_date','posts_per_page' => 12, 'paged' => $paged, ); $query = new WP_Query($args);$product_slug = get_post_field('post_name', get_queried_object_id()); $pagination_args = array( 'total' => $query->max_num_pages,'current' => $paged, 'format' => '/%#%', 'base' => home_url('/product/' . $product_slug . '/listings/%#%/'), ); echo '<div class="pagination">' . paginate_links($pagination_args) . '</div>'; wp_reset_postdata();

3.刷新重写规则

希望这有助于修复自定义端点页面中的分页。


0
投票

为了在分页中获得动态slug,我使用了以下代码:

// Get the current post type
        $current_post_type = get_post_type(get_queried_object_id());

        // Get the post type object and extract the singular name
        $post_type_object = get_post_type_object($current_post_type);
        $singular_slug = isset($post_type_object->rewrite['slug']) ? $post_type_object->rewrite['slug'] : $current_post_type;

        // Get the current post slug
        $current_post_slug = get_post_field('post_name', get_queried_object_id());


        // Set up the pagination arguments
        $pagination_args = array(
          'total'     => $query->max_num_pages,
          'current'   => $paged,
          'format'    => 'listings/%#%/',
          'base'      => home_url('/' . $singular_slug . '/' . $current_post_slug . '/listings/%#%/'),
        );

© www.soinside.com 2019 - 2024. All rights reserved.