WC_Query::get_layered_nav_chosen_attributes PHP Method

get_layered_nav_chosen_attributes() public static method

Layered Nav Init.
    public static function get_layered_nav_chosen_attributes()
    {
        if (!is_array(self::$_chosen_attributes)) {
            self::$_chosen_attributes = array();
            if ($attribute_taxonomies = wc_get_attribute_taxonomies()) {
                foreach ($attribute_taxonomies as $tax) {
                    $attribute = wc_sanitize_taxonomy_name($tax->attribute_name);
                    $taxonomy = wc_attribute_taxonomy_name($attribute);
                    $filter_terms = !empty($_GET['filter_' . $attribute]) ? explode(',', wc_clean($_GET['filter_' . $attribute])) : array();
                    if (empty($filter_terms) || !taxonomy_exists($taxonomy)) {
                        continue;
                    }
                    $query_type = !empty($_GET['query_type_' . $attribute]) && in_array($_GET['query_type_' . $attribute], array('and', 'or')) ? wc_clean($_GET['query_type_' . $attribute]) : '';
                    self::$_chosen_attributes[$taxonomy]['terms'] = array_map('sanitize_title', $filter_terms);
                    // Ensures correct encoding
                    self::$_chosen_attributes[$taxonomy]['query_type'] = $query_type ? $query_type : apply_filters('woocommerce_layered_nav_default_query_type', 'and');
                }
            }
        }
        return self::$_chosen_attributes;
    }

Usage Example

 /**
  * Output widget.
  *
  * @see WP_Widget
  *
  * @param array $args
  * @param array $instance
  */
 public function widget($args, $instance)
 {
     if (!is_post_type_archive('product') && !is_tax(get_object_taxonomies('product'))) {
         return;
     }
     $_chosen_attributes = WC_Query::get_layered_nav_chosen_attributes();
     $min_price = isset($_GET['min_price']) ? wc_clean($_GET['min_price']) : 0;
     $max_price = isset($_GET['max_price']) ? wc_clean($_GET['max_price']) : 0;
     $min_rating = isset($_GET['min_rating']) ? absint($_GET['min_rating']) : 0;
     if (0 < count($_chosen_attributes) || 0 < $min_price || 0 < $max_price || 0 < $min_rating) {
         $this->widget_start($args, $instance);
         echo '<ul>';
         // Attributes
         if (!empty($_chosen_attributes)) {
             foreach ($_chosen_attributes as $taxonomy => $data) {
                 foreach ($data['terms'] as $term_slug) {
                     if (!($term = get_term_by('slug', $term_slug, $taxonomy))) {
                         continue;
                     }
                     $filter_name = 'filter_' . sanitize_title(str_replace('pa_', '', $taxonomy));
                     $current_filter = isset($_GET[$filter_name]) ? explode(',', wc_clean($_GET[$filter_name])) : array();
                     $current_filter = array_map('sanitize_title', $current_filter);
                     $new_filter = array_diff($current_filter, array($term_slug));
                     $link = remove_query_arg(array('add-to-cart', $filter_name));
                     if (sizeof($new_filter) > 0) {
                         $link = add_query_arg($filter_name, implode(',', $new_filter), $link);
                     }
                     echo '<li class="chosen"><a title="' . esc_attr__('Remove filter', 'woocommerce') . '" href="' . esc_url($link) . '">' . esc_html($term->name) . '</a></li>';
                 }
             }
         }
         if ($min_price) {
             $link = remove_query_arg('min_price');
             echo '<li class="chosen"><a title="' . esc_attr__('Remove filter', 'woocommerce') . '" href="' . esc_url($link) . '">' . sprintf(__('Min %s', 'woocommerce'), wc_price($min_price)) . '</a></li>';
         }
         if ($max_price) {
             $link = remove_query_arg('max_price');
             echo '<li class="chosen"><a title="' . esc_attr__('Remove filter', 'woocommerce') . '" href="' . esc_url($link) . '">' . sprintf(__('Max %s', 'woocommerce'), wc_price($max_price)) . '</a></li>';
         }
         if ($min_rating) {
             $link = remove_query_arg('min_rating');
             echo '<li class="chosen"><a title="' . esc_attr__('Remove filter', 'woocommerce') . '" href="' . esc_url($link) . '">' . sprintf(__('Rated %s and above', 'woocommerce'), $min_rating) . '</a></li>';
         }
         echo '</ul>';
         $this->widget_end($args);
     }
 }
All Usage Examples Of WC_Query::get_layered_nav_chosen_attributes