Last active
September 16, 2021 14:17
-
-
Save neilgee/480cd8b274e2995631216a21175554e9 to your computer and use it in GitHub Desktop.
WooCommerce Product Category Menu Walker Class
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* WC_Product_Cat_List_Walker class | |
* | |
* @extends Walker | |
* @class WC_Product_Cat_Dropdown_Walker | |
* @version 2.3.0 | |
* @package WooCommerce/Classes/Walkers | |
* @author WooThemes | |
*/ | |
if ( ! defined( 'ABSPATH' ) ) { | |
exit; // Exit if accessed directly | |
} | |
if ( ! class_exists( 'WC_Product_Cat_List_Walker', false ) ) : | |
class WC_Product_Cat_List_Walker extends Walker { | |
/** | |
* What the class handles. | |
* | |
* @var string | |
*/ | |
public $tree_type = 'product_cat'; | |
/** | |
* DB fields to use. | |
* | |
* @var array | |
*/ | |
public $db_fields = array( | |
'parent' => 'parent', | |
'id' => 'term_id', | |
'slug' => 'slug', | |
); | |
/** | |
* Starts the list before the elements are added. | |
* | |
* @see Walker::start_lvl() | |
* @since 2.1.0 | |
* | |
* @param string $output Passed by reference. Used to append additional content. | |
* @param int $depth Depth of category. Used for tab indentation. | |
* @param array $args Will only append content if style argument value is 'list'. | |
*/ | |
public function start_lvl( &$output, $depth = 0, $args = array() ) { | |
if ( 'list' != $args['style'] ) { | |
return; | |
} | |
$indent = str_repeat( "\t", $depth ); | |
$output .= "$indent<ul class='children'>\n"; | |
} | |
/** | |
* Ends the list of after the elements are added. | |
* | |
* @see Walker::end_lvl() | |
* @since 2.1.0 | |
* | |
* @param string $output Passed by reference. Used to append additional content. | |
* @param int $depth Depth of category. Used for tab indentation. | |
* @param array $args Will only append content if style argument value is 'list'. | |
*/ | |
public function end_lvl( &$output, $depth = 0, $args = array() ) { | |
if ( 'list' != $args['style'] ) { | |
return; | |
} | |
$indent = str_repeat( "\t", $depth ); | |
$output .= "$indent</ul>\n"; | |
} | |
/** | |
* Start the element output. | |
* | |
* @see Walker::start_el() | |
* @since 2.1.0 | |
* | |
* @param string $output Passed by reference. Used to append additional content. | |
* @param object $cat | |
* @param int $depth Depth of category in reference to parents. | |
* @param array $args | |
* @param integer $current_object_id | |
*/ | |
public function start_el( &$output, $cat, $depth = 0, $args = array(), $current_object_id = 0 ) { | |
$output .= '<li class="cat-item cat-item-' . $cat->term_id; | |
if ( $args['current_category'] == $cat->term_id ) { | |
$output .= ' current-cat'; | |
} | |
if ( $args['has_children'] && $args['hierarchical'] && ( empty( $args['max_depth'] ) || $args['max_depth'] > $depth + 1 ) ) { | |
$output .= ' cat-parent'; | |
} | |
if ( $args['current_category_ancestors'] && $args['current_category'] && in_array( $cat->term_id, $args['current_category_ancestors'] ) ) { | |
$output .= ' current-cat-parent'; | |
} | |
$output .= '"><a href="' . get_term_link( (int) $cat->term_id, $this->tree_type ) . '">' . _x( $cat->name, 'product category name', 'woocommerce' ) . '</a>'; | |
// Outputting the count in a link to the category archive | |
if ( $args['show_count'] ) { | |
$output .= '<a href="' . get_term_link( (int) $cat->term_id, $this->tree_type ) . '"> <span class="count">(' . $cat->count . ')</span></a>'; | |
} | |
} | |
/** | |
* Ends the element output, if needed. | |
* | |
* @see Walker::end_el() | |
* @since 2.1.0 | |
* | |
* @param string $output Passed by reference. Used to append additional content. | |
* @param object $cat | |
* @param int $depth Depth of category. Not used. | |
* @param array $args Only uses 'list' for whether should append to output. | |
*/ | |
public function end_el( &$output, $cat, $depth = 0, $args = array() ) { | |
$output .= "</li>\n"; | |
} | |
/** | |
* Traverse elements to create list from elements. | |
* | |
* Display one element if the element doesn't have any children otherwise, | |
* display the element and its children. Will only traverse up to the max. | |
* depth and no ignore elements under that depth. It is possible to set the. | |
* max depth to include all depths, see walk() method. | |
* | |
* This method shouldn't be called directly, use the walk() method instead. | |
* | |
* @since 2.5.0 | |
* | |
* @param object $element Data object | |
* @param array $children_elements List of elements to continue traversing. | |
* @param int $max_depth Max depth to traverse. | |
* @param int $depth Depth of current element. | |
* @param array $args | |
* @param string $output Passed by reference. Used to append additional content. | |
* @return null Null on failure with no changes to parameters. | |
*/ | |
public function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) { | |
if ( ! $element || ( 0 === $element->count && ! empty( $args[0]['hide_empty'] ) ) ) { | |
return; | |
} | |
parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output ); | |
} | |
} | |
endif; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment