<?php if (!defined('ABSPATH')) { exit; } if (!class_exists('acf_validation')) { class acf_validation { function __construct() { $this->errors = array(); add_action('wp_ajax_acf/validate_save_post', array($this, 'ajax_validate_save_post')); add_action('wp_ajax_nopriv_acf/validate_save_post', array($this, 'ajax_validate_save_post')); add_action('acf/validate_save_post', array($this, 'acf_validate_save_post'), 5); } function add_error($input, $message) { $this->errors[] = array('input' => $input, 'message' => $message); } function get_error($input) { if (empty($this->errors)) { return false; } foreach ($this->errors as $error) { if ($error['input'] === $input) { return $error; } } return false; } function get_errors() { if (empty($this->errors)) { return false; } return $this->errors; } function reset_errors() { $this->errors = array(); } function ajax_validate_save_post() { if (!acf_verify_ajax()) { die; } $json = array('valid' => 1, 'errors' => 0); if (acf_validate_save_post()) { wp_send_json_success($json); } $json['valid'] = 0; $json['errors'] = acf_get_validation_errors(); wp_send_json_success($json); } function acf_validate_save_post() { if (empty($_POST['acf'])) { return; } acf_validate_values($_POST['acf'], 'acf'); } } acf()->validation = new acf_validation(); } function acf_add_validation_error($input, $message = '') { return acf()->validation->add_error($input, $message); } function acf_get_validation_errors() { return acf()->validation->get_errors(); } function acf_get_validation_error() { return acf()->validation->get_error($input); } function acf_reset_validation_errors() { return acf()->validation->reset_errors(); } function acf_validate_save_post($show_errors = false) { do_action('acf/validate_save_post'); $errors = acf_get_validation_errors(); if (!$errors) { return true; } if ($show_errors) { $message = '<h2>' . __('Validation failed', 'acf') . '</h2>'; $message .= '<ul>'; foreach ($errors as $error) { $message .= '<li>' . $error['message'] . '</li>'; } $message .= '</ul>'; wp_die($message, __('Validation failed', 'acf')); } return false; } function acf_validate_values($values, $input_prefix = '') { if (empty($values)) { return; } foreach ($values as $key => $value) { $field = acf_get_field($key); $input = $input_prefix . '[' . $key . ']'; if (!$field) { continue; } acf_validate_value($value, $field, $input); } } function acf_validate_value($value, $field, $input) { $valid = true; $message = sprintf(__('%s value is required', 'acf'), $field['label']); if ($field['required']) { if (empty($value) && !is_numeric($value)) { $valid = false; } } $valid = apply_filters("acf/validate_value/type={$field['type']}", $valid, $value, $field, $input); $valid = apply_filters("acf/validate_value/name={$field['_name']}", $valid, $value, $field, $input); $valid = apply_filters("acf/validate_value/key={$field['key']}", $valid, $value, $field, $input); $valid = apply_filters('acf/validate_value', $valid, $value, $field, $input); if (!empty($valid) && is_string($valid)) { $message = $valid; $valid = false; } if (!$valid) { acf_add_validation_error($input, $message); return false; } return true; }