Этот вопрос закрыт для ответов, так как повторяет вопрос Как вывести товары в Woocommerce группами?

Как в Woocommerce вывести вариации отдельными товарами с помощью php?

Мне необходимо в каталоге вывести вариации по атрибуту "Цвет" отдельными товарами. Подскажите можно ли это сделать?
  • Вопрос задан
  • 1221 просмотр
Ответы на вопрос 1
@NickToot
web developer
Можно изменить стандартный запрос получения товаров WooCommerсe (добавьте код в functions.php или в отдельный файл который подключается в него):
add_action( 'woocommerce_product_query', 'custom_woocommerce_product_query' );
function custom_woocommerce_product_query ($q) {
  $q->set( 'post_type', array( 'product', 'product_variation' ) );
  return $q;
}

У вас выведутся все товары и все их вариации, я думаю это будет избыточно, тогда нужно изменить этот запрос под себя, условиями или как-нибудь еще если вы умеете. Я добавил галочку для вариаций отображать в каталоге или нет и получаю только отмеченные товары, простые товары при этом запросе пропадают, мне этого было достаточно:
/**
 *  Добавление своего поля для вариаций
 */
add_action( 'woocommerce_variation_options', 'add_custom_field_to_variations', 10, 3 );
function add_custom_field_to_variations( $loop, $variation_data, $variation ) {
$checked = get_post_meta( $variation->ID, 'catalog_visibility', true ) ) ? 'checked="checked"' : '';
?>
  <label>
    Показать в каталоге?
    <input type="checkbox" class="checkbox" name="catalog_visibility[<?= $loop ?>]" <?= $checked; ?>/>
  </label>
<?php
}

/**
 *  Сохранение в админке своего поля для вариаций
 */
add_action( 'woocommerce_save_product_variation', 'save_custom_field_variations', 10, 2 );
function save_custom_field_variations( $variation_id, $i ) {
  $catalog_visibility = $_POST['catalog_visibility'][$i];
  if ( $catalog_visibility ) {
    update_post_meta( $variation_id, 'catalog_visibility', true );
  } else {
    delete_post_meta( $variation_id, 'catalog_visibility' );
  }
}

/**
 *  Добавление вариативных товаров в каталог
 */
add_action( 'woocommerce_product_query', 'custom_woocommerce_product_query' );
function custom_woocommerce_product_query ($q) {
  // Добавление вариаций в каталог
  $q->set( 'post_type', array( 'product', 'product_variation' ) );
  // Оставляем только вариации в каталоге
  $meta_query = (array) $q->get( 'meta_query' );
  $meta_query[] = array(
    'key'      => 'catalog_visibility',
    'value'    => '1',
  );
  $q->set( 'meta_query', $meta_query );
  return $q;
}
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы