【问题标题】:Adding an item to cart for first time buyer为首次购买者将商品添加到购物车
【发布时间】:2016-11-24 16:53:35
【问题描述】:

我有一家 WooCommerce 商店,我正在尝试将特定产品添加到 Woocommerce 购物车,仅供首次购买者使用。我已经有下面的 php 代码了。

但由于某种原因,它不起作用。

这是我的代码:

add_action('woocommerce_before_cart','woocommerce_add_to_cart');

function woocommerce_add_to_cart(){
if(! is_admin()){
    global $woocommerce;

    $product_id=912;
    $found=false;
    $first_customer = false;

    if(is_user_logged_in()){
        $user_id=get_current_user_id();
        $customer_orders=get_posts(array(

        'meta_key' => '_customer_user',
        'meta_value' => $user_id,
        'post_type' => 'shop_prder',
        'numberposts' => -1
        ));

        if(count($customer_orders) > 0) {
            $first_customer=true;
            wc_add_notice( sprintf( "first custommer check",error));
            $statuses=array('wc-failed','wc-cancelled','wc-refunded');

            foreach($customer_orders as $tmp_orders){
                $order =wc_get_order($tmp_orders->ID);
                if (! in_array($order->get_status(),$statuses)){
                    wc_add_notice( sprintf( "first custommer tmp check",error));
                    $first_customer=false;
                }
            }
        }

        if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
            wc_add_notice( sprintf( "items in cart check",error));
        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if ( $_product->id == $product_id ){
            wc_add_notice( sprintf( "produkt id check",error));
            $found = true;
                }
            }
        }

    }
    if (!$found && $first_customer){
            wc_add_notice( sprintf( "found and custommer check",error));
        WC()->cart->add_to_cart($product_id);
    }

  } 
}

如果有人可以帮助我,我将不胜感激。

谢谢

【问题讨论】:

  • 你有什么错误吗?究竟什么不起作用?

标签: php wordpress woocommerce cart product


【解决方案1】:

您的代码中有 2 个错误和其他一些错误:

  • 您使用现有的 woocommerce 挂钩来命名您的函数
  • post_type 不是 'shop_prder' 而是 'shop_order'

这是修改后的代码:

// 'woocommerce_add_to_cart' is an existing woocommerce hook so you can't use it to name your custom function here…
add_action('woocommerce_before_cart','first_time_buyers');

function first_time_buyers(){
    if( !is_admin() && is_user_logged_in() ){

        $product_id = 912;
        $found = false;
        $first_customer = true;

        // Getting current customer valid orders (see 'post_status' below)
        $customer_orders=get_posts(array(
            'meta_key' => '_customer_user',
            'meta_value' => get_current_user_id(),
            'post_type' => 'shop_order', // <= NOT 'shop_prder' but 'shop_order'
            // We add the accepted orders status here
            'post_status' => array('wc-on-hold', 'wc-processing', 'wc-completed'),
            'numberposts' => -1
        ));

        if( count($customer_orders) > 0 )
            $first_customer = false;

        if ( !WC()->cart->is_empty() )
            foreach ( WC()->cart->get_cart() as $cart_item )
                if ( $product_id == $cart_item['product_id'] ) {
                    $found = true;
                    break;
                }

        if (!$found && $first_customer){
            WC()->cart->add_to_cart($product_id);
        }
    }
}

代码进入活动子主题(或主题)的任何 php 文件或任何插件 php 文件中。

这是经过测试且功能齐全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2016-12-19
    • 1970-01-01
    • 2015-03-31
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多