プラグインを作成するための基礎知識(テーマ、プラグイン、function.phpについて)

プラグインの基礎知識
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

テーマ機能かプラグイン?

ワードプレスでは、デフォルトのWordPressの挙動を変更するには一つの方法があり、「functions.php」と呼ばれるファイルを使います。
「functions.php」はWordPressのテーマディレクトリの配下にあります。
「functions.php」はWordPressのプラグインの挙動と同様で、機能と特性をPHPコードを通してWordPressのサイトに追加します。そのファイルはカスタマイズされた機能を定義するためやWordPress機能、本来のPHP機能を呼び出すために利用することができます。
代わりに、カスタムコードを自分のプラグインの中に設置するか、カスタムPHPの一部を管理するために簡単な「Code Snippet」のような機能性のプラグインを使う。
テーマとプラグインは特に初心者にとって時々混乱させる。その主な二つの違いはてテーマの機能はテーマの特定の場所でのみ存在していますが、プラグインは様々なものに利用できることがテーマとの違いである。

WordPressプラグイン

  • プラグインパネルで個別に有効になったときにのみ実行します。
  • 一つのテーマに限定せず、全てのテーマに提供します。
  • 特定のユニークなヘッダーの文言が求められます。
  • 普段はwp-contentのpluginsのサブディレクトリに保管される

functions.php

  • 現在使用しているテーマのディレクトリにあるときにのみ実行されます。
  • 特定のテーマのみに提供し、もしテーマが変わった際は、機能は提供されないです。
  • 特定のユニークなヘッダーの文言は求められません。
  • それぞれのwp-contentのthemesの中のサブディレクトリ保管される。

それぞれのテーマはそれぞれのfunctions.phpを持つが、有効化しているテーマのfunctions.phpだけで、どのようにサイトが公に表示できるか決めることができる。もしfunctions.phpがすでにテーマフォルダの中に存在しているのであれば、そのファイルにコードを追加できます。もしない場合は、テーマのディレクトリにfunvtions.phpと名前をつけて、普通のテキストファイルで作成することができます。子テーマは独自の機能を持つことができます。この子functionファイルを使用して、親functionを継承、拡張、および置換することができます

注意
もしWordPressプラグインが同じ関数やフィルターを呼び起こした場合、結果は予想できないことになるでしょう。サイトを無効にすることも可能です。

WordPressのオプションのメカニズム

WordPressはオプションと呼ばれるデータベースから情報を保存、アップデート、復活する機能をもっている。オプションの値は、文字列、配列、またはPHPオブジェクトでも、保存前にシリアル化されるか文字列に変換され、取得時にはシリアル化されません。オプション名は文字列であり、WordPressや他のプラグインと競合しないように、ユニークなものでなければなりません。プラグインのために使用する多くのオプションを最小化することがいい考えです。例えば保管されている10個の名前の異なるオプションの代わりに、シリアライズ化された10個の文字列の要素簡単な名前をつけたオプションを保管する。

オプションの例

メインのプラグインの機能でWordPressのオプションでアクセスするため使えます。

このコードは新しいオプションを作成することができますが、もしその新しいオプションがすでに存在していた場合、何も行わない。

$name

文字列が必要となる。オプションの名前の追加がされる。

$value

オプションで(mixed)、デフォルトでは空欄の文字列である。格納するオプション値。

$deprecated

次の$autoloadパラメータを使用する場合は、オプション(文字列)をWordPressで使用しなくなりました。この引数に空の文字列またはnullを使用します。

$autoload

オプションで、デフォルトはyesとなります。値が’yes’の場合はwp_load_alloptions関数によって設定が自動的に取得されます。

$option

文字列が必要となる。値を返したいオプションの名前。オプションリファレンスにはWordPressのオプションでがインストールされるデフォルトのオプションリストを見つけることができます。

データベースの中にアップデートやオプションの値を作成する。(もし$deprecated や $autoload parametersadd_optionを使用したくないのであれば、add_optionを呼ばなくてもよいこを覚えておきましょう。)

$option_name

文字列が必要となります。アップデートするオプションの名前。

$newvalue

文字列、配列、オブジェクトが必要となります。オプションのための新しい値になります。

プラグインをデータベースに保存する

ほとんどのWordPressプラグインは、サイトの所有者またはブログのユーザーから何らかの入力を取得し、そのフィルタ関数、アクション関数、およびテンプレート関数で使用するために、セッション間で保存する必要があります。この情報は、セッション間で永続化するために、WordPressデータベースに保存する必要があります。 Pluginデータをデータベースに保存する方法は4つあります。

  • 上記のように、WordPressの「オプション」メカニズムを使用します。この方法は、比較的静的で名前の付いたデータを比較的少量保存するのに適しています。プラグインを最初に設定したときにサイト所有者が入力するデータのタイプで、その後はまれにしか変更されません。
  • ポストメタ、カスタムフィールドとして知られています。個々の投稿、ページ、添付ファイルに関連付けられたデータに適しています。 post_meta関数の例、add_post_meta()、および関連する関数を参照してください。
  • カスタム分類。ユーザーやコメントなどの投稿やその他のオブジェクトを分類するため、および/またはユーザーが編集できる名前/値リストのデータについては、特に分類規則に関連付けられたすべての投稿/オブジェクトにアクセスする場合は、カスタム分類を使用することを検討してください。
  • 新しいカスタムデータベーステーブルを作成します。この方法は、個々の投稿、ページ、添付ファイル、またはコメントに関連付けられていないデータ(時間の経過と共に成長し、個々の名前を持たないデータのタイプ)に適しています。

プラグイン開発の提案

  • WordPressプラグインのコードは、WordPress Coding Standardsに従うべきです。インラインドキュメントスタンダードはドキュメントの適切な標準を表しており、将来の開発におけるコア開発者やWordPressについて学ぶときには他の開発者にとって優れたリソースを提供します。また、WordPressの開発者コードリファレンスを読み込むために必要な情報も提供します。
  • プラグインのすべての機能には、WordPressコア、他のプラグイン、およびテーマの機能とは異なる固有の名前が必要です。その結果、すべてのプラグインの関数に一意の関数名接頭辞を使用することは良い方法です。さらに良い方法は、プラグイン関数をクラス内で定義することです(クラスも一意の名前が必要です)。
  • WordPressデータベーステーブルのプレフィックス(通常は “wp_”)をプラグインにハードコードしないでください。 $ wpdb-> prefixvariableを必ず使用してください。
  • データベースの読み込みは安いですが、書き込みは高価です。データベースは、データを取得してそれを与えることで非常に優れています。これらの操作は(通常は)素早く簡単です。しかし、データベースに変更を加えることは、より複雑なプロセスであり、計算上より高価になります。その結果、データベースへのデータ書き込み量を最小限に抑えてください。コードで最初に準備されたものをすべて入手して、必要な書き込み操作のみを行うことができます。
  • 直接SQLを使用する代わりに、できるだけWordPressのAPIを使用してください。たとえば、SELECT * FROM {$ wpdb-> prefix} _postsの代わりにget_posts()または新しいWP_Query()を使用します。
  • 必要なものだけを選択してください。データベースはデータを高速でフェッチしますが、使用する必要があるデータだけを選択するだけで、データベースの負荷を軽減する必要があります。テーブルの行数をカウントする必要がある場合は、SELECT * FROMを実行する必要はありません。すべての行のすべてのデータがプルされるため、メモリが無駄になります。同様に、プラグインにpost_idとpost_authorだけが必要な場合は、データベースの負荷を最小限に抑えるために、これらの特定のフィールドを選択するだけです。データベースとサーバーには、これらのプロセスの間で広がるためのリソースが限られています。データベースに対するPluginのヒットを最小限に抑えることが重要です。プラグインはあなたのプロジェクト全体を遅くするものではありません。
  • プラグインでPHPエラーを削除するには、define( ‘WP_DEBUG’、true)を追加します。 wp-config.phpファイルに、すべてのプラグイン機能を試してエラーや警告がないことを確認してください。発生した問題を修正し、それらがすべて削除されるまでデバッグモードで続行します。
  • scriptタグとstyleタグを直接エコーしないようにしてください。推奨されるwp_enqueue_style()関数とwp_enqueue_script()関数を代わりに使用してみてください。それらは重複したスクリプトやスタイルを取り除くだけでなく、依存関係のサポートを導入するのにも役立ちます。

関連記事

土井純也

土井 純也 Twitterアイコン Facebookアイコン

WordPressスペシャリスト・エンジニア
株式会社プレートテクノロジー 取締役
1985年北海道生まれ。200社以上のWordPressサイトの制作を担当し、「wp.support」では一部上場企業を含め、様々なサイトのWordPress保守・セキュリティをサポートしている。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

記事が気に入ったら
wp.supportを "いいね!"
Facebookで更新情報をお届け。

WordPressの保守・セキュリティ対策なら「wp.support」

その開発、弊社に外注しませんか?

WordPress専門の制作会社
「wp.make」

お見積もりのご依頼やご相談など、まずは下記フォームよりお問い合わせください。

WordPressでのサイト開発を専門に行う弊社が、どのような内容にもお答えさせて頂きます。