如何从 woocommerce 上的标签云中删除空产品标签
How to remove empty product tags from the tag cloud on woocommerce
我看过很多与此类似的帖子,但没有一个专门解决我遇到的问题。
我需要创建一个功能,允许我从我的 woocommerce 网站上的标签云中删除空标签存档页面,这样它们就不会将用户引导到空白页面。
我发现的唯一允许删除整个标签云的代码是:
add_action( 'widgets_init', 'misha_remove_product_tag_cloud_widget' );
function misha_remove_product_tag_cloud_widget(){
unregister_widget('WC_Widget_Product_Tag_Cloud');
}
我相信这可以与类似此代码的代码结合使用,该代码允许从不同位置删除所有未使用的类别:
add_filter( 'wp_get_nav_menu_items', 'nav_remove_empty_category_menu_item', 10, 3 );
function nav_remove_empty_category_menu_item ( $items, $menu, $args ) {
global $wpdb;
$nopost = $wpdb->get_col( "SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE count = 0" );
foreach ( $items as $key => $item ) {
if ( ( 'taxonomy' == $item->type ) && ( in_array( $item->object_id, $nopost ) ) ) {
unset( $items[$key] );
}
}
return $items;
}
我不确定如何将两者结合使用,但最终结果应该允许任何未使用的产品标签存档页面从标签云中隐藏,直到它们被再次使用或从网站上完全删除 - 但总是阻止用户访问空标签页!
通常情况下,空标签在 WooCommerce 产品标签云小部件中是隐藏的……如果不是这样,您可以使用:
add_filter('woocommerce_product_tag_cloud_widget_args','hide_empty_terms_from_product_tag_cloud_widget');
function hide_empty_terms_from_product_tag_cloud_widget( $args ) {
$args['hide_empty'] = true; // Empty tags not visible
return $args;
}
要使空产品标签在 WooCommerce 产品标签云小部件中可见,请使用:
add_filter('woocommerce_product_tag_cloud_widget_args','show_empty_terms_from_product_tag_cloud_widget');
function show_empty_terms_from_product_tag_cloud_widget( $args ) {
$args['hide_empty'] = false; // Empty tags are visible
return $args;
}
参见wp_tag_cloud()
(used by WooCommerce tag Cloud Widget) and get_terms()
函数。
这个问题在这里得到了更深入的回答:
作为最终解决方案的代码如下:
/* 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');
我看过很多与此类似的帖子,但没有一个专门解决我遇到的问题。
我需要创建一个功能,允许我从我的 woocommerce 网站上的标签云中删除空标签存档页面,这样它们就不会将用户引导到空白页面。
我发现的唯一允许删除整个标签云的代码是:
add_action( 'widgets_init', 'misha_remove_product_tag_cloud_widget' );
function misha_remove_product_tag_cloud_widget(){
unregister_widget('WC_Widget_Product_Tag_Cloud');
}
我相信这可以与类似此代码的代码结合使用,该代码允许从不同位置删除所有未使用的类别:
add_filter( 'wp_get_nav_menu_items', 'nav_remove_empty_category_menu_item', 10, 3 );
function nav_remove_empty_category_menu_item ( $items, $menu, $args ) {
global $wpdb;
$nopost = $wpdb->get_col( "SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE count = 0" );
foreach ( $items as $key => $item ) {
if ( ( 'taxonomy' == $item->type ) && ( in_array( $item->object_id, $nopost ) ) ) {
unset( $items[$key] );
}
}
return $items;
}
我不确定如何将两者结合使用,但最终结果应该允许任何未使用的产品标签存档页面从标签云中隐藏,直到它们被再次使用或从网站上完全删除 - 但总是阻止用户访问空标签页!
通常情况下,空标签在 WooCommerce 产品标签云小部件中是隐藏的……如果不是这样,您可以使用:
add_filter('woocommerce_product_tag_cloud_widget_args','hide_empty_terms_from_product_tag_cloud_widget');
function hide_empty_terms_from_product_tag_cloud_widget( $args ) {
$args['hide_empty'] = true; // Empty tags not visible
return $args;
}
要使空产品标签在 WooCommerce 产品标签云小部件中可见,请使用:
add_filter('woocommerce_product_tag_cloud_widget_args','show_empty_terms_from_product_tag_cloud_widget');
function show_empty_terms_from_product_tag_cloud_widget( $args ) {
$args['hide_empty'] = false; // Empty tags are visible
return $args;
}
参见wp_tag_cloud()
(used by WooCommerce tag Cloud Widget) and get_terms()
函数。
这个问题在这里得到了更深入的回答:
作为最终解决方案的代码如下:
/* 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');