WooCommerce智能优惠券从哪个项目生成?

时间:2016-12-23 07:17:41

标签: wordpress woocommerce coupon

我正在为智能优惠券撰写业务扩展名(pdf打印)。

现在我需要从生成的优惠券(订单)和订单商品中获得关系。

例如,哪个订单商品已生成优惠券? 有没有办法从优惠券中获得订单item_id

使用此代码获取优惠券:

$coupons = get_post_meta($order_id, 'sc_coupon_receiver_details', true));

非常感谢

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,但我必须将代码放在“woocommerce-smart-coupons.php”文件中。

第379行:扩展过滤器变量

add_filter( 'generate_smart_coupon_action', array(  $this, 'generate_smart_coupon_action' ), 1, 10 );

第4783行:使用$ item_id

扩展变量
if( $this->is_coupon_amount_pick_from_product_price( array( $coupon_title ) ) ) {
                                            $email_to_credit[$receivers_emails[$coupon->id][0]][] = $coupon->id . ':' . $sc_called_credit_details[$item_id] . ':' . $item_id;
                                        } else {
                                            $email_to_credit[$receivers_emails[$coupon->id][0]][] = $coupon->id . ':' . $coupon->amount . ':' . $item_id;
                                        }

第4816行:从详细信息中获取$ item_id并将其引用到“generate_smart_coupon”方法

foreach ( $email_to_credit[$email_id] as $coupon_credit => $qty ) {
                        $coupon_details = explode( ':', $coupon_credit );
                        $coupon_title = get_the_title( $coupon_details[0] );
                        $coupon = new WC_Coupon( $coupon_title );
                        $credit_amount = $coupon_details[1];
                        $item_id = $coupon_details[2];
                        $message_index = array_search( $email_id, $email[$coupon->id], true );
                        if ( $message_index !== false && isset( $receivers_messages[$coupon->id][$message_index] ) && !empty( $receivers_messages[$coupon->id][$message_index] ) ) {
                            $message_from_sender = $receivers_messages[$coupon->id][$message_index];
                        } else {
                            $message_from_sender = '';
                        }
                        for ( $i = 0; $i < $qty; $i++ ) {
                            if ( $coupon->type != 'smart_coupon' ) continue;    // only process smart_coupon here, rest coupon will be processed by function update_coupon
                            $this->generate_smart_coupon( $email_id, $credit_amount, $order_id, $coupon, 'smart_coupon', $gift_certificate_receiver_name, $message_from_sender, $gift_certificate_sender_name, $gift_certificate_sender_email, $item_id );
                            $smart_coupon_codes = array();
                        }
                    }

第5194行:更改方法并扩展变量

public function generate_smart_coupon( $email, $amount, $order_id = '', $coupon = '', $discount_type = 'smart_coupon', $gift_certificate_receiver_name = '', $message_from_sender = '', $gift_certificate_sender_name = '', $gift_certificate_sender_email = '', $item_id = '' ) {
            return apply_filters( 'generate_smart_coupon_action', $email, $amount, $order_id, $coupon, $discount_type, $gift_certificate_receiver_name, $message_from_sender, $gift_certificate_sender_name, $gift_certificate_sender_email, $item_id );
        }

第5212行:将过滤方法扩展到

public function generate_smart_coupon_action( $email, $amount, $order_id = '', $coupon = '', $discount_type = 'smart_coupon', $gift_certificate_receiver_name = '', $message_from_sender = '', $gift_certificate_sender_name = '', $gift_certificate_sender_email = '', $item_id = '' ) {

第5307行:将$ item_id存储在post_meta

update_post_meta( $smart_coupon_id, 'apply_before_tax', $apply_before_tax  );
                update_post_meta( $smart_coupon_id, 'free_shipping', $free_shipping );
                update_post_meta( $smart_coupon_id, 'product_categories', $product_categories  );
                update_post_meta( $smart_coupon_id, 'exclude_product_categories', $exclude_product_categories );
                update_post_meta( $smart_coupon_id, 'generated_from_order_id', $order_id );
                update_post_meta( $smart_coupon_id, 'generated_from_item_id', $item_id );