【问题标题】:Woocommerce Cart not clearingWoocommerce 购物车未清除
【发布时间】:2019-03-21 18:28:15
【问题描述】:

我知道会有这类问题,但我尝试了几乎所有选项都没有运气,所以我在这里问。

我的问题是,订单完成后,woocommerce 中的cart 不为空,而且一些用户只是将商品添加到购物车然后不去结账,并且在某天再次回来后,他们仍然会看到旧购物车。

我认为这可能是缓存问题,因为我正在使用W3-total-cache 插件。

我想在结帐后清除购物车数据,或者如果用户将商品添加到购物车而不是结帐,一段时间后再次回来购物,那么购物车必须是空的,并且不应将旧会话存储到购物车。

我尝试了下面的代码,但没有运气:

function nom_empty_cart_init_login(){
    $opt = get_option('nom_empty_cart_browser_close_do_login');
    $opt = $opt != 1 ? false : true;

    if( $opt ){
        session_destroy();
    }
}

//  destroy session on user logout
function nom_empty_cart_init_logout(){
    $opt = get_option('nom_empty_cart_browser_close_do_logout');
    $opt = $opt != 1 ? false : true;

    if( $opt ){
        session_destroy();
    }
}

add_action('admin_menu','nom_empty_cart_init_admin_init');
function nom_empty_cart_init_admin_init(){
    add_options_page( 'Woocommerce Clear Cart on Browser Closing', 'WC Clear Cart on Browser Close', 'manage_options', 'wc-clear-cart-on-browser-close', 'wc_clear_cart_on_browser_close' );    
}

function wc_clear_cart_on_browser_close(){

    if( isset( $_REQUEST['save_accconc'] ) and wp_verify_nonce($_REQUEST['wc-clear-cart-on-browser-close-name'],'wc-clear-cart-on-browser-close-action')):

        //  SAVING THE FORM DATA

            //  enable wcccobc
            if( isset($_REQUEST['enable_wcccobc']) )
                update_option('nom_empty_cart_browser_close_enable',1);

            //  enable wcccobc on login
            if( isset($_REQUEST['enable_wcccobc_on_login']) )
                update_option('nom_empty_cart_browser_close_do_login',1);

            //  enable wcccobc on logout
            if( isset($_REQUEST['enable_wcccobc_on_logout']) )
                update_option('nom_empty_cart_browser_close_do_logout',1);


        //  SAVING ;) ENDS

    endif;

    ?>
    <div class="wrap">
        <div class="inside">
            <h2>Woocommerce Clear Cart on Browser Closing</h2>
            <p>Note: the cart will be empty if the visitor close the whole browser, not just the widow. (will be updated soon)</p>

            <form action="<?php admin_url('options-general.php?page=wc-clear-cart-on-browser-close');?>" method="post">
                <?php wp_nonce_field('wc-clear-cart-on-browser-close-action','wc-clear-cart-on-browser-close-name')?>
                <p>
                    <input id="enable_wcccobc" type="checkbox" class="checkbox" name="enable_wcccobc" value="1" <?php checked(get_option('nom_empty_cart_browser_close_enable'),'1');?>>
                    <label for="enable_wcccobc" >Enable clear cart on browser closing</label>                   
                </p>
                <p>
                    <input id="enable_wcccobc_on_login" type="checkbox" class="checkbox" name="enable_wcccobc_on_login" value="1" <?php checked(get_option('nom_empty_cart_browser_close_do_login'),1);?>>
                    <label for="enable_wcccobc_on_login" >Enable clear cart on on user login</label>                    
                </p>
                <p>
                    <input id="enable_wcccobc_on_logout" type="checkbox" class="checkbox" name="enable_wcccobc_on_logout" value="1" <?php checked(get_option('nom_empty_cart_browser_close_do_logout'),1);?>>
                    <label for="enable_wcccobc_on_logout">Enable clear cart on user logout</label>                  
                </p>
                <p>
                    <input type="submit" class="button-primary" value="Save" name="save_accconc">
                </p>
            </form>
        </div>
    </div>
    <?php 
}

【问题讨论】:

  • 关于结帐后购物车不清除,您是否尝试过禁用除 woocommerce 以外的所有插件并使用默认主题以确保它不是插件/主题冲突?
  • 是的,已经尝试过了,也禁用了 w3 总缓存。

标签: wordpress woocommerce cart checkout w3-total-cache


【解决方案1】:

我正在使用来自@shoelaced 的方法并且它有效。 编辑主题的functions.php

add_action( 'woocommerce_payment_complete', 'order_received_empty_cart_action', 10, 1 );
function order_received_empty_cart_action( $order_id ){
    WC()->cart->empty_cart();
}

【讨论】:

  • 自定义插件对于这类事情来说是一个更好的地方,只需在名为 custom 的插件中创建一个名为 custom 的新文件夹,并使用具有以下标题的 custom.php 文件:/*Plugin Name: Custom Stuff Description: Custom Functions, etc. */
  • @jjxtra - 你能解释一下(或向我指出一些信息)为什么将这一动作放入插件而不是functions.php更好吗?
  • 更新 wordpress 时您的 functions.php 可能会被吹走
  • 仅当您使用 wordpress 主题时。如果您使用的是自定义主题,则 wordpress 更新不会导致您的 functions.php 被吹走
猜你喜欢
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多