Q. 固定ページテンプレート「ランキングページ」で、販売数が0の商品もランキングに含まれてしまいます。
A. 「page__ranking.php」「ranking-product-loop.php」の2つのファイルを修正して販売数0の商品を除外することが可能です。
commonテーマでは、商品のカスタムフィールド「total_sales」を使用して販売数順のランキングの対象となる商品リストを作成しています。
これらのファイルでは、商品リストの作成時に使用するクエリー条件を指定しております。
このとき、total_salesの値が0より大きいものだけを商品リストに含むよう、メタクエリーという仕組みを使用して、条件を絞り込むことができます。
(1) page__ranking.php:15~22行目
$query_args = array( 'posts_per_page' => $ranking_product_num, 'post_type' => 'product', 'post_status' => 'publish', 'ignore_sticky_posts' => 1, 'meta_key' => 'total_sales', 'orderby' => array( 'meta_value_num' => 'DESC', 'ID' => 'DESC' ) );
↓↓↓
$query_args = array(
  'posts_per_page' => $ranking_product_num,
  'post_type' => 'product',
  'post_status' => 'publish',
  'ignore_sticky_posts' => 1,
  'meta_key' => 'total_sales',
  'meta_query' => array(
    array(
      'key' => 'total_sales',
      'value' => 0,
      'compare' => '>',
      'type' => 'NUMERIC'
    )
  ),
  'orderby' => array( 'meta_value_num' => 'DESC', 'ID' => 'DESC' )
);    
(2) wc/ranking-product-loop.php:191~197行目
$args = array( 'posts_per_page' => $_POST["product_num"], 'post_type' => 'product', 'ignore_sticky_posts' => 1, 'meta_key' => 'total_sales', 'orderby' => array( 'meta_value_num' => 'DESC', 'ID' => 'DESC' ) );
↓↓↓
$args = array(
  'posts_per_page' => $_POST["product_num"],
  'post_type' => 'product',
  'ignore_sticky_posts' => 1,
  'meta_key' => 'total_sales',
  'meta_query' => array(
    array(
      'key' => 'total_sales',
      'value' => 0,
      'compare' => '>',
      'type' => 'NUMERIC'
    )
  ),
  'orderby' => array( 'meta_value_num' => 'DESC', 'ID' => 'DESC' )
);
補足
- 比較演算子の「>」や数字の「0」を変更することで条件をアレンジすることも可能ですので、お好みの条件に合わせてみてください。
 - 「商品」のエディター画面で「カスタムフィールド」を表示することで、total_salesの値を確認または編集することができます。
 
参考情報
この記事は役に立ちましたか?
もし参考になりましたら、下のボタンで教えてください。
今後の記事作成の参考とさせて頂きます!