acf_validation{}ACF 1.0AllowDynamicProperties

Хуков нет.

Использование

$acf_validation = new acf_validation();
// use class methods

Методы

  1. public __construct()
  2. public add_error( $input, $message )
  3. public get_error( $input )
  4. public get_errors()
  5. public reset_errors()
  6. public ajax_validate_save_post()
  7. public acf_validate_save_post()

Код acf_validation{} ACF 6.4.2

class acf_validation {


	/**
	 * This function will setup the class functionality
	 *
	 * @type    function
	 * @date    5/03/2014
	 * @since   5.0.0
	 *
	 * @param   n/a
	 * @return  n/a
	 */
	function __construct() {

		// vars
		$this->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 );
	}


	/**
	 * 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,
		);
	}


	/**
	 * 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;
	}


	/**
	 * 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;
	}


	/**
	 * 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();
	}

	/**
	 * Validates $_POST data via AJAX prior to save.
	 *
	 * @since   5.0.9
	 *
	 * @return void
	 */
	public function ajax_validate_save_post() {
		if ( ! acf_verify_ajax() ) {
			if ( empty( $_REQUEST['nonce'] ) ) {
				$nonce_error = __( 'ACF was unable to perform validation because no nonce was received by the server.', 'acf' );
			} else {
				$nonce_error = __( 'ACF was unable to perform validation because the provided nonce failed verification.', 'acf' );
			}

			wp_send_json_success(
				array(
					'valid'  => 0,
					'errors' => array(
						array(
							'input'   => false,
							'message' => $nonce_error,
							'action'  => array(
								'label' => __( 'Learn more', 'acf' ),
								'url'   => acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/validation-nonce-errors/', 'docs', 'validation-nonce' ),
							),
						),
					),
				)
			);
		}

		$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 );
	}

	/**
	 * Loops over $_POST data and validates ACF values.
	 *
	 * @since   5.4.0
	 */
	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', 'ui_options_page' ), true ) && in_array( $post_type, array( 'acf-post-type', 'acf-taxonomy', 'acf-ui-options-page' ), true ) ) {
			acf_validate_internal_post_type_values( $post_type );
		} elseif ( acf_request_arg( 'acf_ui_options_page' ) ) {
			acf_validate_internal_post_type_values( 'acf-ui-options-page' );
		} 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
	}
}