%PDF- %PDF-
Direktori : /var/www/hudvard.eco-n-tech.co.uk/wp-content/themes/jupiter/framework/functions/ |
Current File : /var/www/hudvard.eco-n-tech.co.uk/wp-content/themes/jupiter/framework/functions/ajax-search.php |
<?php /** * Class for Beside Nav Search form ajax functionality. * * @author Artbees * @version 5.0.0 */ class Mk_Ajax_Search { const SEARCH_RESULT_LIMIT = 8; function __construct() { global $mk_options; $location = get_option( THEME_OPTIONS ); $option = isset( $location['header_search_location'] ) ? $location['header_search_location'] : ''; if ( $option == 'beside_nav' ) { add_action( 'wp_ajax_mk_ajax_search', array( &$this, 'mk_ajax_search', ) ); add_action( 'wp_ajax_nopriv_mk_ajax_search', array( &$this, 'mk_ajax_search', ) ); } } /** * Searching posts by term and print the result in ajax response; */ function mk_ajax_search() { check_ajax_referer( 'mk-ajax-search-form', 'security' ); $search_term = $this->get_search_term( $_REQUEST['term'] ); $search_array = $this->get_search_request_options( $search_term ); $query = http_build_query( $search_array ); $posts = get_posts( $query ); $suggestions = array(); global $post; foreach ( $posts as $post ) : setup_postdata( $post ); $suggestions[] = $this->get_search_result_item( $post ); endforeach; $response = esc_html( $_GET['callback'] ) . '(' . json_encode( $suggestions ) . ')'; echo $response; exit; } /** * Get proper search term * * @param string $term * @return mixed */ private function get_search_term( $term = '' ) { $search_term = esc_html( $term ); $search_term = apply_filters( 'get_search_query', $search_term ); return $search_term; } /** * Get options for search. * * @param $search_term * @return array */ private function get_search_request_options( $search_term ) { $args = [ 's' => $search_term, 'showposts' => self::SEARCH_RESULT_LIMIT, 'post_type' => 'any', 'post_status' => 'publish', 'post_password' => '', 'suppress_filters' => 0, ]; if ( function_exists( 'wc_get_product_visibility_term_ids' ) ) { $product_visibility_term_ids = wc_get_product_visibility_term_ids(); $args['tax_query'] = [ [ 'taxonomy' => 'product_visibility', 'field' => 'term_taxonomy_id', 'terms' => $product_visibility_term_ids['exclude-from-search'], 'operator' => 'NOT IN', ] ]; } return $args; } /** * Get proper result item object based on $post * * @param $post * @return array */ private function get_search_result_item( $post ) { $suggestion = array(); $suggestion['label'] = esc_html( $post->post_title ); $suggestion['link'] = esc_url( get_permalink() ); $suggestion['date'] = get_the_date(); $suggestion['image'] = $this->get_search_result_item_image( $post->ID ); return $suggestion; } /** * Get thumbnail image of a post. * If the post does not have a thumbnail, this method will return and svg icon (mk-moon-pencil). * * @param $post_id * @return string */ private function get_search_result_item_image( $post_id ) { if ( has_post_thumbnail( $post_id ) ) { return get_the_post_thumbnail( $post_id, 'thumbnail', array( 'title' => '', ) ); } else { return '<i>' . Mk_SVG_Icons::get_svg_icon_by_class_name( false, 'mk-moon-pencil' ) . '</i>'; } } } new Mk_Ajax_Search();