概要
woocommerce_process_checkout_field_$KEY
フィルタは、WooCommerceのチェックアウトページで特定のフィールドに対してカスタム処理を実行するために使用されます。このフィルタは、カスタムフィールドの値を検証したり、変更したりする際に非常に便利です。具体的には、以下のような機能を実装する際によく使われます。
- チェックアウトフォームのカスタマイズ
- ユーザー入力のバリデーション
- 特定の条件に基づくフィールドの値の変更
- フィールドの表示・非表示の制御
- カスタムフィールドのデフォルト値の設定
- データベースへのカスタムデータの保存
このフィルタは、WooCommerceのバージョン、バージョン4.0以上、およびWordPressのバージョン5.0以上で使用可能です。
構文
フィルタの構文は以下の通りです。
add_filter( 'woocommerce_process_checkout_field_$KEY', 'your_function_name', 10, 2 );
パラメータ
$KEY
: チェックアウトフィールドのキー(例:billing_first_nameなど)$value
: フィールドの入力値$data
: その他の関連データ
戻り値
フィルタの戻り値は、修正されたフィールドの値です。
サンプルコード
サンプル1: チェックアウトフィールドの値を変更する
このサンプルコードは、チェックアウト時に「お支払方法」をカスタマイズするものです。選択されたお支払方法に基づいてメッセージを追加します。
add_filter( 'woocommerce_process_checkout_field_payment_method', 'custom_payment_method_message', 10, 2 );
function custom_payment_method_message( $value, $data ) {
if ( $value === 'bacs' ) {
$value .= ' - 注意: 銀行振込を選択しています。';
}
return $value;
}
サンプル2: チェックアウトフィールドの必須チェック
このサンプルコードでは、特定のフィールドが空でないことをチェックし、空の場合にはエラーメッセージを返します。
add_filter( 'woocommerce_process_checkout_field_billing_phone', 'validate_billing_phone', 10, 2 );
function validate_billing_phone( $value, $data ) {
if ( empty( $value ) ) {
wc_add_notice( '電話番号は必須です。', 'error' );
}
return $value;
}
サンプル3: フィールドのデフォルト値を設定する
このサンプルコードは、特定のフィールドにデフォルト値を設定します。
add_filter( 'woocommerce_process_checkout_field_billing_address_1', 'set_default_billing_address', 10, 2 );
function set_default_billing_address( $value, $data ) {
return '東京都千代田区'; // デフォルト値を設定する
}
サンプル4: 特定の条件に基づくフィールドの非表示
このサンプルコードでは、特定の条件に基づいてチェックアウトフィールドを非表示にします。
add_filter( 'woocommerce_process_checkout_field_billing_last_name', 'conditional_hide_last_name_field', 10, 2 );
function conditional_hide_last_name_field( $value, $data ) {
if ( is_user_logged_in() ) {
return ''; // ログインユーザーの場合、フィールドを空にする
}
return $value;
}
サンプル5: カスタムデータの保存
このサンプルコードは、カスタムデータを注文メタデータに保存するためのものです。
add_filter( 'woocommerce_process_checkout_field_order_comments', 'save_custom_order_comment', 10, 2 );
function save_custom_order_comment( $value, $data ) {
if ( ! empty( $value ) ) {
update_post_meta( $data['order_id'], '_custom_order_comment', sanitize_text_field( $value ) );
}
return $value;
}
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
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 のチェックアウト処理に関連したカスタマイズに使用されるため、他のアクションフックと組み合わせて使うことができます。