- 経緯
- 凡例
- 本の概要
- 章ごとの詳細・要点など
- 所要時間
- ファイナル感想
経緯
- 元々WordPressなシステムを受け持っていて、WordPressの中身に興味をもっていた
- プラグインも作りたくなった
- ちなみに僕は毎日独自プロダクトでPHPを書いてます (でも実際にはSmarty(PHPのテンプレートエンジン)だけをいじる日の方が多い)
凡例
- 文末や文頭の数字はページ番号
本の概要
- gihyo.jp
発行: 2017.01.26 使用されている WordPress Version: 4.6 (2016/8/16)
- と古いけれど、(最新は WordPress 5.8 2021/7/20)
- 目次の内容的には、WordPressのコア部分の仕組みでドンピシャだし、コア部分は4.6から変わってないようだし、Amazonのレビューにも 2020/11とかでも絶賛している人が複数いる
- (416ページ)
所要時間予想
- 前のDocker実践ガイド(496ページ)は12時間で読めたので、これもそれくらいか、ページ数が少ないので 10時間くらいで読めるだろう
書評(全部読んだ感想)
- WPはそんなに複雑ではなかったが、学ばないとわからない箇所も何箇所かはあるので、読んでわかったのは良かったと思う
- テーマいじりやプラグイン作りは問題なく、十分に理解してできるようになるんじゃないかなと思う
- ので、最初の目的を達成できたかと思う
- 後半は自分の求める以上に詳しかった (ので素早く読み飛ばしていった感じ)
- 10.5時間かかってるけど、妥当そうな感じ。ペイしそうな気もする (大損という感じはしない)
- 自分の中になかった概念は殆どなかったので、その点では物足りないかも。 (でもWPをいじるのなら読んで良かったと思う)
章ごとの詳細・要点など
はじめに
- iii 27min 読み始め
- iv 31min
- v 34min 目次
- 7章でプラグインの公開を扱ってるのがいいね
- 全12章
第一章 WPとは
1.1 できること
- 2 36min (ここがpdfの20ページ目)
- 3 38min
- 実はWPもモバイルアプリケーションのバックエンドデータサーバーになるのかも。
- 商品の在庫管理システムにもなる…らしい(?)
- 実はWPもこういうデータの抽象化をできて、5章(基本アーキテクチャ)にそのことが書いてあるらしい
- WPのテーブルは12個、主要なエンティティはたったの4個
- wp_posts, wp_users, wp_comments, wp_term_taxonomy(カテゴリやタグ)
- 4 41min
1.2 ライセンス
- 5 46min
- サービス提供だけならソフトの配布じゃないから GPLに従ってのコード公開はしなくていいよ とのこと
1.3 魅力
- 6 48min
- 7 48min
- 8 48min
- 9 50min
1.4 エコシステム
- 10 52min
- 11 52min
- 公式ドキュメントは Codex という (Mediawiki風見た目)
- Codexの中で検索するのがおすすめとのこと
- 公式ドキュメントは Codex という (Mediawiki風見た目)
- 13 53min
- WordBench というコミュニティもある。神戸にもある (勉強会)
1.5 心構え
- 14 54min
- 15 56min
- 16 2min 2021/08/07 19:56
- HTMLコーディング
- HTMLコーディングがあるらしい (意識したことなかった)
- デザイン・HTMLコーディング担当者にもWP知識が必要
- WP独自のコーディング規約があるよ (PSRではない)
- WordPRESS CODING STANDARDS (入力ソフトが大文字固定になった)
- タブインデントはうーん
- 17 5min
第二章 環境の準備
2-1 Wpの準備
- 20 7min
- 少なくとも当時は Imagick や GDが必要だったらしい というか今でも必要そう
- 21 8min
- 他のテーブルがあるデータベースにもtukureるのはPHPUJ HD UJ HD 特有の融通の効く感じがあある
- 22 10min
- Docker実践ガイドでもよくみたWPセットアップ画面
- 23 10min
- 24 11min
2.2 開発環境整備
- 24
- 26 15min
- 28 17mon
2.3 WP-CLI
- 29 18min
- シェルスクリプトで自動化もできるよ
- curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cl i.phar みたいにして pharをphpで動かして入れる
- wp cron event list はちょっと気になる
2.4 VCCW (Vagrantで開発環境)
- 31 21min
- 32 23min
第三章 基本機能
3.1 表示オプション
- 34 23min
- そう、最初は非表示になってるものが多いよね
- 管理画面の色々なところで右上の「表示オプション」を確認しよう
3.2 投稿と固定ページ
- 34
固定ページは、各ページに親子関 係を持つことができ、例えば「トップ > 会社情報 > 沿革」といった階層のあるサ イトのページ構造を簡単に表現できます。 - ◎知らなかった
- スラッグ: 多分パーマネントリンクになる文字列
- カスタムフィールドに商品の値段などを保存できる (大事な機能とのこと)
- 36 27min
- 開発者が独自の投稿タイプを作ることもできる
- この機能を使って色々な種類のデータを表現できるとのこと
- TODO 投稿タイプをつくって投稿ステータスとして 大事、どうでもいい みたいな とのこと
- 開発者が独自の投稿タイプを作ることもできる
3.3 メディア
- 36
3.4 カテゴリーとタグ (タクソノミー)
- 37 32min
- タクソノミー: 分類
- カテゴリーは親子関係OK
- やはり開発者が新たなタクソノミーを作れる
例えば、商品という投稿タイプに色、サイズ、形状といった分類も簡単に追 加できます
3.5 投稿フォーマット
- 38 34min
3.6 テーマのカスタマイズ
- 39 36min
- テーマは見た目だけでなく機能も含むよ
- 開発者はテーマを実装コンテナにするよ
- ヘッダに画像をフクませられたりする
3.7 うぃじェット
- 最近の投稿とかもウィジェット
- フロントサイトの構成要素に使う
3.8 カスタムメニュー
- 41 39min
- 階層化もサポート
なお、カスタムメニューの管理画面(図3.6)では、表示オプションで隠れて いる機能が多いです。
- わかりみ (リンクを新しいタブで開く、とか)
3.9 ユーザと権限
- 42 41min
- Role もあるよ
標準の権限グループは管理者、編集者、投稿者、寄稿者、購読者と5 種類
- 設定 > 一般メンバーシップ で訪問者がユーザ登録申請できるようにできる
3.10 サイト設定
- 43 43min
- 45 46min,
- 素手にアルものは既製品を使おう
第4章プラグインで機能拡張
4.1 Toolset Types エンティティの追加と構成
- 48 47min
WordPress では、カスタムフィールド、カスタム投稿タイプ、カスタムタクソノミーと呼ばれる、いろいろなデータ表現を構成するための3つの重要な 機能があります
これらを利用することで、例えば商品といったデータ型を作成し、価格などの属性、またその色、サイズといった分類を扱うことができま す。また、この価格、色、サイズなどをエンティティと呼びます。
プログラマブルなアプローチについては、「第8章 投稿データと関連エンティティ」を参照してください。
- ○Toolset Typesプラグイン
- カスタムフィールド、カスタム投稿タイプ、カスタムタクソノミーの3つの機能を管理画面から制御できる
- 管理画面の←絡むに「商品一覧」とか商品カテゴリ一覧とかを追加できるようになるプラグイン
カスタムフィールドのみ管理する場合は、Advanced Custom Fieldsプラグイン注2 が有名で、とても多くのフィールドモジュールが提供されています また、カスタム投稿タイプとカスタムタクソノミーのみ管理する場合は、Custom Post Type UIプラグイン注3 が有名です。
- ここでは Toolset types プラグインの説明
- 投稿タイプのリレーション…?
- 投稿フィールド/ タームフィールド / ユーザーフィールド …?
フィールドとは、例えば商品というデータについて、価格や商品画像といった属性を追加したい場合に利用するAPIのことです
- なるほど
- Toolset Types プラグインでは、これの編集がかんたんにデキる
- 50 52min,
- データに audio とか日付をつけられるっぽい
- みんな大好き WYSIWYG エディタ
作成したフィールドは、ビジュアルエディターにショートコードを利用することで、情報を表示することが可能です
- 53 54min
4.2 Contact Form 7 (お問い合わせフォームプラグイン)
- 54 1min pdfやブログ開くのに1minかかってる2021/08/08 12:22
- 56 2min
- 60 3min
- 送信後の遷移は on_sent_ok: に location javascript を書くとのこと
- Flamingo プラグイン - 問い合わせメールを、WP管理画面でメッセージを確認できるようになる
- 62 4min
- Akismetプラグインがスパム対策にいいよ
- 63
- フックを使ってcontact form 7を改造しよう
4.3 WP super cache
- 64
ページ圧縮機能やCDN(Content Delivery Network)との連携が可能 ・mod_rewriteキャッシング・PHPキャッシング・全ページキャッシュ
- すごそう
- 65
PHPを介さずにmod_rewriteを利用してキャッシュファイルを提供するため、非常に速くページが表示される。Apacheのmod_rewriteが必要となる
- 67
4.4 BackWPup
4.5 user role editor
- 73 少なくとも当時はこれが無いと管理画面で操作出来なかったらしい
4.6 Adminimize
- 76 管理画面でできることを制限
- 管理画面の表示の仕方も調整できるらしい(かなり細かく)
4.7 Really Simple CSV Importer
- 87 wpプラグインの直接的なネーミングセンス好き
- ・フックを使ってインポートデータを加工できる
4.8 Super Socializer ──SNS連携──
4.9 WP-Polls ──アンケート──
- 94
4.10 WP Total Hacks ──WordPressでよく行うカスタマイズ──
- 97 色んなカスタマイズができる
- Appleアイコンを入れるとか
4.11 その他便利なプラグイン
- 101 2min
- 色々なものがある
- Duplicate Post で複製ができる
- Head Cleaner で CSS圧縮やJavaScript をフッターにもっていける
- Simple Page Ordering や PS Taxonomy Expander でページやタクソノミーの並び順を変更できるらしい
- リダイレクトを設定するプラグインもある
- 既製品で使えるものは使おう
5 WPの基本アーキテクチャ
5.1 ファイル構成
- 106 4min
- コアファイルは /wp-includes/ にある
- 普通は /wp-content/ だけをいじる (確かに自分もそこしかいじってない)
- テーマやプラグインとして開発・実装をするよ
- 107 7min
- 108 9min
- 109 13min
- これくらいしか制限・規約がないから学習コストが低いね (共通性は低くなるけど、WPのテーマは小さいから別にいいね)
- 一応標準テーマをお手本にすると共通的になるかもね
- これくらいしか制限・規約がないから学習コストが低いね (共通性は低くなるけど、WPのテーマは小さいから別にいいね)
5.2 データ構成
- 109
- 110 15min
- データベースの概略図がここにある
- 確かにシンプル 13テーブル
- posts, users, comments がメイン
- term_taxonomy で 投稿を分類するよ
- 111 18min
- wp_posts.post_type で中身がなにか示してるよ
- post_status も大事らしい 拡張できるらしい
- ○wp_postmeta に保存するデータをカスタムフィールドというらしい.
- トラックバックやピンバックも comments
- ユーザ情報の多くは usermeta に保存されてる
- カスタムタクソノミーもあるよ
- 112 21min
- 投稿タイプ
- 画像やファイルは wp_posts.post_typeは attahment だよ
- nav_menuもここ
- カスタム投稿タイプ
- 113 23min
register_post_type( 'goods', array( 'label' => '商品', 'public' => true, 'show_ui' => true, ) );
- ↑を書くだけで 商品投稿タイプが追加されるし、管理画面の←カラムに編集ヨウメニューができる
- 114 25min
- ありとあらゆるデータを wp_posts に保存できるのだ
- 組み込みの wp_posts には ブログ記事用カラムしかないので、カスタムフィールドを追加してそこに価格とかを保存できるようにする,
update_post_meta(74, 'price', 1000); $price = get_post_meta(74, 'price', true); $price = $post->price;
- キーとバリューを指定して保存できるのかな?
カスタムフィールドの特徴として、スキーマを持たないことが挙げられます。データは任意の投稿に紐づけて、任意のキーで、いつでも簡単に保存できます
- わかりやすいしくみ
- ◎NoSQLの先駆け!?
- 管理画面で操作できるようにするには Advanced Custom Fields プラグインとかを使うといいとのこと
- 116 28min
- タクソノミー (カスタムタクソノミー)
register_taxonomy( 'goods_category', 'goods', array( 'label' => 'カテゴリー', 'show_ui' => true, 'hierarchical' => true, ) );
- やっぱりコードはかんたん
- やはりこれだけで goods の管理画面に追加される (カテゴリーとして)
- タグと カテゴリーは特別なタクソノミーで、WPの組み込みで 追加実装が色々とあるよ
- コメント
- コメントには承認や特化したUIとかの特別な事項があったりするよ
- 118 31min
- 口コミ情報風に見せることもできるとのこと
- wp_postsをpost_typeを変えていろんなデータに適用させるのは、 Railsの単一テーブル継承と似ているとのこと
- 管理画面とかを使い回せるのがよいとのこと
- カスタムフィールドはあまり検索に向いてないとのこと,
- 価格を価格帯で検索するには 別に価格帯のタクソノミーをつけるといい、みたいな
5.3 基本的な処理の流れ
- 119 35min
- 121 40min
- 123 44minj
- テンプレートファイルにphp処理を書きすぎるのはよくないよ、フックでやるとよいとのこと
例えば、リクエスト解析直後の処理にフックして、リクエストパラメーターを変更して既定の処理を変えたり、データが検索される直前にフックして検索パラメーターを変更して検索結果をコントロールしたり、特定のページへのリクエストのときだけ、HTML側からロードするJavaScriptファイルを追加したりすることができます
add_action( $tag, $function_to_add, $priority, $accepted_args );
- でフック登録できるとのこと (ほしい 場所にフックがないことも結構あるとのこと)
5.4 プラグインAPI
- 124 47min
- テーマ開発時にも使うとのこと
- フックにはアクションとフィルターがあるよ
- アクションは処理追加、フィルターはデータや処理の変更(値を返す)
- add_action(), add_filter()
- priority は小さいほど先に実行される int
- 126 50min
- save_post にフックすると、 2つの引数で呼ばれる、みたいなのがある
- 投稿データID, 投稿データオブジェクト
add_filter( 'the_content', function(){ return str_replace( '。', ' (´Д`)。', $content ); } );
- のように、第一引数のフックに、第2引数の 関数を追加する
- フックごとに引数の名前が決まってるのかな?
- フックの例の表,
- save_post にフックすると、 2つの引数で呼ばれる、みたいなのがある
- 128 53min
- フックの探し方
- WordPress hooks database - action and filter hooks for wp plugin developers -- Adam Brown, BYU Political Science というフックを探せるデータベースがある
フックがコールされている付近のソースコードまで閲覧できる、かなり有用なサイトです
Debug Bar Actions and Filters Addonプラグイン注15をWordPressにインストールして利用すると、個々の画 面で実際にコールされているアクションフックを呼ばれている順序で確認でき ます。(要 Debug Bar プラグイン)
- これを使うと、どのフックを使えばいいかわかりやすいとのこと
(do_action|apply_filters)(ref_array)?( ?['"]['"\w]*検索したい文字列 - image など
- で、フック呼び出し箇所をWPのソースコードから調べられるとのこと
- 130 17min 2021/08/10 21:40 今日は 17分かけて、勉強の進捗などをまとめていた
- 実は /wp-includes/pluggable.php にある関数は開発者がオーバーライドできるよ
- 別のシステムとの連携とかもできるね
- 実は /wp-includes/pluggable.php にある関数は開発者がオーバーライドできるよ
5.5 ページの種類
- 131 20min
5.6 リクエストパラメータ
- 134 25min
- 135 29min
- 137 33min
- このあたりで、クエリパラメータをどう処理して $wp->query_vars に保存するか詳しく書いてある
管理画面の[設定]>[パーマリンク設定]でリライ ト機能をONにすると、例えばhttp://mydomain.jp/2016/09/post-slug/ とい った形式のURLを利用できます
- リライトされたパラメータは、 $wp->perma_query_vars や $wp->extra_query_vars に入った後、結局 $wp->query_varsに入るとのこと
ここでのポイントは、入力値はフィルタリングされ、許可されたキーのみが、 $wp->query_vars 変数に保存されるということです。$wp->public_query_varsと$wp->private_query_varsは、それぞれ外部入力 と内部入力(プログラムからの指定値)をフィルタリングするためのホワイトリ ストです。ここに登録されているキーだけが受け付けられます
- 大事そう
- 新しいパラメータを追加したら、これらにも追加してね
- register_post_type(), register_taxonomy(), $wp->add_query_var() , query_varsフィルターで追加できる
- query_varsフィルターの例
add_filter( 'query_vars', function( $public_query_vars ) { $public_query_vars[] = 'my_search_option'; return $public_query_vars; } );
add_action( 'init', function() { global $wp; $wp->add_query_var('my_search_option'); } );
- こんなふうに、init にフックして、 入れたい処理を入れる
- 139 40min
- 141 44min
5.7 メインクエリ
- 142 47min
- 144 53min
- 146 10min 2021/08/11 21:35
- 今日は、10分間 JavaScriptの export の default って何なのか調べていた
- WPはノンプログラマ向けに設計されたので(PHPっぽい) データや変数をなるべく隠蔽して、関数を露出しているとのこと
- メインクエリを変更する色々な方法の表
- メインクエリを変更できるフックが4つくらいあるんだね
- クエリフラグを改変するフックやしないフックがある
- 148 15min
- WPにはRewriteAPIもあるよ (サーバソフトでやらなくてOK)
- pre_get_posts アクション(フック)をつかったりすると、特定のクエリで 'author', '-4' にして4番ハブったりできるね -WP_Query クラスはメインクエリ以外でも使われるから $query->is_main_query() して判別
- 管理画面かを返す is_admin() も大事とのこと
- $query->is_category('cat-a') みたいなのもある
- 150 20min
- query_posts() は二回DB問い合わせすることになるから使わないようにしようね
- メインクエリを書き換える動作も問題だぞ
- get_posts() がナウい
- query_posts() は二回DB問い合わせすることになるから使わないようにしようね
5.8 クエリフラグ
- 150 22min
- いろんなクエリフラグがある
- そのリクエストがどんなのか判別できる
- front_pageと home (メインページ)は別なのだ (管理画面の設定でそれぞれ指定可能)
- is_paged() 2ページめ以降かチェック関数
- 152 24min
5.9 テンプレートの選択
- 153 25min
テンプレートは詳細な順に存在確認され、 最初に見つかったものが利用される
- カテゴリーのアーカイブページ(一覧ページの例)
- category-{$slug}.php -> category-{$term_id}.php -> category.php -> archive.php -> index.php
- これをWPでは テンプレート階層と呼ぶらしい
- これにあった名前の.php をおけば、それが読み込まれるということね
うまく利用することで、ページの種類ごとのレ イアウト(HTML)を簡単に変更できます
- なるほどね、最初は全部を index.php で処理してるけど、 category.php を作ると、カテゴリー一覧向けの専用処理をかけるのね
- archive-goods.php を作ると、そのカスタム投稿タイプだけを出すページがかんたんに作れるとのこと,
- body タグに、ページの種類を表すクラスがあるのでCSS適用も楽とのこと
- 155 30min
5.10 テンプレートタグとループ
- 157 33min
- そう、このメインループってのが謎の存在だったんだなぁ
- get_header() ヘッダーテンプレートをロードする
- おなじみの while ( have_posts() ) :
- the_post(); で次の投稿になる
- すると、 the_ID() でその投稿のIDを取れるようになったりする post_class() とか the_title() とか the_content() とか
- うーん、独特の世界観なのだ
- これがデータや変数を隠蔽して、全てが関数になった世界
get_template_part( 'content', 'none' ); // 部分テンプレートのロード - 地味に大事そう
- 159 39 min
- 単なるPHP関数であるので、理解しやすいと書かれてる テンプレートタグの概要
- the_title() がテンプレートタグとのこと
- よく見ると、全部 <?php the_title() ?> と php タグで囲んでるね
- データ出力関数に the_ がつく世界観、 取得は get_the_title() みたいな感じ
- is_archive() とかは 条件分岐タグとして使えるよ
- has_tag() や in_cagtegory() もヨロシくね
- インクルードタグ
- 初見な概念
- 他のテンプレをロードできるよ いいね
- get_header() とかのことです
- get_template_part() で任意のを読めるよ
- get_template_part('content', get_post_format() ) とすることで、 content-image.php をロードできるとのこと,
- 161 46min
- みんな大好き get_posts() でのサブループ
$new_arrivals = get_posts( array( // ❶データの検索 'posts_per_page' => 10, 'post_type' => 'goods', ) );
- わかりみが深い
- setup_postdata ($post) でメインクエリのデータが入ってるのをウワ学のだと思う
- wp_reset_postdata() でメインクエリのデータに復帰
- 163 49min
- WPはコンテキスト重視というか大事なのだ
- WP_Query でもループできるよ
$result = new WP_Query( array( // ❶データの検索 'posts_per_page' => 10, 'post_type' => 'goods', ) );
- みたいにやる
- $result->the_post(); でコンテキストセットできる
- the_post() も内部的に global $wp_query; をつかって、 $wp_query->the_post(); してるだけ
- メインクエリ担当の $wp_query がある
- 165 53min
- setup_postdata() で 投稿データ一覧 get_posts() の結果をコンテキストにできるよ
- echo esc_html($post->post_title) . '
'; // 直接フィールドを参照する みたいな、直接フィーるどを参照する方法もある - フックとかサニタイズとかしてるので基本は the_title() を使おうね
- ショートコードの処理を挟んだり。するよ
5.11 WPのソースコード
- 166 57min -> 1min 2021/08/12 20:30
- 168 6min
第六章 テーマ作成、カスタマイズ
6.1 テーマの作成
- 170 10min
- 172 15min
- 174 18min
6.2 ビューの構成
- 174
- 176 24min
- 178 29min
6.3 テーマに関連したAPI
- 179 32min
- 181 35min
- テーマの見た目カスタマイズは 外観>カスタマイズに設定画面がある
6.4 テーマ作成のアプローチ
- 181
- 183 40min
- 直接でなく、子テーマとして、オーバーライドして使っていこう,
- 親テーマの作者がセキュリティアップデートやバグ修正してくれるのでらくちん
- Webサービスも子テーマとして作れちゃうかもね (とのこと)
- 親テーマは保守が続きそうなものを選ぼう
- デフォルトテーマだと安心そう(羽沢)
- WP4.2 のデフォルトテーマは Twenty Fifteen
- wp-ontent/themes に style.css をつくって コメントで Template: twentyfifteen と書けば子テーマができる
- @import url(../twentyfifteen/style.css) とかけば 親のcssを引き継げる
- 185 45min
- 親が functions.php で if ( ! function_exists( 'function_name' ) ) と書いてくれてたらオーバーライドできる
- フックは、priority を大きくしないと、親の後に実行されない(上書けない)
- 187 48min
6.5 テンプレートに利用する関数
- 188 50min
- タグはCodexでこのように分類されてるらしい
・一般タグ ・投稿者タグ ・ブックマークタグ ・カテゴリータグ ・コメントタグ ・リンクタグ ・投稿タグ ・アイキャッチ画像タグ ・ナビゲーションメニュータグ ・リソース
- 190 52min
- comment_form() みたいな、comment_form用のhtmlタグを出力するタグ(php関数)もある
- 192 54min,
6.6 作成したテーマのチェック
- 192
- 194 58min
- 長い記事タイトルとかをみれるよ
第七章プラグインを作って公開する
7.1 プラグイン作成
- 196 2min
- 198 7min
- 200 9min
- 202 11min
7.2 公式ディレクトリに登録
- 203 15min
- 205 19min
- バナー画像は必須じゃないとのこと
- 登録申請は zip にするよ そのzipをインターネットからアクセスデキンところに置く(自前みたい)
- 207 20min
- ☆審査があります
- どのくらい難しいんだろう (問題がなければ通る?)
- 一度チャレンジして、ダメだったらまぁいいかな感 (身内だけで使えばいいかな感)
- というかテーマに含めてもいいしね
- svn は最新が trunk だったなぁ
- 最低、trunk にさえいれてればいいらしい で、 tag を 1.0.0で着ればいい
- ☆審査があります
- 209 24min
- アップデートのときは審査がないっぽい
- Developer Information | WordPress.org
大八章 投稿データと関連エンティティ
8.1 データ構成の概要,
- 212 26min
- 213 30min
- 投稿タイプとカスタムフィールドとたくそノミー(分類)が大事
8.2 投稿タイプ
- 213 30min
- 左カラムにカスタム投稿タイプが出ますね 管理保存の
- 投稿タイプの主なAPI をご紹介
- 215 32min
- なんか register_post_type みたいなAPIだけど、どこで使うノカがきになる
- 機能で投稿タイプをサポートするかAPIもある
新しい投稿タイプを追加するには、プラグインAPI のアクションフックと register_post_type() 関数を使用して投稿タイプを登録します
- そうか、初期化用PHPファイルとかはなくて、 すべてが functions.php なのだった
- すべてをフックでやる世界観
add_action( 'init', function (){ register_post_type( 'products', array( 'labels' => array( 'name' => '商品',...
register_post_type() 関数は、init アクションで呼び出す必要があり、投稿 タイプを追加したあとに必ずパーマリンクを更新する必要がある点に注意して ください。
- パーマネントリンクを更新…?
- 217 35min
- register_post_type() の引数を詳しく説明されてる
- 219 36min
投稿タイプ自体はとても単純な概念ですが、登録時のオプションの指定によ って、さまざまな性質を与えられます。これにより、少ない工数で幅広い用途 を実現する基礎となっています。
'supports' => array( 'title', 'editor', 'thumbnail' )
8.3 カスタムフィールド
- 220 36min
- 値段を登録できるようになるもの
- wp_postmeta テーブルに保存される
- wp_postmeta.post_id
- .key .value
- key はぶつからないようにプレフィックスつけるといいとのこと
- やはり register_meta を init フックで呼ぶ
- add_meta_box() が管理保存でフォームを作るのに大事らしい
- update_post_meta ($postmid, $meta_key, $meta_value, $prev_value) が大事そう
- get_post_meta(996, 'product_price', true ) で価格が取れる感じ 最後のは $single 先頭のを返す
- false だっっら 配列になる
- 222 42min
- 224 45min
- なんとグローバル変数 $post にも入ってます
- echo (int)$post->product_price . '円';
register_meta() 関数を使用し、キーをあらかじめ登録することで、保存時の 値のサニタイズや、権限のチェックをわかりやすくできます アクションフックのsave_post で、 値のサニタイズと保存を行う例が多いです egister_meta() 関数でカスタム フィールドを登録した場合、サニタイズと保存の処理を分けることができるため、ソースコードのメンテナンス性が向上します
- register_meta() で、 その値が0以下だったら 0にするみたいな無名関数を登録できる
- 11章で 管理画面で カスタムフィールドっ追加できるようにすんとのこと
8.4 タクソノミー
- 225 49min
- カスタムフィールドは検索、イチラン表示には不向きっぽい
- ○わずか数行書くだけで管理画面含めた機能が作れるのは確かによい (ノーコードのはしり)
- タクソノミーは投稿タイプに関連つける
- 227 51mmn
- 階層構造もあるよ
- 組み込みタクソノミーでは、カテゴリーが階層型だよ
- wp_terms(用語正規化), wp_term_taxonomy(分類項目), wp_term_reltionships(投稿データと分類項目の関連付け) でできているタクソノミー
- 投稿データ向け外部キーは object_id だけど、これはwp_links テーブルへの関連付けもサポートしていたからとのこと
- 229 56min
- いつもどおり init フックに対して add_action で register_taxonomy する
- 230 58min
- 231 2021/08/14 23:58 1min
8.5 コメント
- 232 2min
- 235 7min
- WP_Comment_Query クラスが活躍しているとのこと
- ここで色々いじっても、コメントを色々首都くしたりできる
- 237 9min
- 240 12min
- comment_post フックに、レーティング情報が送られてきた時の処理を追加しましょょね
- add_comment_meta() している
- 242 14min
第九章 投稿データの検索と取得
9.1 WP_Query (心臓部)
- 244 14min
- サブループでは get_posts() (僕にもおなじみ)の方がナウいし安全
- でもコアな開発者にはWP_Queryが大事とのこと
- WP_Query は 4000ギょウ
- くえりフラグも保持します
- そこら中にある global $wp_query; が肝
- 246 17min
- クエリビルダがWP_Query の中心的機能とのこと
WP_Query クラスは、一般的なフレームワークにおけるクエリビルダとは異な り、クエリビルディングのためのメソッドを特に持ち合わせていません。SQL 文の組み立ては、WP_Query::get_posts() メソッドの中で、条件分岐でがんば って行われています どうしてもSQL文を直接改変したい場 合は、WP_Query::get_posts() メソッドの途中でフックを使って介入すること が可能です
- WP_Query 頑張ってる
現在はSQLでは投稿IDのみ取得 し、投稿IDをWP_Post オブジェクトにマッピングするようになりました (省略可能)
- キャッシュがあるのでリソース節約になってるとのこと
WordPressでは、アクティブレコードやDAOのような仕組みを持ち合わせて いないため、投稿データの保存や更新の際は依然として、配列を関数に渡すと いうスタイルを採用しています。
- WP4.4 くらいから 全部 stdClass ではなく、WP_Term クラスとかにオブジェクトマッピングされるようになった とのこと
- 248 22min
、次の投稿を取得 するのみでグローバル変数を変更しないWP_Query::next_post() カレント をリセットするWP_Query::rewind_posts() メソッド
- ○$query = new WP_Query( array( 'ignore_sticky_posts' => 1 ) ); で、先頭固定投稿(スティッキー)の取得をスキップできるとのこと
9.2 基本的な使い方
- 248 24min
- $the_query = new WP_Query( $args ); newスル時に、どんな投稿を取るのか $args で渡される WP_Query さん
- 250 25min
9.3 パラメーター
- 251 26min
- Codex (公式ドキュメント)はいいぞ
- 'author__in' => [1,2] とかで複数のin できる, (IDだけっぽい。 name には 少なくともこの時点ではなさそう)
- 253 28min
- tagand とか tagin とかある tagnot_in とか tag_slugand/in なぜかtagには name 相当のものがあるな…
- タクソノミーようには Wp_Tax_Query がある
リスト9.16 は、Jason Statham(ジェイソン・ステイサム)が出演している2016年または2015年の 映画の情報を取得している例です。
- うーん、たしかにこういう引き方ができるなら、Webサービスとして使えるかも
- 255 32min
- WP_Query ではいろんなパラメータで検索できるのだ の表
- ○投稿をパスワードで保護することもできる
- 258 33mmn
- 261 33min
- 264 34min
- 検索に使えるパラメータをとても詳しく説明されてる
- 267 35min
- 270 35min
- WP_Meta_Query とか、データごとにこういうクラスがあって、配列で引く条件を指定できるよ
- ページングに関する検索オプションもあります
- 273 36min
- fields に 'id=>parent' を指定すると、 投稿idをキーにして、中身を 親投稿IDをとれる
- WP_Query より かんたんな get_posts() の説明
- 使えるパラメータは WP_Query と同じ
- suppress_filters をtrue にすると、中のフックが発動しなくなる
- no_found_rows(ページングには使う。すべて件数)をtrueにするとはやい
- 276 40min
- get_posts() には setup_postdata() を使おうね そのままこの関数を呼べばいい(何かのオブジェクトのメソッドではない)
- ☆一部テンプレートタグが globalの $poot を参照している。このため、著者さんはget_posts() は使わない方がよい と思っておられる
9.4 その他のプロパティとメソッド
- 277 43min
- global $query_vars にすべてのクエリ変数が入ってる
- $query->get('post_status') みたいな
- is_archive() みたいな関数の説明の表
- 280 45min
- is_page() 固定ページかどうか判定
- ○the_posts_pagination() でかんたんにページ送りナビゲーションを追加できる
- pagenate_links () かも
- ページ送りの例がココニアる
- 282 47min
- クエリ文脈に応じたオブジェクトをエられる get_queried_object() がある とのこと
- カテゴリの一覧ページだったら WP_Term オブジェクトがエられる
- 引数がいらないので使いこなせば楽かも (便利関数) (羽沢の感想)
9.5 メインクエリ中のWP_Query に対して行える操作
- 285 49min
9.6 クエリビルディングへの介入
- 287 52min
- フィルターフックでやる
- posts_join フックに多々して add_filter すると… $join に JOIN クが入って来るので、 $join .= でくっつけたいSQL クをつける
- posts_where もある posts_search を使うと キーワードサーチの時のwhere の一部がわたされる
- 290 54min
大十章 ユーザーと権限
10.1 仕組み
- 294 2min
- wp_users テーブルと wp_usermetaテーブルと wp_options テーブル
- 名前とかだいたいのものはwp_usermeta に入ってる
- wp_options に権限グループ情報が入ってる
- ユーザ操作欠かすうやクラスがあるよ
- 権限グループに権限をつける他に、ユーザに直接権限をつける(wp_usermeta 管轄)ことも可能なのだ
- もちろんグループがオススメとのこと
- みんな大好き unserialize()
- administrator, editor, author, contributor(寄稿者), subscriber がデフォルトである
- 公式日本語ドキュメントは普及にやくだつね
10.2 ユーザ操作api
- 297 7min
$user = new WP_User(2); $firstName = $user->get('first_name'); $email = $user->get('user_email'); $current_user = wp_get_current_user();
- かんたんなコード
- WP_User_Query を使いこなすとユーザを検索できる
- GenerateWP というプラグインも検索というかクエリ生成がかんたんとのこと
10.3 ロールや権限の開花カスタマイズ
- 298 9min
- 301 11min
- いままでと同じ漢字でユーザを操作してる
10.4 権限のチェック手法i
- 302 12min
第十一生 管理画面のカスタマイズ
11.1 メニュー
- 306 15min
- リッチな管理画面がついてくるのがWPのいいところ(とのこと)
- クライアント、ユーザからの要望がメニューには多いとのこと
- 追加関数があるので admin_menu フックに add_action しよう
- この追加関数の中にhtml 書いてるけど、複雑なものを作れるのかな この後に書いて有りそう
コールバック関数または メソッドを別途用意したほうが良いかもしれません
- 309 18min
特定のメニュー を隠すカスタマイズも、追加同様に要望が多い項目です。
- メニューから隠すことができる (URL知ってたらアクセスできるけど)
- 312 20min
- サブメニューは、現在ヒョょじしているページごとに $submenu_slugが異なるので、 $_SERVER['REQUeST_URI'] から生成しないといけないらしい
11.2 Settings API 独自設定画面を作成
- 315 22min
- データベースのデータをサワれるように鳴るらしい? iアノ?
- セクションという謎概念が登場
- add_options_page () で追加mfk iM設定画面を追加
- 任意の値 ここでは サンプル設定1 へテキストを追加できるようになってる
11.3 投稿データ一覧ページに独自項目をついか
- 318 25min
- サムネ追加とか更新日時ソートとかができる (現在のバージョンでは更新日時ソートはデフォルトでできる気がする)
- フックで追加しましょう
- ソート処理も追加できるとのこと
11.4 カスタムフィールドの入力フォーム作り
- 320 27min
- カスタムフィールドの追加編集フォームを自動で追加してくれるWP
- プログラマブルなアプローチとの親和性はこれではほとんどないとのこと
- プラグインが一番
海外でも人気のToolset Typesプラグインを紹介しています。Toolset Types以外にもSmart Custom Fields注2や、Advanced Custom Fields注3 が人気があり、
- 入力値チェックとかがないのがプログラマブルなアプローチとの相性が悪いとのこと
- やはりフックに色々書けばできる
- is_admin や admin_init アクションでは current_user_can() や check_admin_referer が大事だったり、 Ajaxには wp-admin/admin-ajax.php をエンドポイントにするのが大事とのこと、
第十二章 その他機能やAPI
12.1 wpdb クラス データアクセスDAO
- 326 33min,
- 基本はAPIを使おう とのこと
- global $wpdb を使ってるよ
- prefixを使って独自テーブル名をつくろう > $actual_my_table_name = $wpdb->prefix . 'my_table_name';
- 329 37min
- $wpdb->queries に実行したSQLが保存されるとのこと
- $wpdb->prepare で安全に値を入れたりできるとのこと
- insert, replace, update, delete という便利メソッドもあるよ ユーティリティメソッド
- 332 39min
- ALTER 分を作ってくれる dbDelta()
- それを使った マイグレートプログラムが書かれてる
- 335 42min
12.2 バリデーション・ナンス・サニタイズ
- 336 43min
- ナンスは聞いたことしかないかも (どういうことかわからない)
- バリデーションから
- 基本バリデーションはないWP サニタイズは豊富とのこと
(公式、コアですら) WordPressの投稿画 面でバリデーションを実装することは難しいこと
- プラグインでも JavaScriptでブロックして実現してるとのこと
- ユーザIDとか メアドのバリデーションはあるらしい
- 何個かバリデーション関数がある
- WP_Error クラスにエラーを書くのうしよう
- ここに、自分でそのクラスを使っっエラーを表示する方法がかかれてる
- $errors にエラーがあったら自動で履くとかはなさそう
- 339 47min
- ナンス: リクエスト正当性 のための一意なトークン
- クロスサイトリクエストフォージェリー対策のもの
- これがないとPOSTを打たせられたら更新してしまうね
- wp_nonce_field() でそのためのhtmlタグが出力されるっぽい wp_verify_nonce() で検証
- $REQUEST['wpnonce'] に入ってる
- check_admin_referer( 'my-action' ); で、リファラとナンスを両方検証するとのこと
- サニタイズ編
- sanitize_text_fieldみたいな関数が何個かある
- 投稿では wp_insert_post() 無いでサニタイズされてるらしい
- APIでは抱いたいやってる
- 342 53min
- 出力時はWPは勝手にはサニタイズしない
- 頻出 する echo esc_html (); WPの欠かすう関数
- the_title() とかでは不要とのこと
- フックもあるし、基本テンプレタグを使おうとのこと
- esc_js()も大事とのこと これもWPの欠かすう関数 esc_html はすの,PHPにありそうだけどない
- html 属性には esc_attr
- 指定した要素と属性を残せる 他は消す wp_kses()
- ホーカライズの翻訳ローカライズファイルも危険かも サニタイズすべし とのこと
- esc_html_e( 'Hello World', 'text_domain' ); でサニタイズしながら翻訳できるとのこと
- _x 版もあるとのこと 343まで 58min
- 344 8min 2021/08/17 0:18 7分間はcFnのレビューの返事をしていた
- $_GETとかにはWP龍マジッククォートされてるから注意とのこと
- stripslashes() クォートをとり除く
12.3 オプションAPI
- 345 10min
12.4 jsやcssの管理
- 347 13mijn
- 350 18min
- 353 23min
- $media 引数で、どのmediaのときだけ出すか指定できるとのこと
CSSでもwp_enqueue_scriptsにフックします。
12.5 キャッシュ
- 354 24min,
- Object Cache API (インメモリ、単一リクエストで有効)
- Transients API (DBにストア、有効期間内で有効)
- の2つがある
- Object Cache API
- /wp-includes/cache.php にて実装されてる
- wp_cache_set/add/get で key value ストアとして使う
- $group 引数があるので、プレフィックスをつけなくていいね
- serialize せずに変数をそのまま保存できるっぽい
- /wp-includes/object-cache.php を 作ると、Object Cache API を乗っ取れるので、 memcachedとかにできるとのこと
- Transients API
- 中身的には オプションAPIを使ってるらしい
- set/get_transient() という感じ やはり key value ストア
- こっちは $group引数がないのでプレフィックスとかがいる
- set_site_transient() だと、マルチサイトでも共通のが作れる とのこと
12.6 ショートコード (動的出力)
- 357 31min
- この「ショートコード」を知らないことも、WPをもっと知ろうとおもったきっかけなのだった
- ショートコードとは、投稿中にユーザが書くと動的出力をエられるコード
- add_shortcode() で 追加できる
- デフォルトは WordPressショートコード超詳細ガイド(自作例も紹介) にあるものかな? 少ないかも?
- 公式を見ても ショートコード API - WordPress Codex 日本語版 その六種類だった
ショートコードでは、投稿本文中の任意の範囲を囲み、その囲まれた範囲の 文字列に対して処理を行うこともできます
12.7 ウィジェット 36min
- 359 36min
- 362 39min
12.8 マルチサイト
- 365 42min
- ネットワークサイトともいうとのこと マルチサイト化のことをネットワーク設置ともいうみたい
- define('WP_ALLOW_MULTISITE', true); が設定開始のための設定とのこと
- 管理画面 ツール > ネットワークの設置で設置できるみたい
- 368 45min
- テーブル名もプレフィックスがかわるよ
- 371 47min
- wp_get_sites() とか switch_to_blog() とかで、複数サイトを渡り歩ける
- restore_current_blog() で戻れる
- 用語が入り乱れてるので頑張って という感じ
- マルチサイト未対応のプラグインもあるとのこと, 癖強いとのこよ
12.9 WP REST API
- 372 49min,
- REST まであるよ
- XMLよりJSONの方が取り扱いやすいね (さらに未来だとymlがかんたん)
- ◎http://example.com/wp-json/wp/v2/posts で新着が取れたりする
- getはいいけど 更新とかちゃんと閉じられるのかな(羽沢)
- ☆http://example.com/wp-json/wp/v2/users でユーザ名がとれる 塞ごう
- POST /wp-json/wp/v2/posts とか DELETE /wp-json/wp/v2/posts/1 もあるようだ
- 勝手に人のサイトを更新するのは犯罪(だと思う)
- この後にデフォルトで塞がってるか書かれてるかな?
- Chromeアプリの PostmanがREST API 操作にオススメとのこと 375 はで 57分
- 375 2021/08/17 21:14 1min 今日終わるでしょう
- WPのユーザ権限通りの操作がREST API でできるとのこと
- ユーザをみるだけだったら非ログインでも全員できるのは変な気もするけど。。
- Cookie認証、OAuth1.0a認証、Basic認証があるとのこと,
- Cookie認証が、管理画面にログインしたブラウザからは通るヤツだね
ログインだけですべての操作がAPIから行えると、CSRF脆弱性 が発生しますので、APIへのアクセス時には専用のトークンを生成する必要が あります。
- OAuth が標準的,
- BASIC認証は平文だから危険だよ とのこと
- determine_current_user でプラグイン独自の認証が作れるとのこと
- リソースは posts, pages, media, post_meta, post_revisions, comments, taxonomies, terms, users, post_types, post_statuses とのこと
- フロントサイトでエられない情報は users だけかな
- rest_api_init, register_rest route で君だけの REST API をつくろう
- WPのユーザ権限通りの操作がREST API でできるとのこと
- 378 9min
- ☆ users の塞ぎ方はこの本には載ってなかった
12.10 国際化
- 378 11min,
- 381 16min
- 384 21min
- 最終的にはload_plugin_textdomain() で読み込む
12.11 自動アップデート
- 386 22min
- 自動更新設定してると、自動で更新されるらしい
- デフォルトでは 1.2.3 の一番小さいところだけ(マイナーバージョン)だけ自動であがる みたい
- 自動アップデート時に wp はメールで教えてくれるとのこと
12.12 メールの送信
- 388 25min
- PHP の mainl() ににた wp_mail() があるとのこと
- この後は索引(391-396) 著者紹介 (5名の共著) 30min
所要時間
- 1日め: 2021/08/06 21:08.
- はじめに~1章 概要
- 23分で 33ページまできた(0.7分/page)
- 全体は290分 = 5時間で終わる!?
- 今日は目次が多かったからね
- 2日め: 2021/08/07 21:37
- 1章~ 2章 用意 参照 資本機能 四章 プラグインを使おう
- 55分で 34-72 39ページ 1.4min / page
- 全体は 588分かな 10時間弱 あと8.5時間か?i
- ◎開発なしで部屋予約システムが作れる、ノーコードの先駆けという視点はすごかった
- 三日目 : 2021/08/08 22:30
- みなし60分 112まで
- 4章 色々なプラグイン
- 四日目 2021/08/09 21:22
- 5章基本アーキテクチャ
- WPの処理の話に入って面白かった
- 56分で 148まですすんだ 37ページ (1.5min/page)
- のこり 269ページ。 403分 (=6.7時間) 途中で別のことするけど、あと 7日。
- 5日め 2021/08/10 23:03
- 5章基本アーキテクチャ。処理の流れになっててちょっと楽しい
- 40分。その前に17分で勉強時間などまとめていた
- 130-145 40ページで16ページかな。 おそい 内容難しくなったのかもね
- のこり 253ページ。
- 6日目 2021/08/11 22:23
- 7日目 2021/08/12 21:55
- 58分で 167-194 28ページ
- 6章テーマ作り、カスタマイズがおわり
- 8日目 2021/08/14 2:34
- 195-230 56分 36ページ
- 7章プラグイン作り 一番気になってたところだけどかんたんだっっ
- 8章 投稿データと関連エンティティ 途中
- 9日目 2021/08/15
- 231-292 62ページ 57分
- WP_Queryのパラメータダラケデ、読み飛ばせた
- 9章 WP_Query
- 正直、ここまで深いところは自分は使わないだろうな感があった。ので早めに読み飛ばした
- 明日はユーザと権限で、面白そうかも
- 10 日目 2021/08/16 0:48
- このくらいコアなことになると、自分は扱わないだろうからいいかなって感じで早めに読み飛ばした
- 293 -343 51ページ 56分
- 明日ギリギリ終わらないくらいかな
- 10章 ユーザ周り、 11章 管理画面、 12章 その他
- 11日め 2021/08/17 2:13
- 343 - 374 50フル 32ページ
- REST APIエンドポイントは面白かった
- 12章色々な機能
- 明日終わるといいな。
- 12日め 2021/08/17 22:07
- 30分で最後まで読んだ