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

时间:2019-08-23 09:06:09

标签: php wordpress woocommerce product

每天晚上,我都会用供应商的产品加载CSV文件。他们删除并在每个CSV中添加产品。如果某个产品不再包含在CSV中,并且以前也未包含在CSV中,则我的插件会将产品的可见性设置为隐藏。通过这种方式,链接仍然有效,因此Search Console等中不会出现404错误,但该产品未在我的商店中显示。

但是,一些客户仍然可以访问来自不同域(即Google)的这些链接。他们落在“看不见的产品”上,并且有可能在该产品不再可用时单击“购物车”按钮。

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

我使用WP Import导入CSV和产品可见性的方式:隐藏是这样的:

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”,则然后删除“添加到购物车”按钮。

1 个答案:

答案 0 :(得分:0)

当“隐藏”产品目录可见性时,您可以简单地使用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文件中。经过测试,可以正常工作。

  

注意:如果客户以前有与产品有关的购物车会话,则会从其中删除该产品。


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

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文件中。经过测试,可以正常工作。