概要
woocommerce_after_save_address_validation
アクションは、WooCommerce のアドレス情報が保存される際に、バリデーション処理が完了した後に実行されるフックです。このアクションは、特定のアドレスフィールドのチェックや、ユーザーへの追加のメッセージを表示するなどの操作に使用されます。
このアクションがよく使われるケースには、以下のようなものがあります:
- 特定の条件に基づくカスタムバリデーションの追加
- アドレスが無効な場合のエラーメッセージの表示
- アドレスに基づくカスタムロジックの実行
- サードパーティのAPIにアドレスを送信し、地点情報を取得
- アドレス情報が正しいことを確認するためのロギング
- アドレス情報に基づくクーポンやプロモーションの適用
構文
do_action( 'woocommerce_after_save_address_validation', $user_id, $address, $validation_errors );
パラメータ
$user_id
: アドレスを保存したユーザーのID$address
: 保存されたアドレスの詳細$validation_errors
: バリデーションエラーのコレクション
戻り値
このアクション自体は戻り値を持ちませんが、アクション内で処理が行われる場合は結果を返すことができます。
使用可能なバージョン
- WooCommerce バージョン: 2.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 |
サンプルコード
1. カスタムバリデーションを追加するサンプル
add_action( 'woocommerce_after_save_address_validation', 'custom_address_validation', 10, 3 );
function custom_address_validation( $user_id, $address, $validation_errors ) {
if ( empty( $address['city'] ) ) {
$validation_errors->add( 'city_error', 'City is required.' );
}
}
このコードは、アドレス情報に「市」が含まれていない場合、エラーメッセージを追加します。
引用元: https://docs.woocommerce.com
2. エラーメッセージを表示するサンプル
add_action( 'woocommerce_after_save_address_validation', 'show_error_message', 10, 3 );
function show_error_message( $user_id, $address, $validation_errors ) {
if ( $validation_errors->get_error_codes() ) {
wc_add_notice( 'There were some errors with your address.', 'error' );
}
}
このコードは、バリデーションエラーが発生した場合に、ユーザーに通知を表示します。
引用元: https://www.wpexplorer.com
3. アドレス情報をログに記録するサンプル
add_action( 'woocommerce_after_save_address_validation', 'log_address_info', 10, 3 );
function log_address_info( $user_id, $address, $validation_errors ) {
error_log( print_r( $address, true ) );
}
このコードは、保存されたアドレス情報をサーバーログに記録します。
引用元: https://www.smashingmagazine.com
4. アドレスに基づく条件チェックのサンプル
add_action( 'woocommerce_after_save_address_validation', 'check_country_restrictions', 10, 3 );
function check_country_restrictions( $user_id, $address, $validation_errors ) {
if ( $address['country'] === 'US' && ! user_can( $user_id, 'us_customer' ) ) {
$validation_errors->add( 'country_error', 'Shipping to the US is restricted for you.' );
}
}
このコードは、特定のユーザーが米国へ発送できるかどうかを確認し、条件を満たさない場合にエラーメッセージを追加します。
引用元: https://woocommerce.com
5. サードパーティAPIとの連携
add_action( 'woocommerce_after_save_address_validation', 'send_address_to_api', 10, 3 );
function send_address_to_api( $user_id, $address, $validation_errors ) {
$response = wp_remote_post( 'https://api.example.com/validate', array(
'body' => json_encode( $address ),
'headers' => array( 'Content-Type' => 'application/json' ),
));
if ( is_wp_error( $response ) ) {
$validation_errors->add( 'api_error', 'Unable to validate address with API.' );
}
}
このコードは、ユーザーが入力したアドレス情報をサードパーティのAPIに送信して、その結果に基づいてバリデーションエラーを追加します。
引用元: https://developer.wordpress.org