WordPressでサイト構築/テーマ制作するためのスキル チェックリスト

(まだ執筆途中の部分が有ります)
## 0 はじめに 

### 0.1 執筆動機
　他人をクライアントとして迎えようとすると、何が可能で何が不可能なのかはっきりさせておかないと不安になります。というわけでサイト制作に必要な最低限のWordPressスキルを書き出しました。

### 0.2 使い方
　これはチェックリストです。
　まったくのWordPress初心者の人は、このリストを見ながら、書店で本を立ち読みするといいかもしれません。自分をチェックするのではなく、買おうと思った本をチェックしてみてください。
　自分がWordPress初級から中級に属すると自分で思う方は、Yes / No で答えてみてください。Yesが75%くらいならば、自分の力でサイト構築をすることができます。
　プラグインを自作できる方は、読む必要は無いでしょう。

## 1 基礎 
### 1.1 一般
* 開発環境を構築することができる(MAMPやXAMPP、あるいはVagrant)。
* 投稿のIDを確認する方法をしっている。
* 「投稿 (post)」と「固定ページ (page)」の使い分けについて簡単な説明をすることができる。
* 大雑把にであれ、WordPressループについて説明することができる。
* テンプレート階層について説明することができる。
* WordPressのバックアップを行うことができる。 
* 必要に応じて、サイト内検索を、WordPressが持っている機能を使って自前で、あるいはGoogleカスタム検索を用いて実現する事ができる。
* 困ったときに何よりも頼りになるのは、やっぱcodexだよね。
* codexの英語のオリジナル版の方が日本語版よりも、コード例が豊富に存在する場合が有ることを知っている。
* 子テーマについて簡単に説明することができる。
* 2種類のフックについて、具体的な使用状況と共に大雑把であれ説明することができる。
* WordPress.comとWordPress.orgの違いを説明することができる。
* エスケープ処理をした上での出力をすることができる。
* ハードコーディングをできるだけ避けた上でのコーディングができる。

### 1.2 テンプレートタグまわり
* get_posts()あるいは、WP_Query()を使用して、query_posts()を避けたクエリを作成することができる(また、どうしてquery_posts()が非推奨になっているかを説明できる)。
* get_sidebar()がフッター領域で呼び出されうることの歴史的な背景を言うことができる。
* wp_enqueue_script()を使って、適切にJavaScriptファイルを呼び出すことができる。
* ポリフィルを適切に呼び出すことができる。
* wp_enqueue_style()を使って、CSSファイルを呼び出すことができる。
* add_theme_support()で有効にできる主な機能に何があるかを知ってる。
* wp_head()とwp_footer()の必要性を理解していて、記述することを忘れない。
* どんな条件分岐タグが用意されているかを大体把握している。また、条件分岐タグが有効に活用されるケースを2,3思い浮かべることができる。
* どんなhas_タグが用意されているかを大体把握している。また、has_タグが有効に活用されるケースを2,3思い浮かべることができる。
* wp_title();の使い方を心得ている。
* bloginfo('template_url')とget_template_directory_uri()の区別がついている。

### 1.3 テンプレート階層
* 頭の中でテンプレート階層の説明に使われるあの表を再現することができる。
* home.phpとfront-page.phpの違いについて最低でも意識はしている。また、一般的にどちらの使用が好ましいか知っている。
* テンプレート階層を意識したPHPファイルの作成と条件分岐タグの関係について一言で言える。
* カスタムテンプレートの使い方を知っている。

### 1.4 ナビゲーション関連

#### 1.4.1 メニュー

* menuの登録と表示に最低限必要な2つの関数を言うことができる。
* メニュー作成における、register_nav_menus()で登録 => ダッシュボードで設定 => wp_nav_menu()で表示 というフローを難なくこなせる。
* ドロップダウンメニューを作成することができる。
* wp_nav_manu()で表示させる際に、FoundationやBootstrapなどのCSSフレームワークを上手く適用ながら出力させることができる。

#### 1.4.2 パンくずリスト
* パンくずリストを作成する事ができる。

#### 1.4.3 サイトマップ
* ユーザー向けのサイトマップを作成することができる。
* Google XML Sitemapsプラグインを利用してサーチエンジン向けのサイトマップを作成することができる。


## 2 投稿(Post)
### 2.1 基本

### 2.2 詳細

* 前の投稿と後の投稿へのリンクを表示することができる。
* 記事内で、投稿者の名前やタグ、カテゴリ名など特定の投稿に付随した情報をそれぞれ必要に応じて表示させることができる。
* タグを表示する時に、「タグ: タグの名前」とならずに、Font awesomeなどを使って「タグ: 」以外のアイコン等で表示させることができる。
* 投稿された時間をHTML5に対応した形で出力することができる。
* 関連投稿を表示させることができる。[Related Postsプラグインの使用]
* 記事内で、ページ分割をすることができる。

### 2.3 一覧

* 記事一覧(archive.phpなど)で、ページネーションを行うことができる(プラグイン使用可)。
* 年別・月別・週別の一覧ページを作ることができる。
* 記事一覧時のサイドバーなどにおいて、投稿者一覧を表示することができる。
* 記事一覧時のサイドバーなどにおいて、最新のコメントを表示する事ができる。 

#### 2.3.1 excerpt
* excerptにおいて、記事本文の冒頭を勝手に表示させず、excerptはexcerptとして設定することができる。
* excerptにおいて、抜粋表示の[…]を適宜変更する事ができる。 
* excerptにおいて、記事本文から持ってくる際、その文字数を指定することができる。
* excerptの文字数を変更することができる。
 
#### 2.3.2 img

* アイキャッチ画像があれば、その画像を表示し、アイキャッチ画像がなければ、記事内の画像を表示し、記事固有の画像がまったくなければ、"no image"画像を表示する、という処理ができる。


### 2.4 コメント

* コメント欄をWordPress内蔵のコメント機能を使って設置することができる。
* コメント欄設置の際に、Akismetを適用することができる。
* コメント欄をDisqusを使って実装することができる。
* コメントを、facebookコメントを利用して実装することができる。
* categoryとtagのそれぞれの一覧ページをつくることができる。※主にcategory.phpとtag.phpの利用
* 上に関連し、他のやり方として、archive.php一枚でこれを行うことができる。
* is_sticky()を有効活用し、重要なお知らせ等を一覧の中で埋もれないように表示させることができる。

## 3 固定ページ(Page)

### 3.1 基本
* なぜ投稿ではなく固定でページを作るケースがあるのかということの理由を言うことができる。
* 固定ページで階層を作る事ができる。
* 固定ページのpost_type名を言うことができる。
* テンプレート階層と関連して、カスタムテンプレートを必要に応じて使用することができる。

### 3.2 詳細
* 固定ページごとにheader画像を設定することができる。

### 3.3 一覧

　非時系列扱いのPagesには、Postsと違ってarchive.phpなどのような一覧機能は備わっていない。しかし、それでも固定ページ(主にタイトルとそのリンク)の一覧を作りたいというケースは多い。その時に使われるテンプレートタグがwp_list_pages()で、ここではこの使い方が主題となる。

* 固定ページのタイトル一覧をリンク付きで表示させることができる。wp_list_pages()
* 固定ページの一覧を表示する時に、階層で絞り込むことができる。wp_list_pages()の引数における設定
* 固定ページのすべての階層を表示する際に、階層をインデントするなどしてスタイルを整えることができる。
* 表示させない固定ページを除外することができる。また、これがダッシュボード内のウィジェット設定からの操作で可能なことを知っている。
* 子を持つカテゴリが複数存在しているとき、表示している投稿の所属するカテゴリのみ、その子カテゴリを表示することができる(2通りのやり方が考えられる)。

## 4 代表的なプラグインの使用
　「これらのプラグインをとにかく使え」と言っているわけではないことに留意してください。
 
* コンタクトフォームを「Contact Form 7」を利用して、実装する事ができる。設置だけではなく、ちゃんとメッセージを受け取るところまで確認すること。
* スパム対策として、Akismetの設定と適用をすることができる。
* Advanced Custom Fields を使用して、快適な投稿を促すことができる(※add_meta_box()を自在に使えるならば不要)。
* All in One SEO か WordPress SEO by Yoast のどちらかを使用してSEO対策をすることができる。
* Jetpack等を使用して、OGP対策をすることができる。
* Related Postsを使って、記事内に関連投稿を表示することができる。
* Google XML Sitemapsを利用してサイトマップを作成することができる。

##とりあえずのまとめ
　ここまできたら、ブログサイトなり、小中規模のウェブサイトは構築できます。私は上のすべてにYesと答えられるわけではありませんが、数百人の選手データと100以上の試合を管理するWordPressサイトを運営しています。
　「codexを見ながらならわかるんだけれど……」というのはYesにカウントしても構わないでしょう。

## 5 応用

### 5.1 その他
* WP_Query()の引数について熟知し、素早くクエリを作成することができる。
* i18nのやり方を知っている。
* 'title_li'など、複数のテンプレートタグで登場する引数の意味について理解している。
* WordPressのデータベーススキーマについての知識が有る。投稿やタグやカスタムフィールドの値がそれぞれどこのテーブルにどのように保存されているか言うことができる。
* 必要に応じてオリジナルのウィジェットを作成することができる。


### 5.2 プラグイン作成への道
　WordPressの応用において避けられないのは、プラグインの作成です。だいたい以下のようなステップを踏むことになります。あなたがWordPressでテーマ作成までは何とかできるという中級者である場合、これから歩むステップは以下のようになるでしょう。字数の関係でここでは個々の段階について説明はしません。

1. ショートコードの作成
1. メタボックスの使用によるダッシュボードカスタマイズ
1. プラグイン制作　

　
 ステップと書いたように、これらは1,2,3と順番にできるようになってゆくものです。正確に記せば、1と2の統合としてプラグイン制作があると言えるでしょう(もちろん、プラグインといっても用途は多様ですが)。
　

### その他

* Cronを動かす
*