query->get_main_query()->query_vars; $tax_query = isset($args['tax_query']) ? $args['tax_query'] : array(); $meta_query = isset($args['meta_query']) ? $args['meta_query'] : array(); if (!is_post_type_archive('product') && !empty($args['taxonomy']) && !empty($args['term'])) { $tax_query[] = WC()->query->get_main_tax_query(); } foreach ($meta_query + $tax_query as $key => $query) { if (!empty($query['price_filter']) || ! empty($query['rating_filter'])) { unset($meta_query[$key]); } } $meta_query = new WP_Meta_Query($meta_query); $tax_query = new WP_Tax_Query($tax_query); $search = WC_Query::get_main_search_query_sql(); $meta_query_sql = $meta_query->get_sql('post', $wpdb->posts, 'ID'); $tax_query_sql = $tax_query->get_sql($wpdb->posts, 'ID'); $search_query_sql = $search ? ' AND ' . $search : ''; $sql = " SELECT min(min_price) as min_price, MAX(max_price) as max_price FROM {$wpdb->wc_product_meta_lookup} WHERE product_id IN ( SELECT ID FROM {$wpdb->posts} " . $tax_query_sql['join'] . $meta_query_sql['join'] . " WHERE {$wpdb->posts}.post_type IN ('" . implode("','", array_map('esc_sql', apply_filters('woocommerce_price_filter_post_type', array('product')))) . "') AND {$wpdb->posts}.post_status = 'publish' " . $tax_query_sql['where'] . $meta_query_sql['where'] . $search_query_sql . ' )'; $sql = apply_filters('woocommerce_price_filter_sql', $sql, $meta_query_sql, $tax_query_sql); return $wpdb->get_row($sql); // WPCS: unprepared SQL ok. } endif; /** * Variation content widget */ if (!function_exists('elessi_get_content_widget_variation')) : function elessi_get_content_widget_variation($args, $instance) { $args = array('widget_id' => $args['widget_id']); $hide_widget = false; $hide_empty = isset($instance['hide_empty']) && $instance['hide_empty'] ? true : false; $var_exist = $hide_empty ? false : true; $columns_classic = isset($instance['cols']) && in_array($instance['cols'], array('1', '2')) ? $instance['cols'] : '2'; $columns_classic_class = ' ns-cols-' . $columns_classic; $taxonomy = isset($instance['attribute']) ? wc_attribute_taxonomy_name($instance['attribute']) : ''; if (!taxonomy_exists($taxonomy)) { $hide_widget = true; return array('hide_widget' => $hide_widget, 'content' => ''); } $content = '
'; return array('hide_widget' => $hide_widget, 'content' => $content); } return array('hide_widget' => true, 'content' => ''); } endif; /** * Get term count variations */ if (!function_exists('elessi_get_filtered_term_product_counts')) : function elessi_get_filtered_term_product_counts($term_ids, $taxonomy, $query_type) { if (function_exists('wc_get_container') && class_exists('Automattic\WooCommerce\Internal\ProductAttributesLookup\Filterer')) { return wc_get_container()->get(Automattic\WooCommerce\Internal\ProductAttributesLookup\Filterer::class)->get_filtered_term_product_counts($term_ids, $taxonomy, $query_type); } global $wpdb; $meta_query = WC_Query::get_main_meta_query(); $tax_query = WC_Query::get_main_tax_query(); if ('or' === $query_type) { foreach ($tax_query as $key => $query) { if (isset($query['taxonomy']) && $taxonomy === $query['taxonomy']) { unset($tax_query[$key]); } } } $meta_query = new WP_Meta_Query($meta_query); $tax_query = new WP_Tax_Query($tax_query); $meta_query_sql = $meta_query->get_sql('post', $wpdb->posts, 'ID'); $tax_query_sql = $tax_query->get_sql($wpdb->posts, 'ID'); // Generate query $query = array(); $query['select'] = 'SELECT COUNT(DISTINCT ' . $wpdb->posts . '.ID) as term_count, terms.term_id as term_count_id'; $query['from'] = 'FROM ' . $wpdb->posts; $query['join'] = 'INNER JOIN ' . $wpdb->term_relationships . ' AS term_relationships ON ' . $wpdb->posts . '.ID = term_relationships.object_id ' . 'INNER JOIN ' . $wpdb->term_taxonomy . ' AS term_taxonomy USING(term_taxonomy_id) ' . 'INNER JOIN ' . $wpdb->terms . ' AS terms USING(term_id) ' . $tax_query_sql['join'] . $meta_query_sql['join']; $query['where'] = 'WHERE ' . $wpdb->posts . '.post_type LIKE "product" ' . 'AND ' . $wpdb->posts . '.post_status LIKE "publish" ' . $tax_query_sql['where'] . $meta_query_sql['where'] . ' ' . 'AND terms.term_id IN (' . implode(',', array_map('absint', $term_ids)) . ')'; // For search case if (isset($_GET['s']) && $_GET['s']) { $s = esc_sql(str_replace(array("\r", "\n"), '', stripslashes($_GET['s']))); $query['where'] .= ' AND (' . $wpdb->posts . '.post_title LIKE "%' . $s . '%" OR ' . $wpdb->posts . '.post_excerpt LIKE "%' . $s . '%" OR ' . $wpdb->posts . '.post_content LIKE "%' . $s . '%")'; } $query['group_by'] = "GROUP BY terms.term_id"; $queryString = implode(' ', apply_filters('woocommerce_get_filtered_term_product_counts_query', $query)); $results = $wpdb->get_results($queryString); return wp_list_pluck($results, 'term_count', 'term_count_id'); } endif; /** * Return the currently viewed term slug. * @return int */ if (!function_exists('elessi_get_current_term_slug')) : function elessi_get_current_term_slug() { return absint(is_tax() ? get_queried_object()->slug : 0); } endif; /** * Get current page URL for layered nav items. * @return string */ if (!function_exists('elessi_get_page_base_url')) : function elessi_get_page_base_url($taxonomy) { if (defined('SHOP_IS_ON_FRONT')) { $link = home_url('/'); } elseif (is_post_type_archive('product') || is_page(wc_get_page_id('shop'))) { $link = get_post_type_archive_link('product'); } elseif (is_product_category()) { $link = get_term_link(get_query_var('product_cat'), 'product_cat'); } elseif (is_product_tag()) { $link = get_term_link(get_query_var('product_tag'), 'product_tag'); } else { $queried_object = get_queried_object(); $link = get_term_link($queried_object, $queried_object->taxonomy); } /** * Custom taxonomy */ if (class_exists('Nasa_WC_Taxonomy')) { $nasa_taxonomy = apply_filters('nasa_taxonomy_custom_cateogory', Nasa_WC_Taxonomy::$nasa_taxonomy); if (isset($_GET[$nasa_taxonomy])) { $link = add_query_arg($nasa_taxonomy, wc_clean(wp_unslash($_GET[$nasa_taxonomy])), $link); } } /** * Min */ if (isset($_GET['min_price'])) { $link = add_query_arg('min_price', wc_clean(wp_unslash($_GET['min_price'])), $link); } /** * Max */ if (isset($_GET['max_price'])) { $link = add_query_arg('max_price', wc_clean(wp_unslash($_GET['max_price'])), $link); } /** * Orderby */ if (isset($_GET['orderby'])) { $link = add_query_arg('orderby', wc_clean(wp_unslash($_GET['orderby'])), $link); } /** * Search Arg. * To support quote characters, first they are decoded from " entities, then URL encoded. */ if (get_search_query()) { $link = add_query_arg('s', rawurlencode(wp_specialchars_decode(get_search_query())), $link); } /** * Post Type Arg */ if (isset($_GET['post_type'])) { $link = add_query_arg('post_type', wc_clean(wp_unslash($_GET['post_type'])), $link); /** * Prevent post type and page id when pretty permalinks are disabled. */ if (is_shop()) { $link = remove_query_arg('page_id', $link); } } /** * Min Rating Arg */ if (isset($_GET['rating_filter'])) { $link = add_query_arg('rating_filter', wc_clean(wp_unslash($_GET['rating_filter'])), $link); } /** * Filter Status */ if (class_exists('Elessi_WC_Widget_Status_Filter')) { foreach (Elessi_WC_Widget_Status_Filter::$_status as $status) { if (isset($_GET[$status]) && $_GET[$status] === '1') { $link = add_query_arg($status, '1', $link); } } } /** * Filter Alphabet */ if (class_exists('Elessi_WC_Widget_Alphabet_Filter')) { $alpha_rq = Elessi_WC_Widget_Alphabet_Filter::$_request_name; if (isset($_GET[$alpha_rq]) && in_array($_GET[$alpha_rq], Elessi_WC_Widget_Alphabet_Filter::$_alphabet)) { $link = add_query_arg($alpha_rq, wc_clean(wp_unslash($_GET[$alpha_rq])), $link); } } /** * Filter Multi Tags */ if (class_exists('Elessi_WC_Widget_Tags_Filter')) { if (isset($_GET[Elessi_WC_Widget_Tags_Filter::$_request_name]) && !empty($_GET[Elessi_WC_Widget_Tags_Filter::$_request_name])) { $link = add_query_arg(Elessi_WC_Widget_Tags_Filter::$_request_name, wc_clean(wp_unslash($_GET[Elessi_WC_Widget_Tags_Filter::$_request_name])), $link); } } /** * Filter Multi Categories */ if (class_exists('Elessi_WC_Widget_Multi_Categories_Filter')) { if (isset($_GET[Elessi_WC_Widget_Multi_Categories_Filter::$_request_name]) && !empty($_GET[Elessi_WC_Widget_Multi_Categories_Filter::$_request_name])) { $link = add_query_arg(Elessi_WC_Widget_Multi_Categories_Filter::$_request_name, wc_clean(wp_unslash($_GET[Elessi_WC_Widget_Multi_Categories_Filter::$_request_name])), $link); } } /** * All current filters */ if ($_chosen_attributes = WC_Query::get_layered_nav_chosen_attributes()) { $taxonomy = wc_attribute_taxonomy_slug($taxonomy); foreach ($_chosen_attributes as $name => $data) { $filter_name = wc_attribute_taxonomy_slug($name); if ($taxonomy == $filter_name) { continue; } if (!empty($data['terms'])) { $link = add_query_arg('filter_' . $filter_name, implode(',', $data['terms']), $link); } if ('or' === $data['query_type']) { $link = add_query_arg('query_type_' . $filter_name, 'or', $link); } } } return apply_filters('nasa_page_base_url', $link); } endif; /** * Get current page URL Origin Not Request GET. * @return string */ if (!function_exists('elessi_get_origin_url')) : function elessi_get_origin_url($remove_query = array('page', 'paged', 'product-page')) { global $wp; $nasa_origin_url = get_option('permalink_structure') == '' ? remove_query_arg($remove_query, add_query_arg($wp->query_string, '', home_url(trailingslashit($wp->request)))) : preg_replace('%\/page/[0-9]+%', '', home_url(trailingslashit($wp->request))); return apply_filters('nasa_origin_url', $nasa_origin_url); } endif; /** * Get current page URL Origin Not Request GET But Has Paged. * @return string */ if (!function_exists('elessi_get_origin_url_paging')) : function elessi_get_origin_url_paging($exc = array()) { global $wp, $nasa_origin_url_paging; if (!isset($nasa_origin_url_paging)) { $nasa_origin_url_paging = get_option('permalink_structure') == '' ? add_query_arg($wp->query_string, '', home_url(trailingslashit($wp->request))) : home_url(trailingslashit($wp->request)); $GLOBALS['nasa_origin_url_paging'] = $nasa_origin_url_paging; } /** * Exclude */ if (!empty($exc)) { foreach ($exc as $get) { if (isset($_GET[$get])) { $nasa_origin_url_paging = add_query_arg($get, esc_attr($_GET[$get]), $nasa_origin_url_paging); } } } return apply_filters('nasa_origin_url_paging', $nasa_origin_url_paging); } endif; /** * Remove defaults widgets of Woocommerce */ // add_action('init', 'elessi_remove_default_wg_woo'); if (!function_exists('elessi_remove_default_wg_woo')) : function elessi_remove_default_wg_woo() { global $nasa_opt; if ((!isset($nasa_opt['disable_ajax_product']) || !$nasa_opt['disable_ajax_product'])) { unregister_widget('WC_Widget_Price_Filter'); unregister_widget('WC_Widget_Layered_Nav'); unregister_widget('WC_Widget_Layered_Nav_Filters'); unregister_widget('WC_Widget_Rating_Filter'); unregister_widget('WC_Widget_Product_Search'); } } endif;