AD5 WordPress Lab

上級者への道・WordPressの動作原理を知る

上級者への道・WordPressの動作原理を知る

WordPressの高度なカスタマイズを行う上で、WordPressがどのように動作しているのかを知っておくことは大切です。

※この記事は、わかりやすさを重視して誤解を恐れず大雑把に説明していますが、正確さの面からも随時改定します。

htaccessとwp-blog-header.php

まず、wordpress傘下のURLにアクセスすると、そのURLに一致する実態ファイルが存在しなければ、htaccessによって全てindex.phpにリダイレクトされます。

逆に言うと、sampleという投稿を作り、パーマリンクが http://example.com/sample/であったとしても、WordPressと同じ階層に /sample フォルダがあり、そこにindex.htmlなどがあれば、そちらが優先されるということです。

ともかく、大事なのはまずもって、どんなURLであろうが、常にindex.phpにアクセスしているということです。

WordPressのindex.phpは非常にシンプルで、(デフォルトでは)同じ階層にある、wp-blog-header.php を読み込んでいるだけです。

このファイルが読み込まれると、WordPressの種々の自動処理が行われます。

つまり、このファイルさえ読み込めば、WordPressのテーマ外あるいはディレクトリ外であってもWordPressの機能が使えるわけですが、この話はまた別の機会に。

wp-blog-header.phpによって行われる自動処理

ここからがWordPressそのものが行う処理です。

1. URLの解析
まず、WordPress傘下のURLにアクセスされると、WordPressはURLの解析を行います。

例えば、 http://example.com/news/page/2 というURLであれば、
・投稿タイプ news (存在すれば)の一覧で
・ページネーションの2ページ目
というように。

2. 検索条件の組み立てとDB検索
URLの解析が終わると、その条件をもとに、検索条件のリストを作ります。
上記の例だと、
・投稿タイプ news を
・1ページあたり10件として(デフォルト)
・2ページ目から
という検索条件が作られます。

その後、これを元に実際にデータベースに投げられるSQL文を作ります。

そして、検索を実行し、データを取得します。

3. テンプレートの決定
2で作られた検索条件と、取得したデータによって、読み込むべきテンプレートファイルを判断します。

上記の例であれば、データが1件以上あれば、
archive-news.php
archive.php
index.php
の優先順位で決定され、
データがなければ、
404.php
index.php
の順番で決定されます。

決定されたら、その優先順位でファイルが存在するかどうかのチェックを行い、存在すれば読み込みます。

ざっくり書きましたが、細かくいえば数十の手続きが、決められた順番で、自動的に行われています。

テンプレートカスタマイズの限界とフィルターフック、アクションフック

大事なことは、テンプレートが読み込まれた時には、これらの手続きは既に終わっている、ということです。

検索条件の変更や、テンプレートの分岐をテンプレートファイルで行おうとしても、それは無駄な二重処理であって負荷の原因になったり、既に行われている自動処理と矛盾して不具合の原因になったりします。

そこで、WordPressでは、より合理的なカスタマイズを実現できるよう、フィルターフック、アクションフックという仕組みが提供されています。

WordPressの基本動作を理解した上で、フィルターフック、アクションフックを使いこなすことが、WordPressのカスタマイズをする上では必須と言えるでしょう。

Plugin Outbound Posts – 記事リスト内に外部リンクを挿入

Outbound Posts – 記事リスト内に外部リンクを挿入

投稿のリストの中に、見た目は他の投稿のリンクと同じように、外部リンクを差し込みたい、なんてことはありませんか? こんな風に・・・ Outbound Posts は、このような記事風の外部リンクを簡単に投稿できるプラグインです。 このプラグインを有効化すると、各記事の投稿画面に、「外部リンク」という欄が現
Column WordPressが重い・遅いときは、まず「プラグインのスリム化」をしよう 〜調査篇〜

WordPressが重い・遅いときは、まず「プラグインのスリム化」をしよう 〜調査篇〜

WordPressが重い、遅い!? WordPressのサイトが重い、読み込みが遅いので高速化したい、という相談をよく受けます。 本シリーズでは、実際の高速化の実例を元に、事前調査から対応までの手順をご紹介します。 WordPressが遅い原因 経験上、WordPressが遅い原因の80%以上はプラグインの過剰使用です。 プラグイン
Column WordPressにXMLサイトマップを独自実装するカスタマイズ

WordPressにXMLサイトマップを独自実装するカスタマイズ

WordPressに限らず、SEO対策に不可欠なXMLサイトマップ。 カスタマイズせずとも「Google XML Sitemaps」などのプラグインで瞬殺なわけですが、 多くのXMLサイトマッププラグインは、柔軟に設定できるように作られている分、 「このサイトでは要らない機能」がたくさん含まれることになるので、多少なりともリソー
Plugin AD5 LOYALTY – WordPressで会員制サイト作成

AD5 LOYALTY – WordPressで会員制サイト作成

当サイトで使用しているプラグインです。 WordPressのサイトを簡単に会員制サイトにすることができます。 ショートコードで簡単に会員登録フォーム、ログインフォームが設置可能で、全ての投稿に対して、会員用コンテンツと非会員用コンテンツを設定することができます。 ショートコートで簡単に会員登録フォーム
Column WordPressテーマ・プラグイン開発時のセキュリティ対策

WordPressテーマ・プラグイン開発時のセキュリティ対策

WordPressのテーマやプラグインを開発、カスタマイズする際には、脆弱性を生まないよう、セキュリティ対策を十分に考慮する必要があります。 CSRF対策 管理画面内外を問わず、WordPressにリクエストを送信するフォームや、データを更新するAJAXを実装する場合には、CSRF対策を施しましょう。 リクエストを送信する
Plugin Mobile Sticky Footer – スマホ用固定フッター

Mobile Sticky Footer – スマホ用固定フッター

Mobile Sticky Footerは、スマートフォンサイトに簡単に固定フッターを設置できるWordPressプラグインです。 選べる3タイプのレイアウト 複数ボタンタイプは2ボタンから5ボタンまで設定可能。 お問合せフォームやSNSへのリンクのほか、電話ボタンの設置も可能です。 リアルタイムプレビューつきの直感的な設定画
Column WordPressにメールフォームを自力で実装する

WordPressにメールフォームを自力で実装する

WordPressにメールフォームを実装する優秀なプラグインは沢山ありますが、 ほとんどのプラグインは非開発者向けに導入しやすさを重視して作られているため、 例えば入力項目を動的にするなど、少し複雑なことをしようと思うと、 詰んでしまいます。 WordPressにはメール送信処理やデータの保存などを簡単に実装できる
Plugin WP LOYALTY Checkout add-on – クレジットカード決済

WP LOYALTY Checkout add-on – クレジットカード決済

当サイトで使用しているプラグインです。 AD5 LOYATYのアドオンとして、決済機能を提供します。 決済サービスとして、カード決済手数料が3.0%〜と安く、個人事業主でも利用可能なPAY.JPと連携できます。 (別途PAY.JPのアカウントが必要です。)
Column WordPressのテーマファイル構成を本気出して考えてみた

WordPressのテーマファイル構成を本気出して考えてみた

エンジニアの端くれとして、たかがWordPressテーマであっても、綺麗なモジュール設計がしたいわけです。 そこで、以前作ったサイトのテーマをモチーフに、テーマファイルを再設計してみました。 対象にしたサイトは、ユーザーが会員登録し、PDFコンテンツを投稿でき、ダウンロード結果を集計できるなど、そこそこ高機
Column WordPressサイトにパンくずリストをプラグインなしで実装する

WordPressサイトにパンくずリストをプラグインなしで実装する

意外と大変なパンくずリスト WordPressサイトに限らず、SEOの面でも重要視されるパンくずリスト(breadcramb nav)。 WordPressでガチで実装すると意外と面倒ですよね。 個別投稿ページだけでも、 A. 標準投稿 HOME > 親カテゴリ > 子カテゴリ > 投稿名 B. 固定ページ HOME > 親ページ >
 
ログイン
メールアドレス
パスワード
会員登録
お名前
メールアドレス
パスワード
購入手続き
カード番号
有効期限 (MM/YY)
/
セキュリティコード (CVC)