Woocommerce缺货商品:如何让产品描述在变体前正常显示?
解决WooCommerce缺货商品产品描述不显示问题
问题根源
当商品缺货时,WooCommerce默认不会渲染「添加到购物车」表单,导致woocommerce_before_add_to_cart_form钩子无法触发,你挂载的产品描述自然不会显示。
解决方案
优先推荐使用更通用的钩子替代,避免依赖表单渲染逻辑:
方案1:改用woocommerce_single_product_summary钩子
这个钩子在产品摘要区域始终触发,不受库存状态影响,且能精准控制显示位置:
// 移除默认产品描述的原有挂载 remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20); // 将产品描述挂载到变体/加购按钮之前的位置 add_action('woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 15);
- 默认产品描述的优先级是20,变体及加购按钮相关内容一般在25-30区间,设置为15可确保描述显示在它们之前。
- 如果是你自定义的描述内容,可替换为自己的输出函数:
add_action('woocommerce_single_product_summary', 'render_my_custom_product_description', 15); function render_my_custom_product_description() { // 自定义描述输出逻辑,例如调用产品内容或自定义字段 echo '<div class="product-custom-description">' . get_the_content() . '</div>'; }
方案2:修改缺货商品模板(不推荐,需维护)
如果坚持使用原钩子,需覆盖WooCommerce的产品模板,确保缺货状态下仍触发钩子:
- 复制WooCommerce模板文件(如
single-product/add-to-cart/variable.php或simple.php)到你的主题目录对应的woocommerce/子文件夹中。 - 修改缺货判断代码,在分支中手动触发钩子:
<?php if ( $product->is_in_stock() ) : ?> <?php do_action( 'woocommerce_before_add_to_cart_form' ); ?> <!-- 原表单代码 --> <?php do_action( 'woocommerce_after_add_to_cart_form' ); ?> <?php else : ?> <?php do_action( 'woocommerce_before_add_to_cart_form' ); ?> <!-- 缺货提示内容 --> <?php do_action( 'woocommerce_after_add_to_cart_form' ); ?> <?php endif; ?>
注意:WooCommerce版本更新时,需要同步更新模板文件,否则可能出现兼容问题。
内容的提问来源于stack exchange,提问作者Fredrik
相关产品推荐
相关产品推荐

