サポート » 使い方全般 » カスタム投稿タイプで、特定カテゴリーを除外したソート機能(価格別)

  • 解決済 sodajpn

    (@sodajpn)


    アーカイブページ(archive.php)内で、カテゴリー別の商品一覧を表示させた際、
    追加機能として、価格順によるソート機能を実装させたいと考えています。

    ソート機能自体は実装できたのですが、特定のカテゴリーを除外したい場合に
    うまく表示させることができません。

    具体的には、’sold-out’というカテゴリーを除いた商品一覧を表示させたいと思っています。

    基本情報は以下の通りです。

     【カスタム投稿タイプ】
     ・post_type は、’item’
     ・taxonomy は、’item-cat’

     【価格】
     ・カスタムフィールドの値、’price’

     【除外したいカテゴリ】
     ・terms は、 ‘sold-out’

    「sort1」「sort2」は、価格順によるソート表示ができましたが、全カテゴリが表示対象となっています。
    「sort3」は、’tax_query’が使えないのか、商品一覧すら出てきません。

    すみませんが、お分かりの方ぜひご教示ください。

    <form name="narabikae" method="get" id="sort_form5" class="sort_form5">
           <select name='narabi' onChange="document.forms['narabikae'].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>
           </select>
    </form>
    
    <?php $sortset = $_GET['narabi']; ?>
    <?php $sortall = array(
      "sort1" => 'post_type=item&taxonomy=item-cat&order=ASC&orderby=meta_value_num&meta_key=price&posts_per_page=-1&paged=',
      "sort2" => 'post_type=item&taxonomy=item-cat&order=DESC&orderby=meta_value_num&meta_key=price&posts_per_page=-1&paged=',
      "sort3" => array(
      		'tax_query' => array(
                'taxonomy' => 'item-cat',
                'field' => 'slug',
                'terms' => 'sold-out' ,
    			'operator' => 'NOT IN'
        ),
    	'post_type' => 'item',
        'posts_per_page' => -1 ,
    	'order' => 'DESC',
    	'orderby' => 'meta_value_num',
    	'meta_key' => 'price',
    	'paged=',
    	),
    ); ?>
    
    <?php if($sortset != '') {
           $sort = $sortall[$sortset];
        } else {
           $sort = $sortall["sort1"];} ?>
    
    <?php echo $sort; ?>
    <?php query_posts($sort . $paged); ?>
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    tax_queryが使えないわけではありません。
    query_postsのパラメーターで、
    $sort . $paged
    と文字列結合を行ってしまっているため、配列が文字列化されてしまい
    Array1
    のようになってしまっているものと思われます。

    tax_queryを使いたいのであれば、sort1、sort2についても、配列として定義してください。

    jim912さん、
    迅速な回答ありがとうございます!

    以下で見事解決できました。本当に助かりました!!

    <form name="narabikae" method="get" id="sort_form5" class="sort_form5">
           <select name='narabi' onChange="document.forms['narabikae'].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>
           </select>
    </form>
    
    <?php $sortset = $_GET['narabi']; ?>
    <?php $sortall = array(
      "sort1" => array(
      		'tax_query' => array(
                'taxonomy' => 'item-cat',
                'field' => 'slug',
                'terms' => 'sold-out' ,
    			'operator' => 'NOT IN'
        ),
    	'post_type' => 'item',
        'posts_per_page' => -1 ,
    	'order' => 'ASC',
    	'orderby' => 'meta_value_num',
    	'meta_key' => 'price',
    	'paged=',
    	),
      "sort2" => array(
      		'tax_query' => array(
                'taxonomy' => 'item-cat',
                'field' => 'slug',
                'terms' => 'sold-out' ,
    			'operator' => 'NOT IN'
        ),
    	'post_type' => 'item',
        'posts_per_page' => -1 ,
    	'order' => 'DESC',
    	'orderby' => 'meta_value_num',
    	'meta_key' => 'price',
    	'paged=',
    	),
    ); ?>
    
    <?php if($sortset != '') {
           $sort = $sortall[$sortset];
        } else {
           $sort = $sortall["sort1"];} ?>
    
    <?php echo $sort; ?>
    <?php query_posts($sort); ?>
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタム投稿タイプで、特定カテゴリーを除外したソート機能(価格別)」には新たに返信することはできません。