2012-10-14 12:06:37 +00:00
< ? php
/**
2015-12-17 07:23:58 +00:00
* Layered Navigation Filters Widget .
2012-10-14 12:06:37 +00:00
*
2018-03-09 19:56:15 +00:00
* @ package WooCommerce / Widgets
* @ version 2.3 . 0
*/
defined ( 'ABSPATH' ) || exit ;
/**
* Widget layered nav filters .
2012-10-14 12:06:37 +00:00
*/
2013-05-24 15:51:58 +00:00
class WC_Widget_Layered_Nav_Filters extends WC_Widget {
2012-10-14 12:06:37 +00:00
/**
2015-11-03 13:31:20 +00:00
* Constructor .
2012-10-14 12:06:37 +00:00
*/
2013-05-24 15:51:58 +00:00
public function __construct () {
$this -> widget_cssclass = 'woocommerce widget_layered_nav_filters' ;
2017-08-25 11:07:17 +00:00
$this -> widget_description = __ ( 'Display a list of active product filters.' , 'woocommerce' );
2013-05-24 15:51:58 +00:00
$this -> widget_id = 'woocommerce_layered_nav_filters' ;
2017-08-25 11:07:17 +00:00
$this -> widget_name = __ ( 'Active Product Filters' , 'woocommerce' );
2013-05-24 15:51:58 +00:00
$this -> settings = array (
2018-03-09 19:56:15 +00:00
'title' => array (
2013-05-24 15:51:58 +00:00
'type' => 'text' ,
2016-10-12 10:16:30 +00:00
'std' => __ ( 'Active filters' , 'woocommerce' ),
2016-08-27 01:46:45 +00:00
'label' => __ ( 'Title' , 'woocommerce' ),
),
2013-05-24 15:51:58 +00:00
);
2014-11-15 01:12:59 +00:00
2013-05-24 15:51:58 +00:00
parent :: __construct ();
2012-10-14 12:06:37 +00:00
}
/**
2016-01-06 18:58:38 +00:00
* Output widget .
2012-10-14 12:06:37 +00:00
*
* @ see WP_Widget
2018-03-09 19:56:15 +00:00
* @ param array $args Arguments .
* @ param array $instance Widget instance .
2012-10-14 12:06:37 +00:00
*/
2013-05-24 15:51:58 +00:00
public function widget ( $args , $instance ) {
2017-11-09 11:16:47 +00:00
if ( ! is_shop () && ! is_product_taxonomy () ) {
2012-10-14 12:06:37 +00:00
return ;
2014-11-15 01:12:59 +00:00
}
2012-11-27 16:22:47 +00:00
2016-02-10 10:19:32 +00:00
$_chosen_attributes = WC_Query :: get_layered_nav_chosen_attributes ();
2018-03-09 19:56:15 +00:00
$min_price = isset ( $_GET [ 'min_price' ] ) ? wc_clean ( wp_unslash ( $_GET [ 'min_price' ] ) ) : 0 ; // WPCS: input var ok, CSRF ok.
$max_price = isset ( $_GET [ 'max_price' ] ) ? wc_clean ( wp_unslash ( $_GET [ 'max_price' ] ) ) : 0 ; // WPCS: input var ok, CSRF ok.
$rating_filter = isset ( $_GET [ 'rating_filter' ] ) ? array_filter ( array_map ( 'absint' , explode ( ',' , wp_unslash ( $_GET [ 'rating_filter' ] ) ) ) ) : array (); // WPCS: sanitization ok, input var ok, CSRF ok.
2017-12-14 14:37:42 +00:00
$base_link = $this -> get_current_page_url ();
2015-11-13 09:47:27 +00:00
2016-12-09 15:43:25 +00:00
if ( 0 < count ( $_chosen_attributes ) || 0 < $min_price || 0 < $max_price || ! empty ( $rating_filter ) ) {
2012-11-27 16:22:47 +00:00
2014-11-15 01:12:59 +00:00
$this -> widget_start ( $args , $instance );
2012-10-14 12:06:37 +00:00
2014-11-15 01:12:59 +00:00
echo '<ul>' ;
2012-11-27 16:22:47 +00:00
2018-03-09 19:56:15 +00:00
// Attributes.
2016-06-06 18:39:23 +00:00
if ( ! empty ( $_chosen_attributes ) ) {
2013-08-04 03:59:26 +00:00
foreach ( $_chosen_attributes as $taxonomy => $data ) {
2015-12-04 13:55:31 +00:00
foreach ( $data [ 'terms' ] as $term_slug ) {
2018-03-09 19:56:15 +00:00
$term = get_term_by ( 'slug' , $term_slug , $taxonomy );
if ( ! $term ) {
2015-06-08 16:10:23 +00:00
continue ;
}
2019-01-23 15:11:27 +00:00
$filter_name = 'filter_' . wc_attribute_taxonomy_slug ( $taxonomy );
2018-03-09 19:56:15 +00:00
$current_filter = isset ( $_GET [ $filter_name ] ) ? explode ( ',' , wc_clean ( wp_unslash ( $_GET [ $filter_name ] ) ) ) : array (); // WPCS: input var ok, CSRF ok.
2016-02-09 14:41:17 +00:00
$current_filter = array_map ( 'sanitize_title' , $current_filter );
2018-03-09 19:56:15 +00:00
$new_filter = array_diff ( $current_filter , array ( $term_slug ) );
2012-11-27 16:22:47 +00:00
2016-11-21 12:14:57 +00:00
$link = remove_query_arg ( array ( 'add-to-cart' , $filter_name ), $base_link );
2012-11-27 16:22:47 +00:00
2018-03-09 19:56:15 +00:00
if ( count ( $new_filter ) > 0 ) {
2016-02-09 14:41:17 +00:00
$link = add_query_arg ( $filter_name , implode ( ',' , $new_filter ), $link );
2014-11-15 01:12:59 +00:00
}
2012-11-27 16:22:47 +00:00
2019-03-23 19:28:58 +00:00
$filter_classes = array ( 'chosen' , 'chosen-' . sanitize_html_class ( str_replace ( 'pa_' , '' , $taxonomy ) ), 'chosen-' . sanitize_html_class ( str_replace ( 'pa_' , '' , $taxonomy ) . '-' . $term_slug ) );
2019-03-23 17:03:01 +00:00
2019-03-23 19:58:36 +00:00
echo '<li class="' . esc_attr ( implode ( ' ' , $filter_classes ) ) . '"><a rel="nofollow" aria-label="' . esc_attr__ ( 'Remove filter' , 'woocommerce' ) . '" href="' . esc_url ( $link ) . '">' . esc_html ( $term -> name ) . '</a></li>' ;
2013-08-04 03:59:26 +00:00
}
2012-10-14 12:06:37 +00:00
}
}
2012-11-27 16:22:47 +00:00
2013-01-12 13:03:19 +00:00
if ( $min_price ) {
2016-11-21 12:14:57 +00:00
$link = remove_query_arg ( 'min_price' , $base_link );
2018-03-09 19:56:15 +00:00
/* translators: %s: minimum price */
echo '<li class="chosen"><a rel="nofollow" aria-label="' . esc_attr__ ( 'Remove filter' , 'woocommerce' ) . '" href="' . esc_url ( $link ) . '">' . sprintf ( __ ( 'Min %s' , 'woocommerce' ), wc_price ( $min_price ) ) . '</a></li>' ; // WPCS: XSS ok.
2012-10-14 12:06:37 +00:00
}
2012-11-27 16:22:47 +00:00
2013-01-12 13:03:19 +00:00
if ( $max_price ) {
2016-11-21 12:14:57 +00:00
$link = remove_query_arg ( 'max_price' , $base_link );
2018-03-09 19:56:15 +00:00
/* translators: %s: maximum price */
echo '<li class="chosen"><a rel="nofollow" aria-label="' . esc_attr__ ( 'Remove filter' , 'woocommerce' ) . '" href="' . esc_url ( $link ) . '">' . sprintf ( __ ( 'Max %s' , 'woocommerce' ), wc_price ( $max_price ) ) . '</a></li>' ; // WPCS: XSS ok.
2012-10-14 12:06:37 +00:00
}
2012-11-27 16:22:47 +00:00
2016-12-09 15:43:25 +00:00
if ( ! empty ( $rating_filter ) ) {
foreach ( $rating_filter as $rating ) {
$link_ratings = implode ( ',' , array_diff ( $rating_filter , array ( $rating ) ) );
$link = $link_ratings ? add_query_arg ( 'rating_filter' , $link_ratings ) : remove_query_arg ( 'rating_filter' , $base_link );
2018-03-09 19:56:15 +00:00
/* translators: %s: rating */
2017-10-01 09:41:22 +00:00
echo '<li class="chosen"><a rel="nofollow" aria-label="' . esc_attr__ ( 'Remove filter' , 'woocommerce' ) . '" href="' . esc_url ( $link ) . '">' . sprintf ( esc_html__ ( 'Rated %s out of 5' , 'woocommerce' ), esc_html ( $rating ) ) . '</a></li>' ;
2016-12-09 15:43:25 +00:00
}
2015-11-13 09:47:27 +00:00
}
2014-11-15 01:12:59 +00:00
echo '</ul>' ;
2012-10-14 12:06:37 +00:00
2014-11-15 01:12:59 +00:00
$this -> widget_end ( $args );
2012-10-14 12:06:37 +00:00
}
}
2013-05-24 15:51:58 +00:00
}