在Woocommerce结账期间保持同一页面并且不会清空购物车会话

时间:2014-10-15 01:37:49

标签: php wordpress session woocommerce cart

我正在创建一个额外的插件,这是一个使用Woocommerce插件和子主题来定制它的自定义支付网关。

这是有效的,我看到付款表格正确,物品很棒。 我遇到的问题是付款流程选项。

结帐页面有一个支付解决方案的i-frame,只有在创建订单且存在ID时才会显示。并确保我们拥有所有人员的详细信息等。

但是,流程付款会将您带到感谢您的页面。 它还会转储购物车会话。

即使我通过玩弄它将URL重定向回购物车页面,它仍会杀死购物车。

这在正常情况下会没问题,因为我希望它能够进入付款页面,结帐并完成。但是我不想这样做,因为这个站点必须镜像一个当前正在运行的站点以及它是如何工作的。

我的扩展类中的函数就是这个。

        public function process_payment( $order_id ) {

        global $woocommerce;

        #$order = wc_create_order();
        ///
        $order = new WC_Order( $order_id ); 

        // Mark as on-hold (we're awaiting the cheque)
        $order->update_status('on-hold', __( 'Awaiting Confirmation of Funds', 'woocommerce' ));

        // Reduce stock levels
        ///$order->reduce_order_stock();

        // Remove cart
        //$woocommerce->cart->empty_cart();

        // Return thankyou redirect
        return array(
            'refresh' => true,
            'reload' => false,
            'result' => 'success',
            'redirect' => $this->get_return_url( $order )
        );
        ///return $order_id;
    }

正如你所看到的,我注释掉了清空推车的位置,端点也带来了感谢模板,而不是只停留在同一页面上。

到目前为止,我已经尝试过:

  • 将我的结帐时的代码复制到感谢页面 导致未定义的结帐,因为该进程将其删除 然后
  • 将结束点引用更改为与结帐相同
  • 创建另一个页面并在其上添加相同的短代码

没有任何作用,我已经通过插件,可以看到我可以做的一些事情。

  • 将process_payment函数复制到我的扩展类中 有效地重写它 或
  • 找到类似于下面的过滤器,可以做我需要的过滤器

    add_action('woocommerce_thankyou',function(){

    global $woocommerce;
    $order = new WC_Order();
    if ( $order->status != 'failed' ) {
        wp_redirect( home_url() ); exit; // or whatever url you want
    }
    

    });

我需要的是保持在同一页面上(刷新),就像它检查细节以刷新总数时一样。 创建包含当前详细信息的订单并返回订单号 此时不会杀死购物车会话,所以如果我为了论证而刷新浏览器它会保持活力。 (当人们离开并且在那时创建了一个独特的会话时,我将找到一种方法来杀死购物车。)

在过去的几天里,我一直在与之斗争,并不确定最佳方式。

非常感谢任何帮助或指示。

感谢

岸堤

0 个答案:

没有答案