サポート » 使い方全般 » 記事一覧をドロップダウンリストでソートしたい

  • 記事一覧をドロップダウンリストでソートしたいと考えています。

    いろいろ探したところ、たなブログさんのコードとKzさんのコードが有力でした。

    ①たなブログさん (たなブログさんのブログ

    <form name="irekae" method="get" id="sort_form5" class="sort_form5">
           <select name='narabi' onChange="document.forms['irekae'].submit()" >
               <option value="sort1"<?php if(!isset($_REQUEST['narabi']) || $_REQUEST['narabi'] == 'sort1') echo ' selected="selected"';?>>投稿日時が新しい順</option>
                <option value="sort2"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort2') echo ' selected="selected"';?>>投稿日時が古い順</option>
                <option value="sort3"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort3') echo ' selected="selected"';?>>五十音順(あ~わ)</option>
                <option value="sort4"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort4') echo ' selected="selected"';?>>五十音順(わ~あ)</option>
                <option value="sort5"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort5') echo ' selected="selected"';?>>アクセス数の多い順</option>
                <option value="sort6"<?php if(isset($_REQUEST['narabi']) && $_REQUEST['narabi'] == 'sort6') echo ' selected="selected"';?>>アクセス数の少ない順</option>
           </select>
    </form>
    <?php $sortset = $_GET['narabi']; ?>
    <?php $sortall = array(
      "sort1" => 'order=DESC&posts_per_page=6&paged=',
      "sort2" => 'order=ASC&posts_per_page=6&paged=',
      "sort3" => 'order=ASC&orderby=meta_value&meta_key=furikana&posts_per_page=6&paged=',
      "sort4" => 'order=DESC&orderby=meta_value&meta_key=furikana&posts_per_page=6&paged=',
      "sort5" => 'order=DESC&orderby=meta_value_num&meta_key=views&posts_per_page=6&paged=',
      "sort6" => 'order=ASC&orderby=meta_value_num&meta_key=views&posts_per_page=6&paged='
    ); ?>
    
    <?php if($sortset != '') {
           $sort = $sortall[$sortset];
        } else {
           $sort = $sortall["sort1"];} ?>
    <!--   <?php echo $sort; ?> ソートてすと用-->
    <?php query_posts($sort . $paged); ?>

    ②Kzさん(Kzさんのコード
    (私が数日前に質問させていただいているのですが、中途半端に質問してしまったため、
     改めて質問させていただきました。)

    <ul>
    <?php
    $url = sprintf( 'http://%1$s%2$s', $_SERVER["HTTP_HOST"], $_SERVER["REDIRECT_URL"] );
    printf( '<li><a href="%s?orderby=comment_count&order=DESC">コメントの多い順</a></li>', $url );
    printf( '<li><a href="%s?orderby=comment_count&order=ASC">コメントの少ない順</a></li>', $url );
    printf( '<li><a href="%s?orderby=post_date&order=DESC">日付の新しい順</a></li>', $url );
    printf( '<li><a href="%s?orderby=post_date&order=ASC">日付の古い順</a></li>', $url );
    ?>
    </ul>

    しかし、①のたなブログさんのコードは、実際に導入して動かしてみたところ、
    トップページに飛んでしまいました。
    また、②のKzさんのコードは、実際に導入して動かしてみたところ、
    http://localhost/xampp/に移動してしまい、認証画面が出てしまいました。

    そこで、たなブログさん、またはKzさん、またはそれ以外のコードで、
    サイト内で記事一覧をドロップダウンリストを使ってソートするコードの内容や、
    プラグインを用いるといったような、その他の方法などがありましたら、
    ぜひ教えていただきたいです。

    長文で失礼いたしますが、よろしくお願いします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • すみません。たなブログの管理人です。たまたまフォーラムを見て自分の記事に関することを見つけたので返信させていただきます。

    ①のコードは、GET変数を利用したソートですので、URLにhttp://xxx.xx/xxx?sort1
    というように、?を使って変数を記憶させています。
    ですので、パーマリンクの設定がデフォルトのhttp://blog.anekipedia.com/?p=123
    のような記事では利用することができません。

    パーマリンクの設定を変更して使ってみてください。
    設定の変更の仕方は、管理画面の「設定」「パーマリンク設定」からおこなえます。

    変更する際は、「Permalinks Moved Permanently」などのプラグインを利用すると
    自動的に前記事のURLにアクセスさせた時リダイレクトしてくれるので
    おすすめです。

    Kzさんのコード

    使えるかも、と思って以前メモに残していたんですが、iyaiyaさんご指摘のように、今動かしてみたら、$urlでの、現在のURLの検出のところに問題があったみたいです。

    $host               = $_SERVER['HTTP_HOST'];
        $dirname            = dirname($_SERVER['PHP_SELF']);
        $filename           = basename($_SERVER['SCRIPT_FILENAME']);
        $url		= "http://{$host}{$dirname}/{$filename}".'?';

    に置き換えたら、動くみたいなんですが、ちょっとしか試していません。

    Kzさんのコード$urlの部分を置き換えると動くと思います。

    http://tenman.info/labo/snip/?p=1980

    tanaka_kyousukeさん
    tanaka_kyousukeさんが教えてくださいましたプラグインを導入してみたところ、
    localhost/wordpress/には行かなくなりましたが、
    トップページに戻されてしまいました。

    nobitaさん
    nobitaさんの提示してくださったコードをKzさんのコードに挿入してみたところ、
    クリックすると、localhost/wordpress/には行かなくなりましたが、
    トップページに戻されてしまいました。

    何か対策はありますでしょうか。

    WordPressは、実はもともとURLに指定の値を追加すると、記事の並びをある程度変えてくれる
    機能があります。
    テーマの中に<?php query_posts(); ?>(記事の並び方を指定する記述)
    が記述されてないサイトならどれでもよいので
    ためしに、URLの後ろに?orderby=post_date&order=ASC など入れてみましょう。

    例 http://xxx.xxxxx.xxx/xx?orderby=post_date&order=ASC

    このように追加すると日付の古い順に記事の順番が入れ替わります。
    (パーマリンク設定がデフォルトだとおかしくなるかも?)
    KZさんのコードは、この機能を利用してソートしてます。
    テーマの中に<?php query_posts(); ?>のあるサイトは、コチラで指定した
    並びが優先されます。
    カスタムフィールドの値などでソートしたい場合は、query_postsを利用する
    必要があった気がします。(ちょっとうる覚えですが・・・)

    ①のコードも②のコードもURLを移動するコードではなく、動的に構築する方法を
    変更するだけなので、ページ移動はしないと思うのですが何かプラグインが干渉しているのかも
    しれません。
    一度、プラグインをすべて停止して試してはどうでしょうか?

    一度プラグインを全て停止してみましたが、
    変化なく、トップページに飛ばされてしまいました。

    また、functions.phpも一通り削除してもみましたが、
    変化なく、トップページにとばされてしまいました。

    私は現在windows7で3.5を使用していますが、wordpressのファイルをwindowsxpの別のパソコンの3.4でソートを行ってみたところ、機能しました。

    アップグレードによる問題は大きいのでしょうか?

    また、改善方法などはあるのでしょうか?

    こんにちは。

    以下のコードではどうでしょうか?

    <?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>
    <ul style="background: #EEE;">
    	<li><a href="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'DESC' ), $uri ); ?>">コメントの多い順</a></li>
    	<li><a href="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'ASC' ), $uri ); ?>">コメントの少ない順</a></li>
    	<li><a href="<?php echo add_query_arg( array( 'orderby' => 'post_date' , 'order' => 'DESC' ), $uri ); ?>">日付の新しい順</a></li>
    	<li><a href="<?php echo add_query_arg( array( 'orderby' => 'post_date' , 'order' => 'ASC' ), $uri ); ?>">日付の古い順</a></li>
    </ul>
    ドロップダウン形式<br>
    <select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
    	<option value="">ソート順を選択</option>
    	<option value='<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'DESC' ), $uri ); ?>'>コメントの多い順</option>
    	<option value='<?php echo add_query_arg( array( 'orderby' => 'post_date' , 'order' => 'ASC' ), $uri ); ?>'>コメントの少ない順</option>
    	<option value='<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'DESC' ), $uri ); ?>'>日付の新しい順</option>
    	<option value='<?php echo add_query_arg( array( 'orderby' => 'post_date' , 'order' => 'ASC' ), $uri ); ?>'>日付の古い順</option>
    </select>

    wp 3.5 にて動作確認しました。
    パーマリンクをデフォルトと投稿名の両方で確認しました。

    ただ、固定ページ詳細と投稿詳細では、トップページでのソート表示となります。
    (固定ページ詳細と投稿詳細では、記事がそもそもひとつしか存在しない為、処理は何も行わせていません。)

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「記事一覧をドロップダウンリストでソートしたい」には新たに返信することはできません。