Welcart $wpdbで購入履歴に配送先情報を追加する方法

購入履歴を取得する関数やテンプレートタグは標準で用意されていますが、購入履歴テーブル(wp_usces_order)に保存されている配送先の情報を合わせて表示する方法が見当たりませんでしたので、標準で用意されているものをベースに配送先情報を追加する方法を書いて行きます。

Welcartで用意されている購入履歴

[ \wp-content\plugins\usc-e-shop\functions\template_func.php ] の 2553行目に usces_member_history() という購入履歴用のテンプレートタグが用意されており冒頭に以下のように購入履歴を取得する記述がありますが配送先の情報は含まれていないようでした。

global $usces;
$usces_members        = $usces->get_member();
$member_id            = $usces_members['ID'];
$history              = $usces->get_member_history($member_id);
$member_history       = apply_filters( 'usces_filter_get_member_history', $history, $member_id );
$member_history_count = ( $member_history && is_array( $member_history ) ) ? count( $member_history ) : 0;

購入履歴をDBから直接取得する関数

$wpdb を使い購入履歴テーブルから指定IDに該当するレコードを取得する関数を functions.php 等に追加します。

/**
 * 購入履歴テーブルから指定IDのレコードを取得する
 */
function get_usces_order($order_id)
{
    global $wpdb;
    $prefix = $wpdb->prefix;
    $query  = "SELECT * FROM {$prefix}usces_order WHERE ID={$order_id};";
    $order  = $wpdb->get_row($query);    
    return $order;
}

購入履歴に配送先情報を追加

以下のようにWelcart標準の購入履歴のループ処理の中で配送先情報を加えて購入履歴表示用の配列を作ります。

$order_history = array();
foreach ($member_history as $history) {
    $order_id       = $history['ID'];
    $order          = get_usces_order($order_id); //購入履歴テーブルから取得
    $order_delivery = unserialize($order->order_delivery); //配送先情報
    $total_price    = $order->order_item_total_price;
    $date           = $history['date'];
    $payment_name   = $history['payment_name'];
    
    //
    $items = array();
    $total_quantity = 0;
    foreach ($history['cart'] as $cart_item) {
        $post_id        = $cart_item['post_id'];
        $price          = $cart_item['price'];
        $quantity       = $cart_item['quantity'];
        $total_quantity += $quantity;
        
        $items[] = [
            'post_id'   => $post_id,
            'item_name' => $cart_item['item_name'].' '.$cart_item['sku_name'],
            'price'     => number_format($price),
            'quantity'  => $quantity,
            'img'       => get_the_post_thumbnail_url( $post_id, 'img140x140t' ),
            'link'      => get_the_permalink($post_id)
        ];
    }
    
    //
    $order_history[] = [
        'order_id'       => $order_id,
        'order_delivery' => $order_delivery,
        'date'           => $date,
        'payment_name'   => $payment_name,
        'total_price'    => $total_price,
        'total_quantity' => $total_quantity,
        'items'          => $items,
    ];    
}

動作環境情報

エックスサーバー(x10)
PHP 7.3.14
MySQL 5.7
WordPress 5.3.2
Welcart e-Commerce 1.9.28

コメント

タイトルとURLをコピーしました