WinWordPressについての雑記

WordPressの外部設計ではプラグインが主になってくる。
公開されているプラグインで十分なこともあるので重複して作らないように注意すること。

WordPressにはAPIが存在する。

プラグインはカスタマイズしにくいため、見た目を修正しにくい。
このことをクライアントに伝え理解を得ねばならない。

WordPressにはCakePHPでいうctpのようなテンプレートエンジンが存在しない。

WordPressのコーディング規約のようなもの。→半角スペースをやたらに挿入

MVCの概念はない。
既存の機能にフックするという概念である。

WordPressのプラグインは一般的なプラグインとは意味が異なる。
WordPressをフレームワークと見なした場合、プラグインは開発者によるソースコード記述部分に相当する。
プラグインはWordPressの随所にフックしながら開発する。


適当な導入手順

  1. 事前にWordpressのバージョンに合わせたMySQLとPHPをインストールしておくこと。
  2. 日本語版のzipを以下のサイトからダウンロードする
    https://ja.wordpress.org/
  3. zipを解凍してhtdocsフォルダ(Apache)のは以下にファイル一式を配置する。
    例:略¥htdocs¥animalに配置
  4. ブラウザを開いて配置先へアクセス
    例:http://localhost/animal/wordpress
  5. 「ようこそ」ページが表示されるので、DB設定して、サイト情報の入力して、ログインして、ダッシュボードを開く。
  6. WordPressの配置先にwp-config.phpなどが新たに作成される。
    Ecliseを使っているならエクスプローラを更新してwp-config.phpを表示させる。
    また、DBにもテーブルが多数自動生成される。
  7. wp-config.phpを開き下記をTRUEにしてデバッグモードにする
    	define('WP_DEBUG', true);
  8. 役に立つプラグインをいくつかインストールする。

ダッシュボードの適当説明

投稿

投稿はブログ記事などユーザーによって更新されるページをさしているようだ。
ブログに特化しているようである。
wp_postテーブルに保存される。

メディア

画像、音声、動画などのファイルを登録する。
これらもwp_postテーブルに保存。バイナリ文字列に変換しているようである。

固定ページ

固定ページは静的ページのこと。

テーマ

サイト全体の概観

ウィジェット

ガシェットみたなもの。プラグインで作れる。


カスタムフィールド 、カスタム投稿タイプ、カスタムタクソノミー

カスタムフィールド

投稿フォームのエンティティはデフォルトで「タイトル」と「本文」の2つのフィールドがある。
。他のフィールドを追加したい場合、カスタムフィールドとして追加できる。

カスタムフィールドで並べ替えができる。

ダッシュボード→投稿→→投稿の編集→右上の「表示オプション」→カスタムフィールドにチェックを入れると編集できるようになる。

カスタム投稿タイプ

通常の投稿タイプはブログであるが、商品ページ、ポートフォリオなどのタイプにすることができるようである。

タクソノミーとカスタムタクソノミー

タクソノミーとは分類のことであり「タグ」や「カテゴリー」の総称でもある。
タグやカテゴリー以外にもカスタムタクソノミーとして独自の分類を定義することもできる。
カテゴリ、タグ、カスタムタクソノミーの子要素をタームと呼ぶ。
例えばカテゴリならば「農業」、「登山」、「旅行」などがタームになる。

Toolset Types プラグイン

カスタム投稿タイプやカスタムタクソノミーの編集ができるプラグイン


プラグインの探し方と代表的なプラグイン

プラグイン機能へのアクセスは基本的にダッシュボードの左メニューからである。
左メニューのプラグイン名をクリックするとその機能の画面が表示される。

プラグインディレクトリというサイトからプラグインを見つけることができる。
https://ja.wordpress.org/plugins/

以下に代表的なプラグインを必要性順に列挙する。

プラグイン名説明
WP Multibyte Patchプラグイン 日本語などマルチバイト文字列を取り扱うプラグイン。 とりあえずインストールすべき。
SiteGuard WP Plugin 定番のセキュリティプラグイン。とりあえずインストール。主に管理画面へのログインに関してセキュリティを施す。
有効にするとダッシュボードの左サイドに「SiteGuard」メニューが表示されるので、 ここをクリックするとセキュリティに関する設定画面が表示される。 設定画面では主にログインを中心としたセキュリティ項目が列挙されたおり、それぞれをON/OFFで切り替えられる。
Contact From 7 プラグイン 問合せフォームを作るなら「Contact From 7」が便利である。
※メール送信する問合せフォーム
2021年現在でも有名なプラグイン。
寄付を募っているようなので少しでもお金を払う。
Akismet Contact From 7で推奨されているアンチスパムプラグイン。
BackWPupプラグイン データベースのバックアップが行えるプラグイン
phpMyAdminのエクスポートと同じようなDBデータエクスポートを行う。
基本的な操作方法→BackWPup→Dashboard→「Download database backup」
他にもいろいろ機能があるようだが...。
User Role Editor プラグイン ユーザー権限を編集できる。
Adminimizeプラグイン 権限ごとにダッシュボードの機能を制限できるプラグイン。
Really Simple CSV Importerプラグイン 他のブログサイトからダウロードしたCSVをWordPressにインポートできる。
Super Socializer プラグイン TwitterやFacebookなどのSNSと連携できる。

おおまかなファイル/フォルダの構成

ファイル/フォルダ説明
index.phpWordpressのスタートポイント
wp-config.phpDB設定などの設定はこのファイルで。
wp-adminフォルダ管理画面用の各種ファイル
wp-contentフォルダフロント画面などの各種ファイル群。プラグインもこちら。
wp-inludesフォルダWordPressのコア
functions.phpWordPressの改造

WordPressの主なDBテーブル

主なDBテーブル

WordPressの主なDBテーブルはwp_post,wp_user,wp_commentsである。

wp_post
WordPressの主要なテーブル。
文章、バイナリを問わずいろんな投稿データを保持する。

wp_comments
wp_postにひもづいたコメントなどを保持する。

wp_users
ユーザー情報を管理する

そのほかのDBテーブルについて

wp_postmeta
カスタムフィールドのデータを保持する

wp_term_taxonomy
タクソノミーを管理している。

wp_option
全体的な設定データを管理している。


wp_postの投稿タイプ

wp_postに保存されるデータは投稿タイプで分けている。

主な投稿タイプは以下の通り
投稿タイプの属性値説明
post通常の投稿データ
page固定ページ
attachment画像、音楽などのメディアファイル
nav_menuカスタムメニュー

カスタム投稿タイプ

投稿タイプをカスタム投稿タイプとして独自で追加することもできる。
カスタム投稿タイプを追加するにはregister_post_type関数を使う。
register_post_type関数はオプションも指定でき、検索機能の対象にするか、標準UIを使うかなどの設定ができる。

投稿タイプとCRUD

投稿タイプはDBテーブルのような性質をもつ。
すなわち、投稿タイプをテーブルと見立てるならCRUDを実現できるということである。


メインクエリ

一般的なWebアプリではフォルダやファイル名でページ分けしている。
WordPressはそうでない。URLのクエリパラメータだけでページ分けしている。

WordPressでのページ分けはメインクエリというものを用いている。
メインクエリを元に自動的にデータやテンプレートを取得するようである。
メインクエリは、取ってきたテンプレートの上に取得した各種データを流すらしい。

プラグイン開発においてメインクエリをよく意識する必要がある。
メインクエリを利用して開発の影響範囲を最小限に抑えるようにせねばならない。

メインクエリの実体、$wp_the_queryと$wp_query

クエリパラメータのうちデータ検索にかかわるデータをメインクエリと呼んでいるようである。
「$wp_the_query」がメインクエリの実体である。
しかし開発者が$wp_the_queryに触れることはあまりない。通常は「$wp_query」を通してメインクエリを参照する。

※ここでいうデータ検索はデータベースの問合せのこと。

$wp_queryを書き換えるスタイルも存在するが推奨されていない。
もし書き換えた場合、後ほど「wp_reset_query()」関数で元に戻す必要がある。

データ検索のためのWP_Queryクラス

WP_Queryクラスはデータ検索の中心的な役割を果たしているようである。
検索条件からSQL組み立てDBへ問合せを行っているようである。

検索の際、クエリフラグというものが取得できる。
メインクエリの場合、クエリフラグからどのページの問合せなのか知ることができる。

WP_Queryクラスは、しばしば複数のインスタンスになることがある。
そのためループしてクエリフラグで判別することが必要になるらしい。(メインループとか呼ばれているものか?)

WP_QueryクラスはWordPressの内部で主に使われ、開発者がインスタンス化して利用することはあまりない。

テンプレート

リクエストパラメータからデータが取得されたあとテンプレートが取得される。
テンプレートはページの種類に対応したものである。

テンプレートは独自に作成できる。
テンプレートの名前は、テンプレート階層を意識する必要がある。
リクエストパラメータに即した命名規則に従わねばならない。


フック

テンプレートにPHPコードを書くことができる。
とはいえテンプレートにPHPコードを大量に書くのはスマートでない。
フックを利用してスマートなソースコードにすることになる。

フックはCakePHPのHTMLヘルパーと似ているがちょっと違う。フックは埋込でなくイベント。
フックできる場所はWordPress上に多数存在する。
例えば、リクエスト処理後のフック、データ検索前のフック、ウィジェット登録後のフックなどがある。

WordPressのプラグイン開発においてフック探しは重要な作業になる。
フックのコードはプラグインのPHPファイルに記述する。

他のフレームワークとの違い

他のフレームワークではMVCスタイルであるが、 WordPressでは様々な場所にフックするスタイルでコーディングする。
また、基本関数をオーバーライドして開発するスタイルあるらしい。

フックについて

フックはアクション(add_action)とフィルター(add_filter)に分かれている。
アクションは処理、フィルターはデータ加工という役割であるが、実際は厳密な区別がない。
アクションは値を返す必要はないが、フィルターは値を返さねばならない。

	<?php add_action( $hook, $function_to_add, $priority, $accepted_args ); ?>
	<?php add_filter( $hook, $function_to_add, $priority, $accepted_args ); ?>
	

パラメータの説明
$hook
フック名。
"all" を指定すると、すべてのフックで関数が呼び出されるらしい。

$function_to_add
フックする関数をコールバックとして指定する。

$priority
同じアクションに複数フックされている場合の処理優先度。
値が小さいほど優先される。
初期値: 10

$accepted_args
フック関数の引数の数

フックの種類