Май
18
11

Наличие товара в Woocommerce — настройки, хаки, надпись «Нет в наличии», функция is_in_stock и др.

Наличие товара в WoocommerceПоговорим о разных ситуациях, которые возникают с показателем наличия товара в Woocommerce. Недавно пришлось решить несколько задач по теме, и захотелось собрать все сниппеты в одном посте. Сегодня расскажу про: функцию is_in_stock для проверки статуса продукции на складе, отображение соответствующих бейджей и модификацию цены.

Кое-какие смежные нюансы я уже затрагивал в блоге, плюс, думаю, вопросы в публикации далеко не последние по данной теме, поэтому статья будет дополнятся новыми хаками. 

Список задач:

Начнем с базовых понятий. В настройках каждого продукта есть вкладка «Запасы», где можете управлять данной характеристикой: укажите, что та или иная позиция сейчас недоступна либо наоборот измените статус остатка нет в наличии на противоположный (когда она появится).

Наличие товара в Woocommerce

Как правило, в современных Woocommerce шаблонах разработчики заранее предусматривают подобные ситуации, и при смене настроек вы увидите соответствующую реакцию/сообщение на сайте. Но иногда нужно сделать некоторые дополнительные штуки во фронтенде…

Бейдж нет в наличии в Woocommerce

Чтобы добавить соответствующую надпись на страницу каталога (категории) магазина, размещаете в файле функций functions.php код:

add_action( 'woocommerce_before_shop_loop_item_title', 'my_sold_out_loop' );
 
function my_sold_out_loop() {
    global $product;
 
    if ( !$product->is_in_stock() ) {
        echo '<span class="soldout">Нет в наличии</span>';
    }
}

Текст появится в правом верхнем углу. Дополнительно для класса soldout сможете задать какой-то стиль:

span.soldout {
padding: 3px 7px;
background: #7b1616;
color: white;
font-size: 13px;
}

Woocommerce - товара нет в наличии

С помощью add_action допускается вставка данного бейджа в любое место Woocommerce шаблона, например, в единичное отображение продукции интернет-магазина:

add_action( 'woocommerce_before_single_product_summary', 'my_sold_out_loop' );

Функция is_in_stock и наличие товара

Как вы могли догадаться из прошлого сниппета, is_in_stock является булевой функцией, то есть возвращает значения true/false. Следовательно вы можете использовать ее в условном операторе IF:

    if ( $product->is_in_stock() ) {
        echo '<div class="stock" >' . $product->get_stock_quantity() . ' в наличии</div>';
    } else {
        echo '<div class="out-of-stock" >Нет в наличии</div>';
    }

Выводите в Woocommerce фразу в наличии или нет для товара (в зависимости от его статуса) на страницах архива каталога:

function my_stock_loop() {
    global $product;
    if ( $product->is_in_stock() ) {
        echo '<div class="stock" >' . $product->get_stock_quantity() . ' в наличии</div>';
    } else {
        echo '<div class="out-of-stock" >Нет в наличии</div>';
    }
}
add_action( 'woocommerce_after_shop_loop_item_title', 'my_stock_loop' );

Надпись нет в наличии для цены

Возможно, это достаточно узкоспециализированная задача, но недавно мне нужно было вставить фразу об отсутствии товара не в качестве бейджа, а рядом с ценой. При этом я использовал несколько иное условия проверки:

add_filter( 'woocommerce_get_price_html', 'my_price_html', 100, 2 );
function my_price_html( $price, $product ){
  global $product;
  $return_string = $price;
  if ( $product->stock_status == 'outofstock' ) {
  	  $return_string = $price .' &nbsp;(Нет в наличии)';
     }
  return $return_string; 	
}

Здесь вместо функции is_in_stock просто считывал значение параметра $product->stock_status, и в случае когда оно равно «outofstock», дописывал соответствующую фразу к цене.

Важно! Во-первых, я не тестировал фишку с ценами вариаций товаров (у меня все были простые) — в статье по ссылке может видеть, что там используется другой фильтр woocommerce_variable_price_htm. Вполне вероятно, придется добавить срабатывание функции и для него. Также не забывайте, что есть еще sale_price. Во-вторых, изменения затрагивают и админку — если это критично, вставьте в функцию соответствующую проверку/условие.

Вывод «пустых» подкатегорий на сайте

Данная фишка/задача актуальная, если в настройках WooCommerce рубрик у вас указано отображение не только товаров магазина, но и подкатегорий. При этом плагин по умолчанию не будет показывать разделы, которые не содержат ни единого элемента. Возможно, вам захочется данное поведение изменить.

В таком случае следует воспользоваться небольшим хаком, добавляете его в файл функций. В версии WooCommerce 3.х и выше он имеет вид:

add_filter( 'woocommerce_product_subcategories_hide_empty', 'hide_empty_categories', 10, 1 );
function hide_empty_categories ( $hide_empty ) {
    $hide_empty  =  FALSE;
    // You can add other logic here too
    return $hide_empty;
}

Для младших релизов модуля (до 3.x) следует использовать немного другой код:

add_filter( 'woocommerce_product_subcategories_hide_empty', 'show_empty_categories', 10, 1 );
function show_empty_categories ( $show_empty ) {
    $show_empty  =  TRUE;
    // You can add other logic here too
    return $show_empty;
}

Тестировал оба варианта сниппета — все работало. Кстати, если выводите список категорий с помощью виджета, то там пустые подрубрики можно скрывать через соответствующую настройку.

WooCommerce виджет категорий

Если вас интересует еще что-то по теме наличия товара Woocommerce, задавайте вопросы в комментариях. Позже допишу новые полезности и сниппеты, если найду интересные.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 4, средний балл: 6,75 из 7)
Загрузка...

категория Категории: WooCommerce;
теги Теги: , , , , .

комментариев 11 к статье “Наличие товара в Woocommerce — настройки, хаки, надпись «Нет в наличии», функция is_in_stock и др.”

  • Roman   06.04.2018

    Очередная порция сниппетов подъехала)) спс за труды!

  • Tod   06.04.2018

    Roman, не за что) По сути, я и для себя их тоже фиксирую, дабы потом в работе повторно использовать.

  • Антон   10.05.2018

    Как раз изучаю Woocomerce, хороший у вас блог))

  • Tod   10.05.2018

    Антон, спасибо, стараюсь)

  • Danka   02.08.2018

    Хак для пустых подкатегорий помог, tnx!

  • Tod   02.08.2018

    Danka, не за что)

  • Darfkire   17.08.2018

    Здравствуйте. Подскажите пожалуйста как сделать вывод бейджа «Нет в наличии» для вариативного товара?

  • Tod   19.08.2018

    Darfkire, а прием из статьи не работает? мне казалось бейдж появляется и в обычных товарах, и в вариативных. Если нет, надо гуглить где-то код, у меня в теме, к счастью, все работало изначально.

  • Darkfire   19.08.2018

    Tod, ты привязываешься к параметру in_stock, но для вариативного товара он положительный, хотя все вариации выключены. Потому твой код не работает. Если подстраивается под твой код, то мне нужно самому определять выключены все вариации или нет и задавать параметр false для in_stock. Но как это красиво сделать -я не знаю.

  • Darkfire   19.08.2018

    Tod, все я разобрался. Твой код работает. Моя ошибка была в том что я выключал вариации таким кодом:

    $data = [
    ‘visible’ => false
    ];
    $wooeto->put(«products/{$v1->id}/variations/{$v2->id}», $data);
    То есть я скрывал товар, а нужно было было передавать массив $data = [
    ‘in_stock’ => false
    ];
    И тогда Woocomerce все нормально пересчитает и сам изменяет in_stock для всего товара и твой код работает.

  • Tod   19.08.2018

    Darkfire, гуглил что-то типа woocommerce is_in_stock variable — вроде есть парочка статей/сниппетов, которые нужно тестить у себя. Похоже, что действительно с вариациями не все гладко.

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории
Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости