【问题标题】:Disabling the purchase for one product in woocommerce在woocommerce中禁用一种产品的购买
【发布时间】:2019-04-23 12:53:37
【问题描述】:

我正在尝试关闭购买选定产品的可能性,但到目前为止我发现的所有材料都不适用于我。我想排除特定产品,最好是通过移除按钮,因为我希望该产品像其他产品一样工作,但没有购买的可能性。

这段代码对我来说是完美的:

add_filter('woocommerce_is_purchasable', 'filter_is_purchasable');
function filter_is_purchasable( $is_purchasable, $product ) {
    return ( $product->id == 534 ? false : $is_purchasable );
}

不幸的是,它不起作用。有什么想法吗?

【问题讨论】:

  • 如果您不尝试将其应用于 VARIABLE 产品,您的代码应该可以使用 @Loic。您是在简单产品还是可变产品上尝试?如果它是一个变量产品,那么看看我的答案。

标签: php wordpress woocommerce product


【解决方案1】:

自 Woocommerce 3 以来,此代码有点过时,因为 $product->id 需要替换为 $product->get_id()... 请尝试以下操作 (其中 534 是相关产品 ID,其中不会出现添加到购物车按钮):

add_filter('woocommerce_is_purchasable', 'purchasable_product_customizations', 10, 2 );
function purchasable_product_customizations( $is_purchasable, $product ) {
    if( in_array( $product->get_id() == 534 )
        $is_purchasable = false;

    return $is_purchasable;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。


如果您的产品 ID 是可变产品

对于要禁用所有变体的可变产品 ID,您将替换此行:

if( in_array( $product->get_id() == 534 )

这个:

if( in_array( $product->get_parent_id() == 534 )

如果它仍然不起作用,是因为其他东西正在交互并造成麻烦,例如您进行的一些自定义、您的主题或插件……也可能是因为您没有在正确的位置添加此代码。

【讨论】:

  • 所有修改都为functions.php添加了一个子主题,不幸的是在这种情况下它收到了HTTP ERROR 500,页面停止工作。
  • ifs 后面缺少右括号
【解决方案2】:

代码应该不同取决于产品类型(可变与否)。 下面看看我对这两种类型都使用了什么:

add_filter('woocommerce_is_purchasable', 'change_products_purchaseable_state', 23, 2 );
add_filter('woocommerce_variation_is_purchasable', 'change_products_purchaseable_state', 23, 2 );

function change_products_purchaseable_state( $is_purchasable, $product ) {

    $product_id = $product->get_id();

    // For product variations (from variable products)
    if ( $product->is_type('variation') ){
        $parent = wc_get_product( $product->get_parent_id() );
        $product_id = $parent->get_id();
    } 

    // Check if the Product belongs to a specific Category
    if( has_term( 51, 'product_cat', $product_id ) ) {
        return false;
    }

    return $is_purchasable;
}

此代码应适用于所有地方:单一产品页面、商店页面以及您使用 WooCommerce 模板或简码的其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2022-07-11
    • 2020-11-29
    • 2019-08-16
    相关资源
    最近更新 更多