acf_validation{} │ ACF 1.0 │ AllowDynamicProperties
Хуков нет.
Использование
$acf_validation = new acf_validation(); // use class methods
Методы
- public __construct()
- public add_error( $input, $message )
- public get_error( $input )
- public get_errors()
- public reset_errors()
- public ajax_validate_save_post()
- public acf_validate_save_post()
Код acf_validation{} 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
}
}