ずっと放置していたこのサイト。時々、自分で覚書のように見直すのですが、『在庫有りのみ表示ボタン』を設置した時のことを書いていないままでした。
完売商品を全て削除する方は良いのですが、商品の入れ替わりが激しく、なかなかそれができない人にとっては重要なカスタマイズだと思います。
目次
在庫がある商品だけを表示機能について
いつものように困った時の
『Welcart カスタマイズ ブログ』さん!!
http://welcustom.net/
の記事を読んで、カスタマイズスタートです。
今回参考にする記事は、「「在庫がある商品だけを表示」ボタンを作る」です。
「在庫有りのみ表示」ボタンの設置方法
ボタン設置は、記載通りにすればOK。具体的には、設置したい場所にコードを貼るだけ。だいたいの方はカテゴリーページの上部だと思います。私のコードをそのまま載せますね。
<!-- 在庫ありのみ表示-->
<form method="GET" action="<?php echo get_category_link($cat); ?>">
<input type="checkbox" name="sort" value="zaiko" onChange="this.form.submit()"
<?php if(isset($_GET['sort']) == 'zaiko'){ echo 'checked';} ?>>
<label>在庫有りのみ表示</label>
</form>
<!-- 在庫ありのみ表示(終了)-->
functions.phpに、クエリ振り分け用のPHPを記述
さて、ここからが問題です。同じように行き詰っている方も多いのでは?
『Welcart カスタマイズ ブログ』さんの記事では、チェックボックスにチェックが入ったとき(=GETメソッドが送信された時)に、在庫がある商品だけを表示させるようにするため、functions.phpに次のコードを記述するとあります。
//在庫ありのみ表示
function my_sort_item( $query ) {
if ( is_admin() || ! $query->is_main_query() ){
return;
if ( $query->is_category() ) {
$sort = isset($_GET['sort']) && is_string($_GET['sort']) ? $_GET['sort'] : '';
if ( $sort == 'zaiko' ) {
$args = array(
array(
'key' => '_isku_',
'value' => '"stocknum";s:1:"0"',
'compare' => 'NOT LIKE',
),
array(
'key' => '_isku_',
'value' => '"stocknum";i:0',
'compare' => 'NOT LIKE',
),
);
$query->set('meta_query' , $args);
}
}
}
add_action( 'pre_get_posts', 'my_sort_item' );
う~ん・・・でも、これ動きませんよね?(記憶が定かではないけど、試すと真っ白な画面になるかもしれないので、ご注意を!)
そこで、色々調べていて、改善方法を発見しました!そしてfunctions.phpに私が記載したコードがコレ!
/* 在庫ありのみ表示 */
function my_sort_item( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( $query->is_category() ) {
$sort = isset($_GET['sort']) && is_string($_GET['sort']) ? $_GET['sort'] : '';
$cat = isset($_GET['cat']) ? $_GET['cat'] : '';
if ( $sort !== 'zaiko' ) {
return;
}
$args = array(
array(
'key' => '_isku_',
'value' => '"stocknum";s:1:"0"',
'compare' => 'NOT LIKE',
),
array(
'key' => '_isku_',
'value' => '"stocknum";i:0',
'compare' => 'NOT LIKE',
),
);
$query->set('meta_query' , $args);
}
}
add_action( 'pre_get_posts', 'my_sort_item', 10, 3);
/* 在庫ありのみ表示(終了) */
※すみません、1年以上も前のことなので、どのサイトを参考にしたのかメモしておらず、コレ!自分のコードだ!と思った方はお知らせください。すぐに参考元としてリンクさせていただきますm(__)m
・・・こちらのサイトだったかな??>>http://rmantiques.blogspot.jp/2016/12/welcart.html
在庫がある商品だけを表示機能の設置完了
この2つの工程を完了すると、ちゃんと機能するようになりました^^
チェックすると自動で次のようになります。
バッチリですね^^
困っている方、上記2つの工程をコピペで出来るはずですよ~♪
お願い
検索でここにたどり着いた方は、自営業者さんでWelcartを導入しようと思っている方だと思います。役に立った方は、ビジネスでの贈り物に当店「生まれ年ワインショップ」もしくは、日本初のプレゼント専門ワインショップ「プレゼントワインショップ」をご利用いただけると嬉しいですm(__)m