attribute_taxonomies; if ( $attribute_taxonomies ) : foreach ($attribute_taxonomies as $tax) : $attribute = strtolower(sanitize_title($tax->attribute_name)); $taxonomy = $woocommerce->attribute_name($attribute); $name = 'filter_' . $attribute; if (isset($_GET[$name]) && taxonomy_exists($taxonomy)) $_chosen_attributes[$taxonomy] = explode(',', $_GET[$name] ); endforeach; endif; } /** * Layered Nav post filter */ add_filter('loop-shop-posts-in', 'woocommerce_layered_nav_query'); function woocommerce_layered_nav_query( $filtered_posts ) { global $_chosen_attributes, $wpdb, $woocommerce; if (sizeof($_chosen_attributes)>0) : $matched_products = array(); $filtered = false; foreach ($_chosen_attributes as $attribute => $values) : if (sizeof($values)>0) : foreach ($values as $value) : $posts = get_objects_in_term( $value, $attribute ); if (!is_wp_error($posts) && (sizeof($matched_products)>0 || $filtered)) : $matched_products = array_intersect($posts, $matched_products); elseif (!is_wp_error($posts)) : $matched_products = $posts; endif; $filtered = true; endforeach; endif; endforeach; if ($filtered) : $woocommerce->query['layered_nav_post__in'] = $matched_products; $woocommerce->query['layered_nav_post__in'][] = 0; if (sizeof($filtered_posts)==0) : $filtered_posts = $matched_products; $filtered_posts[] = 0; else : $filtered_posts = array_intersect($filtered_posts, $matched_products); $filtered_posts[] = 0; endif; endif; endif; return (array) $filtered_posts; } /** * Layered Nav Widget */ class WooCommerce_Widget_Layered_Nav extends WP_Widget { /** Variables to setup the widget. */ var $woo_widget_cssclass; var $woo_widget_description; var $woo_widget_idbase; var $woo_widget_name; /** constructor */ function WooCommerce_Widget_Layered_Nav() { /* Widget variable settings. */ $this->woo_widget_cssclass = 'widget_layered_nav'; $this->woo_widget_description = __( 'Shows a custom attribute in a widget which lets you narrow down the list of products when viewing product categories.', 'woothemes' ); $this->woo_widget_idbase = 'woocommerce_layered_nav'; $this->woo_widget_name = __('WooCommerce Layered Nav', 'woothemes' ); /* Widget settings. */ $widget_ops = array( 'classname' => $this->woo_widget_cssclass, 'description' => $this->woo_widget_description ); /* Create the widget. */ $this->WP_Widget('layered_nav', $this->woo_widget_name, $widget_ops); } /** @see WP_Widget */ function widget( $args, $instance ) { extract($args); if (!is_tax( 'product_cat' ) && !is_post_type_archive('product') && !is_tax( 'product_tag' )) return; global $_chosen_attributes, $wpdb, $woocommerce; $title = $instance['title']; $taxonomy = $woocommerce->attribute_name($instance['attribute']); if (!taxonomy_exists($taxonomy)) return; $title = apply_filters('widget_title', $title, $instance, $this->id_base); $args = array( 'hide_empty' => '1' ); $terms = get_terms( $taxonomy, $args ); $count = count($terms); if($count > 0){ $found = false; ob_start(); echo $before_widget . $before_title . $title . $after_title; echo ""; echo $after_widget; if (!$found) : ob_clean(); return; else : $widget = ob_get_clean(); echo $widget; endif; } } /** @see WP_Widget->update */ function update( $new_instance, $old_instance ) { global $woocommerce; if (!isset($new_instance['title']) || empty($new_instance['title'])) $new_instance['title'] = $woocommerce->attribute_label($new_instance['attribute']); $instance['title'] = strip_tags(stripslashes($new_instance['title'])); $instance['attribute'] = stripslashes($new_instance['attribute']); return $instance; } /** @see WP_Widget->form */ function form( $instance ) { global $wpdb, $woocommerce; ?>