プラグインWooCommerceのwoocommerce_before_$THIS->OBJECT_TYPE_object_saveアクションの使用方法・解説

概要

woocommerce_before_$THIS->OBJECT_TYPE_object_save アクションフックは、WooCommerceの特定のオブジェクト(例えば、製品、注文、顧客など)が保存される前に実行されるカスタムフックです。このフックは、データの検証や変更、追加の処理を行うためによく使われます。以下は、このフックが使用される一般的な用途の例です:

  1. データのバリデーション
  2. 属性の追加や編集
  3. カスタムメタデータの保存
  4. 他のAPIとの連携
  5. ログの記録
  6. 自動メール通知のトリガー

構文

do_action( 'woocommerce_before_$THIS->OBJECT_TYPE_object_save', $object );

パラメータ

  • $object: 保存されるオブジェクトのインスタンス。このパラメータはオプションで、具体的なオブジェクトのデータを持っています。

戻り値

このアクションは、何も返さない(void)ため、実行後の値は得られません。

対応するWooCommerceのバージョン

すべてのWooCommerceバージョンで利用可能です(具体的なバージョンはドキュメントを参照)。

対応するWordPressのバージョン

すべてのWordPressバージョンで利用可能ですが、WooCommerceの新機能により、WordPressの最新バージョンでの使用が推奨されます。

サンプルコード

サンプルコード1: 製品のカスタムメタデータを保存

製品が保存される前に、カスタムメタデータを追加します。

add_action( 'woocommerce_before_product_object_save', 'save_custom_meta_for_product' );

function save_custom_meta_for_product( $product_object ) {
    if ( isset( $_POST['custom_meta_key'] ) ) {
        $product_object->update_meta_data( 'custom_meta_key', sanitize_text_field( $_POST['custom_meta_key'] ) );
    }
}

このコードは、製品が保存される前にカスタムメタデータを保存する機能を持っています。

引用元URL

サンプルコード2: 注文データの検証

注文が保存される前に、特定のフィールドが正しいかどうかを検証します。

add_action( 'woocommerce_before_order_object_save', 'validate_order_data' );

function validate_order_data( $order_object ) {
    if ( empty( $_POST['billing_email'] ) ) {
        throw new Exception( 'Billing email cannot be empty.' );
    }
}

このコードは、注文が保存される前に請求メールアドレスを検証します。

引用元URL

サンプルコード3: カスタムエラーメッセージの追加

製品保存時に、エラーが発生した場合にカスタムメッセージを設定します。

add_action( 'woocommerce_before_product_object_save', 'add_custom_error_message' );

function add_custom_error_message( $product_object ) {
    if ( $product_object->get_stock_quantity() < 0 ) {
        wc_add_notice( 'Stock quantity cannot be negative.', 'error' );
    }
}

このコードは、製品の在庫数が負の場合にカスタムエラーメッセージを追加します。

引用元URL

サンプルコード4: ユーザーのアクティビティをログに記録

注文が保存される前に、ユーザーのアクティビティをログに記録します。

add_action( 'woocommerce_before_order_object_save', 'log_user_activity' );

function log_user_activity( $order_object ) {
    error_log( 'Order ' . $order_object->get_id() . ' is being saved by user ' . get_current_user_id() );
}

このコードは、注文が保存される前にユーザーのアクティビティをエラーログに記録します。

引用元URL

サンプルコード5: 自動的なメール通知を送信

製品が保存される前に、特定の条件に基づいてメール通知を送信します。

add_action( 'woocommerce_before_product_object_save', 'send_notification_email' );

function send_notification_email( $product_object ) {
    if ( $product_object->get_price() > 100 ) {
        wp_mail( 'admin@example.com', 'Expensive Product Alert', 'A product over $100 is being saved.' );
    }
}

このコードは、価格が100ドルを超える製品が保存される場合に通知メールを送信します。

引用元URL

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

アクション 使用可能性
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

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


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