根据 Woocommerce 订单状态禁用特定付款方式
Posted
技术标签:
【中文标题】根据 Woocommerce 订单状态禁用特定付款方式【英文标题】:Disable specific payment methods depending on Woocommerce order status 【发布时间】:2019-07-26 02:35:48 【问题描述】:我在网站上进行了两步付款。在经理确认订单后付款。首先,用户选择付款方式“确认”(更名为“货到付款”),并在收到付款发票后付款。在结帐页面上,我通过 js 隐藏了 paypal。我希望在暂停状态时隐藏贝宝。当“待付款”状态禁用“确认”(更名为“货到付款”)且可以通过贝宝付款时。
【问题讨论】:
这个真的不清楚:“当“待付款”的状态被禁用“确认”(更名为“货到付款”)并且可以通过paypal付款时”...请您改写一下。 【参考方案1】:2020 年 7 月更新
以下代码将显示隐藏支付网关:
-
在结帐页面它将删除“paypal”付款选项(因此您可以删除您的 jQuery 代码)
在订单支付页面上:
代码:
// Show/hide payment gateways
add_filter( 'woocommerce_available_payment_gateways', 'conditionally_hide_payment_gateways', 100, 1 );
function conditionally_hide_payment_gateways( $available_gateways )
// 1. On Order Pay page
if( is_wc_endpoint_url( 'order-pay' ) )
// Get an instance of the WC_Order Object
$order = wc_get_order( get_query_var('order-pay') );
// Loop through payment gateways 'pending', 'on-hold', 'processing'
foreach( $available_gateways as $gateways_id => $gateways )
// Keep paypal only for "pending" order status
if( $gateways_id !== 'paypal' && $order->has_status('pending') )
unset($available_gateways[$gateways_id]);
// 2. On Checkout page
elseif( is_checkout() && ! is_wc_endpoint_url() )
// Disable paypal
if( isset($available_gateways['paypal']) )
unset($available_gateways['paypal']);
return $available_gateways;
代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试和工作。
【讨论】:
谢谢!!!非常感谢!我没有立即明白为什么会出现白屏,但仔细查看后发现状态不正确。请为其他人将状态从“正在等待”更改为“等待中”。您可能知道,如何使用未选择的付款方式? 在哪里可以找到 available_gateways 名称?例如,我将银行转帐和 Stripe 作为有效的付款方式,我只想在结帐时和订单页面上进行银行转帐。 @mrRobot 见this answer thread (at the end),如果你喜欢/想要你可以请upvote链接的答案。 我怎样才能在结帐页面上删除多个付款选项(除了 PayPal),然后在订单支付页面上全部显示。我正在尝试使用订单建议做类似的事情,因此结帐的客户只能将“订单建议”视为结帐的支付网关,并且当他们的付款手动设置为待付款时,他们将看到所有可用的付款网关,除了订单提案。【参考方案2】:复制并粘贴相同的代码,但它不起作用 语法错误,意外的 'elseif' (T_ELSEIF)
我更正了代码
// Show/hide payment gateways
add_filter( 'woocommerce_available_payment_gateways', 'conditionally_hide_payment_gateways', 100, 1 );
function conditionally_hide_payment_gateways( $available_gateways )
// 1. On Order Pay page
if( is_wc_endpoint_url( 'order-pay' ) )
// Get an instance of the WC_Order Object
$order = wc_get_order( get_query_var('order-pay') );
// Loop through payment gateways 'pending', 'on-hold', 'processing'
foreach( $available_gateways as $gateways_id => $gateways )
// Keep paypal only for "pending" order status
if( $gateways_id !== 'paypal' && $order->has_status('pending') )
unset($available_gateways[$gateways_id]);
// 2. On Checkout page
elseif( is_checkout() && ! is_wc_endpoint_url() )
// Disable paypal
if( isset($available_gateways['paypal']) )
unset($available_gateways['paypal']);
return $available_gateways;
enter image description here
【讨论】:
以上是关于根据 Woocommerce 订单状态禁用特定付款方式的主要内容,如果未能解决你的问题,请参考以下文章
将默认 WooCommerce 订单状态更改为处理支票和银行付款
WooCommerce 订单状态未正确分配 PayPal 付款