应用于购物车的购物车折扣在Wordpress中使用Woocommerce的订单总额中未显示正确的金额

时间:2014-02-21 06:52:50

标签: php wordpress woocommerce

我正在创建一个新的woocommerce插件,它将在购物车页面顶部提供应用折扣选项。

现在当购物车中有产品时,用户将点击“应用折扣”按钮,点击该按钮并从我的自定义插件触发操作,该插件将为该特定购物车订单添加购物车折扣。

到目前为止它工作正常并且还显示应用购物车折扣。下面是截图

enter image description here

正如您从屏幕截图中看到的那样,Order Total显示错误的数字计算。 以下是我自定义的woocommerce插件文件中的代码。

提交按钮时会调用以下操作

if(!empty($_POST['apply_discount_woo'])){
                    add_action('woocommerce_calculate_totals',array(&$this,'cart_order_total_action'));
                }

和功能代码:

public function cart_order_total_action(){
                if ( is_user_logged_in() ){
                    global $woocommerce;
                    global $current_user;
                    global $wpdb;
                    $u_id = $current_user->ID;
                    $table_name = $wpdb->prefix."woocommerce_customer_reward_ms";
                    $thetable2  = $wpdb->prefix . "woocommerce_customer_reward_cart_ms";
                    $table_name3 = $wpdb->prefix."woocommerce_customer_reward_points_log_ms";
                    $data       = $wpdb->get_row("SELECT * from $table_name where id=$u_id");
                    $data2      = $wpdb->get_row("SELECT * from $thetable2");
                    /* Order Id goes here */
                    $orders=array();//order ids
                    $args = array(
                        'numberposts'     => -1,
                        'meta_key'        => '_customer_user',
                        'meta_value'      => $current_user->ID,
                        'post_type'       => 'shop_order',
                        'post_status'     => 'publish',
                        'tax_query'=>array(
                                array(
                                    'taxonomy'  =>'shop_order_status',
                                    'field'     => 'slug',
                                    'terms'     =>'on-hold'
                                    )
                        )  
                    );
                    $posts=get_posts($args);
                    //get the post ids as order ids
                    $orders=wp_list_pluck( $posts, 'ID' );
                    $order = $orders[0];
                    /* Order Id ends here */
                    if($data){
                        $user_points = $data->points;
                        $points_set  = $data2->woo_pts_set;
                        print_r($woocommerce->cart->applied_coupons);
                        echo $woocommerce->cart->discount_cart;
                        echo $woocommerce->cart->get_cart_total();
                        /* the line below adds the cart discount to the Cart */
                        $woocommerce->cart->discount_cart = $data2->woo_discount_set;
                    }else{
                        echo 'You dont have any woo points yet.!!';
                    }
                }
            }

如何更新添加购物车折扣的购物车总数?

2 个答案:

答案 0 :(得分:1)

也许这不是100%你想达到目标的方式,但你可以动态生成优惠券:

$coupon_code = 'UNIQUECODE'; // Code
$amount = '10'; // Amount
$discount_type = 'fixed_cart'; // Type: fixed_cart, percent, fixed_product, percent_product

$coupon = array(
    'post_title'   => $coupon_code,
    'post_content' => '',
    'post_status'  => 'publish',
    'post_author'  => 1,
    'post_type'    => 'shop_coupon'
);

$new_coupon_id = wp_insert_post( $coupon );

// Add meta
update_post_meta( $new_coupon_id, 'discount_type', $discount_type );
update_post_meta( $new_coupon_id, 'coupon_amount', $amount );
update_post_meta( $new_coupon_id, 'individual_use', 'no' );
update_post_meta( $new_coupon_id, 'product_ids', '' );
update_post_meta( $new_coupon_id, 'exclude_product_ids', '' );
update_post_meta( $new_coupon_id, 'usage_limit', '' );
update_post_meta( $new_coupon_id, 'expiry_date', '' );
update_post_meta( $new_coupon_id, 'apply_before_tax', 'yes' );
update_post_meta( $new_coupon_id, 'free_shipping', 'no' );

答案 1 :(得分:0)

经过数小时的研究和调试一些Woocommerce文档。我发现有两种类型的折扣可以应用于购物车

1- 购物车折扣 2- 订单折扣

如果我错了,请纠正我,但是优惠券的使用总是会有折扣。我在这里尝试的是给购物车提供一个自定义折扣 $ 5 ,这个折扣并没有被Woocommere视为实际折扣。此自定义折扣也不会反映购物车页面上的实际购物车总数以及结帐页面。 为了做到这一点,你最终将不得不改变你的woocommerce类文件,我不建议你在创建一个独立的自定义Woocommerce插件时。

但我想出了另一种应用折扣的方法,即在优惠券的帮助下。我创建了一个自定义优惠券,可以为购物车提供5美元的折扣。就是这样,Cart总计认可了这个数字,并向我展示了正确的总数以及所应用的折扣。

此外,结帐页面填充了正确的总数。

在处理完订单后,它向我显示了正确的折扣。

只想和大家分享一下。我觉得这是一个像魅力一样的解决方案,而且不会改变任何一个woocommerce核心文件。

我希望这对你们所有人都有用。

感谢。