【问题标题】:How do I move the apply coupon input below the order on the checkout page in Woocommerce?如何在 Woocommerce 的结帐页面上将应用优惠券输入移动到订单下方?
【发布时间】:2021-09-02 18:33:58
【问题描述】:

在 woocommerce 结帐页面上,我想移动应用优惠券输入所在的字段,并将其放在订单摘要下方和付款选项上方。我不确定如何更改 php,因为结帐页面由多个 php 文件组成,因此我来找你天才的人来帮助。有谁知道我怎么能做到这一点?先感谢您! 附言我添加了图片;第一个是页面的上半部分,第二个是页面的后半部分。

【问题讨论】:

  • 是否可以向我们提供指向您网站的链接,以便我们查看结构? - 如果您的网站启用了某种“构造”模式,那么可能是您所看到的屏幕截图?
  • 不幸的是,我目前正在使用本地主机来构建站点。你想要一些屏幕截图吗? @Frits
  • 啊,真不幸。是的,截图将是下一个最好的东西:)
  • @Frits 你去 :)

标签: php css woocommerce


【解决方案1】:

@noufalcep 你的回答不清楚。

最后,我想出了一个可行的解决方案。我正在使用 woocommerce 3.2.5 和 4.8.3 的 wordpress 版本。

正如@noufalcep 所说,表格内的表格不是问题。当我们这样做时

add_action(‘woocommerce_checkout_after_order_review’, ‘woocommerce_checkout_coupon_form’);

优惠券容器不包含表单元素。但按钮已提交为输入类型。这就是为什么当我们申请优惠券时,主表单会被提交。

因此,我所做的是使用 jquery insertAfter 插入优惠券表格。下面是代码。它运行良好。

 var coupon = $(".checkout_coupon");
 coupon.insertAfter('.shop_table.woocommerce-checkout-review-order-table');

然后这将在审查订单表后添加表单。如果你想用“有优惠券?点击这里输入你的代码”文本,你必须用表格包装元素。

可以在这里看到一个工作示例, https://themovementfix.com/checkout/

【讨论】:

  • 这段代码对你有用吗?我已经测试过,但它不适合我,你能提供完整的代码吗??
  • 是的,它有效。只需转到上面的链接并进行测试。你是在准备好的事件中写这个吗?
  • 您的代码对我有用,谢谢您的代码非常好,谢谢。这应该是选定的答案。我要投赞成票
【解决方案2】:

如果您喜欢在主题目录中编辑 functions.php 文件,则可以添加以下代码行:

remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
add_action( 'woocommerce_after_checkout_form', 'woocommerce_checkout_coupon_form' );

这实际上将删除优惠券(在结帐表格之前挂钩)并在结帐表格之后重新添加。

或者,您可以使用 Javascript 来“剪切和粘贴”包含优惠券字段的 html 块,但这是一种混乱的编码方式,我不建议采用这种方式。

【讨论】:

  • 太棒了!这工作谢谢。所做的就是在付款选项下方添加优惠券输入。您知道如何将其添加到付款选项上方吗?
  • 刚刚修好了!谢谢@Frits
【解决方案3】:

这对我很有用:

添加这个 jQuery:

(function($) {
    $(document).ready(function() { 
        var coupon2 = $(".checkout_coupon.woocommerce-form-coupon");
        coupon2.insertAfter('.shop_table.woocommerce-checkout-review-order-table');
    })
})
(jQuery);

添加这个css:

/*unhide copuon code checkout*/
.checkout_coupon {
 display: block !important;
}
/*hide message have a coupon?*/
.woocommerce-info {
display:none;
}
/*coupon code checkout style*/
.checkout_coupon button.button{
background-color: #insert button color here;
}

【讨论】:

    【解决方案4】:

    在阅读了阻止通常 add_actions 工作的表单问题中的表单后,它启发我在主题的 woocommerce 文件夹中创建一个 form-checkout.php 文件,然后简单地移动订单评论的开始 < form ... > 代码紧跟在 do_action( ‘woocommerce_checkout_before_customer_details’ ); 行之后,然后使用这两行将优惠券表单向下移动到您的订单评论显示下方,它在 WooCommerce 的 v3.0.x 中运行良好:

    remove_action( ‘woocommerce_before_checkout_form’, ‘woocommerce_checkout_coupon_form’, 10 );
    
    add_action( ‘woocommerce_checkout_after_order_review’, ‘woocommerce_checkout_coupon_form’ );
    

    如果不移动起始表单代码,由于表单中提到的表单问题,它不会工作,但一旦移动,就可以轻松工作。

    【讨论】:

      【解决方案5】:

      从 woocommerce 2.6(甚至更早)开始,将其置于“订单审核后”不再有效。如果您申请优惠券,它将自动下订单。这是由表单问题中的表单引起的。

      在 Woocommerce 2.6 中,仅使用钩子,目前只有以下 2 个选项有效:

      选项 1:

      add_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form');
      

      选项 2:

      add_action('woocommerce_after_checkout_form', 'woocommerce_checkout_coupon_form');
      

      【讨论】:

        【解决方案6】:

        这是我将优惠券表格放在帐单总额之后的方式。所以在定制时使用会更有帮助。 只需将此代码放在您的 functions.php 中,然后在前端查看自定义。

            /*
             * Removing default "Coupon form" from the top of the checkout page
             */
            remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
        
            /*
             * Hooking "Coupon form" after order total in checkout page with custom function
             */
            add_action( 'woocommerce_review_order_after_order_total', 'woocommerce_checkout_coupon_form_custom' );
        
            /*
             * Rendering html for "Coupon form" with custom function
             */
            function woocommerce_checkout_coupon_form_custom() {
                echo '<tr class="coupon-form"><td colspan="2">';
                wc_get_template(
                    'checkout/form-coupon.php',
                    array(
                        'checkout' => WC()->checkout(),
                    )
                );
                echo '</td></tr>';
            }
        

        【讨论】:

          【解决方案7】:

          问题是整个结帐页面都在一个表单中,而优惠券也是一个表单。而且您无法嵌套两种形式。因此,即使您可以在技术上将优惠券表格移到评论订单部分上方,它也无法正常工作。您需要重新排列表单并将它们分成两部分以使其正常工作。

          【讨论】:

            【解决方案8】:

            在结帐页面中移动 WooCommerce 优惠券字段
            使用过程:你可以使用任何插件,如 (Code sn-ps) 或 function.PHP 使用代码

            remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
            add_action( 'woocommerce_review_order_after_cart_contents', 'woocommerce_checkout_coupon_form_custom' );
            function woocommerce_checkout_coupon_form_custom() {
                echo '<tr class="coupon-form"><td colspan="2">';
                
                wc_get_template(
                    'checkout/form-coupon.php',
                    array(
                        'checkout' => WC()->checkout(),
                    )
                );
                echo '</tr></td>';
            }
            

            【讨论】:

            • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
            • 您可以通过任何插件使用代码,例如 (Code sn-ps) 或 function.PHP
            【解决方案9】:

            对建议的答案稍作修改:

            remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10);
            add_action('woocommerce_review_order_before_payment', 'woocommerce_checkout_coupon_form');
            

            这会将优惠券输入置于订单下方和支付选项上方。

            【讨论】:

            • 你试过了吗?没有为我工作。无法在结帐表单中移动优惠券。它将提交结帐而不是添加优惠券。
            猜你喜欢
            • 2014-09-08
            • 2021-12-11
            • 2020-03-19
            • 2021-11-01
            • 2021-09-06
            • 1970-01-01
            • 2017-07-13
            • 1970-01-01
            • 2016-02-25
            相关资源
            最近更新 更多