WooCommerce的自定义插件

时间:2015-08-11 09:38:18

标签: php wordpress

我创建了一个用于结合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();
?>

1 个答案:

答案 0 :(得分:2)

awakeWithContext:挂钩并不意味着订单成功或支付,它刚刚被添加到数据库中。

您要做的是检查订单是否完成。

有很多订单状态更改的挂钩(c.f。http://docs.woothemes.com/wc-apidocs/hook-docs.htmlhttp://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()方法来做 - 检查文档或来源。