Woocommerce 订阅显示下一个付款日期

Posted

技术标签:

【中文标题】Woocommerce 订阅显示下一个付款日期【英文标题】:Woocommerce Subscriptions display next payment date 【发布时间】:2015-10-18 08:10:42 【问题描述】:

我正在使用 Woocommerce 订阅插件,在处理订单续订电子邮件中,我想显示下一个付款日期是什么时候。但是,当我尝试访问订单的下一个付款日期时,它总是返回 false。

<?php
    if (WC_Subscriptions_Renewal_Order::is_renewal( $order ) )  /* This returns true */
        $parent_id = WC_Subscriptions_Renewal_Order::get_parent_order_id( $order ); /* This gets the original parent order id */
        $parent_order = new WC_Order( $parent_id );
        foreach ($parent_order->get_items() as $item)  /* This loops through each item in the order */
            $h = WC_Subscriptions_Order::get_next_payment_date ( $parent_order, $item['product_id'] ); /* This should get the next payment date... */
            var_dump($h); /* But it returns false :-( */
        
    
?>

WC_Subscriptions_Order::get_total_initial_payment() 等其他函数按预期工作。

如何获取订阅订单的下一个付款日期?

【问题讨论】:

get_next_payment_date() 方法的第一个参数是一个$subscription_key,它似乎是从get_subscription_key() 方法中检索到的。但我也在看 Subs 2.0 beta 代码,所以我不确定。请注意,get_next_payment_date() 方法自 2.0 起已弃用。 【参考方案1】:

我想通了 - 看起来我正在处理已取消订阅的订单,因此 get_next_payment_date() 返回 false。

如果它可以帮助其他尝试做类似事情的人,这是我的解决方案:

add_action( 'woocommerce_email_order_meta', 'my_email_next_payment_date', 10, 1 );

function my_email_next_payment_date( $order ) 
    if ( ! class_exists( 'WC_Subscriptions') ) 
        return;
    
    if ( WC_Subscriptions_Renewal_Order::is_renewal( $order ) ) 
        $parent_id = WC_Subscriptions_Renewal_Order::get_parent_order_id( $order ); /* This gets the original parent order id */
        $parent_order = new WC_Order( $parent_id );
        foreach ( $parent_order->get_items() as $item )  /* This loops through each item in the order */
            $date = WC_Subscriptions_Order::get_next_payment_date ( $parent_order, $item['product_id'] ); /* This should get the next payment date... */
            if ( $date ) 
                echo '<p style="margin: 16px 0 8px; text-align: left;">Your next payment is due on <strong>' . date( 'l jS F Y', strtotime( $date ) ) . '</strong></p>';
            
        
     elseif ( WC_Subscriptions_Order::order_contains_subscription( $order ) ) 
        foreach ( $order->get_items() as $item )  /* This loops through each item in the order */
            $date = WC_Subscriptions_Order::get_next_payment_date ( $order, $item['product_id'] ); /* This should get the next payment date... */
            if ( $date ) 
                echo '<p style="margin: 16px 0 8px; text-align: left;">Your next payment is due on <strong>' . date( 'l jS F Y', strtotime( $date ) ) . '</strong></p>';
            
        
    

【讨论】:

以上是关于Woocommerce 订阅显示下一个付款日期的主要内容,如果未能解决你的问题,请参考以下文章

在 Woocommerce 上添加单个产品订阅时的付款问题

如何使用获取的变量作为材料 UI 日期选择器的初始状态?

在 WooCommerce 中根据产品类型隐藏付款方式

更改现有定期付款的 woocommerce 订阅率

贝宝订阅下一个付款日期

php 更改WooCommerce订阅“更改付款方式”文本