ACF_Ajax{}ACF 1.0

Хуков нет.

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

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

Методы

  1. public __construct()
  2. public add_actions()
  3. public get( $key = '' )
  4. public get_response( $request )
  5. public has( $key = '' )
  6. public initialize()
  7. public request()
  8. public send( $response )
  9. public send_error( $error )
  10. public set( $key = '', $value = null )
  11. public verify_request( $request )

Код ACF_Ajax{} ACF 6.0.4

class ACF_Ajax {

	/** @var string The AJAX action name. */
	var $action = '';

	/** @var array The $_REQUEST data. */
	var $request;

	/** @var bool Prevents access for non-logged in users. */
	var $public = false;

	/**
	 * __construct
	 *
	 * Sets up the class functionality.
	 *
	 * @date    31/7/18
	 * @since   5.7.2
	 *
	 * @param   void
	 * @return  void
	 */
	function __construct() {
		$this->initialize();
		$this->add_actions();
	}

	/**
	 * has
	 *
	 * Returns true if the request has data for the given key.
	 *
	 * @date    31/7/18
	 * @since   5.7.2
	 *
	 * @param   string $key The data key.
	 * @return  boolean
	 */
	function has( $key = '' ) {
		return isset( $this->request[ $key ] );
	}

	/**
	 * get
	 *
	 * Returns request data for the given key.
	 *
	 * @date    31/7/18
	 * @since   5.7.2
	 *
	 * @param   string $key The data key.
	 * @return  mixed
	 */
	function get( $key = '' ) {
		return isset( $this->request[ $key ] ) ? $this->request[ $key ] : null;
	}

	/**
	 * Sets request data for the given key.
	 *
	 * @date    31/7/18
	 * @since   5.7.2
	 *
	 * @param   string $key The data key.
	 * @param   mixed  $value The data value.
	 * @return  ACF_Ajax
	 */
	function set( $key = '', $value = null ) {
		$this->request[ $key ] = $value;
		return $this;
	}

	/**
	 * initialize
	 *
	 * Allows easy access to modifying properties without changing constructor.
	 *
	 * @date    31/7/18
	 * @since   5.7.2
	 *
	 * @param   void
	 * @return  void
	 */
	function initialize() {
		/* do nothing */
	}

	/**
	 * add_actions
	 *
	 * Adds the ajax actions for this response.
	 *
	 * @date    31/7/18
	 * @since   5.7.2
	 *
	 * @param   void
	 * @return  void
	 */
	function add_actions() {

		// add action for logged-in users
		add_action( "wp_ajax_{$this->action}", array( $this, 'request' ) );

		// add action for non logged-in users
		if ( $this->public ) {
			add_action( "wp_ajax_nopriv_{$this->action}", array( $this, 'request' ) );
		}
	}

	/**
	 * request
	 *
	 * Callback for ajax action. Sets up properties and calls the get_response() function.
	 *
	 * @date    1/8/18
	 * @since   5.7.2
	 *
	 * @param   void
	 * @return  void
	 */
	function request() {

		// Store data for has() and get() functions.
		$this->request = wp_unslash( $_REQUEST ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Verified below in verify_request().

		// Verify request and handle error.
		$error = $this->verify_request( $this->request );
		if ( is_wp_error( $error ) ) {
			$this->send( $error );
		}

		// Send response.
		$this->send( $this->get_response( $this->request ) );
	}

	/**
	 * Verifies the request.
	 *
	 * @date    9/3/20
	 * @since   5.8.8
	 *
	 * @param   array $request The request args.
	 * @return  (bool|WP_Error) True on success, WP_Error on fail.
	 */
	function verify_request( $request ) {

		// Verify nonce.
		if ( ! acf_verify_ajax() ) {
			return new WP_Error( 'acf_invalid_nonce', __( 'Invalid nonce.', 'acf' ), array( 'status' => 404 ) );
		}
		return true;
	}

	/**
	 * get_response
	 *
	 * Returns the response data to sent back.
	 *
	 * @date    31/7/18
	 * @since   5.7.2
	 *
	 * @param   array $request The request args.
	 * @return  mixed The response data or WP_Error.
	 */
	function get_response( $request ) {
		return true;
	}

	/**
	 * send
	 *
	 * Sends back JSON based on the $response as either success or failure.
	 *
	 * @date    31/7/18
	 * @since   5.7.2
	 *
	 * @param   mixed $response The response to send back.
	 * @return  void
	 */
	function send( $response ) {

		// Return error.
		if ( is_wp_error( $response ) ) {
			$this->send_error( $response );

			// Return success.
		} else {
			wp_send_json( $response );
		}
	}

	/**
	 * Sends a JSON response for the given WP_Error object.
	 *
	 * @date    8/3/20
	 * @since   5.8.8
	 *
	 * @param   WP_Error error The error object.
	 * @return  void
	 */
	function send_error( $error ) {

		// Get error status
		$error_data = $error->get_error_data();
		if ( is_array( $error_data ) && isset( $error_data['status'] ) ) {
			$status_code = $error_data['status'];
		} else {
			$status_code = 500;
		}

		wp_send_json(
			array(
				'code'    => $error->get_error_code(),
				'message' => $error->get_error_message(),
				'data'    => $error->get_error_data(),
			),
			$status_code
		);
	}
}