errors = array(); // ajax 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 ); } /* * add_error * * This function will add an error message for a field * * @type function * @date 25/11/2013 * @since 5.0.0 * * @param $input (string) name attribute of DOM elmenet * @param $message (string) error message * @return $post_id (int) */ function add_error( $input, $message ) { // add to array $this->errors[] = array( 'input' => $input, 'message' => $message, ); } /* * get_error * * This function will return an error for a given input * * @type function * @date 5/03/2016 * @since 5.3.2 * * @param $input (string) name attribute of DOM elmenet * @return (mixed) */ function get_error( $input ) { // bail early if no errors if ( empty( $this->errors ) ) { return false; } // loop foreach ( $this->errors as $error ) { if ( $error['input'] === $input ) { return $error; } } // return return false; } /* * get_errors * * This function will return validation errors * * @type function * @date 25/11/2013 * @since 5.0.0 * * @param n/a * @return (array|boolean) */ function get_errors() { // bail early if no errors if ( empty( $this->errors ) ) { return false; } // return return $this->errors; } /* * reset_errors * * This function will remove all errors * * @type function * @date 4/03/2016 * @since 5.3.2 * * @param n/a * @return n/a */ function reset_errors() { $this->errors = array(); } /* * ajax_validate_save_post * * This function will validate the $_POST data via AJAX * * @type function * @date 27/10/2014 * @since 5.0.9 * * @param n/a * @return n/a */ function ajax_validate_save_post() { // validate if ( ! acf_verify_ajax() ) { die(); } // vars $json = array( 'valid' => 1, 'errors' => 0, ); // success if ( acf_validate_save_post() ) { wp_send_json_success( $json ); } // update vars $json['valid'] = 0; $json['errors'] = acf_get_validation_errors(); // return wp_send_json_success( $json ); } /** * Loops over $_POST data and validates ACF values. * * @since 5.4.0 * * @return void */ public function acf_validate_save_post() { // phpcs:disable WordPress.Security.NonceVerification.Missing -- Verified elsewhere. $post_type = acf_request_arg( 'post_type', false ); $screen = acf_request_arg( '_acf_screen', false ); if ( in_array( $screen, array( 'post_type', 'taxonomy' ), true ) && in_array( $post_type, array( 'acf-post-type', 'acf-taxonomy' ), true ) ) { acf_validate_internal_post_type_values( $post_type ); } else { // Bail early if no matching $_POST. if ( empty( $_POST['acf'] ) ) { return; } acf_validate_values( $_POST['acf'], 'acf' ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized } // phpcs:enable WordPress.Security.NonceVerification.Missing } } // initialize acf()->validation = new acf_validation(); endif; // class_exists check /* * Public functions * * alias of acf()->validation->function() * * @type function * @date 6/10/13 * @since 5.0.0 * * @param n/a * @return n/a */ 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(); } /* * acf_validate_save_post * * This function will validate $_POST data and add errors * * @type function * @date 25/11/2013 * @since 5.0.0 * * @param $show_errors (boolean) if true, errors will be shown via a wp_die screen * @return (boolean) */ function acf_validate_save_post( $show_errors = false ) { // action do_action( 'acf/validate_save_post' ); // vars $errors = acf_get_validation_errors(); // bail early if no errors if ( ! $errors ) { return true; } // show errors if ( $show_errors ) { $message = '