サポート » 使い方全般 » 記事一覧の時のソートができません

  • 解決済 gakusei

    (@gakusei)


    ワードプレス初心者です。
    フォーラムも2度目ですが、よろしくお願いします。

    サイトを作るときに、ボタン一つで記事の並べ替えをしたいと思い、フォーラムを見たところ、
    iyaiyaさんという方が
    (記事一覧をドロップダウンリストでソートしたい)
    というトピックを立てられていたので、そちらに出ているコードを
    貼り付けてみたのですが、iyaiyaさんと同じように、トップページに戻されてしまいました。

    tanaka_kyousukeさんやnobitaさんのご指摘なども参考にしつつ、
    コードの改善やプラグインの全停止などを行ってみましたが、
    トップページに戻されてしまいました。

    最終的に、iyaiyaさんは3.4で動いたというお話でしたので、
    実際に3.5から3.4へなんとかダウングレードを行いましたが、
    やはりトップページに戻されてしまいました。

    ソートで良い方法はあるのでしょうか?

    もし、わかる方がいらっしゃいましたら、ぜひ教えていただきたいです。
    よろしくお願いします。

15件の返信を表示中 - 16 - 30件目 (全48件中)
  • gakusei

    (@gakusei)

    gqevu6bsizさん

    <select>の位置の問題でした。
    初歩的なミスで本当に申し訳ないです。
    失礼しました。

    ただ、やはりアクセス数でのソートは出来ませんでした。
    また、私の確認不足でしたが、
    評価に関するソートも出来ませんでした。
    (アクセス数のソートも評価に関するソートも、日付順でソートされてしまいました。)

    これは、どのように解決出来るのでしょうか?

    gqevu6bsiz

    (@gqevu6bsiz)

    gakuseiさん

    ただ、やはりアクセス数でのソートは出来ませんでした。
    また、私の確認不足でしたが、
    評価に関するソートも出来ませんでした。

    そうなんですね。
    一度、私のcategory.phpのコードを貼り付けますので、コピペしてみて、動くかどうか確認してみてください。

    <?php get_header(); ?>
    
    	<section id="primary" class="site-content">
    		<div id="content" role="main">
    
    		<?php $uri = home_url( '/' ); ?>
    		<?php if( is_category() or is_tag() ) : ?>
    			<?php $term = get_queried_object(); ?>
    			<?php if ( $term ) : ?>
    				<?php $uri = get_term_link( $term , $term->taxonomy ); ?><br>
    			<?php endif; ?>
    		<?php endif; ?>
    
    		ドロップダウン形式<br>
    		<select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
    			<option value="">ソート順を選択</option>
    			<?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_average' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
    			<option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_average' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>評価平均の多い順</option>
    			<?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_average' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
    			<option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_average' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>評価平均の少ない順</option>
    			<?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_users' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
    			<option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_users' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>評価をつけた人数の多い順</option>
    			<?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_users' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
    			<option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_users' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>評価をつけた人数の少ない順</option>
    			<?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'comment_count' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
    			<option value="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>コメント多い順</option>
    			<?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'comment_count' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
    			<option value="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>コメント少ない順</option>
    			<?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'views' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
    			<option value="<?php echo add_query_arg( array( 'meta_key' => 'views' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>アクセスの多い順</option>
    			<?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'views' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
    			<option value="<?php echo add_query_arg( array( 'meta_key' => 'views' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>アクセスの少ない順</option>
    		</select>
    
    		<?php
    		// 何の指定もないときのデフォルトのソート順
    		$args = array( 'nopaging' => 1 , 'orderby' => 'meta_value' , 'order' => 'DESC' , 'meta_key' => 'ratings_average' );
    
    		if( is_category() ) {
    			$args["cat"] = get_query_var( "cat" );
    		} elseif( is_tag() ) {
    			$args["tag"] = get_query_var( "tag" );
    		}
    
    		if( !empty( $_GET["meta_key"] ) ) {
    			$args["meta_key"] = strip_tags( $_GET["meta_key"] );
    		} elseif( !empty( $_GET["orderby"] ) ) {
    			$args["orderby"] = strip_tags( $_GET["orderby"] );
    			unset( $args["meta_key"] );
    		}
    
    		if( !empty( $_GET["order"] ) ) {
    			$args["order"] = strip_tags( $_GET["order"] );
    		}
    
    		?>
    		<!-- ここからデバッグ値 -->
    		<pre><?php print_r($args); ?></pre>
    		<!-- ここまでデバッグ値 -->
    		<?php query_posts( $args ); ?>
    
    		<?php if ( have_posts() ) : ?>
    
    			<?php while ( have_posts() ) : the_post(); ?>
    
    				<div class="title">
    					<?php get_template_part('content','title'); ?>
    				</div>
    
    				<div class="rating">
    					<?php
    					if ( $ave = get_post_meta( $post->ID, 'ratings_average', true ) ) {
    						$user = get_post_meta( $post->ID, 'ratings_users', true );
    						$gouke = get_post_meta( $post->ID, 'ratings_score', true );
    						$width = $ave * 16;
    						echo '<span style="width:' . $width . 'px;">Rating: </span>';
    						echo '平均:' . $ave . ' 総合:'  . $gouke . '';
    					} else {
    						echo '(未評価です。)';
    					}
    					?>
    				</div>
    
    			<?php endwhile; ?>
    
    		<?php endif; ?>
    
    		</div><!-- #content -->
    	</section><!-- #primary -->
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    gakusei

    (@gakusei)

    gqevu6bsizさん

    いろいろいじってみてわかったのですが、

    <?php
    		// 何の指定もないときのデフォルトのソート順
    		$args = array( 'nopaging' => 1 , 'orderby' => 'meta_value' , 'order' => 'DESC' , 'meta_key' => 'ratings_average' );
    ?>

    この部分を、

    <?php
    		// 何の指定もないときのデフォルトのソート順
    		$args = array( 'nopaging' => 1 , 'orderby' => 'date' , 'order' => 'DESC' );
    ?>

    以上のように変更したら、アクセス数と評価数のソートが機能しませんでした。

    何の指定もないときのデフォルトのソート順を、日付順にしておきたいのですが、
    それは出来るのでしょうか?

    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    何の指定もないときのデフォルトのソート順を、日付順にしておきたいのですが、
    それは出来るのでしょうか?

    これは可能で、gakuseiさんがお書きになったコード、

    <?php
    // 何の指定もないときのデフォルトのソート順
    $args = array( ‘nopaging’ => 1 , ‘orderby’ => ‘date’ , ‘order’ => ‘DESC’ );
    ?>

    で合っています。
    ただ、このままだと meta_key が無くなってしまい、評価順などのカスタムフィールドの値でのソートが出来なくなる為、

    $args["orderby"] = 'meta_value';
    こちらを、meta_keyの値が取得できた時の処理の部分に追加してください。

    具体的には、以下のようになります。

    if( !empty( $_GET["meta_key"] ) ) {
    			$args["meta_key"] = strip_tags( $_GET["meta_key"] );
    			// 追加したコード
    			$args["orderby"] = 'meta_value';
    		} elseif( !empty( $_GET["orderby"] ) ) {
    			$args["orderby"] = strip_tags( $_GET["orderby"] );
    		}

    都度、gakusei さんの質問に答えていて思ったのですが、
    トピックの初めに「どういったソートの方法」を考えているか。
    を記載したほうがいいと思います。
    (私も初めにお聞きすれば良かったです)

    ※今のcategory.php等にコードを書くやり方とは別に、同じソートをするにしても他にも様々な方法があります。
    “何”をやりたいのかが具体的に分かれば、様々な方法の中から、簡単に出来るコードを教えて頂ける確率が上がると思います。

    gakusei

    (@gakusei)

    gqevu6bsizさん

    $args[“orderby”] = ‘meta_value’;
    のコードの追加で、アクセス数と評価数のソートも可能となりました

    私が希望するソートについて記載しなかったことについては、
    申し訳ありませんでした。
    gqevu6bsizさんのおっしゃる通りです。
    最初にどのようなソートを希望しているのかを
    ちゃんと説明しておけばよかったです。
    すいませんでした。

    まとめますと、私の希望のソートとしては

    ・トップページに戻らず、適切に記事の一覧をソート出来る
    ・ソートする前の最初の投稿を、日付順にしておく
    ・以下のようなソートが出来る
     →・日付順
      ・タイトル順
      ・アクセス数順
      ・コメント数順
      ・評価数順
      ・評価の総合点順
      ・評価の平均点順
      ・新しく投稿されたコメント順 など
    (query_postsに存在する並び替えの引数以外の引数でもソート出来ると
     なおありがたいと思いました。)

    といった感じです。

    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    いえ、私のほうこそ初めにどのような動きをお考えなのかお聞きせずすみません。
    勉強としていい機会になりました。

    gakusei さんのご希望のソートから、現在既に出来ているソートを省くと、

    ・タイトル順
    ・評価の総合点順
    ・新しく投稿されたコメント順 など

    だと思いますが、

    http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts
    タイトル順、評価の総合点順はtitle とカスタムフィールドなので、
    ドロップダウンのコードを参考に作っていけば、可能です。

    新しく投稿されたコメント順

    すみません、こちらは現在のコードのままでの方法はちょっと分かりません。

    新しく投稿されたコメント順 をどうしても取り入れるとなると、私の考える方法では、

    1. まず該当(カテゴリやタグ等)の全記事一覧を取得
    2. 記事全ての最新コメントを取得
    3. コメントを新着順にソート(記事No等と関連づける)
    4. コメントのソート順序(No)の順に沿って記事をソートさせる

    という風になるのではと思います。
    この場合の方法を取ると、今までのコードでは対応が難しく、全く別のコードが必要となり、結構長くなるので、私のほうでは今回はコードの記載等は省きます。

    gakusei

    (@gakusei)

    gqevu6bsizさん

    ほとんどの項目でソートが出来ました。
    ただ、評価の総合点順については、
    ratings_scoreを使ってソートを出来るようにしましたが、
    ソートが上手く機能しませんでした。

    完全にソートが出来ていないというわけではなく、
    総合点が、5、4、3、1、2、0というように、
    若干ソートが出来ていない部分が見受けられました。

    これは、どこに問題があるのでしょうか?

    コードやカスタムフィールドについて調べましたが、
    よくわかりませんでした。

    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    完全にソートが出来ていないというわけではなく、
    総合点が、5、4、3、1、2、0というように、
    若干ソートが出来ていない部分が見受けられました。

    原因分かりました。私のコードミスですね。すみません。

    以前にお教えした、

    $args[“orderby”] = ‘meta_value’;
    こちらを、meta_keyの値が取得できた時の処理の部分に追加してください。

    この部分ですが、 meta_value ではなく、 meta_value_num にすると、”数値”でのソートになるようです。

    お試しください。

    gakusei

    (@gakusei)

    gqevu6bsizさん

    ご回答遅くなってしまいまして申し訳ありません。

    ほぼ希望のものが出来ました。

    また、私が希望するソートの機能で一つ加え忘れてしまったのですが、
    現在は、「ソート順を選択」がソートのトップに来ています。
    そのため、ドロップダウンで選択すると、実際にソートされたときに
    「ソート順を選択」にドロップダウンの表示が変わります。

    そこで、例えば「アクセス数の多い順」でソートした場合、
    ソート後の「ソート順を選択」ではなく、「アクセス数の多い順」になる、
    というように、ソートした項目が画面上に表示されるようにしたいと考えています。

    長い文章かつ、突然の質問の追加で申し訳ないです。

    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    ドロップダウンのソートの表示方法についてですが、以下のコードでご希望のドロップダウンのリスト表示が出来ると思います。お試しください。

    ドロップダウン形式<br>
    		<?php $DropSortList = array(); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_average" , "order" => "DESC" ) , "label" => "評価平均の多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_average" , "order" => "ASC" ) , "label" => "評価平均の少ない順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_users" , "order" => "DESC" ) , "label" => "評価をつけた人数の多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_users" , "order" => "ASC" ) , "label" => "評価をつけた人数の少ない順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_score" , "order" => "DESC" ) , "label" => "総合評価の多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_score" , "order" => "ASC" ) , "label" => "総合評価の少ない順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "orderby" => "comment_count" , "order" => "DESC" ) , "label" => "コメントの多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "orderby" => "comment_count" , "order" => "ASC" ) , "label" => "コメントの少ない順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "views" , "order" => "DESC" ) , "label" => "アクセス数の多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "views" , "order" => "ASC" ) , "label" => "アクセス数の少ない順" ); ?>
    		<select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
    			<?php if( empty( $_GET["order"] ) ) : ?>
    				<option value="">ソート順を選択</option>
    			<?php else: ?>
    				<?php $Sorted = array(); ?>
    				<?php foreach($DropSortList as $key => $SortList) : ?>
    					<?php if( !empty( $_GET["meta_key"] ) && !empty( $SortList["sort"]["meta_key"] ) ) : ?>
    						<?php if( $_GET["order"] == $SortList["sort"]["order"] && $_GET["meta_key"] == $SortList["sort"]["meta_key"] ) : ?>
    							<?php $Sorted = $key; ?>
    							<?php break; ?>
    						<?php endif; ?>
    					<?php elseif( !empty( $_GET["orderby"] ) && !empty( $SortList["sort"]["orderby"] ) ) : ?>
    						<?php if( $_GET["order"] == $SortList["sort"]["order"] && $_GET["orderby"] == $SortList["sort"]["orderby"] ) : ?>
    							<?php $Sorted = $key; ?>
    							<?php break; ?>
    						<?php endif; ?>
    					<?php endif; ?>
    				<?php endforeach; ?>
    			<?php endif; ?>
    			<?php if( !empty( $Sorted ) ) : ?>
    				<option value="<?php echo add_query_arg( $DropSortList[$key]["sort"] , $uri ); ?>" selected="selected"><?php echo $DropSortList[$key]["label"]; ?></option>
    				<?php unset( $DropSortList[$key] ); ?>
    			<?php endif; ?>
    			<?php foreach($DropSortList as $key => $SortList) : ?>
    				<option value="<?php echo add_query_arg( $SortList["sort"] , $uri ); ?>"><?php echo $SortList["label"]; ?></option>
    			<?php endforeach; ?>
    		</select>

    ※unset は重複のソート部分を削除しているだけです。必要に応じて変更してください。

    gakusei

    (@gakusei)

    gqevu6bsizさん

    gqevu6bsizさんが用意してくださいましたコードを貼り付けてみましたが、
    ソート出来ず、トップページに戻されてしまいました。

    ただ、gqevu6bsizさんのコードを
    以前まで作成していたソート機能のどこの部分を入れ替えるべきか
    理解できていなかったので、以前までのコードである以下のものと入れ替えてみました。

    <?php $uri = home_url( '/' ); ?>
        <?php if( is_category() or is_tag() ) : ?>
          <?php $term = get_queried_object(); ?>
          <?php if ( $term ) : ?>
            <?php $uri = get_term_link( $term , $term->taxonomy ); ?><br>
          <?php endif; ?>
        <?php endif; ?>
    
    ドロップダウン形式<br>
        <div class="sort">
        <select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
          <option value="">ソート順を選択</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'date' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'date' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>日付の新しい順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'date' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'date' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>日付の古い順</option>  
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'title' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'title' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>タイトル順(あ~わ・A~Z)</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'title' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'title' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>タイトル順(わ~あ・Z~A)</option>  
    
          <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_average' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_average' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>評価平均の高い順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_average' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_average' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>評価平均の低い順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_score' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_score' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>評価総合の高い順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_score' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_score' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>評価総合の低い順</option>  
    
          <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_users' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_users' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>評価をつけた人数の多い順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_users' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_users' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>評価をつけた人数の少ない順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'comment_count' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>コメント数の多い順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'comment_count' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>コメント数の少ない順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'views' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'meta_key' => 'views' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>アクセス数の多い順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'views' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'meta_key' => 'views' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>アクセス数の少ない順</option>
    
        </select>
            </div>   
    
        <?php
        // 何の指定もないときのデフォルトのソート順
        $args = array( 'nopaging' => 1 , 'orderby' => 'date' , 'order' => 'DESC' );
    
        if( is_category() ) {
          $args["cat"] = get_query_var( "cat" );
        } elseif( is_tag() ) {
          $args["tag"] = get_query_var( "tag" );
        }
    
        if( !empty( $_GET["meta_key"] ) ) {
          $args["meta_key"] = strip_tags( $_GET["meta_key"] );
          $args["orderby"] = 'meta_value_num';
          } elseif( !empty( $_GET["orderby"] ) ) {
          $args["orderby"] = strip_tags( $_GET["orderby"] );
          unset( $args["meta_key"] );
    
        }
    
        if( !empty( $_GET["order"] ) ) {
          $args["order"] = strip_tags( $_GET["order"] );
        }
        ?>
    
        <?php query_posts( $args ); ?>

    その結果、トップページに戻されたという感じです。

    gqevu6bsizさんが今回用意してくださいましたコードは
    どのように利用するのが良いのでしょうか?

    申し訳ありません。
    よろしくお願いします。

    gqevu6bsiz

    (@gqevu6bsiz)

    gakuseiさん

    そのコードと丸々入れ替えたという事であれば、入れ換える所が間違っていますね。
    あのコードは、ドロップダウンの部分だけのコードになるので、
    以前のコードと組み合わせると、

    <?php $uri = home_url( '/' ); ?>
        <?php if( is_category() or is_tag() ) : ?>
          <?php $term = get_queried_object(); ?>
          <?php if ( $term ) : ?>
            <?php $uri = get_term_link( $term , $term->taxonomy ); ?><br>
          <?php endif; ?>
        <?php endif; ?>
    
        ドロップダウン形式<br>
    		<?php $DropSortList = array(); ?>
    		<?php $DropSortList[] = array( "sort" => array( "orderby" => "date" , "order" => "DESC" ) , "label" => "日付の新しい順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "orderby" => "date" , "order" => "ASC" ) , "label" => "日付の古い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "orderby" => "title" , "order" => "DESC" ) , "label" => "タイトル順(わ~あ・Z~A)" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "orderby" => "title" , "order" => "ASC" ) , "label" => "タイトル順(A~Z・あ~わ)" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_average" , "order" => "DESC" ) , "label" => "評価平均の高い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_average" , "order" => "ASC" ) , "label" => "評価平均の低い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_score" , "order" => "DESC" ) , "label" => "評価総合の多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_score" , "order" => "ASC" ) , "label" => "評価総合の少ない順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_users" , "order" => "DESC" ) , "label" => "評価をつけた人数の多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_users" , "order" => "ASC" ) , "label" => "評価をつけた人数の少ない順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "orderby" => "comment_count" , "order" => "DESC" ) , "label" => "コメントの多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "orderby" => "comment_count" , "order" => "ASC" ) , "label" => "コメントの少ない順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "views" , "order" => "DESC" ) , "label" => "アクセス数の多い順" ); ?>
    		<?php $DropSortList[] = array( "sort" => array( "meta_key" => "views" , "order" => "ASC" ) , "label" => "アクセス数の少ない順" ); ?>
    		<select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
    			<?php if( empty( $_GET["order"] ) ) : ?>
    				<option value="">ソート順を選択</option>
    			<?php else: ?>
    				<?php $Sorted = array(); ?>
    				<?php foreach($DropSortList as $key => $SortList) : ?>
    					<?php if( !empty( $_GET["meta_key"] ) && !empty( $SortList["sort"]["meta_key"] ) ) : ?>
    						<?php if( $_GET["order"] == $SortList["sort"]["order"] && $_GET["meta_key"] == $SortList["sort"]["meta_key"] ) : ?>
    							<?php $Sorted = $key; ?>
    							<?php break; ?>
    						<?php endif; ?>
    					<?php elseif( !empty( $_GET["orderby"] ) && !empty( $SortList["sort"]["orderby"] ) ) : ?>
    						<?php if( $_GET["order"] == $SortList["sort"]["order"] && $_GET["orderby"] == $SortList["sort"]["orderby"] ) : ?>
    							<?php $Sorted = $key; ?>
    							<?php break; ?>
    						<?php endif; ?>
    					<?php endif; ?>
    				<?php endforeach; ?>
    			<?php endif; ?>
    			<?php if( !empty( $Sorted ) ) : ?>
    				<option value="<?php echo add_query_arg( $DropSortList[$key]["sort"] , $uri ); ?>" selected="selected"><?php echo $DropSortList[$key]["label"]; ?></option>
    				<?php unset( $DropSortList[$key] ); ?>
    			<?php endif; ?>
    			<?php foreach($DropSortList as $key => $SortList) : ?>
    				<option value="<?php echo add_query_arg( $SortList["sort"] , $uri ); ?>"><?php echo $SortList["label"]; ?></option>
    			<?php endforeach; ?>
    		</select>
            </div>   
    
        <?php
        // 何の指定もないときのデフォルトのソート順
        $args = array( 'nopaging' => 1 , 'orderby' => 'date' , 'order' => 'DESC' );
    
        if( is_category() ) {
          $args["cat"] = get_query_var( "cat" );
        } elseif( is_tag() ) {
          $args["tag"] = get_query_var( "tag" );
        }
    
        if( !empty( $_GET["meta_key"] ) ) {
          $args["meta_key"] = strip_tags( $_GET["meta_key"] );
          $args["orderby"] = 'meta_value_num';
          } elseif( !empty( $_GET["orderby"] ) ) {
          $args["orderby"] = strip_tags( $_GET["orderby"] );
          unset( $args["meta_key"] );
    
        }
    
        if( !empty( $_GET["order"] ) ) {
          $args["order"] = strip_tags( $_GET["order"] );
        }
        ?>
    
        <?php query_posts( $args ); ?>

    このようになります。お試しください。
    ※タイトル順のA~Z等の表記部分、少し変更しました。

    gakusei

    (@gakusei)

    gqevu6bsizさん

    gqevu6bsizさんが教えてくださいましたコードの貼り付けで、
    完全に希望のものが出来ました!

    長期にわたって粘り強く教えていただきましてありがとうございました。

    何とお礼を言ったらよいかわかりませんが、
    初心者がゆえに、またフォーラムで質問すると思いますので、
    その時はまたよろしくお願いします。

    非常に細かい質問ばかりで本当に申し訳ないと同時に、
    gqevu6bsizさんには大変お世話になりました。

    ここで終わってしまうのは、私としてはもったいなく、惜しいことですが、
    gqevu6bsizさんには、また教えていただけますと嬉しいです。

    一方的であるため失礼だということはよく理解していますが、
    トピックの内容は解決しましたので、
    一応ここでは解決済みとさせていただきます。

    本当にありがとうございました。

    今後ともよろしくお願いします。

    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    おぉ、良かったです。
    やっとご希望通りのものが出来たんですね!(オツカレさまです!

    こちらこそ、途中難しい説明や惑わせるような説明があったりしたかもしれませんね。。

    初めに、相手が何をしたいのか。を確認することがいかに大事なのかを、再認識しました。
    ありがとうございます。

    それでは、また機会がありましたら宜しくお願いします。

    gakusei

    (@gakusei)

    gqevu6bsizさん

    自ら解決済みにしたにも関わらず、質問をしてしまい、申し訳ありません。
    カテゴリー別の記事のソートは出来たのですが、
    投稿者別の記事一覧と、検索結果の記事一覧のソートが出来ませんでした。

    同じコードを使ったところ、カテゴリー別の記事のソート以外は、
    トップページに戻されるということが起きました。

    ソートをする方法はありますでしょうか。

    延長する形になってしまいまして、本当に申し訳ありません。

15件の返信を表示中 - 16 - 30件目 (全48件中)
  • トピック「記事一覧の時のソートができません」には新たに返信することはできません。