index.php や カテゴリーアーカイブなどでリスト表示される投稿の、並び替えの試み
http://ja.forums.wordpress.org/topic/7943?replies=6(@souce)の質問にあったものですが、カテゴリアーカイブなどを表示した場合には、クエリがリセットされてしまうため、既存のクエリがリセットされない方法を試してみました。
パーマリンクの設定:default
テンプレートに、
<ul>
< ?php
my_query_str('コメントの多い順','orderby=comment_count&order=DESC');
my_query_str('コメントの少ない順','orderby=comment_count&order=ASC');
my_query_str('更新新しい順','orderby=modified&order=DESC');
my_query_str('日付の古い順','order=ASC');
my_query_str('日付の新しい順','order=DESC');
my_query_str('タイトル昇順','orderby=title&order=ASC');
my_query_str('タイトル降順','orderby=title&order=DESC');
my_query_str('','orderby=title&order=DESC');
?>
</ul>
functions.phpに
<?php
function my_query_str($title="", $add_query= array(),$before= '<li>', $after='' ){
//$url= sprintf( 'http://%1$s%2$s', $_SERVER["HTTP_HOST"], $_SERVER["REDIRECT_URL"].'?' );
$host = $_SERVER['HTTP_HOST'];
$dirname = dirname($_SERVER['PHP_SELF']);
$filename = basename($_SERVER['SCRIPT_FILENAME']);
$url = "http://{$host}{$dirname}/{$filename}".'?';
$amp = '&';
$query = $_SERVER['QUERY_STRING'];
$result = '';
parse_str($query, $output);
parse_str($add_query, $add_query );
$output= array_merge( $output, $add_query );
foreach($output as $k=>$v){
$result .= $amp. $k. '='. $v;
}
if( empty( $title ) ){
$title= str_replace(array('?','&'),array('', ' , '),$result);
}
printf('%1$s<a href="%2$s%3$s">%4$s</a>%5$s',
$before, //ラップする要素
$url, //URL
$result, //クエリ
$title, //タイトル
$after //ラップする要素
);
}
?>
http://ja.forums.wordpress.org/topic/7943?replies=6(@souce)