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

PHP更新后代码失效:WooCommerce无配送方式时修改结账按钮

问题:WooCommerce更新后购物车页面因自定义代码崩溃

此前使用以下来自Stack Overflow的代码,通过Code Snippets插件运行3个月均正常。但在完成PHP、WordPress及WooCommerce更新后,启用该代码时购物车页面崩溃无法正常工作。

原代码

add_action( 'woocommerce_proceed_to_checkout', 'modify_checkout_button_no_shipping', 1 );
function modify_checkout_button_no_shipping() {
    $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );
    // removes empty values from the array
    $chosen_shipping_methods = array_filter( $chosen_shipping_methods );
    if ( empty( $chosen_shipping_methods ) ) {
        remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
        echo '<a href="'.esc_url(wc_get_checkout_url()).'" class="checkout-button button alt wc-forward">' . __("Informe o seu CEP para prosseguir", "woocommerce") . '</a>';
    }
}

错误日志摘要

PHP Fatal error:  Uncaught TypeError: array_filter(): Argument #1 ($array) must be of type array, null given in /../public_html/wp-content/plugins/code-snippets/php/snippet-ops.php(505) : eval()'d code:5

解决方案

错误根源是WooCommerce更新后,WC()->session->get('chosen_shipping_methods')在未选择配送方式时可能返回null,而非之前的空数组,导致array_filter()接收到非法参数触发致命错误。

修改后的代码如下,核心是确保变量始终为数组类型:

add_action( 'woocommerce_proceed_to_checkout', 'modify_checkout_button_no_shipping', 1 );
function modify_checkout_button_no_shipping() {
    // 确保变量始终是数组,避免null传入array_filter
    $chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );
    // 移除数组中的空值
    $chosen_shipping_methods = array_filter( $chosen_shipping_methods );
    
    if ( empty( $chosen_shipping_methods ) ) {
        remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
        echo '<a href="'.esc_url(wc_get_checkout_url()).'" class="checkout-button button alt wc-forward">' . __("Informe o seu CEP para prosseguir", "woocommerce") . '</a>';
    }
}

修改说明

  • 使用(array)强制转换WC()->session->get()的返回值,无论返回null还是数组,最终都会转为数组类型
  • 保留原有逻辑,仅修复类型不匹配问题,确保代码兼容更新后的WooCommerce版本

内容的提问来源于stack exchange,提问作者Agência Fiber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:10:40