WordPress 3.0, Twenty Ten Theme 1.1 登場で何が変わった??

WordPressを3.0にすると、テーマも自動アップデートできて便利。
数日前に標準添付の Twenty Ten が 1.1 だよ、「自動アップデート」する??なメッセージが出てたので[ポチ]っとしました。
でも、プラグインと違って Change Log が見つからなたったので、何が変わったのか分からず少々不安な気持ちにもなりました。

仕組み自体が始まったばかりなので色んなことがこれから良くなっていくとは思います。

同じことを思った人はいるみたいでした。
WordPress 3.0 Twenty Ten Theme Updated
ここに詳しく書かれていました。

Andrew Nacin さんが Forum で答えてるよ、ということらしいです。
Changes Twentyten 1.0 >> 1.1

trac に diff があるから見てみたら、とも書いてあります。
http://core.trac.wordpress.org/log/branches/3.0/wp-content/themes/twentyten/
view changes

style.css (73 diffs)
functions.php (1 diff)
loop.php (1 diff)
page.php (2 diffs)
languages/twentyten.pot (12 diffs)
editor-style.css (4 diffs)
header.php (1 diff)
attachment.php (1 diff)

syle.css は記述方法を揃えるために「改行」や「スペース」の変更とプロパティ設定順の変更がされているようです。
あと、いくつかのバグがFixされていました。
nav-menus.php メニューに関するもの。
attachment.php, style.css メディア表示に関するもの。
位かなぁー。
ほとんどがタイポや表記の統一をしようとしているようでした。
こうやってテーマも進化していくのはいいことだと思う。

で、やっぱりチェンジ・ログがあると便利だと思います。
次のアップデートの時にはあるといいな。

update 2010-07-25 16:28
@odessy さんがブログにまとめてくれてます。
Twenty Ten 1.1 の変更点とアップデートの注意点

moファイルをアップしなおさないとメニューが英語表記のままになっちゃってるんですね。
今から、アップロードしておこう。

update 2010-08-03
大きな変更が抜けてました。
title の出力部分が大幅に変わっています。
表示そのものは変わってませんが、1.0 の時は functions.php にオリジナル関数を書いて wp_titleadd_filter していたのが、1.1 では関数を廃止しコードをtitleタグ間へ直書きになっています。

header.php を子テーマへコピーしてカスタマイズしている場合は、1.1版をコピーし再度カスタマイズが必要になります。

これが、親・子テーマの限界なんだなぁ。
親テーマに大幅な変更が加えられると、改造した子テーマへ影響があるかどうか調べないといけない、しょうがないけど。。。

update 2010-08-11
WordPress 3.0.1 ja へアップグレードした方は Twenty Tenも言語ファイル(mo)付きなので改めてmoファイルをアップロードしなくていいです。

WordPress 3.0, 子テーマのURLとパス

子テーマを使うとTEMPLATEPATH, get_bloginfo("template_url") は 親テーマのパス, URL を返します。

子テーマのURL, パスを知る方法はないものかとガサゴソしたら使えそうなのが見つかりました。

URL

get_stylesheet_directory_uri();

PATH

STYLESHEETPATH

get_stylesheet_directory_uri(); は使用しているテーマまでのURLを返してくれます。

STYLESHEETPATH は使用しているテーマまでのフルパスが設定されている定数です。

これを使うと子テーマまでのURL, パスがわかります。

update 2010-08-04
general-template.phpget_bloginfo を見ると子テーマの URL は取得できるようです。

// get_stylesheet_directory_uri(); と同じ
get_bloginfo('stylesheet_directory');

update 2010-08-11
子テーマのパスを知りたかったのは include, require したいからだったけど、get_template_part を使えば必要ないことがわかった。
WordPress 3.0のTwenty Tenのループ出力, loop.phpとget_template_part

update 2011-01-31
あれ〜。
TEMPLATEPATH が子テーマのパスを返してる。。
変わったんかなぁ?
Ver. 3.0.4 のお話。

get_bloginfo('template_url')

コアが変更になったんだ。
不便だもんね。

WordPress, 投稿にClass設定できますョなテンプレートタグ

紆余曲折*1はありましたが、投稿を特定できるCSSクラスを埋め込めるpost_classテンプレートタグが今さらながら便利です。

*1 WordPress Jpan Forum「post_class() が不正な CSS クラス名を生成

<div id="post-<?php the_ID(); ?>" <?php post_class(array("my-post", "another-class")); ?>>

な感じで使うとCSSでデザイン設定するとき便利です。
body_classと合わせて使うと最強ですかね。

WordPress, bodyタグにClass設定できますョなテンプレートタグ

WordPress 2.8から使えるテンプレートタグ、body_class
body タグ内で使用し Class 設定が可能になります。
テンプレートでCSSデザインの自由度を高めることができます。

使い方

<body <?php body_class( $class ); ?>>

$class へは String, Array のどちらかで設定します。
設定しない(null)でも構いません。

$class = "this-class";
$class = array("class-one", "class-two");

テンプレートタグのデフォルト出力Classの後に $class が書出されます。
デフォルト出力Classはhomeなのかarchiveなど、どのデータを出力しているかによって変わってきます。

Codex:テンプレートタグ/body class で確認できます。

WP勉強会@AIP 2009-09-12

Contact Form 7の作者、三好さん講師の WordPress 勉強会がAIPで開催されました。

テーマ・フレームワークの話は興味深かった。
sandbox
Hybrid
を教えてもらった。

まだ、どう使いこなしたらいいのか見当がつかない。

雑談中に参加者の方から教えていただいたプラグイン Category Order はカテゴリーの並び順を任意に変えることができるスグレものでした。
これは超便利!

次回はプラグイン作成の1回目、興味津々だけど行けそうにない。 :-(

ず〜〜っと下書きのまま放置していました。
時期を逸してしまったけどせっかくなので公開します。

Contact Form 7WordPress Plugin Directory でも常に Most Popular 上位にはいってる人気プラグインです。
その作者から直接お話を聞く機会があるなんてなんてステキなんでしょう。

WordPress, ショートコード使い過ぎに注意!?

WordPress 2.5 から機能追加されたショートコード。

[ショートコード名]のようにブラケットで囲った部分をタグに置換えてくれる。
XMLのように
[ショートコード名]HTMLタグや文字[/ショートコード名]
[ショートコード名 fruits="みかん" price="200" /]
みたいに属性も指定できて便利。

今回、[sample /]という風にショートコード名に「sample」と名前をつけたコードを追加したが、imgタグのパスに/sample...とsampleという文字が入っていて、ココも置換えてしまった。
てことは、ショートタグ名は投稿中に絶対現れないユニークな名前にしとかないとひどい目にあうってことになる。
またプラグインで使っているかもしれない名前を使うのもダメってことらしい。
どうもショートコード名は慎重に設定しないといけないようだ。
クラス名のようにユニークになるようにドメインでもくっ付けるのがよさそう。
Continue reading

WordPress, 子カテゴリのカテゴリIDを取得したい

WordPress のテンプレートタグ、カテゴリ。

ある親カテゴリの子カテゴリのIDを取得したい時があったけど、どうも該当するテンプレートタグが無さそうだった。
$wpdb インスタンスを使ってSQLクエリを使ってみることにした。

$wpdb->get_results("SELECT t.term_id FROM $wpdb->term_taxonomy AS term LEFT JOIN $wpdb->terms AS t ON term.term_id = t.term_id WHERE parent = 'Parent ID' ORDER BY t.slug");

WordPress 2.5系からコンテンツやカテゴリ管理に taxonomy「分類」が使われています。

terms
カテゴリ、タグに関する情報テーブル

term_id bigint(20) PRIMARY auto_increment
name varchar(200) INDEX カテゴリ名 / タグ名
slug varchar(200) UNIQUE
term_group bigint(20)

term_taxonomy
カテゴリ、タグに関する情報テーブル

term_taxonomy_id bigint(20) PRIMARY auto_increment
term_id bigint(20) UNIQUE
taxonomy varchar(32) category / link_category / post_tag
description longtext
parent bigint(20) 親ID
count bigint(20) 投稿数

SQLの結果から子カテゴリIDを取出す。

$children_cats = array();
foreach($wpdb->last_result as $cat){
	$children_cats[] = $cat->term_id;
}

関数化して functions.php にでも置いておくと便利かな。

あと、バージョンアップに伴ってテーブル構造が変わったら使えなくなる。
2.5系へのアップグレードでカテゴリ関連のテーブル構造が変わって、SQLを使ってカスタマイズしていたテンプレートの修正で死にそうになったことがある。

WordPress, 複数ページのタイトルやdescriptionにページナンバー

index とかアーカイブとかコンテンツが増えてくると複数ページにまたがることがある。
title, description が重複していると Google サイトマップさんに怒られるので、せめてページナンバーを付けて許してもらうことにした。

ページナンバーを付ける。
wp_title(); に続けて

echo (isset($paged) && $paged) ? " Page - {$paged}" : "";

とした。

変数 $paged に現在のページナンバーが入っているのでセットされている時に出力するようにしただけ。

all-in-one-seo-pack プラグインを使えばプラグインが勝手にやってくれるけど、好きじゃないんだよねこのプラグイン。