WelCart カテゴリーページで並び替える


スポンサーリンク

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">&nbsp;</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.'">&nbsp;</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の開発元がそこを公開してくれたら教えてください。それまでは、これでしのぎます。

スポンサーリンク