wordpressループ内の記事内容をどのような順番で表示するかを設定する際には、query_posts関数内の"orderby=〇〇"という引数で、どのような記事が表示されるかを決めます。

例えばタイトル順で並べたいときには、

"orderby=title"

といった具合です。


今回、スラッグの順番で並べ替えたかったのですが、

"orderby=slug"

などとやっても、全く並べ替えてくれませんでした。

ではどうしたらいいのか。

結論から言いますと、スラッグで並べ替えることはできないようです。


ですので、この"orderby"の仕様の部分を書き換えてみました。
とっても簡単です。
(以下は、最新版のwordpress3.2.1を元にしています。)


wp-includes/query.phpの2320行目を書き換え

$allowed_keys = array('author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count');

$allowed_keys = array('author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count' , 'slug');


同ファイルの2354行目に下記を追加

case 'slug':
$orderby = "$wpdb->posts.post_name";
break;


たったのこれだけで、

"orderby=slug"

が使用可能になり、
スラッグ順に投稿を表示できるようになりました。