#php #wordpress #woocommerce #product #stock
#php #wordpress #woocommerce #продукт #на складе
Вопрос:
В настоящее время в woocommerce кнопка «Добавить в корзину» отключена, если статус товара out of stock
. Я добавляю новый статус на складе с Discontinued product
помощью ярлыка woocommerce_product_stock_status_options
, теперь я ищу способ относиться к этому продукту так, как будто его нет в наличии.
Поскольку я считаю, что лучше разделить продукт, который больше не производится, и продукт, который произведен и доступен в другом магазине, но его нет на складе.
Ответ №1:
Вы можете использовать следующее, чтобы отключить кнопку «Добавить в корзину» на основе пользовательского статуса товара (который вы замените custom_status_slug
на свой пользовательский статус):
add_filter('woocommerce_is_purchasable', 'filter_is_purchasable_callback', 10, 2 );
add_filter('woocommerce_variation_is_purchasable', 'filter_is_purchasable_callback', 10, 2 );
function filter_is_purchasable_callback( $purchasable, $product ) {
if ( $product->get_stock_status() === 'custom_status_slug' ) {
return false;
}
return $purchasable;
}
Ввод кода functions.php файл активной дочерней темы (или активной темы). Протестировано и работает.
Комментарии:
1. Спасибо LoicTheAztec, это решает мою проблему. Поскольку я хочу изучить его лучше, не могли бы вы рассказать мне о номере, который вы упоминаете в
add_filter
? Почему вы упомянули10, 2
?2. Последнее число (
2
) — это количество аргументов (переменных), которые мы используем из подключенной функции (обязательно, если их несколько), и10
это приоритет подключения по умолчанию (обязательно, когда вы указываете количество аргументов).3. Спасибо за это! Отлично работает со всеми руководствами, в которых вы добавляете свой собственный статус товара, странно, что его нет в этих руководствах.
Ответ №2:
Я предлагаю решение, которое отображает статус товара на странице товара, но не кнопку «добавить в корзину»
add_filter('woocommerce_product_is_in_stock', 'filter_is_in_stock_callback', 10, 2 );
function filter_is_in_stock_callback( $stock, $product ) {
if ( $product->get_stock_status() === 'custom_status_slug' ) {
return false;
}
return $stock;
}
Спасибо за первый ответ 🙂