フォーラムへの返信

15件の返信を表示中 - 46 - 60件目 (全73件中)
  • フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    gqevu6bsiz

    (@gqevu6bsiz)

    gakuteiさん

    無事希望通りの解決ができて良かったですね。

    では、また機会があれば!

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    このまま、このトピックに質問の返事をしても大丈夫かどうか、ちょっと疑問に思いましたが、
    そのままご返事することにしました。

    あのコードは、is_category、is_tagとあるように、カテゴリ一覧とタグ一覧のみを想定したコードでしたので、gakuseiさんのおっしゃる通り、投稿者一覧のページと検索結果のページのソートにはしておりません。

    なので、書きにそれぞれの場合を記載します。
    (本当はそれぞれにフックさせたほうが楽なのですが、とりあえず)

    検索結果一覧のソートの場合は、検索ワードを取得し、query_posts()と現在のurlに値をセットしなくてはいけません。

    なので、

    • get_query_var()等で検索ワードを取得
    • $uriに検索ワードを足す
    • query_posts()に指定している配列$argsにも検索ワードを足す

    以上で、検索結果のページにソートが可能になるのではと思います。
    具体的なコードは、

    <?php $uri = home_url( '/' ); ?>
        <?php if( is_search() ) : ?>
          <?php $term = get_queried_object(); ?>
          <?php if ( $term ) : ?>
            <?php $uri = get_term_link( $term , $term->taxonomy ); ?>
          <?php endif; ?>
          <?php $search_query = get_query_var('s'); ?>
          <?php if ( $search_query ) : ?>
            <?php $uri .= '?s=' . $search_query; ?><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" );
    	}
    	$args["s"] = get_query_var( "s" );
    
        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 ); ?>

    投稿者一覧の場合は

    • author のID を取得
    • $uriを投稿者一覧のurlに変更
    • query_posts()に指定している配列$argsにauthorIDを指定

    となると思うので、コードは、

    <?php $uri = home_url( '/' ); ?>
        <?php if( is_author() ) : ?>
          <?php $term = get_queried_object(); ?>
          <?php if ( $term ) : ?>
            <?php $uri = get_author_posts_url( $term->ID ); ?>
          <?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_author() ) {
          $term = get_queried_object();
          if ( $term ) {
    		  $args["author"] = $term->ID;
    	  }
    	}
    
        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 ); ?>

    のようになると思います。

    ちなみに、日付系のアーカイブは、

    <?php $uri = home_url( '/' ); ?>
        <?php if( is_archive() ) : ?>
    		<?php $arc = array( "year" => get_query_var( "year" ) , "month" => get_query_var( "monthnum" ) , "day" => get_query_var( "day" ) ); ?>
          <?php if ( $arc["day"] ) : ?>
            <?php $uri = get_day_link( $arc["year"] , $arc["month"] , $arc["day"] ); ?>
          <?php elseif ( $arc["month"] ) : ?>
            <?php $uri = get_month_link( $arc["year"] , $arc["month"] ); ?>
          <?php elseif ( $arc["year"] ) : ?>
            <?php $uri = get_month_link( $arc["year"] ); ?>
          <?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 ( $arc["day"] ) {
            $args["day"] = $arc["day"];
    	 }
    	 if ( $arc["month"] ) {
            $args["monthnum"] = $arc["month"];
    	 }
    	 if ( $arc["year"] ) {
            $args["year"] = $arc["year"];
    	 }
    
        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)

    gakusei さん

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

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

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

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

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    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等の表記部分、少し変更しました。

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    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 は重複のソート部分を削除しているだけです。必要に応じて変更してください。

    フォーラム: 使い方全般
    返信が含まれるトピック: 検索結果画面表示方法について
    gqevu6bsiz

    (@gqevu6bsiz)

    rental さん

    デフォルトのテーマを使用していないので、ダメなのでしょうか。。

    いえ、デフォルトのテーマかどうかではなく、テーマに何を書いているのか、
    それとも他に原因があるのか、という事だと思います。

    一度、どういう状況なら通常通りの表示になるかを、検証してみてください。

    1. プラグインを全停止
    2. テーマを一旦デフォルトにしてみる
    3. パーマリンクをデフォルトの形式にする
    4. ローカル等別のサーバにインストールしてみて、動作の検証

    解消する為にはまずは原因が分からないとなんとも言えない所があるので、
    プラグインなのか、テーマなのか、パーマリンク(.htaccess等)が原因なのか、
    を突き止めてください。

    ※最初のトピックとは原因が変わってきている気がしますので、検索が動いているという事であれば、一旦このトピックは解決済みにして、トップページの表示に関するトピックを作成したほうがいいかもしれません。

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

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

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

    以前にお教えした、

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

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

    お試しください。

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    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)の順に沿って記事をソートさせる

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

    フォーラム: 使い方全般
    返信が含まれるトピック: 検索結果画面表示方法について
    gqevu6bsiz

    (@gqevu6bsiz)

    rental さん

    http://www.good-f.jp/blog/?s=○○○○
    のように検索されることになり、上手く表示してくれません。

    と、

    http://www.good-f.jp/blog/カテゴリ名/?s=○○○○
    だと、検索ができますが、そのカテゴリ内でしか検索できません。

    を見る限り、ちゃんと検索フォーム自体は動いている気がします。

    ブログURL/?s=○○○○
    この形式はデフォルトの形式で、全ての記事を検索対象とします。

    リンクのサイトを見ましたが、ブログトップページが 404エラー なので、
    検索結果以前に、404エラーが表示されているだけでは?と思いました。

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    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等にコードを書くやり方とは別に、同じソートをするにしても他にも様々な方法があります。
    “何”をやりたいのかが具体的に分かれば、様々な方法の中から、簡単に出来るコードを教えて頂ける確率が上がると思います。

    フォーラム: 使い方全般
    返信が含まれるトピック: 検索結果画面表示方法について
    gqevu6bsiz

    (@gqevu6bsiz)

    rental さん

    searchform.phpコード内の form の action 値ですが、

    action=”<?php site_url(); ?>/”

    site_url() は取得だけで、出力する機能はないと思うので、結果
    action="/"

    になっていないでしょうか?

    action="<?php echo site_url(); ?>/"
    もしくは、
    action="<?php echo esc_url( home_url( '/' ) ); ?>
    にすると、上手くいくかもしれません。

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    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(); ?>

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    先に

    もう1つは、ドロップダウンリストについてです。

    ですが、ドロップダウンが4つしか表示されないようですが、</select>の後に追加ソート分のoptionを記載していませんか?

    正しくは、

    <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>

    ここはwordpress等は関係なく、htmlの問題となります。
    上記コードからドロップダウンでアクセス数、コメント数、評価全てのソートが動作することを確認しました。

    もし上記コードでもまだ動かないようなら、デバッグの情報も含めて記載してください。

    <pre><?php print_r($args); ?></pre>

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    日付のソートは出来ました。

    お、それはよかったです!

    ソートの項目についてですが、WP-Postviewsについては確認しておりませんが、
    viewsを使うという事なので、コメント数のcomment_countとviewsを前提に進めます。

    まず一例のコードを応用すると、
    コメント数のドロップダウンは、

    <?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>

    になると思います。
    (最初の想定よりもソートの対象が増えてきた為、ソートの対象を配列やオブジェクトに入れて、whileやforeach等で回したほうが効率いいかもしれません。余裕があれば)

    あとは、

    if( !empty( $_GET["meta_key"] ) ) {
    	$args["meta_key"] = strip_tags( $_GET["meta_key"] );
    }

    このコードは、以下

    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"] );
    }

    にしてください。

    これで、コメント数とアクセス数によるソートが可能になると思います。

    また、query_posts関数の直前に以下のコードを貼り付けて、現在のソートの値を確かめながら進める事をおすすめします。

    <pre><?php print_r($args); ?></pre>

    $args = ソート対象の配列

    フォーラム: 使い方全般
    返信が含まれるトピック: 記事一覧の時のソートができません
    gqevu6bsiz

    (@gqevu6bsiz)

    gakusei さん

    ご希望通りのソートが出来て、なによりです。

    日付やアクセス数のソートについてですが、

    <?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"] );
    		}
    
    		if( !empty( $_GET["order"] ) ) {
    			$args["order"] = strip_tags( $_GET["order"] );
    		}
    		?>
    		<?php query_posts( $args ); ?>

    具体的にはまず、このコードにプラス、orderbyを取得できるよう変更しないといけません。

    if( !empty( $_GET["meta_key"] ) ) {
    			$args["meta_key"] = strip_tags( $_GET["meta_key"] );
    		}

    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"] );
    		}

    このようにします。

    そして、

    $args = array( 'nopaging' => 1 , 'orderby' => 'meta_value' , 'order' => 'DESC' , 'meta_key' => 'ratings_average' );
    /* ここは指定された値をもとにソートのデフォルト値を変更 */
    <?php query_posts( $args ); ?>

    この部分が、ソートの仕様を決めるものになります。

    ■ ソートの値
    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

    基本は order と orderby の組み合わせです。

    例えば日付でのソートをする場合は、orderby に date が入ればよいのでこのようになります。
    $args = array( ‘nopaging’ => 1 , ‘orderby’ => ‘date‘ , ‘order’ => ‘DESC‘ );

    また、ドロップダウンの部分は、日付のソートの場合だと、
    <?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>
    ascのほうはこれを参考につけてください。

    ※アクセス数については、すみませんが分かりません。
    “wordpressだけ” ではアクセス数は取得していないので、何かプラグイン等を入れないとそもそもアクセス数のソートは出来ないと思います。

    プラグインを入れた場合は、だいたいは、WP-PostRatings の時と同じようにカスタムフィールドの値をもとにソートをするはずなので、フィールド名を変更するぐらいで同じようなやり方になると思います。

    $args = array( ‘nopaging’ => 1 , ‘orderby’ => ‘meta_value’ , ‘order’ => ‘DESC’ , ‘meta_key’ => ‘アクセス数に関係するカスタムフィールド名‘ );

    ドロップダウンは

    <?php $Selected = ”; if( !empty( $_GET[“meta_key”] ) && !empty( $_GET[“order”] ) ) : if( $_GET[“meta_key”] == ‘アクセス数に関係するカスタムフィールド名‘ && $_GET[“order”] == ‘ASC’ ) : $Selected = ‘selected=”selected”‘; endif; endif; ?>
    <option value=”<?php echo add_query_arg( array( ‘meta_key’ => ‘アクセス数に関係するカスタムフィールド名‘ , ‘order’ => ‘ASC’ ), $uri ); ?>” <?php echo $Selected ?>>アクセス数順</option>

    このようになります。

    ※ $wp_query や var_dump($_GET)等で、現在来ている値をしっかりデバッグすることをおすすめします。

15件の返信を表示中 - 46 - 60件目 (全73件中)