WooCommerce - 将产品标签云变成复杂的优化功能
WooCommerce - Turning the product tag cloud into a complex refine feature
问题:我怎样才能将这两个代码块组合起来,使它们作为一个代码块工作?
我不需要任何短代码解决方案,我更喜欢第一段代码中使用的函数格式,但是第二段代码具有一些基本功能。
我设法构建的第一个代码块允许 WooCommerce 产品标签云受益于以下高级功能:
- 按字母顺序排列的列表。
- 显示产品总数量。
- 如果列表变得太长,则使用动态调整大小和可滚动溢出框。
- 如果产品存档级别变为空(即没有 'in stock' 产品显示),则整个标签级别将被隐藏。
- 隐藏的产品标签级别然后自动 302 重定向到顶级 'shop' 页面。
实现的代码如下:
/* 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');
第二个代码块允许产品标签云以与您期望精炼块相同的方式动态工作 - 仅在每个产品类别级别显示相关产品标签。
简码如下:
[custom_product_tags]
代码如下:
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;
}
试试下面的代码片段:
/* 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>';
}
}
问题:我怎样才能将这两个代码块组合起来,使它们作为一个代码块工作?
我不需要任何短代码解决方案,我更喜欢第一段代码中使用的函数格式,但是第二段代码具有一些基本功能。
我设法构建的第一个代码块允许 WooCommerce 产品标签云受益于以下高级功能:
- 按字母顺序排列的列表。
- 显示产品总数量。
- 如果列表变得太长,则使用动态调整大小和可滚动溢出框。
- 如果产品存档级别变为空(即没有 'in stock' 产品显示),则整个标签级别将被隐藏。
- 隐藏的产品标签级别然后自动 302 重定向到顶级 'shop' 页面。
实现的代码如下:
/* 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');
第二个代码块允许产品标签云以与您期望精炼块相同的方式动态工作 - 仅在每个产品类别级别显示相关产品标签。
简码如下:
[custom_product_tags]
代码如下:
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;
}
试试下面的代码片段:
/* 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>';
}
}