如何在ACF重复器无文件时隐藏WooCommerce自定义产品标签?
解决WooCommerce自定义标签在无文件时不显示的问题
你的问题出在当前判断逻辑仅检查ACF重复器字段letoltheto_katalogusok是否存在,但即便重复器内的行未填写任何文件,get_field()仍会返回包含空行的数组,导致标签依旧显示。
解决方案
修改woostify_custom_tab函数的判断条件,既要确认重复器有行,还要遍历行内容,检查是否存在至少一个有效的文件字段:
add_filter( 'woocommerce_product_tabs', 'woostify_custom_tab' ); function woostify_custom_tab( $tabs ) { // 获取重复器字段数据 $catalogues = get_field('letoltheto_katalogusok'); $has_valid_file = false; // 遍历重复器行,验证是否有非空文件 if ( $catalogues ) { foreach ( $catalogues as $catalogue ) { $file = $catalogue['letoltheto_katalogus']; $file2 = $catalogue['letoltheto_katalogusa']; $file3 = $catalogue['letoltheto_katalogusb']; // 只要存在一个有效文件,就标记为符合显示条件 if ( !empty($file) || !empty($file2) || !empty($file3) ) { $has_valid_file = true; break; // 找到有效文件后停止遍历,提升效率 } } } // 仅当存在有效文件时,添加自定义标签 if ( $has_valid_file ) { $tabs['tab-catalogues'] = array( 'title' => 'Letölthető katalógus', 'callback' => 'woostify_custom_tab_content', 'priority' => 25, ); } return $tabs; } function woostify_custom_tab_content( $slug, $tab ) { if (have_rows('letoltheto_katalogusok')) { while (have_rows('letoltheto_katalogusok')) { the_row(); $file = get_sub_field('letoltheto_katalogus'); $file2 = get_sub_field('letoltheto_katalogusa'); $file3 = get_sub_field('letoltheto_katalogusb'); ?> <br> <div class="katalogusok"> <?php if ( !empty($file) ) : ?> <a href="<?php echo $file['url']; ?>" target="_blank" ><?php echo $file['filename']; ?></a> <?php endif; ?> <?php if ( !empty($file2) ) : ?> <a href="<?php echo $file2['url']; ?>" target="_blank" ><?php echo $file2['filename']; ?></a> <?php endif; ?> <?php if ( !empty($file3) ) : ?> <a href="<?php echo $file3['url']; ?>" target="_blank" ><?php echo $file3['filename']; ?></a> <?php endif; ?> </div> <?php } } }
关键修改说明
- 标签显示逻辑:新增重复器行遍历验证,只有存在至少一个有效文件时才加载自定义标签。
- 内容输出优化:给每个文件链接添加非空判断,避免页面出现无效的空
<a>标签。
修改后,当重复器内没有任何有效文件时,自定义标签将不再显示。
内容的提问来源于stack exchange,提问作者vicartdesign
相关产品推荐
相关产品推荐

