2016-11-30 118 views
1

我想要从客户可以直接支付他们的发票的URL,也应该与wc-cancelledwc-transaction-declined定制订单状态)一起使用。如何在WooCommerce中获得带有自定义订单状态的Pay Now URL?

我的解决方案
我在做什么,现在创建一个自定义页面与我的自定义参数获取和处理整个付款流程在网关供应商网站的文档。

我的问题
但问题是,每当他们更新有doc文件和插件,我也有更新我的代码;但是如果我获得了Pay Now URL,那么WooCommerce和Gateway Plugin将负责处理它。

有没有更好的解决方案?

回答

2

我在WooCommerce templates/emails/customer-invoice.php文件中得到了解决方案。我正在寻找的功能是get_checkout_payment_url()

使用

$order = wc_get_order($order_id); 
$pay_now_url = esc_url($order->get_checkout_payment_url()); 
echo $pay_now_url; //http://example.com/checkout/order-pay/{order_id}?pay_for_order=true&key={order_key} 
//http://example.com will be site_url and protocol will depending upon SSL checkout WooCommerce setting. 

但这个网址只适用于pendingfailed订单状态;所以我使用的过滤器woocommerce_valid_order_statuses_for_payment

if (!function_exists('filter_woocommerce_valid_order_statuses_for_payment')) { 
    //http://woocommerce.wp-a2z.org/oik_api/wc_abstract_orderneeds_payment/ 
    //http://hookr.io/filters/woocommerce_valid_order_statuses_for_payment/ 
    // define the woocommerce_valid_order_statuses_for_payment callback  
    function filter_woocommerce_valid_order_statuses_for_payment($array, $instance) { 
     $my_order_status = array('cancelled', 'transaction-declined'); 
     return array_merge($array, $my_order_status); 
    } 
    // add the filter  
    add_filter('woocommerce_valid_order_statuses_for_payment', 'filter_woocommerce_valid_order_statuses_for_payment', 10, 2); 
} 

^^我说这在我的活动主题的functions.php文件。


参考:

+1

这是非常有用......好球:) – LoicTheAztec

+1

感谢@LoicTheAztec,我已经为这场斗争中,所以认为在SO中贡献这个,所以别人会从中受益。 –