Отключить кнопку добавления в корзину, когда товар закончился
Я хочу отключить кнопку 'Добавить в корзину', когда товар отсутствует в наличии, используя PHP код или настройки администратора WooCommerce.

Вот несколько плагинов, которые предоставляют возможность скрыть кнопку "Добавить в корзину" на странице магазина и странице отдельного товара в WooCommerce:
[ https://wordpress.org/plugins/hide-add-to-cart-button/ ]
[ https://wordpress.org/plugins/remove-add-to-cart-woocommerce/ ]
Эти плагины выполняют следующие функции:
1) Скрывают кнопку "Добавить в корзину" на странице товара.
2) Скрывают кнопку "Добавить в корзину" на странице категории.
3) Скрывают кнопку "Добавить в корзину" на главной странице и всех других страницах.
Также вы можете скрыть кнопку, добавив следующую функцию в файл functions.php:
/*
* Переопределение через functions.php
**/
if (!function_exists('woocommerce_template_loop_add_to_cart')) {
function woocommerce_template_loop_add_to_cart() {
global $product;
if ( ! $product->is_in_stock() || ! $product->is_purchasable() ) return;
woocommerce_get_template('loop/add-to-cart.php');
}
}

Вместо переопределения функции лучше использовать фильтр woocommerce_is_purchasable
.
add_filter( 'woocommerce_is_purchasable', 'vna_is_purchasable', 10, 2 );
function vna_is_purchasable( $purchasable, $product ){
return true || false; // в зависимости от вашего условия
}

Я столкнулся с этим вопросом, помогая другу. Не будучи разработчиком WordPress, не говоря уже о WooCommerce, мне все же удалось найти решение без написания PHP, только с помощью CSS.
Похоже, WooCommerce хорошо справляется с "преобразованием" многих свойств товара в CSS-классы, которые затем присваиваются HTML-контейнерам. Не уверен, связано ли это с темой, но в моем случае некоторые контейнеры получили класс "instock", когда товар был в наличии, и "outofstock", когда товара не было в наличии.
Когда я это заметил, мне не потребовалось много времени, чтобы придумать несколько CSS-правил для:
- Скрытия кнопки
- Отображения сообщения вместо кнопки с использованием псевдоэлементов CSS и свойства content
- Сделать часть плитки товара полупрозрачной, чтобы они выглядели более "неактивными"
Я не советовал бы это для продакшн-кода в большой компании, но в моем случае это сработало достаточно хорошо. И это работает с товарами, имеющими вариации — они получают класс "outofstock" только когда все вариации отсутствуют в наличии.
Я не буду публиковать код, так как, как я уже сказал, я не эксперт и не могу сказать, является ли мой HTML "универсальным для WooCommerce" или связан с используемой темой, или даже полностью кастомным (я обычно не занимаюсь созданием и управлением сайта), но все же думаю, что это может помочь, так как мне это очень помогло.

Чтобы убрать кнопку "Добавить в корзину" со страницы определенного товара, вы можете добавить этот код в файл functions.php (находится в папке темы):
add_filter('woocommerce_is_purchasable', 'wpblog_specific_product');
function wpblog_specific_product($purchaseable_product_wpblog, $product) {
return ($product->id == specific_product_id (512) ? false : $purchaseable_product_wpblog);
}
Источник: https://www.wpblog.com/add-to-cart-button-in-woocommerce-store/
