File: /var/www/ecom/wp-content/themes/electro/inc/widgets/class-electro-product-catgories-widget.php
<?php
/**
* Creates a Electro Product Categories Widget which can be placed in sidebar
*
* @class Electro_Product_Categories_Widget
* @version 1.0.0
* @package Widgets
* @category Class
* @author Transvelo
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
if( class_exists( 'WP_Widget' ) ) :
/**
* Electro Products Categories widget class
*
* @since 1.0.0
*/
class Electro_Product_Categories_Widget extends WP_Widget {
/**
* Current Category.
*
* @var bool
*/
public $current_cat;
/**
* Current Category Parent.
*
* @var array
*/
public $current_cat_parent;
public function __construct() {
$widget_ops = array( 'classname' => 'woocommerce widget_product_categories electro_widget_product_categories', 'description' => esc_html__( 'A list of product categories.', 'electro' ) );
parent::__construct( 'electro_product_categories_widget', esc_html__( 'Electro Product Categories', 'electro' ), $widget_ops );
}
public function widget($args, $instance) {
global $wp_query, $post;
$count = isset( $instance['count'] ) ? $instance['count'] : false;
$hide_empty = isset( $instance['hide_empty'] ) ? $instance['hide_empty'] : false;
$el_class = '';
$list_args = array(
'show_count' => $count,
'taxonomy' => 'product_cat',
'echo' => false,
'hide_empty' => $hide_empty,
'menu_order' => 'asc'
);
// Setup Current Category
$this->current_cat = false;
$this->current_cat_parent = false;
if ( is_tax( 'product_cat' ) ) {
$this->current_cat = $wp_query->queried_object;
$this->current_cat_parent = $this->current_cat->parent;
} elseif ( is_singular( 'product' ) ) {
$product_category = wc_get_product_terms( $post->ID, 'product_cat', array( 'orderby' => 'parent' ) );
if ( $product_category ) {
$this->current_cat = end( $product_category );
$this->current_cat_parent = $this->current_cat->parent;
}
}
// Show Children Only
if ( $this->current_cat ) {
$el_class = 'category-single';
$show_all_categories_text = apply_filters( 'electro_product_categories_widget_show_all_categories_text', esc_html__( 'Show All Categories', 'electro' ) );
// Top level is needed
$top_level = wp_list_categories( apply_filters( 'electro_product_categories_widget_top_level_list_categories_args', array(
'title_li' => sprintf( '<span class="show-all-cat-dropdown">%1$s</span>', $show_all_categories_text ),
'taxonomy' => 'product_cat',
'parent' => 0,
'hierarchical' => true,
'hide_empty' => false,
'exclude' => $this->current_cat->term_id,
'show_count' => $count,
'hide_empty' => $hide_empty,
'echo' => false,
'use_desc_for_title' => 0
) ) );
$list_args['title_li'] = '<ul class="show-all-cat">' . $top_level . '</ul>';
// Direct children are wanted
$direct_children = get_terms(
'product_cat',
array(
'fields' => 'ids',
'parent' => $this->current_cat->term_id,
'hierarchical' => true,
'hide_empty' => false
)
);
$siblings = array();
if( $this->current_cat_parent ) {
// Siblings are wanted
$siblings = get_terms(
'product_cat',
array(
'fields' => 'ids',
'parent' => $this->current_cat_parent,
'hierarchical' => true,
'hide_empty' => false
)
);
}
$include = array_merge( array( $this->current_cat->term_id, $this->current_cat_parent ), $direct_children, $siblings );
$list_args['include'] = implode( ',', $include );
$list_args['depth'] = 3;
if ( empty( $include ) ) {
return;
}
} else {
$all_categories_text = apply_filters( 'electro_product_categories_widget_shop_all_categories_text', esc_html__( 'Browse Categories', 'electro' ) );
$list_args['title_li'] = sprintf( '<span>%1$s</span>', $all_categories_text );
$list_args['depth'] = 2;
$list_args['child_of'] = 0;
$list_args['hierarchical'] = 1;
}
$list_args['pad_counts'] = 1;
$list_args['show_option_none'] = esc_html__( 'No product categories exist.', 'electro' );
$list_args['current_category'] = ( $this->current_cat ) ? $this->current_cat->term_id : '';
$list_args['use_desc_for_title'] = apply_filters( 'electro_use_desc_for_title_product_categories_widget', 0 );
echo wp_kses_post( $args['before_widget'] );
$output = wp_list_categories( apply_filters( 'electro_product_categories_widget_args', $list_args ) );
if ( apply_filters( 'ec_switch_to_old_epc_method', false ) ) {
$output = str_replace('</a> (', '</a> <span class="count">(', $output);
$output = str_replace(')', ')</span>', $output);
} else {
$output = str_replace('</a> (', ' <span class="count">(', $output);
$output = str_replace(')', ')</span></a>', $output);
}
echo '<ul class="product-categories ' . esc_attr( $el_class ) . '">';
echo wp_kses_post( $output );
echo '</ul>';
echo wp_kses_post( $args['after_widget'] );
}
public function update( $new_instance, $old_instance ) {
$instance = array();
if ( ! empty( $new_instance['count'] ) ) {
$instance['count'] = strip_tags( stripslashes($new_instance['count']) );
}
if ( ! empty( $new_instance['hide_empty'] ) ) {
$instance['hide_empty'] = strip_tags( stripslashes($new_instance['hide_empty']) );
}
return $instance;
}
public function form( $instance ) {
global $wp_registered_sidebars;
$count = isset( $instance['count'] ) ? $instance['count'] : '';
$hide_empty = isset( $instance['hide_empty'] ) ? $instance['hide_empty'] : '';
// If no sidebars exists.
if ( !$wp_registered_sidebars ) {
echo '<p>'. esc_html__('No sidebars are available.', 'electro' ) .'</p>';
return;
}
?>
<p>
<input id="<?php echo esc_attr( $this->get_field_id( 'count' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'count' ) ); ?>" type="checkbox" value="1" <?php checked( $count, 1 ); ?> />
<label for="<?php echo esc_attr( $this->get_field_id( 'count' ) ); ?>"><?php esc_html_e( 'Show Product Count:', 'electro' ) ?></label>
</p>
<p>
<input id="<?php echo esc_attr( $this->get_field_id( 'hide_empty' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hide_empty' ) ); ?>" type="checkbox" value="1" <?php checked( $hide_empty, 1 ); ?> />
<label for="<?php echo esc_attr( $this->get_field_id( 'hide_empty' ) ); ?>"><?php esc_html_e( 'Hide Empty:', 'electro' ) ?></label>
</p>
<?php
}
}
endif;