プラグインAdvanced custom fields(ACF)のacf/validate_valueフィルタの使用方法・解説

概要

フィルタの acf/validate_value は、Advanced Custom Fields (ACF) プラグインでフィールドの $value を保存する前に検証を実行するために使用されます。このフィルタを使用すると、特定の条件に基づいて値の検証や許可を制御できます。これにより、ユーザーが入力したデータが期待される形式や条件に適合しているかを確認することが可能です。例えば、数値の範囲チェック、必須フィールドの検証、形式のバリデーションなどの用途に利用されます。

放送される概要は以下の通りです:

  • 数値範囲のチェック
  • 必須フィールドの確認
  • メールアドレスの形式検証
  • カスタムバリデーションロジック
  • Uniqueな値の確認
  • 条件付きフィールドの表示/非表示の制御

構文

add_filter('acf/validate_value', 'your_validate_function', 10, 4);

パラメータ

  1. $valid – Boolean。初期値は true で、バリデーションが成功した場合は true を返す。
  2. $value – Mixed。フィールドから送信された値。
  3. $form – Array。フォームデータの配列。
  4. $field – Array。ACFフィールドの配列。

戻り値

  • Boolean:値が有効であれば true、無効であれば false を返す。

使用可能なバージョン

  • ACF バージョン:5.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_filter('acf/validate_value/name=your_field_name', 'check_required_field', 10, 4);
function check_required_field($valid, $value, $form, $field) {
    if ($value === '') {
        $valid = 'このフィールドは必須です。';
    }
    return $valid;
}

このサンプルコードは、ACFフィールドの一つが空である場合にエラーメッセージを表示します。

サンプル2:数値範囲のバリデーション

add_filter('acf/validate_value/name=age', 'validate_age', 10, 4);
function validate_age($valid, $value, $form, $field) {
    if ($value < 18 || $value > 99) {
        $valid = '年齢は18歳以上99歳以下でなければなりません。';
    }
    return $valid;
}

このコードは、年齢フィールドが18歳未満または99歳を超えるとエラーメッセージを返します。

サンプル3:メールアドレスの形式検証

add_filter('acf/validate_value/name=email', 'validate_email_format', 10, 4);
function validate_email_format($valid, $value, $form, $field) {
    if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
        $valid = '無効なメールアドレスです。';
    }
    return $valid;
}

このサンプルでは、ユーザーが入力したメールアドレスの形式が不正である場合にエラーメッセージを表示します。

サンプル4:ユニークな値の確認

add_filter('acf/validate_value/name=username', 'check_unique_username', 10, 4);
function check_unique_username($valid, $value, $form, $field) {
    $users = get_users(array('meta_key' => 'username', 'meta_value' => $value));
    if (!empty($users)) {
        $valid = 'このユーザー名は既に使用されています。';
    }
    return $valid;
}

このコードは、入力されたユーザー名が既存のユーザーと重複する場合にエラーメッセージを返します。

サンプル5:カスタムバリデーションロジック

add_filter('acf/validate_value/name=zipcode', 'validate_zipcode', 10, 4);
function validate_zipcode($valid, $value, $form, $field) {
    if (!preg_match('/^d{3}-d{4}$/', $value)) {
        $valid = '郵便番号はXXX-XXXXの形式で入力してください。';
    }
    return $valid;
}

このサンプルコードは、郵便番号が特定の形式(例:123-4567)でない場合にエラーメッセージを返すバリデーションを追加します。

以上のサンプルコードは、すべて著作権フリーのもので、ACFのacf/validate_valueフィルタの実用的な利用方法を示しています。

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


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