JACO-BASS » WordPress

ひとに寄り添うデザインの追求

今時の WordPress サイト構築法 (スタイル編)

今回は、僕のスタイル編集について紹介します。前回の今時の WordPress サイト構築法 (テンプレート編)の続きですので、併せて読むと理解しやすいかもしれません。

まず、WordPress のテーマでは、テーマフォルダのstyle.cssというファイルにスタイルを記述するのが基本です。Sandbox では、構造をそのまま使えるのであれば、miyoshiさんの記事に書かれてあるように、テンプレートの継承を利用して、テーマを作成する方が望ましいのですが、商用サイトを作る場合は、どうしても構造を変更してしまう事がほとんどです。

ですので、あくまでベストの方法ではなく、僕の方法であるという事だけ先に述べておきます。

スタイル編集の下準備

では、先ずはディレクトリ構造を説明します。sandbox ディレクトリの中に、以下のディレクトリを作成します。

  • css - CSS ファイルを格納します
  • img - サイトデザインで使用する画像を格納します
  • js - サイトデザインで使用する JavaScript ファイルを格納します

よくある形ですが、この様なディレクトリを作成します。
そして、style.css には、

CSS:
  1. @import url("./css/default.css"); /* defalt style CSS */
  2. @import url("./css/reset.css"); /* browser default style resetting CSS */
  3. @import url("./css/hack.css"); /* CSS filters and browser specific CSS */
  4. @import url("./css/fonts.css"); /* YUI fonts CSS */

この様に記述しています。つまり、4つの CSS ファイルをインポートし、かつ古いブラウザには、クラッシュを防ぐために CSS を読み込ませないようにしています。

楽に、厳格に、そして未来を見据えてた CSS 管理

さて、4つのCSSですが、基本となるスタイルは default.css に記述します。これは、ブラウザによる差異を気にせず、CSS の仕様に従った正しいCSSを書きます。

次に、reset.css は、Eric Meyer氏の方法を参考に、多少手を加えたものを使っています。1ピクセルのずれも許せないWebデザイナのためにResetting Againという記事でも紹介されていますが、ブラウザ毎の特有のスタイルの差を取り除いてくれます。

hack.css は、ブラウザ独自のCSSバグを潰す為のCSSです。これについては、詳しく後述しますが、正しいスタイルとバグを潰す為のCSSを分けているのは、管理を容易にするのと、恒久的に正しく表示される様にする為です。

最後に font.css ですが、これは、YUI の Font CSS を利用させてもらっています。デザインによっては、px 単位でフォントサイズを指定する事も仕方ない場合がありますが、基本的には、フォントサイズを指定したくはありません。なので、折衷案として、font.css でブラウザ毎のサイズの差を無くして、%指定しようという方針です。

If you want this size in pixels (px) Declare this percent (%)
10 77
11 85
12 93 (was 93)
13 100
14 108 (was 107)
15 116 (was 114)
16 123.1 (was 122)
17 131 (was 129)
18 138.5 (was 136)
19 146.5 (was 144)
20 153.9 (was 152)
21 161.6 (was 159)
22 167
23 174
24 182
25 189
26 197

この表にあるように、YUI Font CSS を利用すると、100% で 13px になります。

ブラウザのCSSバグを潰す方法

CSS のブラウザ毎のバグを潰すのに、僕はCSS Browser Selectorを利用しています。これは、JavaScript でブラウザの判別を行ない、HTML の html 要素に、ブラウザやOSの名前のclassを埋め込んでくれるというものです。

例えば、Mac で Opera9 を使っている場合だと、class="opera opera9 mac js" となります。

default.css にこのように記述していているが、

CSS:
  1. div.post {
  2.   margin: 0 40px;
  3. }
  4. div#container {
  5.   margin: 20px 0 0 0; padding: 0;
  6. }

IE6 や IE7 のCSS解釈のバグで、ズレが生じた場合、hack.css に

CSS:
  1. .ie6 div.post {
  2.   margin: 0 20px;
  3. }
  4. .ie7 div#container {
  5.   margin: 0; padding: 20px 0 0 0;
  6. }

頭に .ie6 (もちろん html.ie6 でも良い) の様に記述する事によって、CSS 優先度の関係で、IE6 であれば、 .ie6 に書かれた内容に、IE7 であれば .ie7 に書かれた内容で default.css に記述されたスタイルを上書きしてくれるのです。

覚えておきたいテンプレートタグ

独自のJavaScriptを読み込む場合は、header.php にファイルパスを指定して読み込むのですが、ドメインを変更した場合でも一々修正せずに済むように、WPのテンプレートタグを使います。

PHP:
  1. <script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/js/css_browser_selector.js"></script>

bloginfo('stylesheet_directory') は、使用しているテーマのディレクトリまでのパスを補完してくれます。

サイト画像も img タグで埋込む場合は、このテンプレートタグを利用した方が管理が楽になるでしょう。

同様の理由で、css で背景画像などを読み込む場合は、相対パスを使って指定するのが望ましいです。

CSS:
  1. div#header {
  2.   background: transparent url("../img/header.gif") center top no-repeat scroll;
  3.   color: #fff;
  4. }

の様に指定します。

まとめ

スタイルの編集やその管理については、色々な方法がありますが、多人数ではなく一人で管理する場合だと、これくらいが丁度良いと考えています。

大人数であれば、Subversion を利用するなどのバージョン管理を行ったり、CSS を更にモジュール毎に細分化したりなどが必要かもしれません。

さて、次回はどうするかまだ決ってませんが、プラグインあたりについてでも書こうかと思っています。ここを読んでくれている方で、何かリクエストがあればお気軽にお寄せ下さい。

この記事のタグ

関連記事

今時の WordPress サイト構築法 (テンプレート編)

今回は、僕のWordPressサイト構築のテンプレートデザインを紹介します。

WordPressがMovableTypeより便利だと感じる点として、テンプレートを編集した直後に、変更が反映されるという点です。

なので、制作側に関してはWPの方がよりスピーディーに開発できると思うのですが、WPのテンプレートはphpになっており、テンプレートタグ以外にも自分で関数を作ったりできるため、柔軟性が高いものの、構造を弄り過ぎると理解しにくくなる傾向があります。

今では、CSS + (X)HTML によるウェブデザインが浸透してきましたが、構造設計がずさんな場合、意味の分からないクラスやIDが乱発を招き、せっかくのMVCの分離の理念が崩壊してしまいます。

しかし、ひとつのサイトを作る度に、毎回いちから堅牢で柔軟性に富んだ構造を設計するのは大変ですし、時間もかかり過ぎてしまいます。ウェブ制作に慣れた人であれば、自分の構造パターンができあがっているかもしれませんが、僕はWPでサイト制作するのであれば、Sandbox テーマを元に構造設計を行なう事をお勧めします。

Sandboxは他のテーマと比べて何が違うの?

このテーマの最大の特徴は、自動的に分かりやすい class や id を適切に割り振ってくれる所にあります。

例えば、トップページであれば、body class="wordpress y2008 m06 d13 h10 home loggedin" の様に、
また、ブログカテゴリであれば、body class="wordpress y2008 m06 d13 h10 archive category category-blog loggedin" という class が body 要素にセットされます。

自動的に意味付けされた class や id がセットされるHTML要素は、bodydiv id="post-{n}"li id="comment-{n}" ({n} は WordPress システム内における id)の3つの部分です。

セマンティクスな class と id についての詳しい説明は、Miyoshiさんの記事Sandbox テーマSandbox 1.2をお読み下さい。

つまり、これを使えば、

CSS:
  1. .home div#header {
  2.   background-color: LightBlue;
  3.   color: Black;
  4. }
  5. .category-blog div#header {
  6.   background-color: LightGoldenRodYellow;
  7.   color: Black;
  8. }
  9. .page div#header {
  10.   background-color: LightGray;
  11.   color: Black;
  12. }

という様に、CSS だけでヘッダーのスタイルを自由に変更できます。このサイトも、背景画像を変える事で、トップとそれ以外のページでロゴのサイズを切り分けています。

サイドバーは Widgets で管理したい

サイドバーは、直接 sidebar.php を直接編集するよりも、せっかくテーマがWidgetsに対応しているのであれば、管理画面のデザイン > ウィジェットで管理したいです。

例えば、ホームとブログカテゴリと、それ以外のページで、サイドバーの表示を変更したい場合はどうすればよいのでしょうか。

それには、まず sidebar.php に簡単な分岐を入れてあげましょう。

PHP:
  1. <div class="sidebar">
  2.     <ul class="xoxo">
  3.    
  4. <?php
  5. foreach((get_the_category()) as $cat) {
  6. $cat_id = $cat->cat_ID ;
  7. break ;
  8. }
  9.  
  10. if ( is_home() ) {
  11.   if (!function_exists('dynamic_sidebar') || !dynamic_sidebar(1) );
  12. }
  13. elseif ( is_category('1') ) {
  14.   // category blog
  15.   if (!function_exists('dynamic_sidebar') || !dynamic_sidebar(2) );
  16. }
  17. elseif ( is_single() && $cat_id=="1" ) {
  18.   // single category blog
  19.   if (!function_exists('dynamic_sidebar') || !dynamic_sidebar(2) );
  20. }
  21.  else {
  22.   if (!function_exists('dynamic_sidebar') || !dynamic_sidebar(3) );
  23. }
  24. ?>
  25.     </ul>
  26. </div><!-- .sidebar -->

!dynamic_sidebar(1) というのは、現在のウィジットで選択できるサイドバー1 のことです。この例ではサイドバー3まで使用しています。

しかし、Sandbox テーマでは標準で2個のサイドバーしか使えませんので、3個目を使えるようにする必要があります。

サイドバーを増やすには、functions.php の370行目付近、

PHP:
  1. // Table for how many? Two? This way, please.
  2. register_sidebars( 3, $p );

register_sidebars() の数字を好きな数に変更するだけです。サイドバーを左右に設置したければ、sidebar-2.php というファイルを作成して、どのページでどのサイドバーを使うのかを指定して、

PHP:
  1. <?php get_sidebar() ?>
  2. <?php include(TEMPLATEPATH . '/sidebar-2.php'); ?>

テーマの中で、この様に呼び出せば、2本のサイドバーもウィジットで管理する事ができる様になります。class は div class="sidebar-2" とでもしておきましょう。

まとめ、Sandbox はまだまだ進化していっています

他のテーマと違い、出来上がったスタイルを提供するのではなく、カスタマイズし易い構造を提供してくれる SandboxはWordPressの成長に共なって、バージョンアップされています。

また、全く構造に独自の変更を加えなければ、Sandbox Designs Competitionというギャラリーに投稿できます。色々な作品を見て、インスピレーションを得るのにも大いに役立つでしょう。

次回は、スタイル編集についてもう少し掘り下げて紹介します。

この記事のタグ

関連記事

今時の WordPress サイト構築法 (インストール編)

最近、仕事でサイトを制作する場合、CMSを使う場合は僕の希望でWordPressを使う事がほとんどなのですが、ある程度ノウハウが溜ってきましたので、何回かに分けてその方法を公開していきます。

第1回は、インストール編です。

Subversion を使ったインストール

WordPress本体とプラグインの一部はSubversionを使ってインストールする事で、インストールと更新作業にかかる時間を大幅に軽減する事ができます。サーバに ssh でログインできて、svn コマンドを利用できる事が求められますが、最近のモダンなサーバではこれらを利用できる事がほとんどでしょう。

例えば、DreamHostCORESERVER(XREAもかな)には標準でSubversion がインストールされていますし、SAKURA Internetも自分でインストールする事で使えるようです。

さて、インストール方法についてはInstalling/Updating WordPress with Subversionというドキュメントが用意されていますので難しい事はありません。

一度やってしまえば一々ファイルをダウンロードして、FTPでアップロードする…という作業が馬鹿らしくなってしまうくらい簡単だと感じられます。

例えば、サーバのヴァーチャルホスト を利用して、www.example.com というサイトを作る場合、

CODE:
  1. $ mkdir www.example.com
  2. $ cd www.example.com
  3. $ svn co http://svn.automattic.com/wordpress/trunk/ .

というコマンドを打つだけで、数秒後に最新版のWordPressのインストールが完了します。
これだけだと、日本語表示ができませんので、日本語の言語ファイルもインストールします。

CODE:
  1. cd ./wp-content
  2. svn co http://svn.automattic.com/wordpress-i18n/ja/tags/2.5.1/messages/ ./languages

ここでは、この記事を書いている時点での最新版である2.5.1の日本語ファイルを例にしていますが、バージョンに応じて変更して下さい。

なお、日本語環境をオンにするには、wp-config.php を修正しておきましょう(基本的にはインストール後です)。

PHP:
  1. define ('WPLANG', 'ja');

続いてプラグインのインストールですが、Plugin Directoryに登録されているプラグインは全てhttp://svn.wp-plugins.org/のリポジトリに格納されていますので、ここに登録されているものは全て、本体と同様にSubversionを使ってインストールすることができます。

例えば、Google XML SitemapsContact Form 7 と 拙作の Limited Category Lists Widget をインストールするには、

CODE:
  1. cd ./plugins
  2. svn co http://svn.wp-plugins.org/google-sitemap-generator/trunk/ ./google-sitemap-generator
  3. svn co http://svn.wp-plugins.org/contact-form-7/trunk/ ./contact-form-7
  4. svn co http://svn.wp-plugins.org/limited-category-lists-widget/trunk/ ./limited-category-lists-widget

とするだけで、インストールが完了し、後はプラグインの管理ページで有効化するだけです。いちいちダウンロードしてアップロードするのに比べて、楽だと思いませんか?

Subversion を使ったバージョンアップ

バージョンアップする場合も簡単で本体の場合は、トップディレクトリで、

CODE:
  1. svn up

とするだけです。あとは、wp-admin/upgrade.php を実行しましょう。
言語ファイルは仮に本体のバージョンが2.5.2だとすると、

CODE:
  1. cd ./wp-content/languages
  2. svn sw http://svn.automattic.com/wordpress-i18n/ja/tags/2.5.2/messages/

となります。
プラグインは、各プラグインのディレクトリに移動して svn up コマンドを実行します。例えば、Google XML Sitemaps の場合であれば、

CODE:
  1. cd ../plugins/google-sitemap-generator
  2. svn up

で更新が完了します。

ファイルをダウンロードして解凍してアップロードして…という旧来の方法であれば、ファイルを送受信している時間だけで何分もかかっていたところが、この方法だと数分以内に完了できますので、Subversion が使える環境の人は利用しない手はないでしょう。

まとめ、シェルスクリプトを使いましょう

これら、svn コマンドを使ったインストール作業は、非常に簡単ですが、同じコマンドを何度も打つのも面倒な作業に違いありません。

そこで、例えば以下の様な単純なシェルスクリプトを用意して、インストール作業は勝手にしてもらう事にしておいた方が楽でしょう。

CODE:
  1. #!/bin/bash
  2. svn co http://svn.automattic.com/wordpress/trunk/ .
  3. cd ./wp-content
  4. svn co http://svn.automattic.com/wordpress-i18n/ja/tags/2.5.1/messages/ ./languages
  5. cd ./plugins
  6. svn co http://svn.wp-plugins.org/google-sitemap-generator/trunk/ ./google-sitemap-generator
  7. svn co http://svn.wp-plugins.org/contact-form-7/trunk/ ./contact-form-7
  8. svn co http://svn.wp-plugins.org/limited-category-lists-widget/trunk/ ./limited-category-lists-widget
  9. svn co http://svn.wp-plugins.org/popularity-contest/trunk/ ./popularity-contest
  10. svn co http://svn.wp-plugins.org/popularity-lists-widget/trunk/ ./popularity-lists-widget
  11. svn co http://svn.wp-plugins.org/all-in-one-seo-pack/trunk/ ./all-in-one-seo-pack
  12. svn co http://svn.wp-plugins.org/search-tags/trunk/ ./search-tags
  13. svn co http://svn.wp-plugins.org/ultimate-google-analytics/trunk/ ./ultimate-google-analytics
  14. svn co http://svn.wp-plugins.org/wordpress-navigation-list-plugin-navt/trunk/ ./wordpress-navigation-list-plugin-navt
  15. svn co http://svn.wp-plugins.org/top-level-cats/trunk/ ./top-level-cats

このような内容を installWP.sh のような名前を付けて保存し、インストールしたいディレクトリにコピーします。そして、ファイルに実行権を与えます chmod 777 installWP.sh

あとは、./installWP.sh の様に実行するだけで、自動的にインストールしてくれます。

わずらわしい作業に時間を奪われる事なく、サイト制作に時間を使う事ができるというわけです。

次回はテンプレート編です。

この記事のタグ

関連記事

WordPress サイトの AutoPagerize 対応

本日の夕方から、このサイトのサーバ移行を行ないまして、先程その作業が完了致しました。
その移行作業のついでに、AutoPagerize という便利な仕組みにも対応してみました。

AutoPagerize とは

AutoPagerize というのは、「Greasemonkey スクリプト」、または「ユーザー JavaScript (UserJS)」と呼ばれるもので、見ているサイトの表示や動作を、利用者が便利になる様に変えてくれるというものです。

AutoPagerize を使用すると、ブログや検索エンジンなどで下にスクロールするだけで「次へ」のリンクをクリックすることなく、自動的に次のページが追加されるという大変便利なものです。

AutoPagerize インストールしている場合、利用できるサイトでは、この様に右上に四角のアイコンが表示されます。

このサイトの AutoPagerize の場合1

そして、下へスクロールしていくと、自動的に次のページがどんどん読み込まれてゆきます。

このサイトの AutoPagerize の場合2

一度使い始めると、これが無いとネットが不便で仕方ないと思ってしまうくらい便利なツールですので、使った事のない人は、ぜひ利用してみて下さい。

AutoPagerizeの使い方

UserJS について詳しく説明すると、記事が1本以上出来てしまいますので省略して、AutoPagerize の利用法だけを簡単ですが説明します。

Firefox ユーザー

Firefox の方はグリースモンキーの使い方を参考に、グリースモンキーをインストールした後、AutoPagerizeの配布ページの右上のInstall this scriptのボタンを押してAutoPagerizeをインストールします。
Webブラウジングを快適にするAutoPagerizeも参考にどうぞ。

Opera ユーザー

Opera の方はAutoPagerizeのOpera版,oAutoPagerizeの使い方を参考にしましょう。

Safari ユーザー

Safari の方はSafariでもAutoPagerizeを参考にしましょう。

Internet Explorer ユーザー

IE の方は、AutoPagerize for IE7Proという作者のページに情報がありますが、IE7しか利用できないみたいですので、この機会にXP以上の方は IE7 を利用してみては如何でしょうか?

それ以外のブラウザをご利用の方は、それ以外のブラウザを利用するくらいなので、自分で調べられるくらいの知識をお持ちだと思われます。

WordPerss で構築されたサイトをAutoPagerize対応するには

ようやく本題です。AutoPagerize は非常に汎用性をもったスクリプトで、サイトのHTMLに、少しのセマンティクスを加えるだけで自動的に対応することが出来ます。作者のページによると、

AutoPagerizeに必要な情報をページ中のHTMLに埋め込んでおけば、
SITEINFOがなくてもAutoPagerが起動するようになります

埋め込みの形式は以下の通りです

  • link要素またはa要素でrel="next" (複数あった場合は、先に現れるものが選ばれます)
  • classでautopagerize_insert_before (複数あった場合は、先に現れるものが選ばれます)
  • classでautopagerize_page_element (複数指定可、指定したもの全てが挿入されます)

マークアップの例

HTML:
  1.     <div class="autopagerize_page_element">
  2.       <div>foo foo foo</div>
  3.       <div>foo foo foo</div>
  4.       <div>foo foo foo</div>
  5.       <div>foo foo foo</div>
  6.       <div>foo foo foo</div>
  7.     </div>
  8.     <div><a href="ap_micro2.html" rel="next">next</a></div>
  9.     <div class="autopagerize_insert_before">footer</div>
  10.   </body>
  11. </html>

とあります。つまり、要点を纏めると、

  • 次のページへのリンクにrel="next"を追加
  • 繰り返す各記事のdiv要素に class="autopagerize_page_element" を追加
  • 次の記事を読み込を開始したい位置の直後の div 要素に class="autopagerize_insert_before" を追加

という訳です。

WordPressでは、次の記事へのナビゲーションリンクの多くは next_post_link()previous_post_link()。また、posts_nav_link()のテンプレートタグを使って実装していると思いますが、これらのタグで生成されるナビゲーションリンクに rel="next" を追加するためには、ひとつのファイルを修正するだけで可能です。

WordPress をインストールしたディレクトリの /wp-includes/link-template.php というファイルがナビゲーションリンクのテンプレートになっていますので、この中で定義されている、

425行目付近のprevious_post_link 関数と、
538行目付近のnext_posts_link 関数の部分に

PHP:
  1. echo '<a rel="next" href="';

の様に追加するだけです。

WordPress ではシングル表示の場合の次の記事というのは Next (次) ではなく、Previous (以前) という扱いになっているので、post_link (posts ではない)の場合は previous_post_link が次の記事へのリンクなので注意が必要です。

ついでに、逆の関数に rel="prev"を追加しておくと、よりナビゲーションの優れたサイトになります。

autopagerize_page_element は多くのテーマでは post や entry や section というクラスが付いている部分。autopagerize_insert_before は、記事の次に来るブロック(フッターやサイドバーやナビゲーション)に追加すれば良いでしょう。

これだけで AutoPagerize に対応できますので、WordPress を使ってサイトを構築されている方は、ぜひ対応してみてはどうでしょうか?

この記事のタグ

関連記事

人気記事リストを表示するための WP Widget

WordPressにはアクセスやレスポンスの量から人気のある記事を自動的に割り出してくれるPopularity Contestという便利なプラグインがあります。

そして、人気のある記事一覧をリストにしてくれる機能が備わっているのですが、残念ながらサイドバーウィジェットが用意されていません。というわけで、また作ってみました。

この Widget について

Popularity Lists Widget は、Popularity Contestを使って動作します。そして、人気のある記事を指定した数だけサイドバーに表示できます。

名前
Popularity Lists Widget
最新バージョン
1.1
要求される WordPress のバージョン
2.3 or higher
作成者
Tomoya Otake (TON)
ライセンス
GPLv2

使い方

Popularity Lists Widget の設定ウィンドウ

  • 先ずPopularity Contestプラグインをインストールします
  • ダウンロードしたzipファイル解凍して、popularity-lists-widgetフォルダを /wp-content/plugins/ 以下にアップロードします
  • 管理画面プラグイン一覧画面で“Popularity Lists Widget”を有効化
  • テーマ -> ウィジェット からお好きなサイドバーに Popularity Lists を放り込みます
  • 色々お好みで設定してください
チェンジログ
バージョン 公開日 内容
1.0 2007-10-13 リリース
1.1 2007-10-27 HTML の記述ミスを修正

今後の課題

今回はakpc_most_popular()という全体から人気度の高い記事を上から順に表示するという機能だけのウィジェットを作ってみたんですが、Popularity Contestには他にもカテゴリや月を絞った人気記事リストを表示する機能があります。

今のところこれらの機能を必要としていないので、ウィジェットに盛り込むつもりは無いのですが、気が向けばやるかもしれません。要望があればやる気が増加するかもしれません。

この記事のタグ

関連記事

back to top