實用的 WordPress ICP 備案許可管理器

如何在 WooCommerce 產品類別選單中新增計數的指向連結

可以透過製作其定義的 walker 類的副本並對其進行編輯來操作 WooCommerce 產品類別選單。

該 WC_Product_Cat_List_walker 類就在 woocommerce/includes/walkers/class-product-cat-list-walker.php,可以使這個副本,並將其包含在你的子主題,包括它。最好在您的子主題中建立一個類子資料夾並在那裡新增檔案 – 然後透過您的 functions.php 檔案將其包含在內…

require_once( get_stylesheet_directory() . '/classes/class-product-cat-list-walker.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;

 

文章沒看懂?程式碼不會用?需要幫助您可以

小新 的頭像