サポート » 使い方全般 » 記事を閲覧者に任意の順序で並び替えさせたい

  • 解決済 tomoferret

    (@tomoferret)


    カテゴリー別の記事一覧や投稿者別の記事一覧において
    閲覧者に任意の順序で並び替えをさせたいのですがお教え頂けないでしょうか。

    並び替えたい順序は
    ・最新投稿順(これは標準でできています)
    ・最古投稿順(これはorder=ascでできることがわかりました)
    ・カスタムフィールド値(goods-rating)の昇順/降順(これができず)

    並び替えの操作方法は問いません。
    (リンククリックでもセレクトボタンでもなんでもよいです)

    (1)ソート考(WordPressの検索結果を絞り込み)
    http://takahashifumiki.com/web/programing/1829/
    こちらを元にコピペでやってみましたがdateのasc,descもうまく動きませんでした。
    (動きましたが昇順では一番古い記事が抜けたり。。。)

    (2)記事一覧をソート(並び替え)する
    記事一覧をソート(並び替え)する

    こちらを元にコピペでやってもNGでした。
    (記事を古い順に並び替えようとしたらトップページ(front-page.php)に戻りました。)

    (3)指定条件による記事一覧の並び替えボタンの実装
    http://ja.forums.wordpress.org/topic/7943?replies=3

    ここのフォーラムで見つかったものです。
    kzさんの書かれている記述で新しい順と古い順は正しく動作しましたが
    カスタムフィールド値の並び替えはこのURL渡し?では出来ないようなので
    どうしたものかと止まっています。

    色々わかっておりませんが・・・お教え願えないでしょうか。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • kzさんの方法を利用して、リンクには次の記述を追加します。
     

    printf( '<li><a href="%s?&meta_key=goods-rating&orderby=meta_value_num&order=DESC">カスタムフィールド値の大きい順</a></li>', $url );
    printf( '<li><a href="%s?&meta_key=goods-rating&orderby=meta_value_num&order=ASC">カスタムフィールド値の小さい順</a></li>', $url );

     
    URLにmeta_key=goods-ratingがあった時のみメインクエリを書き換えるようにして、対応してはいかがでしょうか?

    <?php // ループの前に追加
    			if($_GET['meta_key'] == 'goods-rating') {
    				query_posts($query_string . '&meta_key=goods-rating&orderby=meta_value_num&order=' . esc_html($_GET['order']));
    			}
    			?>
    			<?php if ( have_posts() ) : ?>
    				<?php while ( have_posts() ) : the_post(); ?>

    トピック投稿者 tomoferret

    (@tomoferret)

    popupさんコメントありがとうございます。

    お教え頂いた方法で出来ました!
    ありがとうございました。

    トピック投稿者 tomoferret

    (@tomoferret)

    確認不足でした。。。
    投稿者一覧は正常に動作したんですが、
    カテゴリー一覧では正常動作しませんでした。

    <状態?結果>
    ・カスタムフィールド値を使わない並び替えは正常。
    ・あるカテゴリーでは3件あるのに1件しか表示されない。
    ・あるカテゴリーでは6件あるのに全く表示されない。
     (ただし、ページングだけは2ページ(5件/1ページ設定)となる)

    変えたところは$tmp_urlの部分だけです。
    <投稿者一覧:author.php>
    $tmp_url = get_author_posts_url( get_the_author_meta( ‘ID’ ) );
    $url = sprintf( $tmp_url, $_SERVER[“HTTP_HOST”], $_SERVER[“REDIRECT_URL”] );

    <カテゴリー一覧:category.php>
    $tmp_url = get_category_link($cat);
    $url = sprintf( $tmp_url, $_SERVER[“HTTP_HOST”], $_SERVER[“REDIRECT_URL”] );

    カスタムフィールドgoods-ratingが追加されていない記事は対象外となりますが、goods-ratingフィールドをすべての記事に追加してありますか?
    カテゴリ内の記事数が少ないので気が付いたかもしれませんが、インデックスページや著者アーカイブでも同じ動作です。
     
    $urlは元の記述のまま、メインクエリの書き換え部分だけを次のようにしてみてください。
     
    category.php

    <?php
    			$cat_name = esc_html(get_query_var('category_name'));
    			if($_GET['meta_key'] == 'goods-rating') {
    				query_posts($query_string . '&category_name=' . $cat_name . '&meta_key=goods-rating&orderby=meta_value_num&order=' . esc_html($_GET['order']));
    			}
    			?>

     
    author.php

    <?php
    			$author_name = esc_html(get_query_var('author_name'));
    			if($_GET['meta_key'] == 'goods-rating') {
    				query_posts($query_string . '&author_name=' . $author_name . '&meta_key=goods-rating&orderby=meta_value_num&order=' . esc_html($_GET['order']));
    			}
    			?>

    トピック投稿者 tomoferret

    (@tomoferret)

    popupさん、毎々ありがとうございます。
    お教え頂いたソースで動きました。

    しかし、主要因は別に(自分に)ありました。。。すいません。
    この並び替えの前に別で利用していた期間指定をするフィルタが
    かかったままでした。
    そのため、期間内で絞り込まれたものだけが表示されてしまい、
    件数が想定と異なる結果になっていました。

    お手数をおかけしました。。。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「記事を閲覧者に任意の順序で並び替えさせたい」には新たに返信することはできません。