You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Woocommerce的woocommerce_single_product_summary钩子转为短码并避免无限循环?

问题分析与解决方案

你的需求完全可行,出现无限循环的原因是:当短码执行do_action('woocommerce_single_product_summary')时,该钩子的部分回调内容会触发Gutenberg的短码解析机制,导致短码被重复调用,进而无限循环执行do_action。

下面提供两种可行的修正方案:

方案一:临时移除短码注册

执行钩子前先移除短码,避免循环触发,执行完成后再恢复注册:

function getsummary_shortcode( $atts ) {
    // 临时移除短码注册,防止循环调用
    remove_shortcode('getsummary');
    
    ob_start();
    do_action( 'woocommerce_single_product_summary' );
    $woocommerce_single_product = ob_get_clean();
    
    // 恢复短码注册,保障其他场景可正常使用
    add_shortcode('getsummary','getsummary_shortcode');
    
    return $woocommerce_single_product;
}
add_shortcode('getsummary','getsummary_shortcode');

方案二:用全局变量标记执行状态

通过全局变量判断短码是否正在执行,避免重复触发:

function getsummary_shortcode( $atts ) {
    global $is_running_getsummary;
    
    // 若短码已在执行流程中,直接返回空内容
    if ( $is_running_getsummary ) {
        return '';
    }
    
    $is_running_getsummary = true;
    
    ob_start();
    do_action( 'woocommerce_single_product_summary' );
    $woocommerce_single_product = ob_get_clean();
    
    $is_running_getsummary = false;
    
    return $woocommerce_single_product;
}
add_shortcode('getsummary','getsummary_shortcode');

注意事项

  • 在产品页面Gutenberg编辑器中插入[getsummary]短码后,需避免内容重复:
    • 若用子主题,直接修改子主题的single-product.php模板,移除原有的do_action('woocommerce_single_product_summary')调用;
    • 若不想修改模板,可在functions.php中通过钩子移除默认的summary内容输出:
      // 移除默认的产品summary各模块
      remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5);
      remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10);
      remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);
      remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20);
      remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
      remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40);
      remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_sharing', 50);
      

内容的提问来源于stack exchange,提问作者Emma W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:43:11