Welcartに価格で並び替え機能を実装する
今回はWordPress専用のネットショップ構築プラグインWelcartに価格で並び替える機能を実装する方法です。
↑こんな感じのやつ
前置き的な話
商品を並べ替えるというか、Wordpressの機能を使って記事(商品)をソートするような形で実装したいと思います。
query_postでorderbyしたら簡単にできそうな気がしますがwelcartのデータベースの構造上上手くいきません。
2度手間なような気がしなくもないですが、カスタムフィールドに並び替え用の値(価格)を登録するようにして、query_postでorderbyすることにします。
※query_postはあまり推奨されていませんがやむなし。
まずはカスタムフィールドに価格を登録
商品登録時や更新時にカスタムフィールドに価格が自動で登録されるようにします。
functions.phpに以下を追記しましょう。
1 2 3 4 5 6 7 |
function set_search_price( $post_id, $post ) { if( get_post_meta( $post_id, '_itemCode', true ) ) { $price = usces_the_firstPrice( 'return', $post ); update_post_meta( $post_id, 'search_price', $price ); } } add_action( 'save_post', 'set_search_price', 99, 2 ); |
カスタムフィールド名は「search_price」にしてますが他の物と被るようであれば適宜変更してください。
商品登録画面のカスタムフィールドに上記のように登録されているか確認しましょう。
※CSVでの一括登録時には動作しないので下記も追記して動作確認します。
1 2 3 4 5 6 7 |
function set_search_price_csv( $post_id, $datas, $add_field_num ) { if( $datas ) { $price = $datas[30 + $add_field_num]; update_post_meta( $post_id, 'search_price', $price ); } } add_action( 'usces_action_uploadcsv_itemvalue', 'set_search_price_csv', 99, 3 ); |
商品一覧ページなど、価格ソート機能を実装
以下を実装したい箇所に追加して実装します。
1 2 3 4 5 6 7 8 9 |
//セレクトボックスの例:今回は新しい順、古い順、安い順、高い順 <form name="irekae" method="get" id="sort_form" class="sort_form"> <select name='sort_p' onChange="document.forms['irekae'].submit()" > <option value="sort1"<?php if(!isset($_REQUEST['sort_p']) || $_REQUEST['sort_p'] == 'sort1') echo ' selected="selected"';?>>新しい順</option> <option value="sort2"<?php if(isset($_REQUEST['sort_p']) && $_REQUEST['sort_p'] == 'sort2') echo ' selected="selected"';?>>古い順</option> <option value="sort3"<?php if(isset($_REQUEST['sort_p']) && $_REQUEST['sort_p'] == 'sort3') echo ' selected="selected"';?>>価格:安い順</option> <option value="sort4"<?php if(isset($_REQUEST['sort_p']) && $_REQUEST['sort_p'] == 'sort4') echo ' selected="selected"';?>>価格:高い順</option> </select> </form> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//セレクトボックスで選択した値で並び替える //フォームの値を受け取る <?php $sortset = $_GET['sort_p']; ?> //ソートの条件を配列に入れる <?php $sortall = array( "sort1" => "cat=$cat&order=DESC&posts_per_page=40&paged=", "sort2" => "cat=$cat&order=ASC&posts_per_page=40&paged=", "sort3" => "cat=$cat&order=ASC&orderby=meta_value_num&meta_key=search_price&posts_per_page=40&paged=", "sort4" => "cat=$cat&order=DESC&orderby=meta_value_num&meta_key=search_price&posts_per_page=40&paged=", ); ?> //フォームから受け取った値で判断しソート条件を変数にセット <?php if($sortset != '') { $sort = $sortall[$sortset]; } else { $sort = $sortall["sort1"];} ?> //query_postsの変数を渡す <?php query_posts($sort . $paged); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); usces_the_item(); ?> //以下は商品のループなどの出力 |
以上で簡易的なソート機能が実装できました。