Ворота между подписками Woocommerce и плагинами аккаунта - PullRequest
2 голосов
/ 21 марта 2019

Я приобрел 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 );

}

Может кто-нибудь помочь мне заставить это работать? Поскольку приведенный выше код взят из отличного поста о переполнении стека, но этому посту около 2 лет, поэтому различные настройки Woocommerce могут измениться с тех пор - возможно, по этой причине он не работает в настоящее время.

1 Ответ

1 голос
/ 21 марта 2019

Используемый вами хук больше не существует.Вместо этого попробуйте следующий более простой код:

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 вашей активной дочерней темы (или активной темы).Должно работать.

...