概要
woocommerce_before_$THIS->OBJECT_TYPE_object_save
アクションフックは、WooCommerceの特定のオブジェクト(例えば、製品、注文、顧客など)が保存される前に実行されるカスタムフックです。このフックは、データの検証や変更、追加の処理を行うためによく使われます。以下は、このフックが使用される一般的な用途の例です:
- データのバリデーション
- 属性の追加や編集
- カスタムメタデータの保存
- 他のAPIとの連携
- ログの記録
- 自動メール通知のトリガー
構文
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'] ) );
}
}
このコードは、製品が保存される前にカスタムメタデータを保存する機能を持っています。
サンプルコード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.' );
}
}
このコードは、注文が保存される前に請求メールアドレスを検証します。
サンプルコード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' );
}
}
このコードは、製品の在庫数が負の場合にカスタムエラーメッセージを追加します。
サンプルコード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() );
}
このコードは、注文が保存される前にユーザーのアクティビティをエラーログに記録します。
サンプルコード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ドルを超える製品が保存される場合に通知メールを送信します。
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
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 |