Задать вопрос
@Paul_Morte

Как вывести карту товара на странице в нужном месте через php код?

Вопрос конечно очень простой, но в интернете, как обычно, нет того что нужно.

Нужно вывести 1 товар из категории или несколько товаров из категории в определенном месте.
shortcode-sale.png

Каким способом лучше это сделать?
Я нашел такие варианты:

1) Шорт-код для php
echo do_shortcode('[products tag="tag" columns="4"]');

Не подходит в рамках будущих задач. Нужно будет выводить товары из разных категорий по одной штуке по тегу.

2) WP_query запрос к бд
$args = array(
// Использование аргумента tax_query для установки параметров терминов таксономии
'tax_query' => array(
// Использование нескольких таксономий требует параметр relation
'relation' => 'AND', // значение AND для выборки товаров принадлежащим одновременно ко всем указанным терминам
// массив для категории
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => array( 16 ),
),
),
// Параметры отображения выведенных товаров
'posts_per_page' => 2, // количество выводимых товаров
'post_type' => 'product', // тип товара
'orderby' => 'date', // сортировка
);


$loop= new WP_Query($args);



  while ( $loop->have_posts() ): $loop->the_post(); ?>
  <div <?php post_class("inloop-product"); ?>>
    <div class="row">
      <div class="col-sm-4">
        <?php the_post_thumbnail("thumbnail-215x300"); ?>
      </div>
      <div class="col-sm-8">
        <h4>
          <a href="<?php the_permalink(); ?>">
            <?php the_title(); ?>
          </a>
        </h4>
        <?php the_content(); ?>
        <p class="price">
          <?php _e("Price:","examp"); ?>
          <?php woocommerce_template_loop_price(); ?>
        </p>
        <?php woocommerce_template_loop_add_to_cart(); ?>
      </div>
    </div>
  </div> 
  <?php endwhile; ?>

Ок. Но тут используется кастомная верстка карточки товара, что хотелось бы избежать и привести всё отображение товара к одному виду.

3) Хуки. Это лучше всего. Ищу информацию как воспользоваться хуком из archive-product.php, который как раз и выводит товары в стандартной верстке вукомерса.
https://github.com/woocommerce/woocommerce/blob/ma...

Насколько разобрался нужный мне хук + луп:
woocommerce_product_loop_start();
wc_get_template_part( 'content', 'product' ); - вывод товара.
woocommerce_product_loop_end();


Вот хотелось бы понять, как получить товары из нужной категории (тега, аттрибута) с помощью такого кода. Как передать параметры вывода товара в хук. Вообще возможно это или нет?
  • Вопрос задан
  • 658 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Paul_Morte Автор вопроса
<?php 
$args = array(
// Использование аргумента tax_query для установки параметров терминов таксономии
'tax_query' => array(
// Использование нескольких таксономий требует параметр relation
'relation' => 'AND', // значение AND для выборки товаров принадлежащим одновременно ко всем указанным терминам
//!!!  Получаем массив продуктов из вукомерсарса
array(
'taxonomy' => 'product_cat', //  ищем в базе данных продукты из категории ...
'field' => 'id', 
'terms' => array( 16 ), // из категории с ID 16 (посмотреть в админке айдишник)
),
),
// Параметры отображения выведенных товаров
'posts_per_page' => 3, // количество выводимых товаров
'post_type' => 'product', // тип товара
'orderby' => 'date', // сортировка
);

$product = new WP_Query($args);


//Тут подключаем обертку <ul> вызывая хук вукомерса
  woocommerce_product_loop_start();
  do_action( 'woocommerce_shop_loop' ); 


// Мы получили в $product массив товаров (продуктов) и теперь выводим каждый в обертке вукомерса
  while ( $product->have_posts() ): $product->the_post(); ?>
  
  
  
  <?php  
    
 // если переменная существует 
if ( empty( $product ) ) {
	return;
}
?>

//  post_class();  - подключаем классы css для отображения товара
<li <?php post_class();  ?>>
	<?php
	/**
	 * Hook: woocommerce_before_shop_loop_item.
	 *
	 * @hooked woocommerce_template_loop_product_link_open - 10
	 */
	do_action( 'woocommerce_before_shop_loop_item' );
	/**
	 * Hook: woocommerce_before_shop_loop_item_title.
	 *
	 * @hooked woocommerce_show_product_loop_sale_flash - 10
	 * @hooked woocommerce_template_loop_product_thumbnail - 10
	 */
	do_action( 'woocommerce_before_shop_loop_item_title' );
	/**
	 * Hook: woocommerce_shop_loop_item_title.
	 *
	 * @hooked woocommerce_template_loop_product_title - 10
	 */
	do_action( 'woocommerce_shop_loop_item_title' );
	/**
	 * Hook: woocommerce_after_shop_loop_item_title.
	 *
	 * @hooked woocommerce_template_loop_rating - 5
	 * @hooked woocommerce_template_loop_price - 10
	 */
	do_action( 'woocommerce_after_shop_loop_item_title' );
	/**
	 * Hook: woocommerce_after_shop_loop_item.
	 *
	 * @hooked woocommerce_template_loop_product_link_close - 5
	 * @hooked woocommerce_template_loop_add_to_cart - 10
	 */
	do_action( 'woocommerce_after_shop_loop_item' );
	
	

	

	
	?>
	
</li>
  
  
  
  <?php endwhile; ?>
	


  <?php 
	woocommerce_product_loop_end();


  ?>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы