10 月の中頃から時間を見て制作していたのですが、先日ようやくブログテーマをオリジナルに変更出来ました。

その際に色々独自仕様に困って調べたので、忘れない様に書き記しておきます。

WordPress (以下 WP) 4.0 時点の話で、色々泥臭い方法で作成しました。

WordPress って結構調べてるとんな事はどうでも良いから何が必要か教えてくれって記事がたくさんあって困ったので、自分基準で書いていきます。

今回は全体的な構成とかで、詳細は別に書く予定です。

必要なファイル

まず、テーマの作成に際して、必要なファイルの構成と条件を知る必要があります。

テーマの作成 についてはリンク先に書かれている通りにやれば事が済みます。

親とか子とか出てきますが基本的には親を作る事になると思います。
親を元にカスタマイズしたい場合は子を設ける事で、
簡単に見ためを変更する事が出来ますが、それはまた別の話です。

最低限で良ければ下記の通りです。

  • index.php
  • style.css

さらに、style.css へコメントヘッダーを入れる事が条件として必要になります。

/*
Theme Name: Twenty Thirteen
Theme URI: http://wordpress.org/themes/twentythirteen
Author: the WordPress team
Author URI: http://wordpress.org/
Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: black, brown, orange, tan, white, yellow, light, one-column, two-columns, right-sidebar, flexible-width, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, translation-ready
Text Domain: twentythirteen
This theme, like WordPress, is licensed under the GPL.
Use it to make something cool, have fun, and share what you've learned with others.
*/

情報は製作者に合わせて変更して下さい。
ここに記述された内容がテーマの情報として扱われます。

これだけをとりあえず守っていれば、
テーマファイルをディレクトリにまとめて zip で圧縮するだけでオッケーです。
画像をテーマの中で使用する場合は好きに追加して問題ありません。

ページ内のレイアウトを分割管理する場合は下記の様なファイルを利用します。

  • header.php
  • sidebar.php
  • footer.php

この名前を利用してファイルを分ける事でコードを必要なタイミングで簡単に呼べる様になります。
それぞれ get_header()、get_sidebar()、get_footer() で実行箇所に埋め込む事が出来ます。

これで分割管理が出来る様になります。

あと、ページのパターンを分けたい場合は下記のファイルを使用すると分ける事が出来ます。

  • single.php
  • page.php

single.php は個別投稿の表示に、page.php は固定ページを作成する場合に使用します。
気になる使い分けは、自動で WP がやってくれますので、この辺は用途に応じてファイルを作成して下さい。どっちも index.php のデザイン使いまわしで OK って事なら作成しなくても良いです。

ベタな書き方をするのであれば、ここまでを知っておけば問題無いですが、勿論 WP の機能は使え無いです。専用の関数を使う事でメリットが出て来るんですが、これが途轍も無く面倒臭かったです。

最初に覚える必要が出てくる関数

WP は大量の関数と固有の知識が前提になっていて、テーマを作るのは非常に面倒臭い作業という話は既にしましたが、実際に触れなければならない関数や機能は表面的な使い方をしていればそこまで多くないように思われます。ただ、それにしても何から調べれば良いのか分からない地獄に落ちるレベルなのは変わらないので、自分が今回使用した機能についての関数を晒しておきたいと思います。

have_posts()

この関数は現在の WordPress クエリに[ループ](http://wpdocs.sourceforge.jp/ループ)できる結果があるかどうかをチェックします。ブール型関数で、TRUE または FALSE を返します。
副作用として、have_posts はループをスタート・段階的に経由・またはリセットします。have_posts はループの最後に [rewind_posts](http://wpdocs.sourceforge.jp/関数リファレンス/rewind_posts) を呼び出して 0 を返します。

ポストが存在するかどうかをチェックする為の関数です。
使用例はリンク先にありますが、ここで WP 内での意味合いを持つループという言葉が出てきます。一般的なプログラミングのループとほぼ同じニュアンスですが、WP で用意されたループ用の関数を使用している場合という意味を含んでいます。今回の関数で言えば have_posts() を利用して while ループを組んだ時とかがあてはまります。

因みに、これ、ループ内で実行すると無限ループにハマるとの事だったので、グローバル変数を使用して解決してる気がします。

get_the_date()

get_the_date テンプレートタグは、現在の $post が書かれた日付を取得します。[the_date()](http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_date) とは異なり、このタグは常に日付を返します。’get_the_date’ フィルターで出力を変更します。

ループ内で実行する事で、現在取得中の投稿日 (のみ) を取得出来る関数です。
同一日に二度以上投稿している時は一度だけの表示という事をしたいなら the_date() を使用して下さい。

因みに僕は後で知ったので現在 get_the_date() を使って the_date() と同じ事を実装しています。
完全に無駄処理です後で変更します。

the_permalink()

ループ の中で処理されている投稿の パーマリンク の URL を表示します。このタグは ループ 内で使用されなければならず、一般的に各投稿のパーマリンクを表示するときに利用します。

現在取得中の投稿記事の URI (要するに href の中身) を取得します。タイトルとか続きを読むとかのリンクに使います。

the_title()

現在の投稿のタイトルを表示、あるいは返します。必ずループの中で使用してください。ループの外では get_the_title() を使います。

そろそろ the シリーズに慣れて来た辺りですが、微妙に (名前含む) 仕様とか、戻り値にバラツキがあるのは PHP のお家芸なのか、WP の問題なのかという所が気になりだします。
the_title は指定のタグを前後に付ける事も出来るので、コードを簡略化したい時に便利かも知れません。便利じゃないかも知れませんが。個人的には HTML を生で書ける部分は極力生で良いと思うんですが、どうなんでしょう。

the_title_attribute()

現在の投稿のタイトルを表示するか、その値を返します。。the_title() の機能と一部重複しますが、HTML タグを除去し、特定の文字(引用符を含む)を同等の文字実体参照に変換することによって、HTML 属性を使用しているタイトルのクリーンなバージョンを提供します。また、クエリ文字形式のパラメータを使用しています。このタグはループ内でのみ使えます。

要するに title 要素に対して使用する事を想定していると思われます。それだけ。 タグに主に使ってます。

まとめ

取り敢えず WP のテーマ作成の上で必要になるだろう (実際僕は使った) 構成や関数をざっとまとめたので、この辺抑えとけばなんとかなる感あります。あとは、個々の面倒臭い話に突入するのでまた別のエントリで書きたいと思います。