【问题标题】:How to change position of woocommerce error messages on Checkout page如何在结帐页面上更改 woocommerce 错误消息的位置
【发布时间】:2016-02-20 20:07:55
【问题描述】:

我正在使用 Woocommerce,并希望将用户在未在表单下方输入必填字段时收到的错误消息定位在结帐按钮之前。

我尝试将其添加到我的 functions.php 中

add_action( 'woocommerce_review_order_before_payment', 'wc_print_notices', 10  );

但这并没有改变结帐公式上方出现的错误消息。

我必须删除哪些操作?

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    遗憾的是,最好的方法似乎是使用 jQuery 事件监听器,接受的答案是一个非常糟糕的主意。

    我也希望采用不同的方式。至少这样您就不必更改核心文件。而且它相当稳定。尽管 WooCommerce 的重大更新如果将来更改类名仍然会破坏它。

    请注意,如果您尝试放入表单本身,它将进入循环。所以在某些情况下可能需要一些额外的检查

    $('form.checkout.woocommerce-checkout').bind('DOMSubtreeModified',function(){
      if ($('ul.woocommerce-error').length) {
        $('ul.woocommerce-error').insertAfter('form.checkout')//where you want to place 
      }
    }); 
    

    【讨论】:

    • 您也可以将上述内容放入短代码中,以便更轻松地将其放置在页面上。
    【解决方案2】:

    要编辑结帐错误的位置,您必须执行以下操作:

    1. SCRIPT_DEBUG常量设置为true,在wp-config.php文件define('SCRIPT_DEBUG', true);中进行
    2. woocommerce/assets/js/frontend 中找到 checkout.js 脚本
    3. 在 396 号线附近找到wc_checkout_form.$checkout_form.prepend( error_message );
    4. 将其更改为wc_checkout_form.$order_review.append( error_message );

    SCRIPT_DEBUG 设置为 true 可以有效地加载开发资源文件,而不是缩小的生产版本,以便于操作。

    这不是一个完美的解决方案,但它确实有效。现在您知道在 DOM 的上下文中有效地设置了结帐错误的位置。

    【讨论】:

    • 我知道你说这不是一个完美的解决方案,但我认为这根本不是一个解决方案 - 编辑核心文件只会在 WooCommerce 更新时擦除你的更改!?
    • 使用非缩小脚本也会影响性能
    【解决方案3】:

    您应该能够使用 CSS 移动它或将调用它的代码段物理移动到不同的 div 中 - 如果您要编辑核心主题页面/css,最好建立一个子主题。在templates/checkout/cart-errors.php 中有一个对wc-print_notices(); 的调用,您可以尝试将其放入任何您希望它与定义消息的页面内容一起打印的位置。找到调用cart-errors.php 页面部分的位。应该是wc_get_template('templates/cart-errors.php', .....) 电话。另见invludes/wc-form-handler.php function checkout_action()

    您可能会发现 remove_action() 而不是 add_action()'wc_print_notices' 上工作,但它可能会导致各种问题。

    参考 https://codex.wordpress.org/Function_Reference/remove_action

    wc_print_notices(); 也出现在templates/chckout/form-checkout.php 中 - 您也可以操作它或将其移动到那里,但需要注意与上述相同。

    函数本身位于/includes/wc-notice-functions.php。 还有wc_get_notices(),它返回一个错误通知数组,可以在任何你想要的地方回显。

    这也可能是一个有用的指针,指向正确的方法来摆脱不需要的消息 @XciD 的答案 - 虽然 OP 说它不起作用 wc_clear_notices(); 可能是一个有用的指针。

    Woocommerce checkout page: remove view cart button & other messages

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-05
      • 2019-11-13
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2019-08-02
      • 2015-11-29
      • 2019-08-03
      相关资源
      最近更新 更多