プラグインWooCommerceのwoocommerce_order_payment_status_changedアクションの使用方法・解説

概要

woocommerce_order_payment_status_changed アクションは、WooCommerceにおいて注文の支払い状態が変更された際にトリガーされます。このフックは、特定のビジネスロジックを実行するためや、外部システムとの連携を行うためによく使用されます。以下は、このアクションがよく使われる機能の例です。

  1. 支払いが成功した場合に特定のメール通知を送信する。
  2. 支払いが失敗した場合にリトライのための通知をユーザーに送信する。
  3. 管理者に対して、支払い状況に応じたダッシュボードの更新を行う。
  4. 外部APIと連携して注文状況を更新する。
  5. WooCommerceのカスタムレポートに支払い状況を反映させる。
  6. クーポンや割引を自動的に適用或いは解除する。

構文

do_action( 'woocommerce_order_payment_status_changed', $order_id, $old_status, $new_status );

パラメータ

  • $order_id (int): 注文のID。
  • $old_status (string): 変更前の支払い状態。
  • $new_status (string): 変更後の支払い状態。

戻り値

このアクションは、何も返さない(void)です。

バージョン

  • WooCommerce: 3.0.0以降
  • WordPress: 4.0以降

この関数のアクションでの使用可能性

アクション 使用例
mu_plugin_loaded
registered_post_type
plugins_loaded
wp_roles_init
setup_theme
after_setup_theme
set_current_user
init
register_sidebar
wp_loaded
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head

サンプルコード

以下にこのアクションを利用したサンプルコードを5点紹介します。

サンプル 1: 支払い成功時にメールを送信する

注文の支払いが成功した際に、ユーザーに確認メールを送信するサンプルです。

add_action('woocommerce_order_payment_status_changed', 'send_payment_success_email', 10, 3);

function send_payment_success_email($order_id, $old_status, $new_status) {
    if ($new_status === 'completed') {
        $order = wc_get_order($order_id);
        $to = $order->get_billing_email();
        $subject = 'ご注文が完了しました';
        $message = 'ご注文ありがとうございました。';
        wp_mail($to, $subject, $message);
    }
}

このサンプルコードは、支払いが完了したときに顧客にメールを送信します。

サンプル 2: 支払い失敗時にリトライ通知を送信

支払いが失敗した場合に、ユーザーにリトライの通知を送信するサンプルです。

add_action('woocommerce_order_payment_status_changed', 'notify_payment_failure', 10, 3);

function notify_payment_failure($order_id, $old_status, $new_status) {
    if ($new_status === 'failed') {
        $order = wc_get_order($order_id);
        $to = $order->get_billing_email();
        $subject = '支払いが失敗しました';
        $message = '支払いに失敗しました。再度お試しください。';
        wp_mail($to, $subject, $message);
    }
}

このサンプルは支払いが失敗した際に顧客に通知を行います。

サンプル 3: 管理者への通知

支払い状況に応じて管理者に通知を行うサンプルです。

add_action('woocommerce_order_payment_status_changed', 'admin_notification_on_payment_status_change', 10, 3);

function admin_notification_on_payment_status_change($order_id, $old_status, $new_status) {
    if ($new_status === 'processing') {
        $to = get_option('admin_email');
        $subject = '新しい注文が処理中です';
        $message = '注文 ID ' . $order_id . ' が処理中になりました。';
        wp_mail($to, $subject, $message);
    }
}

このサンプルコードは、注文が処理中に変更された場合に管理者へ通知を送信します。

サンプル 4: 外部APIとの連携

支払い状態が変わった際に外部APIにリクエストを送信するサンプルです。

add_action('woocommerce_order_payment_status_changed', 'update_external_api_on_payment_status_change', 10, 3);

function update_external_api_on_payment_status_change($order_id, $old_status, $new_status) {
    $order = wc_get_order($order_id);
    $data = [
        'order_id' => $order_id,
        'status' => $new_status,
    ];

    wp_remote_post('https://example.com/api/update', [
        'method' => 'POST',
        'body' => json_encode($data),
        'headers' => [
            'Content-Type' => 'application/json',
        ],
    ]);
}

このサンプルは、支払い状況が変わった時に外部サービスに情報を送信します。

サンプル 5: 自動クーポン適用

支払い状態に応じて自動的にクーポンを適用するサンプルです。

add_action('woocommerce_order_payment_status_changed', 'apply_coupon_on_payment_success', 10, 3);

function apply_coupon_on_payment_success($order_id, $old_status, $new_status) {
    if ($new_status === 'completed') {
        $order = wc_get_order($order_id);
        $order->apply_coupon('newcustomer_discount');
        $order->calculate_totals();
    }
}

このサンプルコードは、支払いが完了した際に特定のクーポンを自動的に適用します。

この関数について質問する


上の計算式の答えを入力してください