我创建了一个类,为 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
是否可以在自定义端点上工作?
睡个好觉后,今天早上我又重新审视这个问题,并以新的眼光看待问题,我可以看到是什么导致了问题。
由于这是一个自定义端点,“
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
);
这使我能够获得分页变量,现在分页可以工作了。
看起来有点像黑客,但不知道如何从端点获取分页变量
经过一周的努力,我今天终于可以解决这个问题了。
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.刷新重写规则
希望这有助于修复自定义端点页面中的分页。
为了在分页中获得动态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/%#%/'),
);