如何在Checkout页面上更改woocommerce错误消息的位置

时间:2015-11-18 21:49:01

标签: php wordpress woocommerce

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

我尝试将此添加到我的functions.php

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

但是这并没有改变错误消息显示在结帐公式上方。

我必须删除哪些操作?

3 个答案:

答案 0 :(得分:4)

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

  1. SCRIPT_DEBUG常量设为true,在 wp-config.php 文件define('SCRIPT_DEBUG', true);
  2. 中执行此操作
  3. woocommerce / assets / js / frontend
  4. 中找到 checkout.js 脚本
  5. 在第396行附近找到wc_checkout_form.$checkout_form.prepend( error_message );
  6. 将其更改为wc_checkout_form.$order_review.append( error_message );
  7. SCRIPT_DEBUG设置为true可以有效地加载开发资源文件,而不是缩小的生产版本,从而可以轻松操作。

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

答案 1 :(得分:2)

可悲的是,最好的方法似乎是使用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 :(得分:0)

您应该能够使用CSS移动它或者将调用它的代码移动到另一个div中 - 如果您要编辑核心主题页面/ css,最好建立一个子主题。 wc-print_notices();中有一个templates/checkout/cart-errors.php的来电,您可以尝试将其放在您想要的位置,并将其与定义消息的页面内容一起打印出来。找到调用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