【问题标题】:Allow specific products to be only purchased once by user in Woocommerce允许用户在 Woocommerce 中仅购买一次特定产品
【发布时间】:2019-08-12 18:35:57
【问题描述】:

以下 Woocommerce 代码,允许在购买后再次购买

function sv_disable_repeat_purchase( $purchasable, $product ) {
    // Enter the ID of the product that shouldn't be purchased again
    $non_purchasable = 40021;

    // Get the ID for the current product (passed in)
    $product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->id;

    // Bail unless the ID is equal to our desired non-purchasable product
    if ( $non_purchasable != $product_id ) {
        return $purchasable;
    }

    // return false if the customer has bought the product
    if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
        $purchasable = false;
    }

    // Double-check for variations: if parent is not purchasable, then variation is not
    if ( $purchasable && $product->is_type( 'variation' ) ) {
        $purchasable = $product->parent->is_purchasable();
    }

    return $purchasable;
}
add_filter( 'woocommerce_variation_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );

请有人帮我将 $non_purchasable = 40021 更改为一系列产品

【问题讨论】:

    标签: php arrays wordpress woocommerce product


    【解决方案1】:

    这是带有数组的代码。请检查它是否符合您的要求:

    function sv_disable_repeat_purchase( $purchasable, $product ) {
    
        // Enter the ID of the product that shouldn't be purchased again
        $non_purchasable_arr = array(
            40021,
            40022
        );
    
        // Get the ID for the current product (passed in)
        $product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->id;
    
        // Bail unless the ID is equal to our desired non-purchasable product
        foreach ( $non_purchasable_arr as $non_purchasable ) {
            if ( $non_purchasable !== $product_id ) {
                return $purchasable;
            }
        }
    
        // return false if the customer has bought the product
        if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
            $purchasable = false;
        }
    
        // Double-check for variations: if parent is not purchasable, then variation is not
        if ( $purchasable && $product->is_type( 'variation' ) ) {
            $purchasable = $product->parent->is_purchasable();
        }
    
        return $purchasable;
    }
    
    add_filter( 'woocommerce_variation_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
    add_filter( 'woocommerce_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
    

    【讨论】:

      【解决方案2】:

      更新 (删除过时不需要的$product->variation_id ...)

      你可以简单地使用 PHP 条件函数in_array()...另外,你的代码已经过时了:

      • 这是过时的$product->variation_id
      • $product->id 替换为$product->get_id()

      这是一个简化的重新访问的代码版本:

      add_filter( 'woocommerce_variation_is_purchasable', 'products_purchasable_once', 10, 2 );
      add_filter( 'woocommerce_is_purchasable', 'products_purchasable_once', 10, 2 );
      function products_purchasable_once( $purchasable, $product ) {
          // Here set the product IDs in the array that can be purchased only once 
          $targeted_products = array(40021, 40038, 40171);
      
          // Only for logged in users and not for variable products
          if( ! is_user_logged_in() || $product->is_type('variable') )
              return $purchasable; // Exit
      
          $user = wp_get_current_user(); // The WP_User Object
      
          if ( in_array( $product->get_id(), $targeted_products ) &&
          wc_customer_bought_product( $user->user_email, $user->ID, $product->get_id() ) ) {
              $purchasable = false;
          }
      
          return $purchasable;
      }
      

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

      【讨论】:

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