プラグインAdvanced custom fields(ACF)のacf/validate_save_postアクションの使用方法・解説

概要

acf/validate_save_postアクションは、Advanced Custom Fields (ACF) プラグインの機能の一部として提供されるもので、$_POST データを検証するときに発生します。このアクションは、カスタムフィールドの値が保存される直前に実行され、フィールドの値が適切かどうかを確認するために使用されます。例えば、必須フィールドの検証や特定の条件に基づくカスタムバリデーションを行うことが可能です。

よく使われる機能には、以下のようなものがあります。

  1. 必須フィールドの検証
  2. 日付形式やメールアドレス形式の検証
  3. ユーザーによる権限に基づくデータの検証
  4. カスタムエラーメッセージの表示
  5. 特定の条件に基づくフィールドの非表示
  6. フォームの値を基に別のフィールドの値を動的に変更

このアクションは、ACFのバージョン5.x以降とWordPressのバージョン4.0以降で使用可能です。

構文

add_action('acf/validate_save_post', 'your_validation_function');

パラメータ

  • $post_id: 保存されようとしている投稿のID。投稿の種類に基づいて、異なるフィールドを検証するために使用できます。

戻り値

このアクション自体は戻り値を持ちませんが、カスタムバリデーション関数内でエラーを発生させることができます。例えば、acf_add_validation_error関数を使ってエラーメッセージを追加することが可能です。

この関数のアクションでの使用可能性

アクション名 使用例
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
acf/validate_save_post

サンプルコード

サンプル1:必須フィールドの検証

add_action('acf/validate_save_post', function($post_id) {
    if (empty($_POST['fields']['field_123456'])) {
        acf_add_validation_error('field_123456', 'このフィールドは必須です。');
    }
});

このサンプルコードは、投稿が保存される際に特定のカスタムフィールドが空である場合にエラーを追加します。フィールドのIDはfield_123456です。

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

add_action('acf/validate_save_post', function($post_id) {
    if (!filter_var($_POST['fields']['field_abcdef'], FILTER_VALIDATE_EMAIL)) {
        acf_add_validation_error('field_abcdef', '無効なメールアドレスです。');
    }
});

このサンプルは、特定のフィールド(field_abcdef)に入力されたメールアドレスが有効な形式であるかどうかを検証します。

サンプル3:特定の条件に基づくフィールドの検証

add_action('acf/validate_save_post', function($post_id) {
    if ($_POST['fields']['field_condition'] == 'yes' && empty($_POST['fields']['field_required'])) {
        acf_add_validation_error('field_required', 'このフィールドは条件により必須です。');
    }
});

このコードは、条件に基づいて別のカスタムフィールドの必須性を検証します。もしfield_conditionyesの場合、field_requiredが空であればエラーが追加されます。

サンプル4:カスタムメッセージの追加

add_action('acf/validate_save_post', function($post_id) {
    if (isset($_POST['fields']['field_custom']) && $_POST['fields']['field_custom'] === 'invalid') {
        acf_add_validation_error('field_custom', 'このフィールドは無効です。');
    }
});

このサンプルは、field_customの値がinvalidの場合にカスタムエラーメッセージを追加します。

サンプル5:複数フィールドの検証

add_action('acf/validate_save_post', function($post_id) {
    $field_one = $_POST['fields']['field_one'];
    $field_two = $_POST['fields']['field_two'];

    if ($field_one !== $field_two) {
        acf_add_validation_error('field_two', 'フィールド1とフィールド2は同じである必要があります。');
    }
});

このコードは、2つのフィールドの値が一致しない場合にエラーを追加します。field_onefield_twoが比較されます。

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


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