Web制作

WooCommerceの商品販売実績を日間(デイリー)・週間・月間で保存し、管理画面の商品一覧に表示させる方法

WooCommerceの販売実績を、管理画面の商品一覧画面に表示させる方法。
前日の売上・直近1週間の売上・直近1ヶ月の売上 を保存する方法を今回は紹介する。メタデータとして保存するので、これを使ったクエリで、
「デイリーランキング」や「週間ランキング」、「月間ランキング」などの表示も可能なので、結構便利だと思う。

日間(デイリー)、週間、月間で集計することで、さまざまな施策に利用できる

商品一覧ID取得関数:get_all_product_ids

まず、商品を全権取得する関数を定義。

function get_all_product_ids() {
 $args = array(
  'post_type' => 'product',
  'posts_per_page' => -1,
  'fields' => 'ids',
  'post_status' => array('publish', 'private'),
 );
 $products_query = new WP_Query($args);
 $product_ids = $products_query->posts;
 return $product_ids;
}

上記では、公開中のものと非公開のもの両方とも集計するようにしているが、非公開のものについて不要であれば、‘post_status’ => ‘publish’ だけでも良い。

全商品の販売個数計算関数:calculate_sales_for_all_products

全商品のIDを取得した後、一度に処理する商品数(ここでは50)で分割(チャンキングする)。
分割しなくても機能はするが、件数が膨大な時に、処理が重くなりすぎないようにしている。

function calculate_sales_for_all_products() {
 $all_product_ids = get_all_product_ids();
 $chunk_size = 50;
 $chunks = array_chunk($all_product_ids, $chunk_size);
 foreach ($chunks as $chunk) {
  foreach ($chunk as $product_id) {
   calculate_sales($product_id);
  }
 }
}

1商品の販売個数計算関数:calculate_sales

次に、前日、直近1週間、直近1ヶ月の販売数を計算する関数を定義。それぞれの計算結果はメタデータとして保存される。

function calculate_sales($product_id) {
 $sales_yesterday = calculate_sales_yesterday($product_id);
 $sales_last_week = calculate_sales_last_week($product_id);
 $sales_last_month = calculate_sales_last_month($product_id);
 update_post_meta($product_id, 'sales_yesterday', $sales_yesterday);
 update_post_meta($product_id, 'sales_last_week', $sales_last_week);
 update_post_meta($product_id, 'sales_last_month', $sales_last_month);
}

前日の販売個数計算関数:calculate_sales_yesterday

function calculate_sales_yesterday($product_id) {
 $yesterday_start = date_i18n('Y-m-d 00:00:00', strtotime('-1 day'));
 $yesterday_end = date_i18n('Y-m-d 00:00:00');
 $sales = get_sales_count_for_product_in_date_range($product_id, $yesterday_start, $yesterday_end);
 return $sales;
}

この関数は前日の販売数を計算する。前日の始まりと終わりの時刻を取得し、その間の販売数を取得する。

直近1週間の販売個数計算関数:calculate_sales_last_week

function calculate_sales_last_week($product_id) {
 $last_week_start = date_i18n('Y-m-d 00:00:00', strtotime('-7 days'));
 $last_week_end = date_i18n('Y-m-d 00:00:00');
 $sales = get_sales_count_for_product_in_date_range($product_id, $last_week_start, $last_week_end);
 return $sales;
}

この関数は直近1週間の販売数を計算する。過去7日間の始まりと終わりの時刻を取得し、その間の販売数を算出する。

直近1ヶ月の販売個数計算関数:calculate_sales_last_month

function calculate_sales_last_month($product_id) {
 $last_month_start = date_i18n('Y-m-d 00:00:00', strtotime('-1 month'));
 $last_month_end = date_i18n('Y-m-d 00:00:00');
 $sales = get_sales_count_for_product_in_date_range($product_id, $last_month_start, $last_month_end);
 return $sales;
}

この関数では直近1ヶ月の販売数を計算する。直近1ヶ月の始まりと終わりの時刻を取得し、その間の販売数を取得する。

計算結果のスケジューリング

販売数計算は毎日定期的に行われるべきなので、WordPressのcron機能を用いて、この計算を毎日実行するスケジュールを設定する。

if (!wp_next_scheduled('calculate_sales_daily')) {
 wp_schedule_event(time(), 'daily', 'calculate_sales_daily');
}
add_action('calculate_sales_daily', 'calculate_sales_for_all_products');

ここまでで、販売情報を保存するところまでは完了。次に、管理画面で閲覧できるように追記をする。

管理画面に販売数情報を表示する列の追加

add_filter('manage_edit-product_columns', 'add_sales_columns_to_admin_product_list');
 function add_sales_columns_to_admin_product_list($columns) {
  $columns['sales_yesterday'] = __('昨日の売上', 'textdomain');
  $columns['sales_last_week'] = __('直近1週間売上', 'textdomain');
  $columns['sales_last_month'] = __('直近1ヶ月売上', 'textdomain');
 return $columns;
}

 

商品管理画面に販売数情報を表示するための列を作成する。新しく追加する列の項目名はそれぞれ、「機能の売上」「直近1週間売上」「直近1ヶ月売上」の3つ。
これだけだと、列が追加されるだけで列が空っぽなので、次の関数で、列の中身を出力する。

商品の販売数表示

add_action('manage_product_posts_custom_column', 'show_sales_in_admin_product_list', 10, 2);
 function show_sales_in_admin_product_list($column, $post_id) {
  switch ($column) {
   case 'sales_yesterday':
    echo get_post_meta($post_id, 'sales_yesterday', true);
   break;
   case 'sales_last_week':
    echo get_post_meta($post_id, 'sales_last_week', true);
   break;
   case 'sales_last_month':
    echo get_post_meta($post_id, 'sales_last_month', true);
   break;
  }
 }

ここでは商品の各列に、前日、直近1週間、直近1ヶ月の販売数を表示する処理を実装する。
管理画面の商品一覧に新たに追加した列に対して、get_post_meta関数を用いて商品のメタデータから販売数を取得し、表示する。

 

TOP