m-bazhenov
Новичок

Привет! Возможно, тут кому-нибудь пригодится мой небольшой опыт в Woocommerce.
Итак была задача сделать две страницы. На одной должны были быть все товары со скидкой, на другой все "выделенные" (feature) товары. Так как моя тема криво отображает Woocommerce, дополнительная задача вывести все товары в стилях Woocommerce.
Реализация:
Копируем в папку дочерней темы файл archive-product.php и называем его sale.php, второй файл - называем feature.php.
Указываем внутри файлов, что это новые шаблоны:
1. *Template name: Sale;
2. *Template name: Feature".
Далее находим в файле вот эту строку:
И меняем ее. Для страницы, на которой будут выводится все товары со скидкой:
Для страницы, на которой будут выводится все feature товары:
Далее нужно создать две страницы на сайте и для одной из них в шаблонах выбрать Sale, а для другой Feature.
Как и почему это работает я представляю только поверхностно, но это работает.
Замечания:
Код вывода товаров для страницы Sale работает только с Simple products, но в интернете можно легко найти его модификацию для вариативных товаров и даже для вывода товаров в определенном ценовом диапозоне и пр. Тут Google в помощь.
Есть небольшой затык с title, если его не править он выводит на странице название страницы магазина. Как сделать так, чтобы выводил название нужной страницы, я не знаю. Возможно, кто-то здесь подскажет.
P.S. Забыл про еще один затык. На страницах Sale и Feature почему-то не выводятся два поля:
1. Сортировка;
2. Показ количества товаров.
Хотя формально вроде бы должны, потому как код, отвечающий за их выход, остается не тронутым.
Итак была задача сделать две страницы. На одной должны были быть все товары со скидкой, на другой все "выделенные" (feature) товары. Так как моя тема криво отображает Woocommerce, дополнительная задача вывести все товары в стилях Woocommerce.
Реализация:
Копируем в папку дочерней темы файл archive-product.php и называем его sale.php, второй файл - называем feature.php.
Указываем внутри файлов, что это новые шаблоны:
1. *Template name: Sale;
2. *Template name: Feature".
Далее находим в файле вот эту строку:
PHP:
<?php wc_get_template_part( 'content', 'product' ); ?>
И меняем ее. Для страницы, на которой будут выводится все товары со скидкой:
PHP:
$args = array(
'post_type' => 'product',
'posts_per_page' => 30, //тут указываем количество товаров на странице
'meta_query' => array(
'relation' => 'OR',
array( // Simple products type
'key' => '_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
),
)
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
?>
Для страницы, на которой будут выводится все feature товары:
PHP:
$args = array(
'post_type' => 'product',
'posts_per_page' => 30,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => '_featured',
'value' => 'yes',
),
)
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
?>
Далее нужно создать две страницы на сайте и для одной из них в шаблонах выбрать Sale, а для другой Feature.
Как и почему это работает я представляю только поверхностно, но это работает.
Замечания:
Код вывода товаров для страницы Sale работает только с Simple products, но в интернете можно легко найти его модификацию для вариативных товаров и даже для вывода товаров в определенном ценовом диапозоне и пр. Тут Google в помощь.
Есть небольшой затык с title, если его не править он выводит на странице название страницы магазина. Как сделать так, чтобы выводил название нужной страницы, я не знаю. Возможно, кто-то здесь подскажет.
P.S. Забыл про еще один затык. На страницах Sale и Feature почему-то не выводятся два поля:
1. Сортировка;
2. Показ количества товаров.
Хотя формально вроде бы должны, потому как код, отвечающий за их выход, остается не тронутым.
Последнее редактирование: