Woocommerce订阅和帐户资金插件之间的网关

时间:2019-03-21 15:29:29

标签: php wordpress woocommerce account woocommerce-subscriptions

我已经购买了2个插件(Woocommerce订阅和帐户资金),它们在其相关文档中均声明彼此兼容。我希望制作一个简单订阅产品,该产品在签出时会将该产品价格作为该用户的帐户资金添加,并在每次简单订阅产品更新时再次添加。

下面的代码已粘贴到主题中的functions.php文件的底部,但是似乎在购买订阅时不会更新帐户资金。

add_action('processed_subscription_payment', 'custom_process_order', 10, 2);

function custom_process_order($user_id, $subscription_key) {

    // split subscription key into order and product IDs
    $pieces = explode( '_', $subscription_key);
    $order_id = $pieces[0];
    $product_id = $pieces[1];

    // get order total
    $order = wc_get_order( $order_id );
    $amount = $order->get_total();

    // get current user's funds
    $funds = get_user_meta( $user_id, 'account_funds', true );
    $funds = $funds ? $funds : 0;
    $funds += floatval( $amount );

    // add funds to user
    update_user_meta( $user_id, 'account_funds', $funds );

}

有人可以帮助我完成这项工作吗?由于上面的代码来自一个很棒的Stack Overflow帖子,但是该帖子大约有2年的历史,因此自那时以来,Woocommerce的各种设置可能已发生更改-这可能是目前它不起作用的可能原因。

1 个答案:

答案 0 :(得分:1)

您正在使用的钩子似乎不再存在。请尝试以下更简单的代码:

add_action('woocommerce_subscription_payment_complete', 'action_subscription_payment_complete_callback', 10, 1);
function action_subscription_payment_complete_callback( $subscription ) {
    // Get the instance WC_Order Object for the current subscription
    $order = wc_get_order( $subscription->get_parent_id() );

    $user_id = (int) $order->get_customer_id(); // Customer ID
    $total   = (float) $order->get_total(); // Order total amount

    // Get customer existing funds (zero value if no funds found)
    $user_funds = (float) get_user_meta( $user_id, 'account_funds', true );

    // Add the order total amount to customer existing funds
    update_user_meta( $user_id, 'account_funds', $funds + $total );
}

代码在您的活动子主题(或活动主题)的function.php文件上。应该可以。