概要
woocommerce_order_payment_status_changed
アクションは、WooCommerceにおいて注文の支払い状態が変更された際にトリガーされます。このフックは、特定のビジネスロジックを実行するためや、外部システムとの連携を行うためによく使用されます。以下は、このアクションがよく使われる機能の例です。
- 支払いが成功した場合に特定のメール通知を送信する。
- 支払いが失敗した場合にリトライのための通知をユーザーに送信する。
- 管理者に対して、支払い状況に応じたダッシュボードの更新を行う。
- 外部APIと連携して注文状況を更新する。
- WooCommerceのカスタムレポートに支払い状況を反映させる。
- クーポンや割引を自動的に適用或いは解除する。
構文
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();
}
}
このサンプルコードは、支払いが完了した際に特定のクーポンを自動的に適用します。