我创建了一个用于结合WooCommerce订阅和插件的插件。 WooCommerce Account Funds的目标是,当会员升级到“金牌会员”时,他们会获得40英镑的奖励,并且只要他们的订阅有效,他们就会每隔28天继续记入贷方。
我遇到的问题是,只要有人通过标准订单,就会获得40英镑的优惠!我不确定为什么会这样!我也不能每28天重复一次。继承我的代码。
<?php
/*
Plugin Name: WooCommerce Subscriptions Funds
Plugin URI:
Description: Combined WooCommerce Subscriptions & WooCommerce Funds
Version: 1.0
Author: Brad Houston
Author URI:
License: GPL
*/
/**
* Required functions
*/
if ( ! function_exists( 'woothemes_queue_update' ) || ! function_exists( 'is_woocommerce_active' ) ) {
require_once( 'woo-includes/woo-functions.php' );
}
/**
* Check if WooCommerce is active, and if it isn't, disable Subscriptions.
*
* @since 1.0
*/
if ( ! is_woocommerce_active() || version_compare( get_option( 'woocommerce_db_version' ), '2.1', '<' ) ) {
add_action( 'admin_notices', 'WC_Subscriptions::woocommerce_inactive_notice' );
return;
}
class WC_Subscriptions_Funds
{
/**
* Bootstraps the class and hooks required actions & filters.
*
* @since 1.0
*/
public static function init(){
// Check if we want to create the order ourself (a renewal order)
add_filter( 'woocommerce_create_order', __CLASS__ . '::filter_woocommerce_create_order', 10, 2 );
}
public static function filter_woocommerce_create_order( $order_id, $checkout_object ) {
global $woocommerce;
$customer_id = get_current_user_id();
WC_Account_Funds::add_funds( $customer_id, 40 );
//var_dump($woocommerce->cart->cart_contents);exit;
return $order_id;
}
}
WC_Subscriptions_Funds::init();
?>
答案 0 :(得分:2)
awakeWithContext:
挂钩并不意味着订单成功或支付,它刚刚被添加到数据库中。
您要做的是检查订单是否完成。
有很多订单状态更改的挂钩(c.f。http://docs.woothemes.com/wc-apidocs/hook-docs.html和http://docs.woothemes.com/wc-apidocs/source-class-WC_Abstract_Order.html#2138)
因此,查看这些文档并检查已完成的状态挂钩,您可能希望回复woocommerce_create_order
。
此外,woocommerce_order_status_completed
是获取订单客户的错误方式。如果您使用银行转帐付款,“当前用户ID”可能是将订单标记为已完成的管理员,而不是客户。我认为 WC_Order有get_current_user_id();
或get_user_id()
方法来做 - 检查文档或来源。