I have a custom single-product-reviews.php template. On our website we use Weglot (similar to WPML) but you need to modify queries on your own to get the right reviews foreach language. If you dont the reviews are shown for the all languages for product. This is what we don’t want to have.
We have modified the query to get only the reviews for selected product and current language. This works fine. Now the problem is that the pagination is not working. It displays pages for all reviews and when you switch page you get the same reviews for each page.
The same reviews on each page and total number of pages = 45 even when I have in query only 173 reviews filtered by 10 per page = 18 pages not 45
Code parts are here
global $product;
$product_id = $product->get_id();
$average_rating = $product->get_average_rating();
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$number = 10;
$offset = ( $paged - 1 ) * $number;
if ( ! comments_open() ) {
return;
}
if(weglot_get_current_language()=='cs'){
$args = array(
'meta_key' => 'jazyk',
'meta_value' => 'cz',
'post__in' => [get_queried_object_id()],
'number' => $number,
'offset' => $offset,
'paged' => $paged
);
}
if(weglot_get_current_language()=='sk'){
$args = array(
'meta_key' => 'jazyk',
'meta_value' => 'sk',
'post__in' => [get_queried_object_id()],
'number' => $number,
'offset' => $offset,
'paged' => $paged
);
}
if(weglot_get_current_language()=='hu'){
$args = array(
'meta_key' => 'jazyk',
'meta_value' => 'hu',
'post__in' => [get_queried_object_id()],
'number' => $number,
'offset' => $offset,
'paged' => $paged
);
}
if(weglot_get_current_language()=='ro'){
$args = array(
'meta_key' => 'jazyk',
'meta_value' => 'ro',
'post__in' => [get_queried_object_id()],
'number' => $number,
'offset' => $offset,
'paged' => $paged
);
}
// The Query
//global $wp_query;
//return $wp_query->get_queried_object_id();
$comments_query = new WP_Comment_Query;
$comments = $comments_query->query( $args );
//count
$args = array(
'type' => 'review',
'count' => true,
'meta_key' => 'jazyk',
'meta_value' => 'sk',
'post__in' => [get_queried_object_id()],
);
$count = get_comments($args);
HTML part
<?php
echo custom_woo_reviews_summary($product_id); ?>
<div id="reviews" class="woocommerce-Reviews">
<div id="comments">
<h2 class="woocommerce-Reviews-title">
<?php
//$count = $product->get_review_count($args);
if ( $count && wc_review_ratings_enabled() ) {
/* translators: 1: reviews count 2: product name */
$reviews_title = sprintf( esc_html( _n( '%1$s review for %2$s', '%1$s reviews for %2$s', $count, 'woocommerce' ) ), esc_html( $count ), '<span>' . get_the_title() . '</span>' );
echo apply_filters( 'woocommerce_reviews_title', $reviews_title, $count, $product ); // WPCS: XSS ok.
} else {
esc_html_e( 'Reviews', 'woocommerce' );
}
?>
</h2>
<?php
if ( have_comments($comments) ) : ?>
<ol class="commentlist">
<?php wp_list_comments( apply_filters( 'woocommerce_product_review_list_args', array( 'callback' => 'woocommerce_comments' ) ) ); ?>
</ol>
<?php
if ( $comments > 1 ) :
echo '<nav class="woocommerce-pagination">';
paginate_comments_links(
apply_filters(
'woocommerce_comment_pagination_args',
array(
'prev_text' => is_rtl() ? '→' : '←',
'next_text' => is_rtl() ? '←' : '→',
'type' => 'list',
)
)
);
echo '</nav>';
endif;
?>
<?php else : ?>
<p class="woocommerce-noreviews"><?php esc_html_e( 'There are no reviews yet.', 'woocommerce' ); ?></p>
<?php endif; ?>
</div>
Thank you in advice for your ideas.
