Как отправить уведомление, только если заказ был выполнен в дополнении WooCommerce Gravity Forms Product - PullRequest
2 голосов
/ 25 апреля 2019

Я использую плагин WooCommerce Gravity Forms Product Addon.

Я хочу отправлять уведомления только в том случае, если заказ продукта в Woocommerce был оплачен и статус заказа завершен. По умолчанию уведомления отправляются, если в Gravity Forms появляются новые записи (события form_submission).

Проблема в том, что мне не удалось создать триггер, чтобы уведомление отправлялось, когда статус платежа "завершен". Я не знаю, какое действие я использую, и его можно интегрировать с записями в Gravity Forms, чтобы уведомления отправлялись в соответствии с данными.

Я сделал уведомление в Gravity Form с пользовательскими событиями, я назвал его «выполненным».

Это код для добавления этих пользовательских событий.

add_filter( 'gform_notification_events', 'add_event_completed' );
function add_event_completed( $notification_events ) {
    $notification_events['completed'] = __( 'Payment Completed', 'gravityforms' );
    return $notification_events;
}

Я использовал ссылку из https://docs.gravityforms.com/send-notifications-on-payment-events/, чтобы попытаться установить действие, чтобы отправлять уведомления при оплате заказа в Woocommerce. Но уведомления не отправляются.

add_action( 'gform_post_payment_action', function ( $entry, $action ) {
    $form = GFAPI::get_form( $entry['form_id'] );
    GFAPI::send_notifications( $form, $entry, rgar( $action, 'type' ) );
}, 10, 2 );

Я подтвердил, что если уведомления настроены с использованием событий form_submission, уведомление может быть отправлено.

Я хочу отправлять уведомления только в том случае, если заказ продукта в Woocommerce был оплачен и статус заказа завершен.

UPDATE

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

Я добавил следующий код в файл gravityforms-product-addons-entry.php в строке 218. В этом разделе плагин будет обновлять записи в Gravity Forms, когда будет произведена оплата в Woocommerce. Поэтому я даю фильтр, если статус платежа «завершен», он отправит уведомление.

// Kirim Notifikasi Sudah Lunas
// gravityforms-product-addons-entry.php
// Line 218

if ($the_order->get_status() == "completed"){
  $form  = GFAPI::get_form( $form_data['id'] );
  $entry = GFAPI::get_entry( $entry_id );

  GFAPI::send_notifications( $form, $entry, 'completed' );
}

Конечно, этот метод невозможно применить в будущем, пожалуйста, просветите меня, чтобы я сделал фрагмент, который я могу поместить в файл function.php.

Спасибо.

...