/** * AJAX callback method * * @return void */ public function run() { // check nonce $this->check_nonce(); // set filters $filters = array(); // get filters from get vars foreach ($_GET as $get_key => $get_var) { if (0 === strpos($get_key, 'filter_')) { $filters[str_ireplace('filter_', '', $get_key)] = $get_var; } } // set sort $sort = isset($_GET['sort']) ? esc_attr($_GET['sort']) : 'price-asc'; // set per page $per_page = intval(wp_car_manager()->service('settings')->get_option('listings_ppp')); // correct any funky zero listings per page. I mean, who wants 0 listings per page ... if (0 === $per_page) { $per_page = -1; } // get current page $page = intval(!empty($_GET['page']) ? $_GET['page'] : 1); // check if we need to hide sold cars if ('1' == wp_car_manager()->service('settings')->get_option('listings_hide_sold')) { $filters['hide_sold'] = true; } else { $filters['hide_sold'] = false; } // extra args $extra_args = array(); if ($page > 0) { $extra_args['paged'] = $page; } // get vehicles $vehicle_manager = new Vehicle\Manager(); $vehicles = $vehicle_manager->get_vehicles($filters, $sort, $per_page, $extra_args); // get total vehicle count for pagination $total_vehicle_count = $vehicle_manager->get_total_vehicle_count_of_last_query(); // start output buffer ob_start(); // check & loop if (count($vehicles) > 0) { foreach ($vehicles as $vehicle) { // title $title = get_the_title($vehicle->get_id()); // check if there's a thumbnail if (has_post_thumbnail($vehicle->get_id())) { // get image $image = get_the_post_thumbnail($vehicle->get_id(), apply_filters('wpcm_listings_vehicle_thumbnail_size', 'wpcm_vehicle_listings_item'), array('title' => $title, 'alt' => $title, 'class' => 'wpcm-listings-item-image')); } else { $placeholder = apply_filters('wpcm_listings_vehicle_thumbnail_placeholder', wp_car_manager()->service('file')->image_url('placeholder-list.png'), $vehicle); $image = sprintf('<img src="%s" alt="%s" class="wpcm-listings-item-image" />', $placeholder, __('Placeholder', 'wp-car-manager')); } // load template wp_car_manager()->service('template_manager')->get_template_part('listings/item', '', array('url' => $vehicle->get_url(), 'title' => $title, 'image' => $image, 'description' => $vehicle->get_short_description(), 'price' => $vehicle->get_formatted_price(), 'mileage' => $vehicle->get_formatted_mileage(), 'frdate' => $vehicle->get_formatted_frdate(), 'vehicle' => $vehicle)); } } else { wp_car_manager()->service('template_manager')->get_template_part('listings/no-results', '', array()); } // put listing content in variable $listing_content = ob_get_clean(); // send JSON response wp_send_json(array('listings' => $listing_content, 'pagination' => \Never5\WPCarManager\Helper\Pagination::generate($page, \Never5\WPCarManager\Helper\Pagination::calc_total_pages($per_page, $total_vehicle_count)))); // bye exit; }