当前位置: 首页 > 知识库问答 >
问题:

在woocommerce的签出页面中显示更新的数据

朱炳
2023-03-14

问题可能很奇怪:(

我试图显示一些有关折扣的信息,通过短代码与钩的woocommerce_before_checkout_form如果我在购物车页面应用优惠券,并访问结账注意到钩消息显示正确的折扣值,但如果我删除/添加从检出没有显示出来的woocommerce_before_checkout_form钩子我尝试删除和添加该钩子,但仍然短代码值不更新,我测试了很多次以下功能可以有人有一些工作的想法/建议将是伟大的

<?php

/*
 * Plugin Name: Hook Priority
 *
 */

function add_my_shortcode() {
    ob_start();
    global $woocommerce;
    echo $woocommerce->cart->discount_cart;
    return ob_get_clean();
}

add_shortcode('my_shortcode', 'add_my_shortcode');

function add_message_in_checkout() {
    var_dump(do_shortcode('[my_shortcode]'));
}

add_action('woocommerce_before_checkout_form', 'add_message_in_checkout');

function coupon_removed_function( $coupon_code ) {

    remove_all_actions('woocommerce_before_checkout_form');
    remove_shortcode('my_shortcode');
    do_action('woocommerce_before_checkout_form');
}

add_action("woocommerce_removed_coupon", 'coupon_removed_function');

我试着用javascript重新加载页面(刷新实例),它正在工作,除非没有本地wordpress/php解决方案可以克服,否则我不想使用这个。

echo "<script type='text/javascript'>location.reload();</script>";

目前在我这边发生的是

10美元的折扣,我从购物车,然后在结账时,我可以看到10美元的价值,但如果我从结账时删除优惠券,它仍然显示10美元,但它应该是0美元。

提前谢谢。

共有1个答案

邢高爽
2023-03-14

您可以使用jQuery来实现您的结果。

方法:

WooCommerce几乎每次签出页面上发生任何事情时,都会触发jQuery事件updated\u checkout。因此,您可以使用该事件来实现所需的结果。

修改当前代码:

1) 首先添加JS,这样我们就可以在这个JS文件中进行jQuery编码。

因此,修改后,您的代码将看起来像这样:

定制lugin.php

<?php

/*
 * Plugin Name: Hook Priority
 *
 */

function add_my_shortcode() {
    ob_start();
    global $woocommerce;
    echo $woocommerce->cart->discount_cart;
    return ob_get_clean();
}

add_shortcode('my_shortcode', 'add_my_shortcode');

function add_message_in_checkout() {
    //var_dump(do_shortcode('[my_shortcode]'));
    /*Modification*/
    echo '<div class="coupon_value">'.do_shortcode('[my_shortcode]').'</div>'; // Here I have modified it to give class and update value
}

add_action('woocommerce_before_checkout_form', 'add_message_in_checkout');

function coupon_removed_function( $coupon_code ) {

    remove_all_actions('woocommerce_before_checkout_form');
    remove_shortcode('my_shortcode');
    do_action('woocommerce_before_checkout_form');
}

add_action("woocommerce_removed_coupon", 'coupon_removed_function');

/*Modifications starts from here*/

/*Action to enqueue Jjavascript in Footer*/
add_action("wp_footer", 'enqueue_plugin_script');

function enqueue_plugin_script(){
    /*Enqueue Custom Javascript to use*/
    wp_enqueue_script( 'custom-script', plugin_dir_url( __FILE__ ).'custom.js', array( 'jquery' ), '1.0.0', true );
    /*Localize parameter to use in JS file*/
    wp_localize_script( 'custom-script', 'custom_values', array(
        'ajaxurl'   => admin_url( 'admin-ajax.php' ),
        'token'     => wp_create_nonce( 'token' )
    ));
}

/*AJAX Event to check for discount*/
add_action('wp_ajax_check_for_coupon', 'check_for_coupon');
add_action('wp_ajax_nopriv_check_for_coupon', 'check_for_coupon');

function check_for_coupon(){
    global $woocommerce;
    $send_json = array();
    $send_json = array('success'=>false);
    if($woocommerce->cart->discount_cart){
        $send_json = array('success'=>true, 'discount'=>$woocommerce->cart->discount_cart);
    }
    wp_send_json($send_json);
    die();
}

custom.js

/*
 * custom.js
 * @author : Rohil Mistry
 */

(function($){
    $(document).ready(function(){
        /*updated_checkout event*/
        $(document.body).on('updated_checkout', function(){
            /*Make an AJAX call on updated_checkout event*/
            $.ajax({
                type:       'POST',
                url:        custom_values.ajaxurl,
                data:       {action:'check_for_coupon'},
                success:    function( result ) {
                    console.info(result);
                    if(result.success){
                        $(".coupon_value").html(result.discount);
                    }
                    else{
                        $(".coupon_value").html('');
                    }
                }
            });
        });
    });
})(jQuery);

在代码中找到我的内联注释以理解代码。

如果你有任何疑问,请告诉我。

 类似资料:
  • 我在我的主题functions.php文件中有一个函数,它显示了一些关于产品的信息。在账单地址下面的结账页面上,我想把信息放在那里。 这是我在主题函数中的函数。php 我已尝试在帐单地址下方使用“添加过滤器”,但不起作用: 所有我需要的是下面的航运信息和上面的输出我认为应该工作? 谢啦 J

  • 我键入这段代码来刮一个更新的数据(数字)。我不知道如何在一个网站上的一张桌子上展示它们。我知道我应该使用(Django或flask)但我不知道如何使用它们:)。我只想在一张表上显示这些更新的数字。我在Vs代码上使用HTML和python。下面是我的刮刮代码: 以下是更新的(逐日)数据结果: 谢谢:)

  • 我一直在与Wordpress和Woocommerce合作,在我的管理产品页面中添加一个自定义元字段。我有一切工作正常,除了当我保存产品时,它不会显示我在我的元框中输入的信息。 我检查了数据库,数据确实保存了,我看到我在值中输入的数据,元字段名在元键中。这让我相信,除了在产品保存后在管理产品页面上显示价值外,其他一切都在运行。 我认为问题在于这两个函数中的一个,但不确定,它可能在save函数中,尽管

  • 我正在尝试创建一个页面与木商产品类别在标签。 我的选项卡菜单正在工作,但我需要在每个选项卡内容区域中运行一个查询到相应的类别。 但当我单击每个选项卡时,选项卡内容显示了类别中不属于当前选项卡的所有帖子。我没有得到正在出现的问题,请帮助我解决问题 下面是我的代码: 问题是它显示每个类别的所有post。我粘在上面了..请帮帮我

  • 我删除了一些数据,在这个数据框中得到了结果: 我只想在此HTML页面中显示:(病例、死亡、康复、危急): 最后的结果应该是这样的与我的刮削代码(它将显示没有CSS) 我是HTML的初学者:(我没有使用像flask或Django之类的web框架

  • 问题内容: 我在JSF页面中有这3个字段 我也有一个具有以下属性的后备豆: 我希望在将某些值插入字段val1和val2中而不刷新页面时,outputText元素自动更改其值。结果变量应以这种方式计算(它正在计算百分比):(val1 * val2)/ 100 您能帮我解决我的一些疑问吗?: 我知道为此,我需要javascript或AJAX之类的东西。您认为最好的方法是什么? 我很想知道我如何使用AJ