#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 , но эта ссылка не разбивается на страницы в пользовательском цикле