Current Path : /home/theafprt/conviviality360.com/wp-content/themes/salient/includes/ |
Current File : /home/theafprt/conviviality360.com/wp-content/themes/salient/includes/class-nectar-quick-search.php |
<?php /** * Nectar Quick Search * * * @package Salient WordPress Theme * @version 13.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Nectar Quick Search. */ if( !class_exists('NectarQuickSearch') ) { class NectarQuickSearch { private static $instance; public static $version = '1.0'; public static $post_type = 'any'; public static $style = 'classic'; public static $ajax_style = 'default'; private function __construct() { $this->setup_style(); $this->hooks(); } /** * Initiator. */ public static function get_instance() { if ( !self::$instance ) { self::$instance = new self; } return self::$instance; } /** * Item Style. */ public function setup_style() { global $nectar_options; $post_types_list = array('post','product','portfolio'); if( isset($nectar_options['header-search-limit']) && in_array($nectar_options['header-search-limit'], $post_types_list) ) { self::$post_type = esc_attr($nectar_options['header-search-limit']); } // Store actual item style. // So far, only the product will use the actual style. if( 'product' === self::$post_type ) { $product_styles = array('classic','text_on_hover','material','minimal'); $product_style = ( isset( $nectar_options['product_style'] ) ) ? $nectar_options['product_style'] : 'classic'; if( in_array($product_style, $product_styles) ) { self::$style = esc_html($product_style); } } // AJAX style. if( isset($nectar_options['header-ajax-search-style']) ) { $ajax_styles = array('default','extended'); if( in_array($nectar_options['header-ajax-search-style'], $ajax_styles) ) { self::$ajax_style = $nectar_options['header-ajax-search-style']; } } } /** * Action hooks. */ public function hooks() { add_action( 'wp_ajax_nectar_ajax_ext_search_results', array($this, 'get_results' ) ); add_action( 'wp_ajax_nopriv_nectar_ajax_ext_search_results', array($this, 'get_results' ) ); } /** * AJAX callback to load results. */ public function get_results() { if( !isset($_POST['search']) ) { wp_die(); } $search_term = sanitize_text_field( $_POST['search'] ); $search_term = apply_filters( 'get_search_query', $search_term ); $content = ''; // Set up query using search string $search_query = new WP_Query( array( 'posts_per_page' => 6, 'post_status' => 'publish', 'ignore_sticky_posts' => true, 'no_found_rows' => true, 'has_password' => false, 's' => $search_term, 'post_type' => self::$post_type ) ); if( $search_query->have_posts() ) : while( $search_query->have_posts() ) : $search_query->the_post(); global $post; if( is_callable( array($this, self::$post_type . '_markup') ) ) { $content .= call_user_func( array($this, self::$post_type . '_markup'), self::$style, $post ); } endwhile; endif; // Finalize Markup. if( !empty($content) ) { $content_start = ''; $content_end = ''; if( 'product' === self::$post_type && 'extended' === self::$ajax_style ) { $content_start = '<div class="woocommerce"><ul class="products columns-4" data-rm-m-hover="on" data-n-desktop-columns="5" data-n-desktop-small-columns="5" data-n-tablet-columns="2" data-n-phone-columns="2" data-product-style="classic">'; $content_end = '</ul></div>'; } else { $content_start = '<div class="nectar-search-results">'; $content_end = '</div>'; } wp_send_json( array( 'content' => $content_start . $content . $content_end ) ); } wp_die(); } /** * Product Markup when using extended display. */ public function extended_product_markup($style, $post) { global $product; ob_start(); ?> <li <?php wc_product_class( $style, $product ); ?> > <?php do_action( 'woocommerce_before_shop_loop_item' ); do_action( 'woocommerce_before_shop_loop_item_title' ); if( 'classic' === $style ) { do_action( 'woocommerce_shop_loop_item_title' ); do_action( 'woocommerce_after_shop_loop_item_title' ); } do_action( 'woocommerce_after_shop_loop_item' ); $content = ob_get_clean(); $content .= '</li>'; return $content; } /** * Simple Markup. */ public function simple_markup($post, $post_type = 'post') { // Skip posts with no name. if( empty(get_the_title()) ) { return; } ob_start(); ?> <div class="search-post-item"> <?php $cat_markup = ''; $categories = ''; // Link start. echo '<a href="'.esc_url(get_permalink()). '">'; // Categories. if( 'any' !== $post_type ) { if( 'portfolio' === $post_type ) { $categories = get_the_terms($post->id,"project-type"); } else if( 'product' !== $post_type ) { $categories = get_the_category(); } if ( ! empty( $categories ) ) { foreach ( $categories as $category ) { $cat_markup .= esc_html( $category->name ); break; } $cat_markup = trim( $cat_markup ); } } // Featured Image. $featured_image_size = ('extended' === self::$ajax_style) ? 'large' : 'medium'; if( 'portfolio' === $post_type ) { $custom_thumbnail = get_post_meta($post->ID, '_nectar_portfolio_custom_thumbnail', true); if( !empty($custom_thumbnail) ) { echo '<span class="post-featured-img" style="background-image: url(' . nectar_ssl_check( esc_url( $custom_thumbnail ) ) .');"></span>'; } else if( has_post_thumbnail() ) { echo '<span class="post-featured-img" style="background-image: url(' . get_the_post_thumbnail_url( $post->ID, $featured_image_size, array( 'title' => '' ) ) . ');"></span>'; } else { echo '<span class="post-featured-img"></span>'; } } else { if( has_post_thumbnail() ) { echo '<span class="post-featured-img" style="background-image: url(' . get_the_post_thumbnail_url( $post->ID, $featured_image_size, array( 'title' => '' ) ) . ');"></span>'; } else { echo '<span class="post-featured-img"></span>'; } } ?> <div class="header"> <?php if(!empty($cat_markup)) { echo '<span class="meta meta-category">'. $cat_markup . '</span>'; } ?> <h5 class="title"><?php echo get_the_title(); ?></h5> <?php if( 'product' === $post_type ) { echo '<span class="meta meta-price">'; woocommerce_template_loop_price(); echo '</span>'; } // Post type label. if( 'any' === $post_type && isset($post->post_type) ) { $pt_obj = get_post_type_object($post->post_type); if( $pt_obj && isset($pt_obj->labels->singular_name) ) { echo '<span class="meta meta-type">'.esc_html($pt_obj->labels->singular_name).'</span>'; } } ?> </div> </a> </div> <?php $content = ob_get_clean(); return $content; } /** * Limited to post types. */ public function portfolio_markup($style, $post) { return $this->simple_markup($post, 'portfolio'); } public function post_markup($style, $post) { return $this->simple_markup($post, 'post'); } public function any_markup($style, $post) { return $this->simple_markup($post, 'any'); } public function product_markup($style, $post) { if( 'extended' === self::$ajax_style ) { return $this->extended_product_markup($style, $post); } return $this->simple_markup($post, 'product'); } } /** * Initialize the NectarElAssets class */ NectarQuickSearch::get_instance(); }