WooCommerce分页不是根据每个页面选项值获取产品。它显示不同的产品时,点击分页链接,有时显示正确的产品数量点击分页链接,但有时没有。相同的查询适用于所有自定义分页。这是我的代码:
public function render()
{
global $wp_query, $wp_rewrite;
$args= [];
$ordering_args =[];
$pagination_args =[];
$taxonomy = 'product_cat';
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => absint(get_option('posts_per_page')),
);
if (isset($_POST['orderby'])) {
if ('price-desc' === $_POST['orderby']) {
$args['orderby'] = 'price';
$args['order'] = 'DESC';
} elseif ('price' === $_POST['orderby']) {
$args['orderby'] = 'price';
$args['order'] = 'ASC';
} elseif ('date' === $_POST['orderby']) {
$args['orderby'] = 'date';
$args['order'] = 'DESC';
} else {
$args['orderby'] = $_POST['orderby'];
$args['order'] ='';
}
$ordering_args = WC()->query->get_catalog_ordering_args($args['orderby'], $args['order']);
$args['orderby'] = $ordering_args['orderby'];
$args['ordering_args'] = $ordering_args;
$args['order'] = $ordering_args['order'];
if ($ordering_args['meta_key']) {
$args['meta_key'] = $ordering_args['meta_key'];
}
}else{
$ordering_args = WC()->query->get_catalog_ordering_args();
$args['orderby'] = $ordering_args['orderby'];
$args['ordering_args'] = $ordering_args;
$args['order'] = $ordering_args['order'];
if ($ordering_args['meta_key']) {
$args['meta_key'] = $ordering_args['meta_key'];
}
}
if (isset($_POST['paged'])) {
$args['paged'] = absint($_POST['paged']);
if (1 < absint($_POST['paged'])) {
$args['paged'] = absint($_POST['paged']);
}
$pagination_args = array(
'total' => wc_get_loop_prop('total_pages'),
'current' =>absint($_POST['paged']),
);
$args['limit'] = isset($args['posts_per_page']) ? intval($args['posts_per_page']) : intval(get_option('posts_per_page'));
if (empty($args['offset'])) {
$args['offset'] = 1 < $args['paged'] ? ($args['paged'] - 1) * $args['limit'] : 0;
}
}
if (!empty($args['meta_query'])) {
if (!empty($_POST['rating'])) {
$args['meta_query']['relation'] ='AND';
$rating = $_POST['rating'];
$args['meta_query'][]= array(
'key' => '_wc_average_rating',
'value' => array( (int)$rating[0], (int)$rating[1] ),
'compare' => 'BETWEEN',
'type' => 'numeric'
);
}
} else {
if (!empty($_POST['rating'])) {
$rating = $_POST['rating'];
$args['meta_query']= array(
array(
'key' => '_wc_average_rating',
'value' => array( (int)$rating[0], (int)$rating[1] ),
'compare' => 'BETWEEN',
'type' => 'numeric'
)
);
}
}
if (!empty($_POST['product-cata'])) {
$category = $_POST['product-cata'];
$args['tax_query']= array(
array(
'taxonomy' => $taxonomy,
'field' => 'term_id',
'terms' => (int)$category
)
);
}else{
if (!empty($_POST['category'])) {
$category = $_POST['category'];
$args['tax_query']= array(
array(
'taxonomy' => $taxonomy,
'field' => 'term_id',
'terms' => (int)$category
)
);
}
}
$wp_query = new WP_Query($args);
if ($wp_query->have_posts()) {
ob_start();
// do_action('woocommerce_before_shop_loop');
woocommerce_product_loop_start();
while ($wp_query->have_posts()) {
$wp_query->the_post();
/**
* Hook: woocommerce_shop_loop.
*/
do_action('woocommerce_shop_loop');
echo wc_get_template_part('content', 'product');
}
woocommerce_product_loop_end();
//do_action('woocommerce_after_shop_loop');
wp_reset_postdata();
$_RESPONSE['posted_data'] =$_POST;
$_RESPONSE['products'] = ob_get_contents();
ob_end_clean();
if (isset($_POST['paged'])) {
$paged = (int) $_POST['paged'];
$base = $_POST['link'].'page/%#%';
$pagination_args = array(
'base' => $base,
'total' => (int)$wp_query->max_num_pages,
'per_page' => (int)get_option('posts_per_page'),
'current' => (int) max(1, $paged),
'format' => '',
);
$_RESPONSE['pagination'] = $this->custom_woocommerce_pagination($pagination_args);
$_RESPONSE['result_counts'] = $this->custom_result_count($pagination_args);
} else {
$base = $_POST['link'].'page/%#%';
$pagination_args = array(
'base' => $base,
'total' =>(int) $wp_query->max_num_pages,
'per_page' =>(int) get_option('posts_per_page'),
'current' => (int) max(1, 1),
'format' => '',
);
$_RESPONSE['pagination'] = $this->custom_woocommerce_pagination($pagination_args);
$_RESPONSE['result_counts'] = $this->custom_result_count($pagination_args);
}
$_RESPONSE['args'] = $args;
$_RESPONSE['pagination_args'] = $pagination_args;
} else {
ob_start();
do_action('woocommerce_no_products_found');
$_RESPONSE['products'] = ob_get_contents();
$_RESPONSE['args'] = $args;
ob_end_clean();
}
echo json_encode($_RESPONSE);
die();
}任何帮助都会感激的。我正在ajax post方法中使用此方法。
发布于 2022-02-10 10:27:10
/*Display only in stock*/
$args['meta_query'][]= [
'key' => '_stock_status',
'value' => 'instock'
];
/*Display only visible product*/
$args['tax_query'][]= [
'taxonomy' => 'product_visibility',
'terms' => array( 'exclude-from-catalog' ),
'field' => 'name',
'operator' => 'NOT IN',
];https://stackoverflow.com/questions/70603933
复制相似问题