概要
woocommerce_process_myaccount_field_$KEY
は、WooCommerceのユーザーアカウント情報に関連するカスタムフィールドを処理する際に使用されるアクションフックです。これにより、ユーザーが「マイアカウント」ページで入力したデータを検証し、保存することができます。このフックは、特定のフィールド($KEY)のデータが処理される際にトリガーされ、開発者は独自のロジックを追加することが可能です。このアクションは、以下のような機能を実装する際によく使用されます:
- ユーザープロファイルのカスタムフィールドの検証
- 電話番号や住所のフォーマットチェック
- 特殊なデータ型(例:整数、文字列など)の変換
- ユーザーによる入力値のデータベースへの保存
- カスタムメッセージの表示とエラーハンドリング
- ユーザー情報のアップデート時のフック処理
構文
do_action( 'woocommerce_process_myaccount_field_' . $key, $value );
パラメータ
$key
(string): 処理するフィールドのキー名。$value
(mixed): フィールドの値。
戻り値
特に戻り値はありませんが、アクション内部での処理によって、データベースへの保存やエラーメッセージの表示が行われます。
使用可能なプラグインとバージョン
- WooCommerce: 3.0以降
- WordPress: 4.0以降
サンプルコード
サンプルコード1: 電話番号の検証
add_action( 'woocommerce_process_myaccount_field_phone', 'validate_phone_field' );
function validate_phone_field( $value ) {
if ( ! preg_match( '/^[0-9]{10}$/', $value ) ) {
wc_add_notice( '電話番号は10桁の数字でなければなりません。', 'error' );
}
}
このサンプルコードは、「マイアカウント」ページの電話番号フィールドに入力された値を検証し、10桁の数字でない場合はエラーメッセージを表示します。
サンプルコード2: カスタムフィールドの保存
add_action( 'woocommerce_process_myaccount_field_custom_field', 'save_custom_field' );
function save_custom_field( $value ) {
update_user_meta( get_current_user_id(), 'custom_field', sanitize_text_field( $value ) );
}
このコードは、ユーザーアカウントのカスタムフィールドを保存します。フィールドの値はサニタイズされてからデータベースに保存されます。
サンプルコード3: 認証トークンの生成
add_action( 'woocommerce_process_myaccount_field_auth_token', 'generate_auth_token' );
function generate_auth_token( $value ) {
// 認証トークンを生成して保存する処理
$token = bin2hex(random_bytes(16));
update_user_meta( get_current_user_id(), 'auth_token', $token );
}
このサンプルコードは、ユーザーの認証トークンを生成し、ユーザーのメタデータとして保存します。
サンプルコード4: 日付の検証
add_action( 'woocommerce_process_myaccount_field_birthdate', 'validate_birthdate' );
function validate_birthdate( $value ) {
$date_format = 'Y-m-d';
$d = DateTime::createFromFormat($date_format, $value);
if ($d && $d->format($date_format) === $value) {
// 日付は正しい形式
} else {
wc_add_notice( '日付形式が無効です。YYYY-MM-DD形式で入力してください。', 'error' );
}
}
このサンプルコードは、「マイアカウント」ページでの生年月日フィールドが正しい日付形式であるかどうかを検証します。
サンプルコード5: カスタムエラーメッセージ
add_action( 'woocommerce_process_myaccount_field_last_name', 'check_last_name' );
function check_last_name( $value ) {
if ( strlen( $value ) < 2 ) {
wc_add_notice( '姓は2文字以上で入力してください。', 'error' );
}
}
このコードは、姓フィールドの長さを検証し、2文字未満であればエラーメッセージを表示します。
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
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 |
この表は、異なるアクションにおけるwoocommerce_process_myaccount_field_$KEY
の使用可能性を示しています。上記のアクションは、WooCommerceの処理に関与する他のフックの標準的な使用例を示しています。