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

WordPressのことです。
get_the_category()なんかでやるのが普通ですが、category.phpのなかで普通じゃないことをやったりすると、get_the_category()だとカテゴリがとれなくなるときがあるので、汎用的に取る方法。
[code lang=”php”]
$uri = $_SERVER[“REDIRECT_URL”]; // “/items/category/blog/page/2”
$url = explode(“/”, $uri); // 0=””, 1=”items”, 2=”category”, 3=”blog”, 4=”page”, 5=”2″
[/code]
こんな感じでURIをぶった切ればカテゴリが取れるよねということ。
“/page/2″が付いているのは2ページ目を取得するときのURLはこういう風になるよという例です。
 
あと、ブログは1ページ5件表示したいけど、商品一覧は1ページ20件表示で、○○は○件表示でみたいにカテゴリによって表示件数が変わる場合、表示設定だけじゃダメですよね。
[code lang=”php”]
query_posts($query_string.’&posts_per_page=5′);
if (have_posts()) {
while (have_posts()) {
the_post();
[/code]
query_posts()に posts_per_pageを付けて再実行させてやるっつうことでOK。
なんとなく、if (have_posts()) の下に入れたくなるけど(表示するものがあるときだけやればよくね?)、そうすると、2ページ目、3ページ目にいった場合、have_posts()は表示設定で決められた件数分だけページをカウントして、有る無しを判断するので、下に入れるのはNGです。(8件投稿があって、表示設定が10件で、posts_per_page=3の場合、1ページ目はいいけど、2ページ目にいったところで11件目はないよということになる)
 
余談。データがないときはどうするか。カテゴリ・リンクだけ先に作っておいて中味がまだないとき(いずれ埋まる前提)、先々使わなくなる「ありません」画面を作るのはしゃくだなというとき。
[code lang=”php”]
if ($cat === NULL) { // 表示データがない場合はTOPへ飛ばす
?>
<meta http-equiv="Refresh" content="0; URL=”>

<?php
} else {
[/code]
こんな風にしてTOPへ飛ばしちゃいます。楽ちんですね。

0 返信

返信を残す

Want to join the discussion?
Feel free to contribute!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です