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(); ?>
popupさんコメントありがとうございます。
お教え頂いた方法で出来ました!
ありがとうございました。
確認不足でした。。。
投稿者一覧は正常に動作したんですが、
カテゴリー一覧では正常動作しませんでした。
<状態?結果>
・カスタムフィールド値を使わない並び替えは正常。
・あるカテゴリーでは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']));
}
?>
popupさん、毎々ありがとうございます。
お教え頂いたソースで動きました。
しかし、主要因は別に(自分に)ありました。。。すいません。
この並び替えの前に別で利用していた期間指定をするフィルタが
かかったままでした。
そのため、期間内で絞り込まれたものだけが表示されてしまい、
件数が想定と異なる結果になっていました。
お手数をおかけしました。。。