14

我有一家 WooCommerce 商店(在本地运行),但我想删除支付网关。客户应该可以下订单而无需支付任何费用,我将手动向他们发送发票。

我真的找不到在哪里禁用它,它似乎不是 WooCommerce 的标准。

已尝试禁用后端中的所有支付网关,但您必须启用一个支付网关。

提前致谢!

4

4 回答 4

25

只需在您的主题中的 functions.php 中添加这一行: add_filter('woocommerce_cart_needs_payment', '__return_false');

于 2015-10-09T15:14:49.123 回答
17

启用“货到付款”,结账时不会付款。您可以轻松地将“货到付款”标题和标签更改为“无需付款”或类似名称。

于 2013-05-24T09:39:06.437 回答
4

这个问题的其他答案没有解决的问题是,您需要一种方式让客户最终支付发票。使用货到付款(根据您的需要重命名)完美地完成了不让用户在结帐时实际付款,但问题是如果货到付款是您唯一的付款方式,那么当您向他们发送付款时,它仍然是唯一的付款方式发票。

我认为在大多数情况下,您只需要在购物车结账时使用货到付款,而发票付款方式则需要不同的付款方式(如 Stripe)。

这是创建延期付款设置的完整工作流程。

  1. 就像@crdunst 提到的那样,您应该使用货到付款并将其重命名为“等待发票”或其他名称。
  2. 启用您想要使用的所有支付网关(在此示例中,我们将只使用货到付款和 Stripe。货到付款将是我们的“结帐”支付网关,而 Stripe 将是我们的发票支付网关。
  3. 使用以下过滤器根据您是否在order-pay端点(用于发票付款的页面)上打开和关闭网关。

    /**
     * Only show Cash on Delivery for checkout, and only Stripe for order-pay
     *
     * @param   array   $available_gateways    an array of the enabled gateways
     * @return  array                          the processed array of enabled gateways
     */
    function so1809762_set_gateways_by_context($available_gateways) {
        global $woocommerce;
    
        $endpoint = $woocommerce->query->get_current_endpoint();
    
        if ($endpoint == 'order-pay') {
            unset($available_gateways['cod']);
        } else {
            unset($available_gateways['stripe']);
        }
    
        return $available_gateways;
    }
    add_filter( 'woocommerce_available_payment_gateways', 'so1809762_set_gateways_by_context');
    

当然,如果您对order-pay页面使用条带以外的网关,则需要确保更新unset($available_gateways['stripe']);为正确的数组键。

在那之后,你应该好好去!您的网站现在将根据您是否在发票支付页面上显示不同的网关!

于 2016-06-14T21:57:31.663 回答
0

其他选择是使用 BACS 付款方式,您可以向客户解释他将在稍后收到发票。

您甚至可以在使用 BACS 时发送的电子邮件中添加一些信息。

于 2014-02-15T04:50:58.393 回答