我需要使用哪个WooCommerce挂钩将优惠券字段放在结账侧边栏之后

时间:2019-12-13 作者:Grzes Slania

在阅读了WooCommerce文档中的钩子之后,我找不到合适的钩子来将东西放在结帐侧边栏之后。有人能告诉我在那个地方需要用哪个钩子吗。请参见下面的附图

到目前为止我试过了woocommerce_after_checkout_formwoocommerce_checkout_after_order_review 而且我的优惠券字段仍然没有放在正确的位置。我不知道该使用什么或搜索什么

enter image description here

2 个回复
最合适的回答,由SO网友:butlerblog 整理而成

有一些重要的事情需要指出,这将有助于你找到一个有希望接近的地方。

首先,优惠券代码条目是与结帐表单分离的表单。您不能将一个表单放在另一个表单中,因为这会与提交过程冲突(本质上,您将错误的数据提交到错误的处理过程)。

您尝试使用动作挂钩处理它的方法是一个很好的初始步骤。然而,您可能需要多做一步,创建一个更符合您愿望的结账模板。

WooCommerce的一个很好的特性是,您不会“锁定”到特定的布局。WC中的布局几乎每个方面都有可定制的模板,包括这个模板-签出表单。

签出表单的模板为form-checkout.php.

首先要做的是确定主题是否已经应用了自定义模板。在主题的根文件夹中查找以下内容:/woocommerce/checkout/form-checkout.php.

如果你的主题有这个文件,很好。使用它。如果没有,则需要从原始WC包中设置自己的自定义模板。WC的默认模板位于WooCommerce插件文件夹中:/templates/checkout/form-checkout.php

将其复制到主题中,作为“/woocommerce/checkout/form checkout”。php\'

希望您使用子主题来存储任何和所有自定义项。

此处提供了有关使用WC模板的其他信息:https://docs.woocommerce.com/document/template-structure/

设置了自定义签出模板后,就可以开始处理布局了。您会注意到,模板(如果从默认模板开始)将包含您所讨论的操作(以及其他一些操作):

woocommerce\\u-before\\u-checkout\\u表客户详细信息woocommerce\\u checkout\\u shipping\\li>

  • woocommerce\\u checkout\\u after\\u customer\\u details\\li>
  • woocommerce\\u checkout\\u before\\u order\\u review\\li>
  • woocommerce\\u checkout\\u order\\u review\\u checkout\\u after\\u order\\u review\\li>
  • woocommerce\\u checkout\\u after\\u checkout\\u表单在那里,但要确保它们被包括在内,因为插件和WooCommerce本身使用这些来将元素应用到表单中。但另一方面,没有特定要求您将它们保留在默认模板中的位置。如果需要调整HTML标记以获得所需内容,可以根据需要移动这些标记和/或根据需要在模板中应用HTML。

    Ultimately, I think that\'s the answer to your question. 您需要直接使用模板中的HTML(以及任何CSS编辑/更改/添加)来确定您的特定布局。这正是模板的作用所在。

  • SO网友:Chetan Vaghela

    不能将窗体与中的一起使用。因为应用优惠券功能本身就是一个表单,所以您不能将优惠券归档在结帐表单中。如果您想将优惠券字段移到“下订单”按钮下方,则必须使用alter解决方案。您可以参考this link. 以下是如何移动woocommerce优惠券的示例。在活动主题的函数中放置以下代码。php文件。您可以根据主题使用CSS设计弹出窗口。

    我已经测试过了,效果很好。弹出式链接:https://prnt.sc/qa69cw优惠券弹出窗口:https://prnt.sc/qa69g4

    1. enqueue jQuery UI js and css for popup

    function ttp_scripts() {
        wp_enqueue_style( \'wp-jquery-ui-dialog\' );
        wp_enqueue_script(\'jquery-ui-dialog\');
    }
    add_action(\'wp_enqueue_scripts\', \'ttp_scripts\');
    

    2. Add coupon filed in popup

    /**
     * Processing before the checkout form to:
     * 1. Hide the existing Click here link at the top of the page.
     * 2. Instantiate the jQuery dialog with contents of 
     *    form.checkout_coupon which is in checkout/form-coupon.php.
     * 3. Bind the Click here link to toggle the dialog.
     **/
    function ttp_wc_show_coupon_js() {
        /* Hide the Have a coupon? Click here to enter your code section                                                
         * Note that this flashes when the page loads and then disappears.                                                
         * Alternatively, you can add a filter on                                                                       
         * woocommerce_checkout_coupon_message to remove the html. */
        wc_enqueue_js(\'$("a.showcoupon").parent().hide();\');
    
        /* Use jQuery UI\'s dialog feature to load the coupon html code                                                  
         * into the anchor div. The width controls the width of the                                                     
         * modal dialog window. Check here for all the dialog options:                                                         
         * http://api.jqueryui.com/dialog/ */
        wc_enqueue_js(\'dialog = $("form.checkout_coupon").dialog({                                                      
                           autoOpen: false,                                                                             
                           width: 500,                                                                                  
                           minHeight: 0,                                                                                
                           modal: false,                                                                                
                           appendTo: "#coupon-anchor",                                                                  
                           position: { my: "left", at: "left", of: "#coupon-anchor"},                                   
                           draggable: false,                                                                            
                           resizable: false,                                                                            
                           dialogClass: "coupon-special",                                                               
                           closeText: "Close",                                                                          
                           buttons: {}});\');
    
        /* Bind the Click here to enter coupon link to load the                                                         
         * jQuery dialog with the coupon code. Note that this                                                               
         * implementation is a toggle. Click on the link again                                                          
         * and the coupon field will be hidden. This works in                                                           
         * conjunction with the hidden close button in the                                                               
         * optional CSS in style.css shown below. */
        wc_enqueue_js(\'$("#show-coupon-form").click( function() {                                                       
                           if (dialog.dialog("isOpen")) {                                                               
                               $(".checkout_coupon").hide();                                                            
                               dialog.dialog( "close" );                                                                
                           } else {                                                                                     
                               $(".checkout_coupon").show();                                                            
                               dialog.dialog( "open" );                                                                 
                           }                                                                                            
                           return false;});\');
    }
    add_action(\'woocommerce_before_checkout_form\', \'ttp_wc_show_coupon_js\', 10);
    

    3. use woocommerce_review_order_after_payment for place link below place order button

    /**                                                                                                                 
     * Show a coupon link below the place order section.                                                                                                      
     * This is the \'coupon-anchor\' div which the modal dialog
     * window will attach to.
     **/
    function ttp_wc_show_coupon() {
        global $woocommerce;
    
        if ($woocommerce->cart->needs_payment()) {
            echo \'<p style="padding-bottom: 5px;"> Have a coupon? <a href="#" id="show-coupon-form">Click here to enter your code</a>.</p><div id="coupon-anchor"></div>\';
        }
    }
    # use this hook for place link below place order button
    add_action(\'woocommerce_review_order_after_payment\', \'ttp_wc_show_coupon\', 10);
    

    相关推荐