サポート » 使い方全般 » カスタムフィールドの値で並び替えると全カテゴリの記事が出てしまう

  • 解決済 tamakana

    (@tamakana)


    お世話になります。

    category.php内にそのカテゴリの記事一覧が表示されるようにしていますが、
    カスタムフィールドの値で並び替えるようにすると全カテゴリの記事が出てしまいます。

    ページタイトル部分には <?php single_cat_title(); ?> を使用しているのですが、そちらはきちんとそのカテゴリ名が出力されています。

    色々調べてみましたがどうすればいいかわからず困っております。
    どなたかアドバイスをお願いいたします。

    <div id="post-list" class="clearfix">
    		<div class="post-list-ttl"><?php single_cat_title(); ?></div>
    		<?php
    query_posts(
    	array(
    		'meta_key'=>'t_date',
    		'orderby' => 'meta_value',
    		'order' => 'DESC',
    		"showposts"	=>"12",
    	 )
    );
    		 ?>
    
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    
    ・・・
    
    	<?php endwhile; else: ?>
    	<p>記事がありません。</p>
    	<?php endif; ?>
    	</div>
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • "showposts" =>"12",は、"showposts"=>12,ですね。ダブルクオーテーション不要です。
    あと、showpostsはdeprecatedになっていますので、
    posts_per_page=>12にされる方がよいと思います。

    スレッド開始 tamakana

    (@tamakana)

    ikaringさま

    早速のコメントありがとうございます!
    アドバイスいただきましたようにダブルクォーテーションを削除し、推奨される書き方に変更いたしました。
    また、12のあとにうっかりカンマをつけてしまっておりましたのでそちらも削除いたしました。

    ですが、やはり並べ替えはできても全カテゴリ記事が表示される形となってしまいます。
    query_postsなしだとそのカテゴリの記事が表示されるのは確認してあります。

    先ほどループ内は長いので省略させていただいたのですが、そのなかにも条件分岐などがありますので、それとの兼ね合いで動作しないのかもしれません。
    一度見ていただけますでしょうか。

    当方デザイナー職でphpの知識がないのですが、今回裏側までつくらなければならなくなり、いろいろ調べながら付け焼き刃で書いているため、むちゃくちゃな書き方になっているのかもしれません…。

    <?php
    query_posts(
    	array(
    		'meta_key'=>'t_date',
    		'orderby' => 'meta_value',
    		'order' => 'DESC',
    		'posts_per_page' => 12
    
    	 )
    );
    		 ?>
    
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    
    			<div class="post">
    			<div class="thum"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><img src="<?php the_field("img-01", $post->ID); ?>" alt="<?php the_title(); ?>"></a></div>
    			<div class="post-inner">
    				<h2><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
    				<div class="description">
    					<dl class="property">
    						<dt>Date:</dt><dd class="date"><?php echo get_post_meta($post->ID , 't_date' ,true); ?> - <?php echo get_post_meta($post->ID , 'e_date' ,true); ?></dt>
    						<dt>Area:</dt><dd class="area">
    							<?php $cats = get_the_category();
    							$exclude = array(4,5,6,9,17,18);
    							foreach((array)$cats as $cat)
    							  if(!in_array($cat->cat_ID, $exclude))
    							  	echo '<a href="' . get_category_link($cat->cat_ID) . '">' . $cat->cat_name . '</a>'; ?>
    	  					</dd>
    	  					<dt class="brand">Brand:</dt>
    	  					<dd>
    							<?php
    							$posttags = get_the_tags();
    							if ($posttags) {
    							foreach ($posttags as $tag) {
    							  echo '<a href="' . get_bloginfo('url') . '/brand/' . $tag->name . '">' . $tag->name . '</a> ';
    						  }
    						} ?>
    						</dd>
    					</dl>
    					<ul class="property">
    						<?php $cats = get_the_category();
    						$exclude = array(6,7,8);
    						foreach((array)$cats as $cat)
    						  if(!in_array($cat->cat_ID, $exclude))
    						  	echo '<li><a href="' . get_bloginfo('url') . '/category/' . $cat->category_nicename . '">' . $cat->cat_name . '</a></li>'; ?>
    
    						<?php if ( in_category( ‘test’ ) ): ?>
    							<li class=“test”><a href="<?php bloginfo('url'); ?>/test”>テスト</a></li>
    						<?php endif; ?>
    					</ul>
    				</div><!-- /description -->
    			</div><!-- /post-inner -->
    		</div><!-- /post -->
    
    		<?php endwhile; else: ?>
    	<p>記事がありません。</p>
    	<?php endif; ?>
    
    	</div><!-- /post-list -->

    そもそものところquery_postsはあまり推奨されていませんので、他の方法を使いましょうか。
    (参考まで http://wpdocs.sourceforge.jp/関数リファレンス/query_posts)

    ほぼコピペでいけて簡単ですので、WP_Queryを使ったループに置き換えてみてください。
    ループの中のコードはちゃんと確認していませんが、たぶんそのままコピペで良いかと思います。

    <?php
    
    $args = array(
      'meta_key'=>'t_date',
      'orderby' => 'meta_value',
      'order' => 'DESC',
      'posts_per_page' => 12
    );
    
    // クエリ
    $the_query = new WP_Query( $args );
    
    // ループ
    while ( $the_query->have_posts() ) : $the_query->the_post();
    ?>
    
      //ループの内容をコピペ
      <div class="post">
        ...
      </div><!-- /post -->
    
    <?php endwhile;
    
    // 投稿データをリセット
    wp_reset_postdata();
    ?>
    スレッド開始 tamakana

    (@tamakana)

    コードありがとうございます!
    早速いただいたコードに書き換えてみましたが、動作は変わらずでした…。

    ああ、全然動作確認してないんで、すいません。
    $argsのところ下記にしたらどうですかね。
    現在のカテゴリーを指定します。

    $args = array(
      'cat' => get_query_var('cat'),
      'meta_key'=>'t_date',
      'orderby' => 'meta_value',
      'order' => 'DESC',
      'posts_per_page' => 12
    );
    スレッド開始 tamakana

    (@tamakana)

    いえ、とんでもないです。

    アドバイスいただいた通りにしてみましたところ、希望通りの動作になりました!
    本当にありがとうございます!助かりました!

    貴重な時間を割いていただき感謝いたします…!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「カスタムフィールドの値で並び替えると全カテゴリの記事が出てしまう」には新たに返信することはできません。