Last active
August 29, 2015 14:07
-
-
Save ditikos/3ab38a86ce551a260790 to your computer and use it in GitHub Desktop.
Exclude specific products from a woocommerce list using a custom walker.
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
class WooExclude_Walker_Category extends Walker_Category | |
{ | |
/** | |
* 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 $category Category data object. | |
* @param int $depth Depth of category in reference to parents. Default 0. | |
* @param array $args An array of arguments. @see wp_list_categories() | |
* @param int $id ID of the current category. | |
*/ | |
public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { | |
/** This filter is documented in wp-includes/category-template.php */ | |
$cat_name = apply_filters( | |
'list_cats', | |
esc_attr( $category->name ), | |
$category | |
); | |
$link = '<a href="' . esc_url( get_term_link( $category ) ) . '" '; | |
if ( $args['use_desc_for_title'] && ! empty( $category->description ) ) { | |
/** | |
* Filter the category description for display. | |
* | |
* @since 1.2.0 | |
* | |
* @param string $description Category description. | |
* @param object $category Category object. | |
*/ | |
$link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"'; | |
} | |
$link .= '>'; | |
$link .= $cat_name . '</a>'; | |
if ( ! empty( $args['feed_image'] ) || ! empty( $args['feed'] ) ) { | |
$link .= ' '; | |
if ( empty( $args['feed_image'] ) ) { | |
$link .= '('; | |
} | |
$link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $args['feed_type'] ) ) . '"'; | |
if ( empty( $args['feed'] ) ) { | |
$alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ), $cat_name ) . '"'; | |
} else { | |
$alt = ' alt="' . $args['feed'] . '"'; | |
$name = $args['feed']; | |
$link .= empty( $args['title'] ) ? '' : $args['title']; | |
} | |
$link .= '>'; | |
if ( empty( $args['feed_image'] ) ) { | |
$link .= $name; | |
} else { | |
$link .= "<img src='" . $args['feed_image'] . "'$alt" . ' />'; | |
} | |
$link .= '</a>'; | |
if ( empty( $args['feed_image'] ) ) { | |
$link .= ')'; | |
} | |
} | |
if ( ! empty( $args['show_count'] )) { | |
$pargs = array( | |
'post_type' => 'product', | |
'post_status' => 'publish', | |
'tax_query' => array( | |
array( | |
'taxonomy' => $category->taxonomy, | |
'field' => 'term_id', | |
'terms' => $category->term_id | |
) | |
), | |
'meta_query' => array( | |
array( | |
'key' => 'special', | |
'compare' => 'NOT EXISTS' | |
) | |
) | |
); | |
$pplist = new WP_Query($pargs); | |
wp_reset_postdata(); | |
// Original count | |
// $link .= ' (' . number_format_i18n( $category->count ) . ') - '; | |
$link.=' ('.number_format_i18n($pplist->found_posts).')'; | |
} | |
if ( 'list' == $args['style'] ) { | |
$output .= "\t<li"; | |
$class = 'cat-item cat-item-' . $category->term_id; | |
if ( ! empty( $args['current_category'] ) ) { | |
$_current_category = get_term( $args['current_category'], $category->taxonomy ); | |
if ( $category->term_id == $args['current_category'] ) { | |
$class .= ' current-cat'; | |
} elseif ( $category->term_id == $_current_category->parent ) { | |
$class .= ' current-cat-parent'; | |
} | |
} | |
$output .= ' class="' . $class . '"'; | |
$output .= ">$link\n"; | |
} else { | |
$output .= "\t$link<br />\n"; | |
} | |
} | |
} | |
add_filter('woocommerce_product_categories_widget_args','test_filter'); | |
function test_filter($list_args) { | |
$list_args['walker'] = new WooExclude_Walker_Category(); | |
return $list_args; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment