おそらく、
http://my-home-sample-hogehogehoge.com/wordpress/?P=57&view=co_list&mode=new(old)とできたら降順・昇順がうまくいくような気はするのですが、どのような設定をするといいのかわからず、質問させていただきました。
WordPress の API 関数 add_query_args()
を使えばよいです。具体的には以下のような感じにします。クエリー文字列の mode, new, old はちょっといまいちなので、order, desc, asc としてみました。
echo '<a href="' .
attribute_escape(add_query_args('order', 'desc', $_SERVER['REQUEST_URI'])) .
'">降順</a> | <a href="' .
attribute_escape(add_query_args('order', 'asc', $_SERVER['REQUEST_URI'])) .
'">昇順</a>';
余談ですが、ドメイン名の例示として「my-home-sample-hogehogehoge.com」というのをひねり出されていますが、こういう場合には example.com, example.jp などのドメインが用意されているので、こちらを使うのが適切です。2008年12月22日現在、my-home-sample-hogehogehoge.com は空いていますが、いつ誰かに取得されるか分かりません。もし、マルウェアを仕込んだサイトを構築されたりすると、まずい状況となります。そういうことを避けるために、例示用ドメイン名を使うのが適切です。
lilyfanさま
ご回答ありがとうございます。
余談ですが、ドメイン名の例示として「my-home-sample-hogehogehoge.com」というのをひねり出されていますが、こういう場合には example.com, example.jp などのドメインが用意されているので、こちらを使うのが適切です。2008年12月22日現在、my-home-sample-hogehogehoge.com は空いていますが、いつ誰かに取得されるか分かりません。もし、マルウェアを仕込んだサイトを構築されたりすると、まずい状況となります。そういうことを避けるために、例示用ドメイン名を使うのが適切です。
こちらは、以後じゅうぶんに気をつけたいと思います。ご指摘ありがとうございます。
ご指摘いただいたとおり
echo ‘<a href=”‘ .
attribute_escape(add_query_args(‘order’, ‘desc’, $_SERVER[‘REQUEST_URI’])) .
‘”>降順 | <a href=”‘ .
attribute_escape(add_query_args(‘order’, ‘asc’, $_SERVER[‘REQUEST_URI’])) .
‘”>昇順’;
と入力し、
<?php
$aa = array_reverse ($sep_comments[$type]);
if ($_GET[‘order’] == ‘desc’) {
$aa = array_reverse ($sep_comments[$type]);
}elseif ($_GET[‘mode’] == ‘asc’) {
$aa = $sep_comments[$type];
}
?>
を入力してみました。
すると
Fatal error: Call to undefined function add_query_args() in /var/www/vhosts/example.com/subdomains/example/httpdocs/wordpress/wp-content/plugins/ktai_style/themes/default/comments.php online 4
と表示されてしまいました。
<?php
$aa = array_reverse ($sep_comments[$type]);
if ($_GET[‘order’] == ‘desc’) {
$aa = array_reverse ($sep_comments[$type]);
}elseif ($_GET[‘mode’] == ‘asc’) {
$aa = $sep_comments[$type];
}
?>
上記に関しては消してみたのですが改善されませんでした。
ご教授のほどよろしくお願いいたします。
Fatal error: Call to undefined function add_query_args()
すみません。add_query_arg()
が正解でした (s
がよけい)。wp-includes/functions.php で定義されているものです。
「WordPress の API である」と書いているので、関数が存在しないわけがないため、エラーが出るということはスペルミスだと推測する、ぐらいのスキルを身につけていただけると助かります 😉 😉 (回答者もときどきミスをするので)
$aa = array_reverse ($sep_comments[$type]);
if ($_GET['order'] == 'desc') {
$aa = array_reverse ($sep_comments[$type]);
} elseif ($_GET['mode'] == 'asc') {
$aa = $sep_comments[$type];
}
1行目の array_reverse()
の意義がよく分かりません。デフォルトとして降順 (最新順) にしたいということでしょうか? あと、2つめの if 文は ‘mode’ のままですが、いいのでしょうか?
lilyfanさま
このたびはほんとうにありがとうございました。
お陰さまで、無事に降順(新着順)・昇順(古い順)に切り替えることができました。
このご恩は一生忘れません。
「WordPress の API である」と書いているので、関数が存在しないわけがないため、エラーが出るということはスペルミスだと推測する、ぐらいのスキルを身につけていただけると助かります 😉 😉 (回答者もときどきミスをするので)
たいへんお恥ずかしいかぎりです。
時間のあるときは、日々PHPを勉強したいと思っております。
2つめの if 文は ‘mode’ のままですが、いいのでしょうか?
すみませんでした。わたしのミスです。
comments.phpには、「mode」ではなく「order」として処理しました。
1行目の array_reverse() の意義がよく分かりません。デフォルトとして降順 (最新順) にしたいということでしょうか?
はい。デフォルトでは常に降順(最新順)としてコメントを表示し
ユーザーが昇順(古い順)のリンクをクリックすると昇順に切り替わるようにしたいと
考えておりました。
ほんとうにありがとうございました。
所望の動作が実現できたようでなによりです。
時間のあるときは、日々PHPを勉強したいと思っております。
今後のスキルアップを期待しています。本来は、回答者がミスをしないことが望ましいわけで、今回のように所々ミスがあったのは申し訳ない限りです。でも、質問者も一定のスキルがあれば、ミスを自身で見つけることができて、結果として解決がスムーズになりますので、お互いにとって楽です。
はい。デフォルトでは常に降順(最新順)としてコメントを表示し
ユーザーが昇順(古い順)のリンクをクリックすると昇順に切り替わるようにしたいと
考えておりました。
だとすると、if 文の条件をうまく調整すれば、array_reverse()
は1つで済みそうです。同じような命令が複数あると、今後の改造でバグの原因となるので、できるだけすっきりしたコードにしておいた方がよいです。
ちなみに、現在ベータ版として配布している Ktai Style 1.60-beta3 では、附属の redportal テーマで、コメントの昇順・降順を切り替える機能を付けました。以前から切り替えメニューは用意していたのですが、実際には動作しないものでした。今回のフォーラムの回答をもとに実装したものです。
実際に実装するきっかけを与えて頂きました masarin さんには感謝いたします。