php WooCommerce获取最后一个订单的日期与偏移

j2qf4p5b  于 2023-03-07  发布在  PHP
关注(0)|答案(1)|浏览(188)

我有一个客户商店有很多自定义。一个主要的是使用WooCommerce插件的PDF发票和 Package 单生成内部,管理订单打印输出(他们是一家制造公司)。打印输出已被大量定制,并没有被用作“发票”在所有,并有许多自定义功能,以显示某些信息取决于客户,产品等。
他们问我们是否可以添加一行(同样,供内部使用)来显示上次购买的日期。
让我感到困惑的是,它只会在下了新订单时显示,所以我猜标准的“get last order date”函数会提取最近的订单,但我需要订单日期在那个订单之前,所以偏移量为-1。
再举一个例子:客户John Smith下了3个订单第一个订单:2020年1月25日第二次订购:2021年11月27日第三订单:10/2/2022
他们的最新订单于今天(2023年3月2日)下达。当自定义订单生产表于2023年3月2日打印时(订单付款后),需要有一个“最后订单:2022年10月2日”。
有没有办法可以提取“最后订单日期”,但要早于最近的订单日期?我还应该说,定制生产表打印输出并不总是在下订单的同一天打印-例如,他们周末不工作,因此在星期六下的订单直到星期一才打印。

vc9ivgsu

vc9ivgsu1#

我已经研究了get_last_order()WooCommerce函数,下面的自定义函数应该给予你倒数第二个订单对象:

function bbloomer_get_second_last_order( $customer ) {
    
    global $wpdb;

    $order_statuses_sql = "( '" . implode( "','", array_map( 'esc_sql', array_keys( wc_get_order_statuses() ) ) ) . "' )";

    $second_last_order_id = $wpdb->get_var(
        "SELECT posts.ID
        FROM $wpdb->posts AS posts
        LEFT JOIN {$wpdb->postmeta} AS meta on posts.ID = meta.post_id
        WHERE meta.meta_key = '_customer_user'
        AND meta.meta_value = '" . esc_sql( $customer->get_id() ) . "'
        AND posts.post_type = 'shop_order'
        AND posts.post_status IN $order_statuses_sql
        ORDER BY posts.ID DESC
        LIMIT 1 , 1"
    );

    if ( ! $second_last_order_id ) {
        return false;
    }

    return wc_get_order( absint( $second_last_order_id ) );

}

然后,您可以使用get anything related to the WooCommerce order object的输出,如ID或日期,例如:

if ( bbloomer_get_second_last_order( $customer ) ) {
   $second_last_order_date = wc_format_datetime( bbloomer_get_second_last_order( $customer )->get_date_created() );
} else $second_last_order_date = '';

请注意,$customer是客户对象,因此如果您有权访问客户ID,则需要在将其传递给bbloomer_get_second_last_order()之前,通过以下方式创建客户对象:

$customer = new WC_Customer( $customer_id );

相关问题