Отключить кнопку «Добавить в корзину» на основе пользовательского статуса продукта WooCommerce

#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;
} 

Спасибо за первый ответ 🙂