3大「WordPressに慣れていない人がやってしまいがちだけど、こっちのほうがいいのになぁ」って思うこと

2011年12月19日

どーもどーも。最近めっきりネタストックの出来ていないマイペースたんです。
この記事は12/1~12/25の期間、毎日ブログ記事を数珠つなぎにしていく「WordPress Advent Calendar」の第19日目として書いております。
18日目の@kamiyamさんから引き継いでの記事でございます。

とはいえ、最近これはいいなぁと思ったネタはもうすでに先月書いてしまったし、V3.3はまだ全然触れてないし、最近理解を新たにしたループについての話はkzさんがさらっとスマートに書いてしまっていたりで、、、困った困った。でも考えました。


ここ最近、ありがたくも自サイトからWordPress関連のちょっとした作業依頼をいただく機会が増えました。
ご依頼内容としては、「デザインやプレーンなサイト構築についてはこなれているけれど、どうもWordPressに組み込んだ時に言うことを聞いてくれないからなんとかしてー」というようなものが多いです。
こちらとしても、通常のサイト構築の合間に気分転換+お小遣い稼ぎとして出来ますので、ありがたくお請けしております。

そんなわけで、他人の作ったテーマのソースを読む機会がふえたわけですが、その中で
「あー、どうしてこうしちゃったのかなぁ。こっちのほうがいいのになぁ。。。」
と思ったことを3つ挙げてみたいと思います。

1.コアをいじるよりもfunctions.phpを使おう

WordPressに慣れていない人がやりがちなのが、闇雲にぐぐってHitした結果を手当たり次第に試してしまうこと。
闇雲にぐぐっても何かしらの答えが出てくること、それがWordPress最大のメリットでもあるのですが、バッドノウハウや古い情報も溢れています。

よく遭遇するのは、

「wp-includes/******.php の◯行目を以下のように書き換えます」

っていう、WordPressのコアファイルをいじっちゃう系ですね。

もちろん、コアを書き換える危険性をちゃんと把握したうえでやるのなら自己責任であり、外野がとやかくいう事でもないのですが
初心者さんがこれをやってしまうと、WordPress自体をアップグレードしたときに

「うわーもとに戻ってる!」

とか、

「あれ、どこをどう直したんだっけ??」

とか、
まぁいろんな悲劇の報告例が後を絶ちません。(つまりは、私自身もやっちゃったよーって意味なんですが)

私ですと、今でこそコアを書き換える系の記事に出会ったらそっとタブを閉じるか、同様のことを実現するためのフックをCodexで調べたりするわけなんですが、初心者さんはそのあたりの勘所がわからないので苦労することでしょう。

コア書き換え系のTipsに出会ったら、検索キーワードに「functions.php」を追加してみましょう。
将来訪れる悲劇を、回避できるかもしれません。

2.テンプレート階層を理解してなくて無駄なif文を書いている

WordPressを始めるとみんなやりたがるのが、「特定のページやカテゴリだけテンプレートを変える」ということ。
その時に、どっかから拾ってきたif文とincludeをこんな感じでコピペしてるケースが多数。

<?php
if ( is_category('1')|| is_category('3')) {
include(TEMPLATEPATH . '/category1.php');
} else {
include(TEMPLATEPATH . '/category3.php');
}
?>

みたいなやつ。

includeでテンプレートを呼び出す方法って、3.0でget_template_partタグが出来てから非推奨になってるはずなんですよね。
けど、2.x系の時に書かれた記事がいまだに検索上位に出てくるもんだから、仕方ないといえば仕方ない。。。

#追記
header-2.phpとかfooter-news.phpとかsidebar-right.php を読み出したいときなんかにも
include(TEMPLATEPATH . ‘/header-2.php.php’) とか書いてあるのに遭遇しますが、
この場合はそれぞれ get_header( ‘2’ ), get_footer( ‘news’ ), get_sidebar( ‘right’ ) って感じで大丈夫です。

固定ページの場合

固定ページの場合、if文を書かなくても
page-1.phpやpage-3.phpというファイルを作っておけば、固定ページのidが1なり3の時は勝手にそっちが適用され、それ以外の場合はpage.phpが適用される決まりになっています。
(IDじゃなくスラッグ名を使って、page-staff.phpとかpage-company.phpとかの方がわかりやすいし優先度高いのでおすすめ)

アーカイブページの場合

カテゴリやタグアーカイブページの場合も、category-3.phpとかcategory-news.phpとかtag-mofumofu.phpとか作っておけば、if分岐書かなくても大丈夫です。

投稿個別ページの場合

single.phpの場合はちょっと異なっていて、single-example.php ファイルを作っておいた場合、exampleカテゴリの時に適用されるとおもいきや、そうではなく’example’という「カスタム投稿タイプ」が使われていた場合に適用されます。

なので、カテゴリ毎にテンプレ切り替えたいなら、残念ながらif文は書かないといけないです。
でも、includeじゃなくてget_template_partタグを使ったほうよいです。
get_template_partの認知度が低すぎるんじゃないかと個人的には懸念している次第。

sinple.phpの中身(例)

<?php get_header(); ?>
<?php
if ( in_category( array( 1, 'news')) {
get_template_part( 'content','1' );
} else {
get_template_part( 'content' );
}
?>
<?php get_sidebar();?>
<?php get_footer(); ?>

で、カテゴリ1とnewsスラッグのカテゴリは、content-1.phpをインクルード、その他のカテゴリはcontent.phpをインクルードします。

とりあえずここ読みましょう↓

でも実際は、次に書く3.の方法で解決できてしまうケースのほうが多いので、if+get_template_partを使うことはそこまで考えなくていいんじゃないかと思っています。

3.body_classタグを使って、CSSだけでいろいろやる方が断然楽 【おすすめ】

実際は、if文を書くまでもなく、さらにテンプレ分けすらしなくても、CSSだけでなんとかなる場合も多いわけで。


っていう開始タグの部分を、

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

と書くだけでCSSでやれることが増えるので、PHPは書けないけどCSSなら書けるって人はぜひ試してください。

詳しくはここ読んで↓

##追記
post_classタグもあるので、よきにはからうべし。このタグは「投稿フォーマット」を使うときには必須ですね。

おまけ. 過去記事紹介

他には、ページタイトルを画像で出したいがために、似たようなテンプレートを量産してしまっているパターンがいくつかありまして!
ページスラッグやカテゴリスラッグを取得し、各ページタイトル部分を画像で出力[WordPress使えそうなスニペットシリーズ]』あたりを活用していただくとテンプレの数がすっきりするかと思われます!

以上です。
WordPressとのお付き合い歴はまだ長くないけど、もっと距離を詰めたいって方はぜひ意識してみてください。


あと、個人のブログも有用ですが、併せてCodexも見るようにする癖を付けた方が良いです。
見切り発車でフォーラムで質問して意味不明なタグ付けされるケースも減るんじゃないでしょうかね。

明日は、あなたも私もきっとお世話になっているあんなプラグインやそんなプラグインを開発していたり、dogmap.jpとかでナイスでエロいTipsを怒涛のように配信している@wokamotoさんが満を持して登場です!!