禁止从 WooCommerce 中的虚拟产品购买

Disallow purchases from virtual products in WooCommerce

我正在尝试从不可购买的产品的类别页面中删除添加到购物车按钮。

这是我当前的代码,我已将其放入子主题的 functions.php 文件中;

function buy_filter()
{
    if ( ! is_product() ) return;
    $product_id=get_the_ID();
    $product = wc_get_product($product_id);
    if ($product->is_virtual('yes'))

    if ($product->is_virtual('yes'))
    {
        add_filter( 'woocommerce_is_purchasable', '__return_false');
    }
}

add_action ('wp', 'buy_filter');

我已经设法从各个产品页面中删除了该按钮,但我仍然无法将其从类别页面中删除。现在当我检查按钮时显示以下代码:

<a href="?add-to-cart=16972" data-quantity="1" class="button product_type_simple add_to_cart_button
ajax_add_to_cart" data-product_id="16972" data-product_sku="604544617405" aria-label=
"Add “Federal -  9MM Syntech, 115gr” to your cart" rel="nofollow">Add to cart</a>

是否需要以其他方式禁用此按钮?

我真的需要删除此按钮,因为它是我们只想在商店中销售的产品,但我们希望人们知道我们也有该产品的库存。

下面是它目前的样子,以及我想去的地方。理想情况下,我希望该按钮完全消失,但如果更容易的话,我肯定会选择替换阅读更多按钮。

请在您的 functions.php 文件中尝试此代码

add_filter('woocommerce_is_purchasable', 'woocommerce_cloudways_purchasable');
function woocommerce_cloudways_purchasable($cloudways_purchasable, $product) {
return ($product->id == your_specific_product_id (like 22) ? false : $cloudways_purchasable);
}

来源:https://www.cloudways.com/blog/how-to-remove-hide-or-disable-add-to-cart-button-in-woocommerce/

或使用此插件无需任何编码即可解决您的问题。

https://wordpress.org/plugins/non-purchasable-woocommerce-products/

要从所有地方删除它(在单个页面和类别页面上)直接使用过滤器,将您的代码替换为:

add_filter( 'woocommerce_variation_is_purchasable', 'filter_virtual_products', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'filter_virtual_products', 10, 2 );
function filter_virtual_products( $is_purchasable, $product )
{
    if ( $product->is_virtual('yes') ) {
        $is_purchasable = false;
    }
    return $is_purchasable;
}

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。