Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

WordPressをCMSとして使う

WordPressってブログ作るために使うんでしょって思っていた僕の為の備忘録。

前提として、CMSっぽく使う場合如何に関わらず、Wordpressのコア機能でどこまでカバーできるのかを判別して、カバーできない場合はプラグイン地獄にならない程度の利用にとどめて置くべきです。WPのバージョンが上がったらプラグインが動きませんでした、という悲劇は避けたいところ。

乱暴な理解だけど、WordPressCMSっぽく使うってのは、レイアウト組んどいて動的にそれを差し替えられること、ユーザーがWYSIG(スペル違うけど)エディターで更新できること。

f:id:aroundthedistance:20100528175004j:image

これはブログ用のテンプレートだけど、基本的にこうやってレイアウトを組んでおいて、ページを差し替えたい単位で該当するphpページをincludeしちゃえばいい。

オリジナルテンプレートの作り方はこのエントリ最後のページのかちびとさんのページに詳しい。

あと、英語ですけどわかりやすかったんで、おいておきますね。

Building Custom WordPress Theme

で、差し替えることをするページは大抵こんなもん。

カテゴリ単位に切り替える方法

localhost/wordpress/cat?=3みたいなページのレイアウトを切り変えたい場合。これはcategory.phpってヤツが呼応している。

指定したいテンプレートを作成し、そのテンプレートの名前をcategory-記事番号.phpにするだけ。

そうするとそのカテゴリに該当する$postsが抜けるので、foreachで回して適当にはめ込む。

カテゴリの詳細ページ

localhost/wordpress/?p=11みたいなページのレイアウトを切り替えたい場合。これはsingle.phpが対応している。

詳細ページを切り替える単位でカテゴリが存在すると仮定すると、そのカテゴリ番号を引いてきてそこで切り替えが出来る。single.phpをこう変える。カテゴリ番号が知りたい場合は管理→カテゴリで確認できた記憶が。

single.php
<?php
 $post = $wp_query->post;
 if ( in_category('8') ) {
 include(TEMPLATEPATH . '/single1.php');
 } else {
 include(TEMPLATEPATH . '/single2.php');
 }
 ?>

固定ページで違うレイアウトを使いたい

恐らくコレで動く。ごめん、現在不要なので作ってない。投稿IDの取り方はぐぐればいっぱいでてきます。

page.php
<?
if(is_page(投稿ID、投稿タイトル、投稿名のどれか) {
 include(TEMPLATEPATH . '/page1.php');
} else....
}

こまけぇこたぁって場合は、このような豪快なソリューションもございます。

新しくページ作ってpermalinkそれっぽくして、ちょwwww おまwwwっていうぐらい原始的なテンプレートを使います。

<?php get_header();?>
<?php setup_postdata($post);?>
<div id="main">
<h1 class="headline"><?php the_title()?></h1>
<?php the_content();?>
</div>
<?php get_footer(); ?>

CMS的なWordpressページ

こんなイメージです。

f:id:aroundthedistance:20100528181111j:image

WPは全てのコンテンツの中身がエントリorページ単位で、the_content()の中にあります。あとは、どこのエントリ or ページのthe_content()が欲しいかだけの話だったりします。例えばitem.phpは「夏物」というカテゴリーで書かれた投稿を抜いてくるとか、main.phpはUPされたメイン画像と固定的な文言だけだったりとか。それをカテゴリ単位・カテゴリの中の詳細ページ単位でうまくはめこんで使う。

WordPressで動的にレイアウトを切り替える方法はココに詳しい。

WordPressテーマカスタマイズ事始め・基本構造を理解してカスタマイズしてみる - かちびと.net

WordPressテンプレートを各カテゴリ等で別々に使い分ける | フリーランスWebデザイナーの日記

あんま役に立たないかもなぁ、このエントリ。

WPはあくまでWEBページ・画像を管理するのに最適だなぁと。商品DBと価格DBをJOINしてどうこう・・・みたいなことは当たり前だけど向いてない。あーゆーのはcakephpのほうが絶対イイ!まぁwpでも別にテーブル作ってphpをゴリゴリ書いてCRUD決めればどうとでもなるんだけど。