* @copyright Copyright (C) 2019 wpopal.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * @website http://www.wpopal.com * @support http://www.wpopal.com/support/forum.html */ // Exit if accessed directly if ( !defined( 'ABSPATH' ) ) exit; class Opalestate_Agency_Query extends OpalEstate_Abstract_Query { public $count = 0; /** * Default query arguments. * * Not all of these are valid arguments that can be passed to WP_Query. The ones that are not, are modified before * the query is run to convert them to the proper syntax. * * @since 2.5.0 * @access public * * @param $args array The array of arguments that can be passed in and used for setting up this form query. */ public function __construct( $args = array() ) { $defaults = array( 'output' => 'collection', 'post_type' => array( 'opalestate_agency' ), 'number' => 20, 'offset' => 0, 'paged' => 1, 'orderby' => 'id', 'order' => 'DESC' ); $args['update_post_meta_cache'] = false; $this->args = $this->_args = wp_parse_args( $args, $defaults ); } /** * Render Sidebar * * Display Sidebar on left side and next is main content * * @since 1.0 * * @return string */ public function get_query_object() { /* @var WP_Query $query */ $query = new WP_Query( $this->args ); return $query; } /** * Render Sidebar * * Display Sidebar on left side and next is main content * * @since 1.0 * * @return string */ public function get_list () { $output = array( 'founds' => 0 , 'collection' => [] ); $query = $this->get_query_object(); if ( $query ) { $i = 0; $collection = array(); if( $query->have_posts() ) { while( $query->have_posts() ){ $query->the_post(); global $post; $collection[] = new OpalEstate_Agency( $post->ID ); } } wp_reset_postdata(); $output['collection'] = $collection; $output['found'] = $query->found_posts; } return $output; } /** * Render Sidebar * * Display Sidebar on left side and next is main content * * @since 1.0 * * @return string */ public function get_api_list () { $output = array( 'founds' => 0 , 'collection' => [] ); $query = $this->get_query_object(); if ( $query ) { $i = 0; $collection = array(); if( $query->have_posts() ) { while( $query->have_posts() ){ $query->the_post(); global $post; $collection[] = $this->get_agency_data( $post ); } } wp_reset_postdata(); $output['collection'] = $collection; $output['found'] = $query->found_posts; } return $output; } /** * Opalestaten a opalestate_property post object, generate the data for the API output * * @since 1.1 * * @param object $property_info The Download Post Object * * @return array Array of post data to return back in the API */ public function get_agency_data( $agency_info ){ $agency = new OpalEstate_Agency( $agency_info->ID ); $ouput = array(); $ouput['info']['id'] = $agency_info->ID; $ouput['info']['slug'] = $agency_info->post_name; $ouput['info']['title'] = $agency_info->post_title; $ouput['info']['status'] = $agency_info->post_status; $ouput['info']['link'] = html_entity_decode( $agency_info->guid ); $ouput['info']['content'] = $agency_info->post_content; $ouput['info']['thumbnail'] = wp_get_attachment_url( get_post_thumbnail_id( $agency_info->ID ) ); $agency = new OpalEstate_Agency( $agency_info->ID ); $ouput['info']['featured'] = (int)$agency->is_featured(); $ouput['info']['trusted'] = $agency->get_meta( 'trusted' ); $ouput['info']['avatar'] = $agency->get_meta( 'avatar' ); $ouput['info']['web'] = $agency->get_meta( 'web' ); $ouput['info']['phone'] = $agency->get_meta( 'phone' ); $ouput['info']['mobile'] = $agency->get_meta( 'mobile' ); $ouput['info']['fax'] = $agency->get_meta( 'fax' ); $ouput['info']['email'] = $agency->get_meta( 'email' ); $ouput['info']['address'] = $agency->get_meta( 'address' ); $ouput['info']['map'] = $agency->get_meta( 'map' ); $terms = wp_get_post_terms( $agency_info->ID, 'opalestate_agency_location' ); $ouput['info']['location'] = $terms && !is_wp_error($terms) ? $terms : array(); $ouput['socials'] = $agency->get_socials(); $ouput['category'] = $agency->get_category_tax(); return apply_filters( 'opalestate_api_agency', $ouput ); } /** * Get search query base on user request to filter collection of Agents */ public static function get_search_agencies_query( $args = [] ) { $s = isset( $_GET['search_text'] ) ? sanitize_text_field( $_GET['search_text'] ) : null; $paged = ( get_query_var( 'paged' ) == 0 ) ? 1 : get_query_var( 'paged' ); $default = [ 'post_type' => 'opalestate_agency', 'posts_per_page' => apply_filters( 'opalestate_agency_per_page', 12 ), 'paged' => $paged, ]; $args = array_merge( $default, $args ); $tax_query = []; if ( isset( $_GET['location'] ) && $_GET['location'] != -1 ) { $tax_query[] = [ 'taxonomy' => 'opalestate_location', 'field' => 'slug', 'terms' => sanitize_text_field( $_GET['location'] ), ]; } if ( isset( $_GET['types'] ) && $_GET['types'] != -1 ) { $tax_query[] = [ 'taxonomy' => 'opalestate_types', 'field' => 'slug', 'terms' => sanitize_text_field( $_GET['types'] ), ]; } if ( $tax_query ) { $args['tax_query'] = [ 'relation' => 'AND' ]; $args['tax_query'] = array_merge( $args['tax_query'], $tax_query ); } $args['meta_query'] = [ 'relation' => 'AND' ]; return new WP_Query( $args ); } /** * Get Query Object to display list of agents */ public static function get_agencies( $args = [], $featured = false ) { $default = [ 'post_type' => 'opalestate_agency', 'posts_per_page' => 10, ]; $args = array_merge( $default, $args ); if ( $featured ) { $args['meta_key'] = OPALESTATE_AGENCY_PREFIX . 'featured'; $args['meta_value'] = 1; $args['meta_compare'] = '='; } return new WP_Query( $args ); } }