153 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
| 	exit; // Exit if accessed directly
 | |
| }
 | |
| 
 | |
| if ( ! class_exists( 'ACF_Ajax_Query' ) ) :
 | |
| 
 | |
| 	class ACF_Ajax_Query extends ACF_Ajax {
 | |
| 
 | |
| 		/** @var bool Prevents access for non-logged in users. */
 | |
| 		var $public = true;
 | |
| 
 | |
| 		/** @var int The page of results to return. */
 | |
| 		var $page = 1;
 | |
| 
 | |
| 		/** @var int The number of results per page. */
 | |
| 		var $per_page = 20;
 | |
| 
 | |
| 		/** @var bool Signifies whether or not this AJAX query has more pages to load. */
 | |
| 		var $more = false;
 | |
| 
 | |
| 		/** @var string The searched term. */
 | |
| 		var $search = '';
 | |
| 
 | |
| 		/** @var bool Signifies whether the current query is a search. */
 | |
| 		var $is_search = false;
 | |
| 
 | |
| 		/** @var (int|string) The post_id being edited. */
 | |
| 		var $post_id = 0;
 | |
| 
 | |
| 		/** @var array The ACF field related to this query. */
 | |
| 		var $field = false;
 | |
| 
 | |
| 		/**
 | |
| 		 * get_response
 | |
| 		 *
 | |
| 		 * Returns the response data to sent back.
 | |
| 		 *
 | |
| 		 * @date    31/7/18
 | |
| 		 * @since   5.7.2
 | |
| 		 *
 | |
| 		 * @param   array $request The request args.
 | |
| 		 * @return  (array|WP_Error) The response data or WP_Error.
 | |
| 		 */
 | |
| 		function get_response( $request ) {
 | |
| 
 | |
| 			// Init request.
 | |
| 			$this->init_request( $request );
 | |
| 
 | |
| 			// Get query args.
 | |
| 			$args = $this->get_args( $request );
 | |
| 
 | |
| 			// Get query results.
 | |
| 			$results = $this->get_results( $args );
 | |
| 			if ( is_wp_error( $results ) ) {
 | |
| 				return $results;
 | |
| 			}
 | |
| 
 | |
| 			// Return response.
 | |
| 			return array(
 | |
| 				'results' => $results,
 | |
| 				'more'    => $this->more,
 | |
| 			);
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * init_request
 | |
| 		 *
 | |
| 		 * Called at the beginning of a request to setup properties.
 | |
| 		 *
 | |
| 		 * @date    23/5/19
 | |
| 		 * @since   5.8.1
 | |
| 		 *
 | |
| 		 * @param   array $request The request args.
 | |
| 		 * @return  void
 | |
| 		 */
 | |
| 		function init_request( $request ) {
 | |
| 
 | |
| 			// Get field for this query.
 | |
| 			if ( isset( $request['field_key'] ) ) {
 | |
| 				$this->field = acf_get_field( $request['field_key'] );
 | |
| 			}
 | |
| 
 | |
| 			// Update query properties.
 | |
| 			if ( isset( $request['page'] ) ) {
 | |
| 				$this->page = intval( $request['page'] );
 | |
| 			}
 | |
| 			if ( isset( $request['per_page'] ) ) {
 | |
| 				$this->per_page = intval( $request['per_page'] );
 | |
| 			}
 | |
| 			if ( isset( $request['search'] ) && acf_not_empty( $request['search'] ) ) {
 | |
| 				$this->search    = sanitize_text_field( $request['search'] );
 | |
| 				$this->is_search = true;
 | |
| 			}
 | |
| 			if ( isset( $request['post_id'] ) ) {
 | |
| 				$this->post_id = $request['post_id'];
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get_args
 | |
| 		 *
 | |
| 		 * Returns an array of args for this query.
 | |
| 		 *
 | |
| 		 * @date    31/7/18
 | |
| 		 * @since   5.7.2
 | |
| 		 *
 | |
| 		 * @param   array $request The request args.
 | |
| 		 * @return  array
 | |
| 		 */
 | |
| 		function get_args( $request ) {
 | |
| 
 | |
| 			// Allow for custom "query" arg.
 | |
| 			if ( isset( $request['query'] ) ) {
 | |
| 				return (array) $request['query'];
 | |
| 			}
 | |
| 			return array();
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get_items
 | |
| 		 *
 | |
| 		 * Returns an array of results for the given args.
 | |
| 		 *
 | |
| 		 * @date    31/7/18
 | |
| 		 * @since   5.7.2
 | |
| 		 *
 | |
| 		 * @param   array args The query args.
 | |
| 		 * @return  array
 | |
| 		 */
 | |
| 		function get_results( $args ) {
 | |
| 			return array();
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * get_item
 | |
| 		 *
 | |
| 		 * Returns a single result for the given item object.
 | |
| 		 *
 | |
| 		 * @date    31/7/18
 | |
| 		 * @since   5.7.2
 | |
| 		 *
 | |
| 		 * @param   mixed $item A single item from the queried results.
 | |
| 		 * @return  array An array containing "id" and "text".
 | |
| 		 */
 | |
| 		function get_result( $item ) {
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| endif; // class_exists check
 |