在 WooCommerce 中隐藏产品可见性时隐藏添加到购物车按钮

Hide add to cart button when product visibility is hidden in WooCommerce

每天晚上我都会将供应商的产品加载到 CSV 文件中。他们在每个 CSV 中删除和添加产品。如果某个产品不再在 CSV 中并且之前在 CSV 中,我的插件会将产品可见性置于隐藏状态。这样 link 仍然有效,因此在搜索控制台等中没有 404 错误,但是我的商店中没有显示该产品。

但是,一些客户仍然从不同的域(即 google)登陆这些 link。他们登陆 "invisible product",并且可以在产品不再可用时单击 "in cart" 按钮。

因此我的问题是:我如何(在 functions.php 中?)确保当产品的可见性被隐藏时,购物车按钮被删除(一个简单的显示:none;就可以了) .

我使用 WP Import 导入 CSV,产品在 visibility:hidden 上的放置方式是这样的:

function my_is_post_to_delete($is_post_to_delete, $post_id, $import) {
     // Get an instance of the product variation from a defined ID
    $my_product = wc_get_product($post_id);
    // Change the product visibility
    $my_product->set_catalog_visibility('hidden');
    // Save and sync the product visibility
    $my_product->save();
    return false;
}

所以我需要这样的东西:

如果 product_visibility 是'hidden' 那么 删除添加到购物车按钮。

当产品目录可见性为 "hidden" 时,您可以简单地使用 woocommerce_is_purchasable 专用过滤器挂钩,这样:

add_filter('woocommerce_is_purchasable', 'filter_product_is_purchasable', 10, 2 );
function filter_product_is_purchasable( $purchasable, $product ) {
    if( 'hidden' === $product->get_catalog_visibility() ) {
        $purchasable = false;

    }
    return $purchasable;
}

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

Note: If customer has a previous cart session with the product in it, it will be removed from it.


更新 - 对于外部(或关联)产品,请尝试使用以下内容:

add_action( 'woocommerce_single_product_summary', 'remove_product_add_to_cart_button', 4 );
function remove_product_add_to_cart_button(){
    global $product;

    if( $product->is_type('external') && 'hidden' === $product->get_catalog_visibility() ) {
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
    }
}

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