在庫がゼロの商品をWP_Queryなどで除外する方法

スポンサーリンク

私が公開しているWelcart対応の無料テーマ(DL/デモ)にて、関連商品などの表示で「在庫ゼロ」の商品を除外するのに使っているクエリ指定方法です。

関連商品の表示で「売り切れ」商品を表示させても仕方ないよな、と思い、Welcartのコードやmeta_valueを色々と観察して、なんとか実現しました。

クエリの指定方法

以下のコードをクエリに追加します。

'meta_query' => array(
    array(
        'key' => '_isku_',
        'value' => '"stocknum";s:1:"0"',
        'compare' => 'NOT LIKE',
    ),
    array(
        'key' => '_isku_',
        'value' => '"stocknum";i:0',
        'compare' => 'NOT LIKE',
    )
)

以上。

これを、例えばWP Queryを使って出力させる場合は、以下のような感じになります。

$args = array(
    'meta_query' => array(
        array(
            'key' => '_isku_',
            'value' => '"stocknum";s:1:"0"',
            'compare' => 'NOT LIKE',
        ),
        array(
            'key' => '_isku_',
            'value' => '"stocknum";i:0',
            'compare' => 'NOT LIKE',
        )
    )
);
$query = new WP_Query( $args );

何しろ、在庫情報はWelcartのデータベース内ではシリアライズされているため、やや面倒な指定方法になっております。

また、飽くまでも「在庫がゼロ」の商品を指定するだけであり、「在庫状態」が「売り切れ」や「入荷待ち」の商品を指定するものではありません。

PHPの書き方的にもっとすっきり書きたい気もします。いい書き方がありましたら是非教えて下さい。

2 Responses to “在庫がゼロの商品をWP_Queryなどで除外する方法”

  1. Mamekkoファン より:

    商品自体は表示出来るけど、リストには表示させたくないという悩みが解決され、非常に感謝しています。

    現在Blancのarchive-item.php(query_posts)に加え、全てのカテゴリーに適用しました。

    この方法でも非常に役に立ちますが、売り切れ若しくは廃盤の時に表示させないようにするにはどうすれば良いのでしょうか。

    • まめ子(管理人) より:

      テーマのご利用有難うございます!クエリを利用しないならusces_get_itemZaiko()というテンプレートタグがあるので、それを使って条件をつけることは出来ると思います。
      クエリを利用する場合は、データベースのwp_postmetaの中にある「isku_」に格納されている、シリアライズされているコードを解読する必要があります。で、何件か見てみたところ、"stock";s:1:"0""stock";s:1:"1"が(恐らく。抜けがあるかもしれません)「在庫あり」と「在庫僅少」に該当しそうな感じでした。なので、それを'compare'=>'LIKE'で指定すれば良さそうですかね。試してみたらどうもLIKEが思ったとおりに動きませんでしたが、方向性としてはこんな感じかなと・・・。

Copyright© 2017 Welcart カスタマイズ ブログ All Rights Reserved.