Engineer's LibraryシリーズエンジニアのためのWordPress開発入門

[表紙]エンジニアのためのWordPress開発入門

A5判/416ページ

定価(本体2,980円+税)

ISBN 978-4-7741-8706-8

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

WordPressを使った開発案件は依然多く,それに携わるWebエンジニアも多数存在します。ただし,モダンな開発手法に慣れたWebエンジニアがWordPressに初めて触れたとき,その独特のアーキテクチャやシステムの構成に戸惑いを感じることがあるかもしれません。だが,WordPressは,それらを補ったうえにさらに強力なメリットを持ち合わせています。本書は,PHPプログラマがWordPressで開発する際に必要な基礎知識から,現場で役立つ具体的なカスタマイズ手法や開発のポイントについて詳しく解説しています。

こんな方におすすめ

  • WordPressでの開発案件に携わるWebプログラマ
  • さらにWordPressを知り,使いこなしたいデザイナー

この書籍に関連する記事があります!

WordPressを使いこなして快適な開発ライフを実現しよう
WordPressはブログシステムから発展したCMS(Content Management System,コンテンツ管理システム)です。

目次

第1章 WordPressとは

1.1 WordPressで何ができる?

  • よく似た要件はございませんか?
  • ちょうど良い湯加減で
  • 必要な要件に愛を

1.2 ライセンス

1.3 WordPressが持つ魅力

  • 美しい管理画面
  • 豊富なテーマ
  • 強力なプラグイン
  • 自動アップデート

1.4 WordPressのエコシステム

  • WordPress.org
  • Codex ──ドキュメントリファレンス──
  • フォーラム
  • WordBench ──ユーザーコミュニティ──

1.5 WordPressと関わる際の心構え

  • 外部設計
  • 詳細設計・プログラミング
  • ディレクション
  • HTMLコーディング
    • 【コラム】WordPressのコーディング規約

1.6 まとめ

第2章 環境の準備

2.1 WordPressの準備

  • WordPressの必要環境
  • データベースの準備
  • WordPressパッケージの準備
  • WordPressのインストール

2.2 開発環境の整備

  • デバッグモードとWordPressの定数
    • 【コラム】デバッグモードの有効化・無効化
  • 開発に役立つプラグイン
    • Debug Barプラグイン ──デバッグメニューの追加──
    • Theme Check/Plugin Checkプラグイン ──テーマ・プラグインの危険性診断──

2.3 WP-CLI ──WordPressのコマンドラインツール──

  • WP-CLIとは
  • WP-CLIのインストール

2.4 VCCWによる環境構築 ──Vagrantベースの開発環境──

  • VCCWとは
  • VCCWのインストール

2.5 まとめ

第3章 基本機能

3.1 表示オプション

3.2 投稿と固定ページ

3.3 メディア ──ファイル管理機能──

3.4 カテゴリとタグ ──タクソノミー──

3.5 投稿フォーマット

3.6 テーマのカスタマイズ

3.7 ウィジェット

3.8 カスタムメニュー

3.9 ユーザーと権限

3.10 サイト設定

3.11 まとめ

第4章 プラグインによる機能拡張

4.1 Toolset Types ──エンティティの追加と構成──

  • エンティティとは
  • Toolset Typesの概要
  • 主な機能
    • 利用可能なフィールド
    • 作成済みフィールドのビジュアルエディターでの利用
    • 投稿タイプのリレーション

4.2 Contact Form 7 ──フォーム──

  • Contact Form 7の概要
  • 主な機能
    • 管理画面からフォーム部品の作成
    • 自動返信メール
    • サンクスメッセージ・ページの設定
    • メッセージ保存 ──Flamingoプラグインとの連携──
    • スパムフィルタリング ──Akismetプラグインとの連携──
    • 【コラム】Contact form 7に準備される多くのフック

4.3 WP Super Cache ──キャッシュ──

  • WP Super Cacheの概要
  • 主な機能
    • mod_rewriteキャッシング・PHPキャッシング
    • キャッシュの有効期限と削除スケジュール
    • 受け付けるファイル名と除外するURIの設定
    • 全ページキャッシュ

4.4 BackWPUp ──バックアップ──

  • BackWPUpの概要
  • 主な機能
    • ファイル・データベースのバックアップ
    • クラウド・ストレージサービスへのバックアップ
    • バックアップのスケジューリング
    • 【コラム】日時でのスケジューリング
    • バックアップエラーのメール通知

4.5 User Role Editor ──ユーザー権限──

  • User Role Editorの概要
  • 主な機能
    • 既存の権限グループに対する権限の付加
    • 新しい権限グループの作成

4.6 Adminimize ──権限グループ──

  • Adminimizeの概要
  • 主な機能
    • アドミンバーの表示設定
    • 権限グループ共通の設定
    • 管理画面共通の設定
    • ダッシュボードの設定
    • 管理画面の配色の設定
    • その他の設定

4.7 Really Simple CSV Importer ──CSVからのデータ取り込み──

  • Really Simple CSV Importerの概要
  • 主な機能
    • CSV形式データの投稿とインポート
    • フックを使ったインポートデータの加工

4.8 Super Socializer ──SNS連携──

  • Super Socializerの概要
  • 主な機能
    • ソーシャルコメントの追加
    • ソーシャルログインの利用
    • シェアボタンの利用
    • 【コラム】Jetpack by WordPress.comのパブリサイズ共有

4.9 WP-Polls ──アンケート──

  • WP-Pollsの概要
  • 主な機能
    • 複数アンケートの管理
    • アンケートのスケジューリング
    • 複数回答

4.10 WP Total Hacks ──WordPressでよく行うカスタマイズ──

  • WP Total Hacksの概要
  • 主な機能
    • サイトの設定
    • 投稿・ページの設定
    • 外観の設定

4.11 その他の便利なプラグイン

  • ImageWidget ──画像の設定──
  • Google XML Sitemaps ──XMLサイトマップの作成──
  • Duplicate Post ──記事の複製──
  • Head Cleaner ──表示速度の改善──
  • Search Everything ──検索対象の拡張──
  • Regenerate Thumbnails ──画像サイズの再生成──
  • Simple Page Ordering ──ページの並び順の設定──
  • PS Taxonomy Expander ──カテゴリ・タクソノミーの並び順の設定──
  • Redirection ──リダイレクトの設定──

4.12 まとめ

第5章 WordPressの基本アーキテクチャ

5.1 ファイル構成

  • WordPressの主なファイル・ディレクトリ
  • テーマとプラグイン ―― 機能の実装コンテナ ――
  • テーマのファイル構成
    • テーマヘッダーファイル ──style.css──
    • テンプレートファイル ──index.php──
    • プログラムの記述場所 ──functions.php──
    • その他のファイル配置は自由

5.2 データ構成

  • WordPressの主なテーブル
  • 投稿タイプ
    • 投稿タイプの追加
  • カスタムフィールド
    • 投稿データの保存と取得
    • 【コラム】カスタムフィールドのUI
  • タクソノミー
    • タクソノミーの追加
  • コメント
    • 【コラム】WordPressでのデータモデリング

5.3 基本的な処理の流れ

  • リクエストパラメーターとページの種類
  • メインクエリと条件分岐
  • テンプレート階層とメインループ
    • 【コラム】フックによる適切な書き換え
  • 既定の処理の変更

5.4 プラグインAPI

  • フックの利用
    • 2種類のフック ―― アクション・フィルター ――
    • フックへの処理の登録
    • フックの優先順位
    • フックした関数が受け取る引数の数
    • 簡単なフックの例
  • 主なアクションフック・フィルターフック
  • フックの探し方
    • フック名で探す
    • 処理の流れで探す
    • 何らかのキーワードから探す
    • より良いフックを探す
  • オーバーライドできる関数

5.5 ページの種類

  • 主なページの種類
  • サイトフロントページとブログメインページ

5.6 リクエストパラメーター

  • WPオブジェクト ──$wp──
  • リクエストの解析
    • URLのリライト
    • 入力値のフィルタリング
  • リクエストパラメーターの意味

5.7 メインクエリ

  • WP_Queryクラス ―― WordPress検索の中心 ――
  • メインクエリの意義
  • 2つのメインクエリ変数 ―― $wp_query・$wp_the_query ――
  • メインクエリの変更
    • requestフィルター
    • parse_query/pre_get_postsアクション
    • query_posts()関数

5.8 クエリフラグ

  • クエリフラグの役割
  • クエリフラグを確認するメソッド
    • 【コラム】WP_Query#is_home()と#is_front_page()の違い
    • 【コラム】WPクラスの役割

5.9 テンプレートの選択

  • テンプレート階層の利用
    • 子テーマでのテンプレートファイルの選択
  • 既定のテンプレートの変更

5.10 テンプレートタグとループ

  • メインループとコンテキスト
  • テンプレートタグ
  • 条件分岐タグ
  • インクルードタグ
    • 【コラム】テンプレート構成の設計
  • get_posts()によるサブループ
    • 【コラム】2つのリセット
  • WP_Queryによるサブループ
  • 3つのループの関係の理解
    • メインループ
    • サブループ
    • 個々のデータの表示とコンテキスト
  • テンプレートタグを利用する理由

5.11 WordPressのソースコード

  • ソースコードを読むにあたって
  • グローバル変数とコンテキスト

5.12 まとめ

第6章 テーマの作成・カスタマイズ

6.1 テーマの作成

  • テーマ作成前に検討すべきこと
  • テーマの最小構成による作成例
  • style.cssの記述パターン
    • 【コラム】WP_Themeを直接コールしてみよう
  • functions.phpの記述パターン

6.2 ビューの構成

  • テンプレート階層
  • 部分テンプレート
  • テンプレートの書き方
    • メインループ
    • テンプレートタグ

6.3 テーマに関連したAPI

  • ウィジェットAPI
  • メニューAPI
  • テーマカスタマイズAPI

6.4 テーマ作成のアプローチ

  • 既存テーマのカスタマイズ ──子テーマの作成──
    • なぜ子テーマを使うのか
    • 子テーマを使うメリット・デメリット
    • 子テーマの作成例
    • スタイルのオーバーライド
    • 親テーマの関数のオーバーライド
    • 【コラム】関数のオーバーライドについてのコメント文を読んでみよう
    • フックの実行順序
  • スクラッチによるテーマの作成
    • テーマフレームワークの利用 ──_s──
    • スクラッチ作成における注意点

6.5 テンプレートに利用する関数

  • 関数の分類
  • インクルード系
  • コンテンツ系
  • タグ出力系
  • 条件分岐タグ系

6.6 作成したテーマのチェック

  • デバッグモードによるチェック
  • theme-checkプラグインによるチェック
  • テーマユニットテストによるチェック

6.7 まとめ

第7章 プラグインの作成と公開

7.1 プラグインの作成

  • プラグインの役割
  • プラグインの成立要件
  • プラグインPHPファイルの作成
  • プラグイン情報ヘッダー
  • プラグインの実装
  • プラグイン独自のCSSファイルの読み込み
    • 【コラム】プラグインによるスタイルの定義
  • プラグインの状態変化にフックする関数

7.2 公式ディレクトリへの登録

  • readme.txtと関連ファイルの準備
    • readme.txtの内容
    • readme.txtの検証
    • プラグインのバナー画像の作成
    • スクリーンショットの準備
  • WordPress.orgへのプラグイン登録申請
  • svnリポジトリへのコミット

7.3 まとめ

第8章 投稿データと関連エンティティ

8.1 データ構成の概要

  • wp_postsテーブルに保存される組込みデータ型
  • エンティティ永続化のための3つの要素 ──投稿タイプ,カスタムフィールド,タクソノミー──

8.2 投稿タイプ

  • 投稿タイプの主なAPI
  • 投稿タイプの登録
  • 投稿タイプの表示とその利用

8.3 カスタムフィールド

  • カスタムフィールドの主なAPI
  • カスタムフィールドのCRUD
    • 値の取得
    • 値の追加
    • 値の更新
    • 値の削除
  • 値の取得方法
  • register_meta関数によるキーの事前登録
  • 入力フォームの準備

8.4 タクソノミー

  • タクソノミーの構造
  • タクソノミーの主なAPI
  • タクソノミーの登録

8.5 コメント

  • コメントの主なAPI
    • WP_Comment_Queryクラス
  • コメント版カスタムフィールド
    • コメント版カスタムフィールドとは
    • コメント版カスタムフィールドの主なAPI
  • レーティング機能の実装
  • コメント機能の強制オフ

8.6 まとめ

第9章 投稿データの検索・取得

9.1 WP_Query ──WordPressの心臓部──

  • WP_Queryとは
  • WP_Queryの役割
    • クエリフラグの保持
    • クエリビルダ
    • オブジェクトマッピング
    • イテレータ
    • 先頭固定(スティッキー)投稿の取得

9.2 基本的な使い方

  • WP_Queryによる投稿データの取得
  • 投稿データの表示
  • サブループ作成を目的としたインスタンス生成

9.3 パラメーター

  • 投稿者
  • カテゴリ
  • タグ
  • タクソノミー ──Tax Query──
  • キーワード検索
  • 投稿・ページ
  • パスワード
  • 投稿タイプ
    • post_typeパラメーターが取れる値
  • 投稿ステータス
    • post_statusパラメーターが取れる値
  • 日付 ──Date Query──
    • 日付指定による投稿の取得
    • 複数条件を指定した投稿の取得
  • カスタムフィールド ──Meta Query──
    • 詳細な条件を指定した投稿の取得
    • 特定のキーのカスタムフィールドで特定の数値以上の値を含む投稿の取得
    • 特定のキーのカスタムフィールドに値が存在しない投稿の取得
    • カスタムフィールドに関する複数条件を指定した投稿の取得
  • 並び替え
    • orderbyに使えるパラメーター
    • カスタムフィールドの値を複数指定したソート
  • ページ送り
  • 返り値
  • get_posts()関数でどのようなパラメーターが付加されているか
    • get_posts()関数を使用する場合の注意

9.4 その他のプロパティとメソッド

  • クエリ変数の取得
  • クエリフラグの取得
  • ページ送り関連情報の取得
  • クエリドオブジェクトの取得

9.5 メインクエリ中のWP_Queryに対して行える操作

  • pre_get_postsアクション

9.6 クエリビルディングへの介入

  • JOIN句に対するフィルター
  • WHERE句に対するフィルター
    • キーワード検索部分に限定したWHERE句に対するフィルター
  • ORDERBY句に対するフィルター
  • GROUPBY句に対するフィルター
  • DISTINCT句に対するフィルター
  • LIMIT句に対するフィルター
  • SELECT句に対するフィルター
  • 各SQL文をまとめたフィルター
  • SQL文全体に対するフィルター

9.7 まとめ

第10章 ユーザーと権限

10.1 ユーザーと権限の仕組み

  • ユーザーと権限を制御するAPI
  • デフォルトの権限グループ

10.2 ユーザー操作に関するAPI

  • 基本的なデータ構造
  • ログインユーザーの情報
  • ユーザーの検索

10.3 ロールや権限の追加とカスタマイズ

  • WP_Rolesクラス ──権限グループのカスタマイズ──
  • WP_Userクラス ──ユーザ権限のカスタマイズ──
  • 独自権限の追加

10.4 権限のチェック手法

  • インストール権限のチェック
  • 独自権限のチェック

10.5 まとめ

第11章 管理画面のカスタマイズ

11.1 メニューのカスタマイズ

  • メニューの定義
  • メニューの追加
    • トップメニューへの追加
    • サブメニューへの追加
  • メニューを隠す
    • トップメニューを隠す
    • サブメニューを隠す
  • 並び替え
  • メニュー名の変更

11.2 Settings API ──独自の設定画面の作成──

  • Settings APIとは
  • 設定ページのUI生成

11.3 投稿データ一覧ページに独自項目の追加

  • 独自フォームの作成項目を追加するためのフック
  • 独自項目の実装

11.4 カスタムフィールドの入力フォーム作成

  • 管理画面の標準フォーム
  • プラグインの利用
  • 独自フォームの作成
    • 【コラム】is_admin()関数とadmin_initアクションの危険性

11.5 まとめ

第12章 その他の機能やAPI

12.1 wpdbクラス ──データアクセスのためのDAO──

  • $wpdbオブジェクトとは
  • 現在のテーブル名の取得
  • SQLの実行
    • $wpdb->query()とクエリのログ
    • $output引数による結果のデータ形式の指定
  • SQLの準備と値のサニタイズ
  • 挿入・更新・削除のユーティリティメソッド
    • $format・$where_format引数によるデータ型の指定
  • クエリやその結果の情報の確認
  • 独自テーブルの作成と更新

12.2 バリデーション・ナンス・サニタイズ

  • バリデーション ──入力値の検証──
    • バリデーションの関数
    • エラーの出力
  • ナンス ──リクエスト正当性の検証──
  • サニタイズ ──データの無害化──
    • 入力値のサニタイズ
    • 【コラム】入力値のサニタイズはどこまで行うべきか?
    • 出力値のサニタイズ
    • 【コラム】WordPressの強制マジッククオート

12.3 オプションAPI

  • オプションの追加
  • オプションの取得
  • オプションの更新
  • オプションの削除
  • オプションAPIの記述
  • キーの衝突

12.4 JavaScriptやCSSの管理

  • JavaScriptの管理
    • JavaScriptの追加と依存性の解決
    • 登録したJavaScriptを必要なときのみ出力
    • PHPからJavaScriptへのデータ引き渡し
    • 登録済みスクリプトの変更
  • CSSの管理
    • ページへのCSSの直接出力

12.5 キャッシュ ──一定期間のデータ保持──

  • Object Cache API ──インメモリのキャッシュ──
  • Transients API ──有効期限付きのキャッシュ機能──

12.6 ショートコード ──動的な出力を得る──

  • 一覧を表示するショートコード
  • 範囲を囲うショートコード

12.7 ウィジェット ──追加機能の実装──

  • ウィジェットエリアの登録
  • ウィジェットの作成

12.8 マルチサイト ──複数サイトの作成──

  • マルチサイトとは
  • ネットワークの設置
    • ネットワークの運用設定
    • サイトの追加
  • ネットワークの構造
  • ネットワークの基本的な扱い方
    • 【コラム】マルチサイト特有の関数
    • 【コラム】マルチサイト導入の是非

12.9 WP REST API ──RESTfulなWebサイトの実現──

  • WP REST APIとは
  • APIへのアクセス
  • 認証
  • リソースの種類
  • エンドポイントの追加

12.10 国際化

  • 関連ツール
  • 環境の準備
  • ソースコードの国際化
  • テキストドメイン
  • .potファイルの生成
  • .poファイルの翻訳
  • .moファイルのコンパイル
  • .moファイルの読み込み

12.11 自動アップデート

  • コアのアップデートのポリシー設定
  • コア自動アップデートのレポートメール送信
  • テーマ・プラグイン・言語ファイルの自動アップデート
  • すべての自動アップデートの無効化

12.12 メールの送信

  • From,Ccの指定
  • ファイルの添付
  • HTMLメールの送信
  • 外部SMTPサーバーの利用

12.13 まとめ

著者プロフィール

野島祐慈(のじまゆうじ)

1974年生まれ。「美しいプログラム」が大好物。DTP・グラフィックデザイン系会社に勤務し,デザイン,DTP,Web制作などを経験した後,システムエンジニアへ転向。神戸のSIerで同社コンテンツ制作室長,CTOの役職を経た後,2012年8月,株式会社フォーエンキーを設立。


菱川拓郎(ひしかわたくろう)

1982年生まれ。フロントエンドエンジニアとしてWebの世界に飛び込んでのち,CMSの世界にのめり込む。Movable Type,WordPress,OpenPNEなどを業務で触りながら,concrete5にたどり着き,2012年コンクリートファイブジャパン株式会社を設立。WordCampにも6度登壇している。


杉田知至(すぎたともゆき)

1984年生まれ。クックビズ株式会社にて開発マネジメント,プロジェクトマネジメントに従事。大学在学中に起業し現在に至るまでWeb開発に関わる。2012年,WordPressと関わりプラグイン開発,テーマレビュー,WordCamp Kansai2014に登壇。


細谷崇(ほそやたかし)

1979年生まれ。約4年システム会社に勤め,2007年に退職しNPO法人を設立,代表理事を約5年半,理事を1年務め,2015年3月に退任。現在は個人事業でWordPressやkintoneを使ったシステムの開発や,子供達にプログラミングをサポートするCoderDojoの活動に励む。WordCampには2回登壇,2回ハンズオンを実施。


枢木くっくる(くるるぎくっくる)

1984年生まれ。三度の飯よりアニメが好き。SNSエンジンであるOpenPNEからの派生プロジェクトとしてスタートしたMyNETSで,はじめてPHPとオープンソースコミュニティに触れる。その後,Webサイト/サービス,ソーシャルゲームの開発を行う会社を経て,2014年にヴィジュアライブという屋号にて独立。