WooCommerce-结账页面中的定制通知错误

时间:2017-10-30 作者:smit

在我的结帐页面中,当我选择不为其发货的县时,我会收到一条错误消息“很遗憾,我们没有收货方ID。请输入其他收货地址。”如何自定义此消息?

1 个回复
SO网友:Jacob Peattie

消息本身是不可过滤的,因此更改它的最简单方法是使用gettext 过滤器:

function wpse_284393_checkout_message( $translated_text, $text, $domain ) {
    if ( $domain !== \'woocommerce\' ) {
        return $translated_text;
    }

    if ( $text = \'Unfortunately <strong>we do not ship %s</strong>. Please enter an alternative shipping address.\' ) {
        $translated_text = \'New message goes here, %s will be replaced with shipping location.\';
    } 

    return $translated_text;
}
add_filter( \'gettext\', \'wpse_284393_checkout_message\', 10, 3 );
But, 这个解决方案的问题是gettext 在WordPress中为每一行文本运行。这意味着将检查每行文本的woocommerce 域,然后将检查WooCommerce中的每一行文本,以查看是否是要替换的文本。这可能是big performance problem.

所以,我们可以用另一种方法来解决这个问题,使用woocommerce_after_checkout_validation 钩此钩子在签出验证结束时激发,并在此处生成错误消息。我们可以使用这个钩子来首先查看错误消息是否存在,如果存在,则用新消息替换它,而不是对消息进行站点范围的文本替换。由于这只会在签出时发生,因此对性能的影响要小得多:

function wpse_284393_checkout_message( $data, $errors ) {
    if ( empty( $errors ) ) {
        return;
    }

    $shipping_error = $errors->get_error_message( \'shipping\' );

    if ( $shipping_error && $shipping_error === \'Unfortunately <strong>we do not ship %s</strong>. Please enter an alternative shipping address.\' ) {
        $errors->remove( \'shipping\' );
        $errors->add( \'shipping\', sprintf( \'My new error message about shipping %s here.\', WC()->countries->shipping_to_prefix() . \' \' . WC()->customer->get_shipping_country() );
    }
}
add_action( \'woocommerce_after_checkout_validation\', \'wpse_284393_checkout_message\' );
通过使用sprintf()WC()->countries->shipping_to_prefix() . \' \' . WC()->customer->get_shipping_country() 我可以设置消息以供使用%s 与原始消息的方式相同。

结束

相关推荐