サポート » 使い方全般 » 記事一覧のソートをタクソノミーで出来るようにしたい

  • 解決済 gakusei

    (@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 ); ?>
          <?php endif; ?>
        <?php endif; ?>
    
    	<?php echo $uri; ?>
    
        <div class="sort">
        <select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
    
          <?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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>閲覧数の少ない順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(A~Z・あ~わ)</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(わ~あ・Z~A)</option>  
    
        </select>
            </div>   
    
        <?php
        // 何の指定もないときのデフォルトのソート順
    	$paged = get_query_var( 'paged' );
    	if( empty( $paged ) ) {
    		$paged = 0;
    	}
        $args = array( 'posts_per_page' => get_option('posts_per_page') , 'orderby' => 'date' , 'order' => 'DESC' , 'paged' => $paged );
    
        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 ); ?>
    	<pre><?php print_r($args); ?></pre>
    
    	<section id="primary" class="site-content">
    		<div id="content" role="main">
    
    		<?php if ( have_posts() ) : ?>
    
    			<header class="page-header">
    				<h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'twentytwelve' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
    			</header>
    
    			<?php twentytwelve_content_nav( 'nav-above' ); ?>
    
    			<?php /* Start the Loop */ ?>
    			<?php while ( have_posts() ) : the_post(); ?>
    				<?php get_template_part( 'content', get_post_format() ); ?>
    			<?php endwhile; ?>
    
    			<?php twentytwelve_content_nav( 'nav-below' ); ?>
    
    		<?php else : ?>
    
    			<article id="post-0" class="post no-results not-found">
    				<header class="entry-header">
    					<h1 class="entry-title"><?php _e( 'Nothing Found', 'twentytwelve' ); ?></h1>
    				</header>
    
    				<div class="entry-content">
    					<p><?php _e( 'Sorry, but nothing matched your search criteria. Please try again with some different keywords.', 'twentytwelve' ); ?></p>
    					<?php get_search_form(); ?>
    				</div><!-- .entry-content -->
    			</article><!-- #post-0 -->
    
    		<?php endif; ?>
    
    		</div><!-- #content -->
    	</section><!-- #primary -->
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    大変使いやすく、重宝しています。

    今回、このコードだとタクソノミーで作成したカテゴリーで
    ソートが出来ないことに気づきました。
    ですが、どこを具体的に変更することで、
    タクソノミーに対応させることが出来るかわからなかったので、
    今回トピックをたてました。

    なにか、教えていただけますとありがたいです。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • gakuseiさん

    gakuseiさんが現在どのような環境(どういったカスタムタクソノミー名を使用しているのか、どういった検索フォームにしているのか等)が分からないので、下記があっているかどうか分かりませんが、まず

    [解決済み] カスタムタクソノミーで親には子のカテゴリ、子には商品ページ一覧を表
    のjim912さんの回答にカスタムタクソノミーの取得方法が載っています。

    value と taxonomy パラメータは、get_query_var( ‘term’ ) と get_query_var( ‘taxonomy’ ) で取得

    検索対象にするのであれば、これを検索ワード設定付近に設定すればできそうなのですがどうでしょうか?

    具体的には、

    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( is_category() ) {
          $args["cat"] = get_query_var( "cat" );
        } elseif( is_tag() ) {
          $args["tag"] = get_query_var( "tag" );
        }
        $taxonomy = get_query_var( "taxonomy" );
        if( !empty( $taxonomy ) ) {
          $args[$taxonomy] = get_query_var( "term" );
        }
        $args["s"] = get_query_var( "s" );

    こういう感じだと思います。

    また、$uriの部分にはカスタムタクソノミー用の分岐を入れる必要があると思うので、今の部分の

    <?php if( is_category() or is_tag() ) : ?>
    <?php $term = get_queried_object(); ?>
    <?php if ( $term ) : ?>
    <?php $uri = get_term_link( $term , $term->taxonomy ); ?>
    <?php endif; ?>
    <?php endif; ?>

    ここを、

    <?php if( is_category() or is_tag() or is_tax() ) : ?>
          <?php $term = get_queried_object(); ?>
          <?php if ( $term ) : ?>
            <?php $uri = get_term_link( $term , $term->taxonomy ); ?>
          <?php endif; ?>
        <?php endif; ?>

    こうすると、どうでしょうか。

    別件、とまではいきませんが後で知ったのですが、
    テンプレートタグ/query posts

    query_postsではなくpre_get_postsフィルターを用い、is_main_queryでチェックしてメインクエリーを変更することが強く推奨されています。

    前回の私の回答が良くなかったです。
    今後はpre_get_postsを用いたほうがよいかもしれません。
    (不具合無く動作も遅くなければ大丈夫だとは思いますが、出来る限り推奨されている点に合わせたほうがよいかと思います。)

    トピック投稿者 gakusei

    (@gakusei)

    gqevu6bsizさん

    毎回丁寧なご回答ありがとうございます。

    ここ数週間自力でいろいろとがんばったのですが、
    結局ソートに関してわからないことが出てきてしまった
    ということになってしまいました。

    ご返信が遅くなって大変申し訳ないと同時に、
    もし時間があるようでしたら、
    また教えていただけますと大変助かります。

    カスタムタクソノミーのソートについては、
    gqevu6bsizさんが記載してくださいました
    コードを組み込むことで、出来るようになりました。
    ありがとうございます。

    ただ、タクソノミーでもソートできるコードについて、
    検索結果のソートが出来ませんでした。
    コードを記載するので、間違いなどを教えていただけませんでしょうか?

    <?php $uri = home_url( '/' ); ?>
       <?php if( is_category() or is_tag() or is_tax() ) : ?>
          <?php $term = get_queried_object(); ?>
          <?php if ( $term ) : ?>
            <?php $uri = get_term_link( $term , $term->taxonomy ); ?>
          <?php endif; ?>
        <?php endif; ?>
    
        <div class="sort">
        <select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
    
          <?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
        // 何の指定もないときのデフォルトのソート順
    
          $paged = get_query_var( 'paged' );
      if( empty( $paged ) ) {
        $paged = 0;
      }
        $args = array( 'posts_per_page' => get_option( 'posts_per_page' ) , 'orderby' => 'date' , 'order' => 'DESC' , 'paged' => $paged );
    
        if( is_category() ) {
          $args["cat"] = get_query_var( "cat" );
        } elseif( is_tag() ) {
          $args["tag"] = get_query_var( "tag" );
        }
          $taxonomy = get_query_var( "taxonomy" );
        if( !empty( $taxonomy ) ) {
          $args[$taxonomy] = get_query_var( "term" );
        }
        $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 ); ?>

    また、
    query_postsではなくpre_get_postsフィルターを用い、is_main_queryでチェックしてメインクエリーを変更することが強く推奨されています。
    ということですが、
    自分なりに調べてもどうするのがよいのか分かりませんでした。
    今回のソートのコードに対しても、どのように変更していいのか分からず困惑しております。

    一方的で返信も遅くなってしまい本当に申し訳ないのですが、
    お時間があるようでしたら、
    教えていただけますと幸いです。

    よろしくお願い致します。

    gakusei さん

    すみません、検索結果について1点分からない所がありました。

    検索結果のソートが出来ませんでした。

    これは、「検索結果ページ」の事でしょうか?それとも別の事でしょうか?

    分からなかったのですが、一旦「検索結果ページ」という前提で方法を記載していきます。

    gakusei さんのコードをsearch.phpに貼り付けて動作を確認してみてわかった事ですが、
    検索クエリ(検索ワード)がURLに付加されていない
    事が原因で、「検索結果のソートができない」という事だと思いました。

    http://ja.forums.wordpress.org/topic/13822/page/2?replies=49
    こちらにも記載しているのですが、検索結果ページのコード用にURLの部分を分岐してみてください。

    今のコードの部分、

    <?php $uri = home_url( ‘/’ ); ?>
    <?php if( is_category() or is_tag() or is_tax() ) : ?>
    <?php $term = get_queried_object(); ?>
    <?php if ( $term ) : ?>
    <?php $uri = get_term_link( $term , $term->taxonomy ); ?>
    <?php endif; ?>
    <?php endif; ?>

    この部分を、

    <?php $uri = home_url( '/' ); ?>
       <?php if( is_category() or is_tag() or is_tax() ) : ?>
          <?php $term = get_queried_object(); ?>
          <?php if ( $term ) : ?>
            <?php $uri = get_term_link( $term , $term->taxonomy ); ?>
          <?php endif; ?>
    	<?php elseif( is_search() ) : ?>
    		<?php $uri = get_search_link( get_query_var( "s" ) ); ?>
        <?php endif; ?>

    こんな感じです。

    <?php elseif( is_search() ) : ?>
    <?php $uri = get_search_link( get_query_var( "s" ) ); ?>

    分岐とURLの取得を追加しました。

    それと、pre_get_posts についてですが、

    自分なりに調べてもどうするのがよいのか分かりませんでした。

    検索結果の部分がまだご希望の動作はしていないようなので、一度、query_postsでご希望の動作が可能になった後に、pre_get_postsでのコードを試されたほうが良いのではないかと思いました。

    現在のコードの分離(ドロップダウンのコードとqueryのコード)等、コードの書き方やファイルもだいぶ変わるはずなので、理解・整理しやすいようにする為です。

    ただ、

    前回の私の回答が良くなかったです。
    今後はpre_get_postsを用いたほうがよいかもしれません。

    私からこのように言っておいて申し訳ないのですが、今回のトピックとpre_get_postsは少し違う気がするので、別でトピックを立てられたほうが適切ではないかと思い、このトピックではpre_get_postsについては方法を記載しない事にしました、すみません。

    トピック投稿者 gakusei

    (@gakusei)

    gqevu6bsizさん

    また、返信が遅くなって本当に申し訳ありませんでした。

    gqevu6bsizさんの記述の後も、いろいろと調べてみました。

    まず、search.phpについてですが、
    gqevu6bsizさんが教えてくださいましたコードで無事出来ました。
    いつもいつも、お世話になっています。
    本当にありがとうございます。

    また、pre_get_postsについてなのですが、
    gqevu6bsizさんから返信をくださった後も、
    調べたのですが、推奨と非推奨の話が多く、
    結局自分で理解できませんでした。
    そのため、gqevu6bsizさんがおっしゃるように、
    pre_get_postsについて
    別のトピックをたてることにします。

    ただ、私が理解できるようにしたいので、
    今までgqevu6bsizさんが教えて下さったソートのコードを
    貼り付けようと思います。

    もし、お時間があるようでしたら、
    またお返事をいただけると嬉しいです。

    勝手で申し訳ないのですが、トピックの目的は達成できたので、
    こちらのトピックは一度解決済みにさせてください。
    ありがとうございました。

    解決済みのところ、申し訳ございません。

    実は、gakuseiさんとgqevu6bsizさんとのやりとりで
    作成されたソートのコードを使用しているものです。

    今回質問をしたいのですが、
    どうしてもgqevu6bsizにお答えをいただきたかったので、
    質問をさせていただきました。
    (別のトピックが必要であれば、こちらでたてさせていただきます。)

    私は、以下のコードを使用させていただいています

    <?php $uri = home_url( '/' ); ?>
        <?php if( is_category() or is_tag() or is_tax() ) : ?>
          <?php $term = get_queried_object(); ?>
          <?php if ( $term ) : ?>
            <?php $uri = get_term_link( $term , $term->taxonomy ); ?>
          <?php endif; ?>
        <?php endif; ?>
    	<?php echo $uri; ?>
    
        <div class="sort">
        <select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
    
          <?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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $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' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>閲覧数の少ない順</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(A~Z・あ~わ)</option>
    
          <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?>
          <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(わ~あ・Z~A)</option>  
    
        </select>
            </div>   
    
        <?php
        // 何の指定もないときのデフォルトのソート順
    	$paged = get_query_var( 'paged' );
    	if( empty( $paged ) ) {
    		$paged = 0;
    	}
        $args = array( 'posts_per_page' => get_option('posts_per_page') , 'orderby' => 'date' , 'order' => 'DESC' , 'paged' => $paged );
    
        if( is_category() ) {
          $args["cat"] = get_query_var( "cat" );
        } elseif( is_tag() ) {
          $args["tag"] = get_query_var( "tag" );
        }
        $taxonomy = get_query_var( "taxonomy" );
        if( !empty( $taxonomy ) ) {
          $args[$taxonomy] = get_query_var( "term" );
        }
        $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 ); ?>
    	<pre><?php print_r($args); ?></pre>
    
    	<section id="primary" class="site-content">
    		<div id="content" role="main">
    
    		<?php if ( have_posts() ) : ?>
    
    			<header class="page-header">
    				<h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'twentytwelve' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
    			</header>
    
    			<?php twentytwelve_content_nav( 'nav-above' ); ?>
    
    			<?php /* Start the Loop */ ?>
    			<?php while ( have_posts() ) : the_post(); ?>
    				<?php get_template_part( 'content', get_post_format() ); ?>
    			<?php endwhile; ?>
    
    			<?php twentytwelve_content_nav( 'nav-below' ); ?>
    
    		<?php else : ?>
    
    			<article id="post-0" class="post no-results not-found">
    				<header class="entry-header">
    					<h1 class="entry-title"><?php _e( 'Nothing Found', 'twentytwelve' ); ?></h1>
    				</header>
    
    				<div class="entry-content">
    					<p><?php _e( 'Sorry, but nothing matched your search criteria. Please try again with some different keywords.', 'twentytwelve' ); ?></p>
    					<?php get_search_form(); ?>
    				</div><!-- .entry-content -->
    			</article><!-- #post-0 -->
    
    		<?php endif; ?>
    
    		</div><!-- #content -->
    	</section><!-- #primary -->
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    大変助かると思っていたのですが、
    query_postsのコードがあると、ぶつかってしまうコードを使用しています。
    gqevu6bsizさんが作成して下さっていましたソートのコードで
    query_postsを使用しないことは可能なのでしょうか?

    具体的には

    <?php
    // 何の指定もないときのデフォルトのソート順
    $paged = get_query_var( ‘paged’ );
    if( empty( $paged ) ) {
    $paged = 0;
    }
    $args = array( ‘posts_per_page’ => get_option(‘posts_per_page’) , ‘orderby’ => ‘date’ , ‘order’ => ‘DESC’ , ‘paged’ => $paged );

    if( is_category() ) {
    $args[“cat”] = get_query_var( “cat” );
    } elseif( is_tag() ) {
    $args[“tag”] = get_query_var( “tag” );
    }
    $taxonomy = get_query_var( “taxonomy” );
    if( !empty( $taxonomy ) ) {
    $args[$taxonomy] = get_query_var( “term” );
    }
    $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 ); ?>

    の最後にあります、query_postsです。

    勝手な注文であり、お忙しいところ申し訳ないですが、
    ご回答いただけますと幸いです。
    よろしくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「記事一覧のソートをタクソノミーで出来るようにしたい」には新たに返信することはできません。