Welcart 売上ランキング作成のための商品ID取得と表示方法

Welcartでは売上ランキングを作成するための商品ID取得用関数 get_bestseller_ids( $days ) と売上ランキング表示用関数 usces_list_bestseller( $num, $days ) が用意されています。

売上ランキング用 商品ID取得関数

/**
 * Welcart 売上ランキング用 商品ID取得関数
 * \wp-content\plugins\usc-e-shop\classes\usceshop.class.php
 * 7403行目
 */
function get_bestseller_ids( $days = "" )
{
    global $wpdb;
    $datestr = substr(get_date_from_gmt(gmdate('Y-m-d H:i:s', time())), 0, 10);
    $yearstr = substr($datestr, 0, 4);
    $monthstr = substr($datestr, 5, 2);
    $daystr = substr($datestr, 8, 2);
    $res = array();
    $order_table_name = $wpdb->prefix . "usces_order";
    $where = "";
    if( empty($days) ){
        $days = 30;
    }
    $order_date = date('Y-m-d H:i:s', mktime(0, 0, 0, (int)$monthstr, ((int)$daystr-$days), (int)$yearstr));
    $where = " WHERE order_date >= '{$order_date}'";
    $query = "SELECT order_cart FROM {$order_table_name}" . $where;
    $dbres = $wpdb->get_col($query);
    if(!$dbres) return false;
    
    foreach((array)$dbres as $carts){
        $rows = unserialize($carts);
        foreach((array)$rows as $carts){
            if( 'publish' != get_post_status($carts['post_id']) )
                continue;
                
            $id = $carts['post_id'];
            $qu = $carts['quantity'];
            if(array_key_exists($id, $res)){
                $res[$id] = $res[$id] + $qu;
            }else{
                $res[$id] = $qu;
            }
        }
    }
    arsort($res);
    $results = array_keys($res);
    return $results;
}

売上ランキング表示用関数

usces_list_bestseller( $num, $days ) の第1引数にランキングの件数(10位まで表示するなら10)、第2引数に集計日数(集計対象の過去何日分かの数字を指定する7日間であれば 7)を指定してランキングを取得&表示します。

/**
 * Welcart 売上ランキング表示用関数
 * \wp-content\plugins\usc-e-shop\functions\template_func.php
 * 1791行目
 */
function usces_list_bestseller($num, $days = '')
{
    global $usces;
    $ids = $usces->get_bestseller_ids( $days );
    $htm = "";
    for($i=0; $i<$num; $i++){
        if(isset($ids[$i])){
            $post = get_post($ids[$i]);
            if( !is_object($post) )
                continue;
                
            $disp_text = apply_filters('usces_widget_bestseller_auto_text', esc_html($post->post_title), $ids[$i]);
            $list = "<li><a href='" . get_permalink($ids[$i]) . "'>" . $disp_text . "</a></li>\n";
            $htm .= apply_filters('usces_filter_bestseller', $list, $ids[$i], $i);
        }
    }
    wp_reset_postdata();
    echo $htm;
}

独自のフォーマットでランキングを表示したい場合

usces_list_bestseller( $num, $days ) を参考に独自に関数を定義して対応します。
以下2行のコードで売上ランキング用の商品ID(配列)を取得することが出来ます。

商品ID取得

global $usces;
$ids = $usces->get_bestseller_ids( $days );

商品ID取得結果出力(配列)

array(2) {
  [0]=>int(9)
  [1]=>int(64)
}

動作環境情報

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

コメント

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