Другая проблема с 404 в разбивке на страницы WooCommerce

#php #wordpress #woocommerce #pagination

#php #wordpress #woocommerce #разбивка на страницы

Вопрос:

Я прочитал так много статей и не нашел ответа.

мой пользовательский цикл продукта в категории:

 $paged = get_query_var('paged') ? get_query_var('paged') : 1;
global $post;
$args = array(
'posts_per_page' => 6,
'product_cat' => $post->post_name, // **The father category**
'post_type' => 'product',
'paged' => $paged,
'page' => $page,
'pagination' => true
);
$loop = new WP_Query( $args );
echo $loop->request;
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
    global $product;
    ?>

////////////////// product info//////////////

    <?php endwhile;
    $big = 999999999; // need an unlikely integer
    echo paginate_links( array(
        'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $loop->max_num_pages
    ) );
} else {
    echo __( 'No products found' );
}
wp_reset_postdata();
  

на странице категории у меня есть такая же ссылка:

http://localhost:3000/product-category/cats/videocard/

ссылка на разбиение на страницы:http://localhost:3000/product-category/cats/videocard/page/2 /

но у меня на нем 404.

мои настройки постоянной ссылки: введите описание изображения здесь

мои настройки «Чтения»: введите описание изображения здесь

Что я делаю не так?

Комментарии:

1. я добавляю это правило в .htaccess RewriteRule ^страница/([^/]*)/$ /? страница = $ 1 [L] и если я перейду на localhost: 3000 /product-category/cats / videocard /?страница = 2 , я увижу страницу 2. Как я могу получить одинаковый результат в localhost:3000/product-category/cats/videocard/page/2?

Ответ №1:

Возможно, ваша проблема связана с аргументами WP_Query. Я обнаружил следующие проблемы:

  • ‘разбивка на страницы’ не является допустимым аргументом,
  • аргумент таксономии ( ‘product_cat’ ), указанный в качестве ключа, устарел, вы должны использовать ‘tax_query’ вместо этого.
  • значение переменной $ page не определено (по крайней мере, не в вашем примере сценария), и кажется, что определение обоих аргументов ‘страница’ и ‘выгружаемый’ может вызвать конфликты в вашем запросе.

Попробуйте использовать следующее:

 global $post;
$args = array(
    'posts_per_page' => 6,
    'post_type'      => 'product',
    'paged'          => get_query_var('paged') ? get_query_var('paged') : 1,
    'tax_query'      => array(
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => $post->post_name // !
        ),
    ),
);
$loop = new WP_Query( $args );
// echo $loop->request;  - I guess this is a test left-over
if ( $loop->have_posts() ) {

    while ( $loop->have_posts() ) : $loop->the_post();
        /**
         * No need to call the $product global within the loop,
         * use the $loop->post or even better call the product object
         * using the WooCommerce wc_get_product() function as displayed
         * below
         */
        // global $product;
        $product = wc_get_product( $loop->post );
    ?>

////////////////// product info//////////////

    <?php endwhile;
    $big = 999999999; // need an unlikely integer
    echo paginate_links( array(
        'base'    => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
        'format'  => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total'   => $loop->max_num_pages
    ) );

} else {

    echo __( 'No products found' );
}
wp_reset_postdata();

  

Последнее, но не менее важное, значение термина таксономии, которое вы даете для product_cat (прокомментированное как категория отца ), — это текущая ошибка post. Я понимаю, почему вы можете захотеть это сделать, но при некоторых обстоятельствах это также может быть причиной, по которой вы получаете эти 404. Поэтому, если приведенный выше скрипт не решает вашу проблему, я бы посоветовал вам изучить и это.

Комментарии:

1. менять нечего. такие ссылки, как localhost:3000/product-category/cats/videocard/page/2 , выдают ошибку 404

2. если я использую короткий код woocommerce — ссылка для разбивки на страницы выглядит как localhost: 3000/product-category /cats / videocard /?product-page = 2 , но эта ссылка не разбивается на страницы в пользовательском цикле