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

WooCommerce:根据所选支付方式修改结账按钮文本遇问题求助

WooCommerce 按支付方式修改结账提交按钮文本解决方案

问题根源

之前的代码失效或文本自动恢复,是因为WooCommerce结账页在切换支付方式时会触发AJAX刷新,部分前端脚本会重置提交按钮的默认文本,只靠PHP钩子无法持久化修改。

完整解决方案(PHP + JavaScript)

以下代码可实现:页面加载时根据默认选中的支付方式设置按钮文本,切换支付方式时实时更新,同时避免AJAX刷新导致的文本重置。

1. PHP 代码(添加到主题functions.php或自定义插件)

// 注册支付方式对应的按钮文本,方便后续调用
function wc_get_payment_button_texts() {
    return array(
        'cod'    => '确认订单,货到付款',
        'cheque' => '提交订单,等待支票付款',
        'bacs'   => '提交订单,完成银行转账',
        'paypal' => '前往PayPal完成支付' // 可按需添加更多支付方式
    );
}

// 初始加载时设置默认按钮文本
add_filter('woocommerce_order_button_text', 'wc_set_default_payment_button_text');
function wc_set_default_payment_button_text($default_text) {
    $available_gateways = WC()->payment_gateways()->get_available_payment_gateways();
    $selected_method    = WC()->session->get('chosen_payment_method');
    
    // 如果有选中的支付方式,返回对应文本,否则用默认
    if ($selected_method && isset(wc_get_payment_button_texts()[$selected_method])) {
        return wc_get_payment_button_texts()[$selected_method];
    }
    
    // 无选中状态时,默认显示第一个可用支付方式的文本(可选)
    foreach ($available_gateways as $gateway) {
        if (isset(wc_get_payment_button_texts()[$gateway->id])) {
            return wc_get_payment_button_texts()[$gateway->id];
        }
    }
    
    return $default_text;
}

// 将按钮文本数据传递到前端JS
add_action('wp_footer', 'wc_pass_payment_button_texts_to_js');
function wc_pass_payment_button_texts_to_js() {
    if (!is_checkout() || is_wc_endpoint_url()) return;
    
    wp_localize_script('jquery', 'wcPaymentButtonTexts', array(
        'texts' => wc_get_payment_button_texts(),
        'defaultText' => __('Place order', 'woocommerce') // WooCommerce默认按钮文本
    ));
}

2. JavaScript 代码(添加到主题自定义JS或通过PHP输出)

jQuery(document).ready(function($) {
    // 定义更新按钮文本的核心函数
    function updateCheckoutButtonText() {
        var selectedMethod = $('input[name="payment_method"]:checked').val();
        var $submitButton = $('button#place_order');
        
        if (selectedMethod && wcPaymentButtonTexts.texts[selectedMethod]) {
            $submitButton.text(wcPaymentButtonTexts.texts[selectedMethod]);
        } else {
            $submitButton.text(wcPaymentButtonTexts.defaultText);
        }
    }

    // 页面加载完成后执行一次
    updateCheckoutButtonText();

    // 监听支付方式切换事件
    $('form.checkout').on('change', 'input[name="payment_method"]', function() {
        updateCheckoutButtonText();
        // 延迟执行,规避WooCommerce AJAX刷新后的文本重置
        setTimeout(updateCheckoutButtonText, 500);
    });

    // 监听结账页面的AJAX更新事件(如更新购物车、计算运费后)
    $(document.body).on('updated_checkout', function() {
        updateCheckoutButtonText();
    });
});

使用说明

  • PHP代码添加到当前主题的functions.php文件,或创建自定义插件引入。
  • JavaScript代码可通过主题的自定义JS功能添加,或用wp_add_inline_script钩子绑定到前端(推荐后者,避免JS加载顺序问题)。
  • 根据需求修改wc_get_payment_button_texts()函数中的支付方式ID和对应文本。

内容的提问来源于stack exchange,提问作者Brad Harley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:42:18