在申请优惠券时,但在检查优惠券是否有效之前,是否有WooCommerce钩子会触发?

时间:2020-08-06 作者:lastnoob

我想在使用优惠券代码(带挂钩)后,将一个项目添加到购物车中(同一项目可以使用优惠券打折)。

E、 g.使用优惠券代码SAMPLECODE时,产品将以2美元的折扣添加到购物车中。优惠券设置为仅为该产品提供2美元的折扣。

问题是,我的优惠券代码只适用于将以编程方式添加的项目,因此它无法通过资格检查,无法woocommerce_applied_coupon.

那么,在检查优惠券是否有效之前,是否有一个钩子可以触发?

或者我应该在应用优惠券时通过javascript来实现吗?有没有办法通过AJAX实现这一点?

1 个回复
SO网友:Goran Jakovljevic

它是woocommerce_get_shop_coupon_data 过滤器,示例代码:

add_filter ( \'woocommerce_get_shop_coupon_data\', \'mp_create_coupon\', 10, 2  );
 
function mp_create_coupon( $data, $code ) {
    // Check if the coupon has already been created in the database
    global $wpdb;
    $sql = $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type = \'shop_coupon\' AND post_status = \'publish\' ORDER BY post_date DESC LIMIT 1;", $code );
    $coupon_id = $wpdb->get_var( $sql );
    if ( empty( $coupon_id ) ) {
        // Create a coupon with the properties you need
        $data = array(
            \'discount_type\'              => \'fixed_cart\',
            \'coupon_amount\'              => 100, // value
            \'individual_use\'             => \'no\',
            \'product_ids\'                => array(),
            \'exclude_product_ids\'        => array(),
            \'usage_limit\'                => \'\',
            \'usage_limit_per_user\'       => \'1\',
            \'limit_usage_to_x_items\'     => \'\',
            \'usage_count\'                => \'\',
            \'expiry_date\'                => \'2018-09-01\', // YYYY-MM-DD
            \'free_shipping\'              => \'no\',
            \'product_categories\'         => array(),
            \'exclude_product_categories\' => array(),
            \'exclude_sale_items\'         => \'no\',
            \'minimum_amount\'             => \'\',
            \'maximum_amount\'             => \'\',
            \'customer_email\'             => array()
        );
        // Save the coupon in the database
        $coupon = array(
            \'post_title\' => $code,
            \'post_content\' => \'\',
            \'post_status\' => \'publish\',
            \'post_author\' => 1,
            \'post_type\' => \'shop_coupon\'
        );
        $new_coupon_id = wp_insert_post( $coupon );
        // Write the $data values into postmeta table
        foreach ($data as $key => $value) {
            update_post_meta( $new_coupon_id, $key, $value );
        }
    }
    return $data;
}

相关推荐

Calling hooks in functions

我习惯于使用主题挂钩,定期添加功能,但难以使用插件挂钩来过滤内容。这是我所知的极限,我试图理解这个过程,但没有用。我正在使用GigPress 管理事件。它允许您添加一个节目(基于日期),并将该节目与帖子(标准WP帖子)关联。我已经创建了一个自定义的帖子类型—productions—来关联节目,而不仅仅是一般的博客帖子。插件有一个钩子-gigpress_related_post_types —允许您用自己选择的任何CPT交换帖子。如果我直接编辑插件,它就会工作,将“帖子”替换为“产品”。如果我添加了我希望是