WooCommerce – 如何讓沒有庫存的商品排在後面?

使用 WooCommerce 的時候,一個令人頭痛的問題就是到底要不要顯示沒有庫存的商品。基於 SEO 的原因,即使不能購買,也不應該隱藏起來,否則 Google 的搜尋引擎就不收錄了。今天跟大家快速說明一下如何在商店頁面把「沒有庫存」的商品排到最後面去。

在進行之前,首先你要有編輯你的主題的 function.php 這個檔案的權限。如果你是套用別人的佈景主題,我會建議你先創造一個自己的子佈景主題,以免造成之後主題更新時,這個功能被蓋掉。

步驟一

把下列原始碼貼到你的 function.php 最底下:

<?php
class my_Orderby_Stock_Status

  {
  public

  function __construct()
    {
    if (!is_admin() && in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins'))))
      {
      add_filter('posts_clauses', array(
        $this,
        'order_by_stock_status'
      ) , 2000);
      }
    }

  public

  function order_by_stock_status($posts_clauses)
    {
    global $wpdb;
    if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag()))
      {
      $posts_clauses['join'].= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
      $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
      $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
      }

    return $posts_clauses;
    }
  }

new my_Orderby_Stock_Status;

步驟二

沒有步驟二,就這樣。