WelCart カテゴリーページで並び替える
いくら探しても「安い順」とか「高い順とか」で並び替える方法がない!
meta_value meta_key って技があるらしいけど、動かせなかった。
ちなみに meta_key にフィールドを増やすには function.php に以下を追加。
/* メタキー追加 */ add_filter('query_vars', 'myz_query_vars', 9); function myz_query_vars( $qvars ){ $qvars[] = 'meta_key'; return $qvars; }あとは、 myz_query_vars(“なんとか”); って呼び出してあげると、meta_key のフィールドが増やせる。
なんに使うか? 引数を追加するときに使う。
下は、price ってフィールドをキーに追加した例。つまり、 add_query_arg を使いときに使用する。
<a href="<?php echo add_query_arg(array('catrgory'=>'$cat','orderby'=>'meta_value','meta_key'=>'price','order'=>'DESC')); ?>">高額順</a>
WelCart カテゴリーページで並び替える
で、以下が力技のカテゴリーページでの並び替え。 おりじなるを保存しているので if(1==1) なんてことをやっているので、それはとっぱらってください。このブログまで来たってことはかなり苦しんだものと思います。ご苦労様です。一助になれば・・・(-人-
category.php を以下のように書き換えた。
<?php get_header(); ?> <article> <section> <h3 class="contents-title"> <?php if ($cat_data['h3']) { ?> <?php echo esc_html($cat_data['h3']) ?> <?php } else { ?> <?php single_cat_title(); ?> <?php }; ?> </h3> $debug_mode=1; //-------------------------------------------------------------------------- if ($debug_mode==1) { //-------------------------------------------------------------------------- // ----- ここから味噌 --- global $wpdb, $usces; $cat = get_the_category(); $cat = $cat[0]; $cat_data = get_option('cat_'.intval($cat -> cat_ID)); <?php $cat_now = get_query_var('cat'); ?> <div align="right" style="margin:10px;" <form name="irekae" method="get" id="sort_form5" class="sort_form5"> <select name='narabi' onChange="document.forms['irekae'].submit()" > <option value="sort1"<?php if(!isset($_REQUEST['narabi']) || $_REQUEST['narabi'] == 'sort1') echo ' selected="selected"';?>>新しい順</option> <option value="sort2"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort2') echo ' selected="selected"';?>>古い順</option> <option value="sort3"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort3') echo ' selected="selected"';?>>価格:安い順</option> <option value="sort4"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort4') echo ' selected="selected"';?>>価格:高い順</option> <option value="sort5"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort5') echo ' selected="selected"';?>>ランダム</option> <option value="sort6"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort6') echo ' selected="selected"';?>>全商品一覧</option> </select> </form> </div> <?php $cat_now = get_query_var('cat'); ?> <?php $sortset = $_GET['narabi']; ?> <?php $sortall = array( "sort1" => 'cat='.$cat_now.'&orderby=modified&order=DESC', "sort2" => 'cat='.$cat_now.'&orderby=modified&order=ASC', "sort3" => 'cat='.$cat_now.'&orderby=meta_value&meta_key=price&order=ASC', "sort4" => 'cat='.$cat_now.'&orderby=meta_value&meta_key=price&order=DESC', "sort5" => 'cat='.$cat_now.'&orderby=rand', "sort6" => 'cat='.$cat_now.'&showposts=-1&order=asc', "sort7" => 'cat='.$cat_now.'&orderby=title&order=DESC', "sort8" => 'cat='.$cat_now.'&orderby=title&order=asc' ); if($sortset != '') { if( $sortset == 'sort3') { $query_string= $sortall["sort1"]; }elseif($sortset == 'sort4') { $query_string= $sortall["sort1"]; }else{ $query_string= $sortall[$sortset]; } } else { $query_string= $sortall["sort1"]; } // ------------------------------------------------------------ // query CALL // echo "query_string:$query_string<br />"; // ------------------------------------------------------------ query_posts($query_string ); // ------------------------------------------------------------ if (have_posts()) { $array=""; while (have_posts()){ the_post(); global $post; $array[usces_the_firstPrice('return')]=$post->ID; } if( $sortset == 'sort3') { // asc $result=ksort($array,SORT_NUMERIC); }elseif($sortset == 'sort4') { // desc $result=krsort($array,SORT_NUMERIC); } foreach ($array as $key => $val) { query_posts('&p='.$val); the_post(); global $post; //$ziko='<div style="border:1px dotted #c00;width:180px;font-size:10px;color:#c00"> </div>'; // usces_the_itemZaikoNum を使うための決まり文句 usces_the_item(); usces_have_skus(); // $zstat=usces_the_firstZaiko('return'); $zsuur=usces_the_itemZaikoNum('return'); $zaiko ='<div style="width:180px;font-size:10px;color:#00c" align="center">'; $zaiko.='<a href="'.get_permalink().'" title="'.$post->post_title.'"> </a>'; $zaiko.='</div>'; if($zstat<=1){ if($zsuur==''||$zsuur<=0 ){ $zaiko='<div style="border:1px dotted #c00;width:180px;font-size:10px;color:#c00" align="center">売り切れ</div>'; } }else{ if( $zstat==2){ $zaiko='<div style="border:1px dotted #c00;width:180px;font-size:10px;color:#c00" align="center">売り切れ</div>'; }elseif($zstat==3){ $zaiko='<div style="border:1px dotted #c00;width:180px;font-size:10px;color:#c00" align="center">入荷待ち</div>'; }elseif($zstat==4){ $zaiko='<div style="border:1px dotted #c00;width:180px;font-size:10px;color:#c00" align="center">販売終了</div>'; } } ?> <div style="float:left;width:180px;height:240px;margin:5px 20px;padding:2px 10px 0px 10px;/*border:1px solid #c00;*/border-radius:5px; -webkit-border-radius:10px; -moz-border-radius:10px;"> <div style="font-size:10px;height:200px;" align="center" > <div style="height:32px;"><h4 style="font-size:12px;text-decoration:bold;"><?php the_title(); ?></h4></div> <div style="hight:100px;"><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_post_thumbnail( array(100,100) ); ?></a></div> <div style="text-align: left; vertical-align: top;width:180px;"><?php echo mb_substr(strip_tags(get_the_content()), 0, 30, "UTF-8"); ?>…</div><div style="color:#333;" align="right"><?php echo usces_the_firstPrice().' 円'; ?></div> </div> <?php echo $zaiko; ?> </div> <?php } // <!-- while --> ?> <br clear="all"><div class="clear:both"></div> // ----- / ここから味噌 --- <?php //-------------------------------------------------------------------------- }else{ // 1==1 //-------------------------------------------------------------------------- ?> <div id="cat-list"> <ul> <?php query_posts($query_string."&order=DESC"); while (have_posts()) { the_post(); ?> <li><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"> <h4><?php the_title(); ?></h4> <p><?php echo mb_substr(strip_tags(get_the_content()), 0, 100, "UTF-8"); ?>…</p> </a></li> <!-- /.cat-list --> <?php } // <!-- while --> ?> </ul> <div> <?php //-------------------------------------------------------------------------- } // 1==1 //-------------------------------------------------------------------------- ?> </section> <div style="text-align: center; margin: 10px;"><?php if ( function_exists( 'page_navi' ) ) { page_navi( 'items=7&prev_label=前へ&next_label=次へ&first_label=最初&last_label=最後&show_num=1&num_position=after' ); } ?></div> <?php } else { // have_posts --> ?> <br /> <h3>お探しのページは見つかりません!</h3> <p> 申し訳ありません! <a href="<?php bloginfo('url'); ?>">トップページ</a>へ移動して再度お探しください!!</p> <div> </section> <?php } ?> <?php // クエリをリセット wp_reset_query(); ?> </article> </div> <!-- /#contents" --> <?php get_sidebar(); ?> <?php get_footer(); ?>つまりだ、post id とキー部分をもってきて、 最終的には post_id で呼び出してるってこと、the_post() を2回も読んでいるのでとっても動きに無駄がでるんだけど仕方ない。スタックをつかっているのでデータ数が巨大になると動くかどうか微妙。
機能をいれたってことにとどめておいて、WelCartの開発元がそこを公開してくれたら教えてください。それまでは、これでしのぎます。
スポンサーリンク