Skip to content

Instantly share code, notes, and snippets.

@ditikos
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ditikos/3ab38a86ce551a260790 to your computer and use it in GitHub Desktop.
Save ditikos/3ab38a86ce551a260790 to your computer and use it in GitHub Desktop.
Exclude specific products from a woocommerce list using a custom walker.
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