File: /opt/wpsites/datacloudnow.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();
}