QUESTION: How am I able to combine these two blocks of code so they work as one?
I do not require any shortcode solutions, I prefer the function format used in the first block of code, however the second block has some essential functionality.
The first block of code I have managed to construct allows for the WooCommerce product tag cloud to benefit from the following advanced features:
The code to achieve this is as follows:
/* TURN PRODUCT TAG CLOUD INTO ALPHABETICAL LIST WITH TAG TOTALS COUNT VISIBLE */
function woocommerce_product_tag_cloud_widget_filter($args) {
$args = array(
'smallest' => 14,
'largest' => 14,
'format' => 'list',
'taxonomy' => 'product_tag',
'unit' => 'px',
'show_count' => 1,
'number' => 0,
);
echo "<div style='padding-left: 20px; min-height: 50px; max-height: 400px; overflow: auto;'>";
return $args;
echo "</div>";
}
add_filter('woocommerce_product_tag_cloud_widget_args', 'woocommerce_product_tag_cloud_widget_filter');
/* HIDE PRODUCT TAG ARCHIVE PAGES WHEN THEY HAVE NO 'IN STOCK' PRODUCTS */
function hide_empty_tags( $terms, $taxonomies) {
$new_terms = array();
if ( in_array( 'product_tag', $taxonomies ) && ! is_admin() ) {
foreach ( $terms as $key => $term ) {
if ($term->count >0){
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
add_filter( 'get_terms', 'hide_empty_tags', 10, 3 );
/* REDIRECTS TO SHOP IF THERE ARE NO 'IN STOCK' PRODUCTS IN THE PRODUCT TAG ARCHIVE PAGE */
function redirect_to_shop(){
global $wp_query;
if( is_woocommerce() && $wp_query->post_count == 0 ){
the_post();
$post_url = "/shop";
wp_safe_redirect($post_url , 302 );
exit;
}
}
add_action('template_redirect', 'redirect_to_shop');
The second block of code allows the product tag cloud to work dynamically in the same way you would expect a refine block to work - only showing relevant product tags at each product category level.
The shortcode is as follows:
[custom_product_tags]
The code is as follows:
add_shortcode('custom_product_tags', 'custom_product_tag_cloud_func');
function custom_product_tag_cloud_func() {
if (is_shop()) {
//return all tags
$content = '<div class="widget_product_tag_cloud"><div class="tagcloud">';
$tags = wp_tag_cloud(array(
'format' => 'array',
'taxonomy' => 'product_tag',
'link' => 'view'
));
foreach ($tags as $tag) {
$content .= $tag;
}
$content .= '</div></div>';
return $content;
}
global $wp;
$current_slug = add_query_arg( array(), $wp->request );
if(strpos($current_slug, '/') !== false) {
// explodable
$newtest = explode('/', $current_slug);
$current_slug = array_pop($newtest);
}
$args = array(
'category' => array( $current_slug ),
'limit' => -1
);
$products = wc_get_products( $args );
$tags_objects = array();
foreach ($products as $product) {
$tags = get_the_terms( $product->get_id(), 'product_tag' );
foreach ($tags as $tag) {
$slug = $tag->slug;
$cat_slug = add_query_arg( array(), $wp->request );
$tag->link = get_site_url()."/".$cat_slug."?product_tag=".$slug;
array_push($tags_objects, $tag);
}
}
$tags_objects = array_unique($tags_objects, SORT_REGULAR);
$tag_cloud = wp_generate_tag_cloud($tags_objects);
$content = '<div class="widget_product_tag_cloud"><div class="tagcloud">';
$content .= $tag_cloud;
$content .= '</div></div>';
return $content;
}
Try the below code Snippet:
/* CREATE A DYNAMIC PRODUCT TAG LIST - WITH SHORTCODE - WHICH ACTS DYNAMICALLY BASED ON WHERE YOU ARE WITHIN THE WEBSITE */
add_shortcode('dynamic_tag_cloud', 'custom_product_tag_cloud_func');
function custom_product_tag_cloud_func() {
if (is_shop()) {
$args= array(
'smallest' => 14,
'largest' => 14,
'format' => 'list',
'taxonomy' => 'product_tag',
'unit' => 'px',
'show_count' => 1,
'number' => 0,
);
echo'<div class="widget woocommerce widget_product_tag_cloud"><span class="gamma widget-title">Related tags</span><div class="tagcloud" style="min-height: 50px; max-height: 300px; overflow: auto;"><ul class="wp-tag-cloud">';
wp_tag_cloud($args);
echo '</ul></div></div>';
}
global $wp;
$current_slug = add_query_arg( array(), $wp->request );
if(strpos($current_slug, '/') !== false) {
$newtest = explode('/', $current_slug);
$current_slug = array_pop($newtest);
}
$args = array(
'category' => array( $current_slug ),
'limit' => -1,
);
$products = wc_get_products( $args );
$tags_objects = array();
foreach ($products as $product) {
$tags = get_the_terms( $product->get_id(), 'product_tag' );
foreach ($tags as $tag) {
$slug = $tag->slug;
$cat_slug = add_query_arg( array(), $wp->request );
$tag->link = get_term_link( $tag ); //get_site_url()."/".$cat_slug."?product_tag=".$slug;
array_push($tags_objects,$tag);
}
}
$tags_objects = array_unique($tags_objects, SORT_REGULAR);
$args = array(
'smallest' => 14,
'largest' => 14,
'format' => 'list',
'unit' => 'px',
'show_count' => 1,
'number' => 0,
);
$tag_cloud = wp_generate_tag_cloud($tags_objects,$args);
if(is_product_category()){
echo'<div class="widget woocommerce widget_product_tag_cloud"><span class="gamma widget-title">Related tags</span><div class="tagcloud" style="min-height: 50px; max-height: 300px; overflow: auto;"><ul class="wp-tag-cloud">';
echo $tag_cloud;
echo '</ul></div></div>';
}
}