カテゴリの取得&投稿の表示数

WordPressのことです。
get_the_category()なんかでやるのが普通ですが、category.phpのなかで普通じゃないことをやったりすると、get_the_category()だとカテゴリがとれなくなるときがあるので、汎用的に取る方法。

$uri  = $_SERVER["REDIRECT_URL"];	// "/items/category/blog/page/2"
$url  = explode("/", $uri);	// 0="", 1="items", 2="category", 3="blog", 4="page", 5="2"

こんな感じでURIをぶった切ればカテゴリが取れるよねということ。
“/page/2″が付いているのは2ページ目を取得するときのURLはこういう風になるよという例です。
 
あと、ブログは1ページ5件表示したいけど、商品一覧は1ページ20件表示で、○○は○件表示でみたいにカテゴリによって表示件数が変わる場合、表示設定だけじゃダメですよね。

query_posts($query_string.'&posts_per_page=5');
if (have_posts()) {
  while (have_posts()) {
    the_post();

query_posts()に posts_per_pageを付けて再実行させてやるっつうことでOK。
なんとなく、if (have_posts()) の下に入れたくなるけど(表示するものがあるときだけやればよくね?)、そうすると、2ページ目、3ページ目にいった場合、have_posts()は表示設定で決められた件数分だけページをカウントして、有る無しを判断するので、下に入れるのはNGです。(8件投稿があって、表示設定が10件で、posts_per_page=3の場合、1ページ目はいいけど、2ページ目にいったところで11件目はないよということになる)
 
余談。データがないときはどうするか。カテゴリ・リンクだけ先に作っておいて中味がまだないとき(いずれ埋まる前提)、先々使わなくなる「ありません」画面を作るのはしゃくだなというとき。

if ($cat === NULL) {	// 表示データがない場合はTOPへ飛ばす
?>
<meta http-equiv="Refresh" content="0; URL=">
<title> - </title>



&lt;?php
} else {

こんな風にしてTOPへ飛ばしちゃいます。楽ちんですね。