概要
acf/validate_save_post
アクションは、Advanced Custom Fields (ACF) プラグインの機能の一部として提供されるもので、$_POST データを検証するときに発生します。このアクションは、カスタムフィールドの値が保存される直前に実行され、フィールドの値が適切かどうかを確認するために使用されます。例えば、必須フィールドの検証や特定の条件に基づくカスタムバリデーションを行うことが可能です。
よく使われる機能には、以下のようなものがあります。
- 必須フィールドの検証
- 日付形式やメールアドレス形式の検証
- ユーザーによる権限に基づくデータの検証
- カスタムエラーメッセージの表示
- 特定の条件に基づくフィールドの非表示
- フォームの値を基に別のフィールドの値を動的に変更
このアクションは、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_condition
がyes
の場合、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_one
とfield_two
が比較されます。