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>
<?php
} else {
こんな風にしてTOPへ飛ばしちゃいます。楽ちんですね。
vertical-alignのこと
Tipsここ(vertical-alignの使い方【css tips】)を読んで、味噌汁で顔洗って出直してこい!
というくらい、わかりやすく書かれていますが、自分でやろうとして複数<p>タグでどうしてもうまくいかず、position:absoluteで逃げてしまいました。ヘタレです。
ブラウザの高さに応じたフッターの表示
WP Tips見てる環境でフッターの位置が変わるのは気持ち悪いという人がそばにいるので、対応してみました。
そもそも、content が終わってからの footer だから、ブラウザの高さなんて関係ないんじゃというような正論は言わない約束で。(背景画像が1500pxくらいあって、contentの高さと背景はマッチしていないという前提)
expression()使えばなんとかなるのは知ってますけど、IE6は意図的に排除してます。
本ちゃんの div#footer は、display:none で消してしまうか、そもそも書かないということで。
カテゴリ+タグで表示
WP Tipsカテゴリ一覧を表示するとき、あるタグが付いているものだけ表示させたいことってありますよね?
例えば、”flower/arrange/antique/”みたいなカテゴリがあって、これをさらに”selection”と”library”に分けたいと。
普通にやれば、”flower/arrange/antique/selection”と”flower/arrange/antique/library”にすればいいんだけど、”library”は”selection”を含んでいると。
あ、だったら、”flower/arrange/antique/selection”と”flower/arrange/antique”でいいじゃんということか。かーいーけーつ!
という解決方法もありますが、テンポラリな”selection”チョイスをするためだけにもう一段サブカテゴリを作るのはどうかと。
クイック編集で変更するときもカテゴリは階層化されて表示されないので、間違いやすいけど、タグに”select”とか付けておくだけなら楽だし。というような用途があったとして(我田引水的に)。
“selection”と”library”を分けるには、”library”の場合だけ、URLに”?lib”とかを付けておいて、($_GET[“lib”] == NULL)で判断するというのがオススメ。あと、”selection”の場合は
query_posts()に配列で引数を渡してやるのがミソです。”&tag=文字列”というパラメータもあるのですが、バグなんでしょうか、効かないですね。
この場合、子カテゴリがない前提で書いてますけど、子供があるんだったら、こんな風にやればいいそうですよ。
※ こちら(query_postsでカテゴリとタグ両方での絞り込み)で勉強しました。
※ 大元のページはこっち(テンプレートタグ/query posts)。
カテゴリの取得&投稿の表示数
WP TipsWordPressのことです。
get_the_category()なんかでやるのが普通ですが、category.phpのなかで普通じゃないことをやったりすると、get_the_category()だとカテゴリがとれなくなるときがあるので、汎用的に取る方法。
こんな感じでURIをぶった切ればカテゴリが取れるよねということ。
“/page/2″が付いているのは2ページ目を取得するときのURLはこういう風になるよという例です。
あと、ブログは1ページ5件表示したいけど、商品一覧は1ページ20件表示で、○○は○件表示でみたいにカテゴリによって表示件数が変わる場合、表示設定だけじゃダメですよね。
query_posts()に posts_per_pageを付けて再実行させてやるっつうことでOK。
なんとなく、if (have_posts()) の下に入れたくなるけど(表示するものがあるときだけやればよくね?)、そうすると、2ページ目、3ページ目にいった場合、have_posts()は表示設定で決められた件数分だけページをカウントして、有る無しを判断するので、下に入れるのはNGです。(8件投稿があって、表示設定が10件で、posts_per_page=3の場合、1ページ目はいいけど、2ページ目にいったところで11件目はないよということになる)
余談。データがないときはどうするか。カテゴリ・リンクだけ先に作っておいて中味がまだないとき(いずれ埋まる前提)、先々使わなくなる「ありません」画面を作るのはしゃくだなというとき。
こんな風にしてTOPへ飛ばしちゃいます。楽ちんですね。
いろんなサイズの画像URLを取得
WP Tipsthe_post()したあとで使うこと。そうしないと、get_the_ID()がちゃんと値を返さないから。(当たり前)
引数($url)には、オリジナル・サイズ(fullサイズ)の画像URLをセットしておく。
記事に紐づいた画像は1つとは限らないので、なんらかの方法で画像を特定できないと困るということと、基本的にカスタム・フィールドに画像を登録して使うことを想定しているのでこういう仕様になってます。
サイズはサムネイル(”thumbnail”)、中(”medium”)、大(”large”)、フルサイズ(”full”)で、指定しなければ中サイズを返します。
戻り値は配列で、$ret[0]=そのサイズの画像URL、$ret[1]=幅px、$ret[2]=高さpxです。
使い方はこんな感じ。
参考したページ:画像URLの取得、画像ファイルの情報を取得する、2.5 How to create a category template for a gallery ?、WordPress2.5~2.6 サムネイル画像を取得して表示、カスタムフィールドに登録した画像のサムネールやらを取得する。、WordPress 2.1 のアタッチメント API
Tipsいろいろメモ
TipsこういうPHPの挙動をちょっと試したいときは、codepadがオススメ。(<?php と ?> でくくって、ちゃんと echoしないと出力はされないよ)
PHPで単語の最初の文字を大文字にする ・・・ ucwords($str)
PHPで数字を3桁でカンマ区切りにする ・・・ number_format($num)
PHPで配列の最初と最後の要素をとる ・・・ reset/end