WordPressのプラグインは、そのコア機能を拡張するための中心的なメカニズムです。プラグインを利用することで、WordPressのコアコードを変更することなく、ウェブサイトに無限の機能を追加することができます。プラグインの開発には、セキュリティ、パフォーマンス、メンテナンス性を確保するための一連の規約やベストプラクティスに従っています。標準的なプラグインには、少なくとも、プラグインの名前にちなんで名付けられたメインファイルが1つ必要です。 my-awesome-plugin.phpこの記事では、基本コンセプトから始めて、プラグイン開発の世界に段階的に導入していきます。
プラグインの基本原理を理解する。
WordPressのプラグインは、本質的には1つ以上のPHPファイルで構成され、それらはWordPressのプラグインディレクトリに保存されています。 /wp-content/plugins/ プラグインはWordPressが提供するAPIとフック(Hooks)システムを通じてコアと対話します。これらはすべて、プラグインがWordPressのカタログに表示されるために必要なものです。
フックシステムの動作メカニズム
フックシステムは、WordPressプラグイン開発の中心です。開発者は、アクションとフィルターという2つの方法を主に利用して、WordPressのデフォルトのワークフローに「フック」を設定します。アクションでは、特定のタイミングでカスタムコードを実行でき、フィルターではプロセス中に渡されるデータを変更できます。
推薦図書 ワードプレスのプラグイン開発を初心者から上級者まで学ぶ。自分だけの機能を作る方法を一通り説明します。
例えば、使うことで add_action() 関数はアクションフックを登録できます。WordPressがそのアクションポイントに到達すると、あなたがバインドしたコールバック関数が実行されます。
プラグインの標準的なファイルヘッダー情報
各プラグインのメインPHPファイルには、WordPressにプラグインのメタ情報を提供するための標準化されたファイルヘッダーコメントブロックが含まれていなければなりません。これらの情報によって、「プラグイン」管理ページでプラグインがどのように表示されるかが決まります。
<?php
/**
* Plugin Name: 我的超级插件
* Plugin URI: https://www.example.com/my-super-plugin/
* Description: 这是一个用来演示插件开发基础的示例插件。
* Version: 1.0.0
* Author: 张三
* Author URI: https://www.example.com/
* License: GPL v2 or later
* Text Domain: my-super-plugin
*/ プラグインの読み込みと有効化
ユーザーがWordPressのバックエンドでプラグインを有効にすると、WordPressは(コードが関数内にないか、条件によって保護されていない場合を除き)ページが読み込まれるたびにそのメインファイルのコードを実行します。したがって、機能コードをすべて関数やクラスにパッケージ化し、フックを介して呼び出すことをお勧めします。そうすることで、プラグインが有効になっていない場合にコードが実行されるのを防ぐことができます。
あなたの最初のプラグインを作成する
さて、ウェブサイトのすべての記事の末尾に自動的に著作権声明を追加する機能を備えた簡単なプラグインを作成してみましょう。
メインプラグインファイルの作成
まず、 /wp-content/plugins/ カタログの下に新しいフォルダを作成し、名前を付けます。 my-first-pluginその後、このフォルダ内にメインファイルを作成してください。 my-first-plugin.phpそして、上記の標準的なヘッダー情報を追加してください。
推薦図書 ワードプレスのプラグイン開発を初心者から上級者まで: 高いカスタマイズ機能を備えたモジュールを構築するための完全なガイド。
フィルターを使って記事の内容を変更する。
私たちは使用する予定です。 the_content 記事の出力を変更するためのフィルター。メインファイルに次のコードを追加してください。
function myfp_add_copyright_to_content($content) {
// 确保只在文章主循环中、且非管理后台执行
if (is_single() && !is_admin()) {
$copyright_text = '<p><em>この記事の著作権は当ウェブサイトに帰属します。転載する場合は出典を明記してください。</em></p>';
$content .= $copyright_text;
}
return $content;
}
add_filter('the_content', 'myfp_add_copyright_to_content'); myfp_add_copyright_to_content 関数は1つのパラメータを受け取ります。 $contentそれでは、記事の内容についてです。条件判断関数を使用して確認してみましょう。 is_single()記事ページにのみ追加するようにしてください。 !is_admin() そうすれば、バックエンドのエディターでこの著作権テキストが表示されるのを防ぐことができます。
プラグインのローカライゼーション処理
プラグインが多言語に対応するためには、国際化(i18n)処理が必要です。まず、メインファイルのヘッダーで設定を行います。 Text Domain: my-first-plugin次に、プラグインの初期化時に言語ファイルを読み込みます。
通常、私たちは使っています plugins_loaded 翻訳を安全にロードするためのアクション。同時に、使用してください。 __() または _e() 翻訳が必要なすべての文字列を包むための関数を使用します。
function myfp_load_textdomain() {
load_plugin_textdomain(
'my-first-plugin',
false,
dirname(plugin_basename(__FILE__)) . '/languages/'
);
}
add_action('plugins_loaded', 'myfp_load_textdomain'); 高級プラグイン開発モード
プラグインの機能が複雑になるほど、オブジェクト指向プログラミング(OOP)やより構造化された開発パターンを採用することで、組織性、カプセル化、メンテナンス性が向上します。
オブジェクト指向プログラミングを採用する。
プラグインのすべての機能をクラスでカプセル化する方が賢明です。これにより、関数名の競合を避けながら、コードの構造を明確にすることができます。
推薦図書 詳細解析:WordPressのプラグイン開発の核心と実践をゼロからマスターする。
class My_Advanced_Plugin {
public function __construct() {
// 在构造函数中绑定所有钩子
add_action('wp_footer', array($this, 'add_footer_notice'));
add_filter('the_title', array($this, 'modify_post_title'));
}
public function add_footer_notice() {
echo '<p style="text-align:center;">技術サポートはMy Advanced Pluginによって提供されています。</p>';
}
public function modify_post_title($title) {
if (in_the_loop()) {
return '📝 ' . $title;
}
return $title;
}
}
// 实例化插件类
new My_Advanced_Plugin(); 管理バックエンドの設定ページを追加してください。
多くのプラグインでは、ユーザーに設定オプションを提供する必要があります。WordPressのバックエンドに設定ページを追加するには、通常、次の手順が必要です。 add_menu_page() または add_submenu_page() 関数と、Settings APIを組み合わせてオプションを安全に保存する。
class My_Plugin_Settings {
public function __construct() {
add_action('admin_menu', array($this, 'add_admin_menu'));
add_action('admin_init', array($this, 'register_settings'));
}
public function add_admin_menu() {
add_options_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限
'my-plugin-settings', // 菜单别名
array($this, 'render_settings_page') // 回调函数
);
}
public function render_settings_page() {
?>
<div class="wrap">
<h1>私のプラグイン設定</h1>
<form method="post" action="/ja/options.php/" data-trp-original-action="options.php">
<?php
settings_fields('my_plugin_options_group');
do_settings_sections('my-plugin-settings');
submit_button();
?>
<input type="hidden" name="trp-form-language" value="ja"/></form>
</div>
<?php
}
public function register_settings() {
register_setting('my_plugin_options_group', 'my_plugin_option_name');
// ... 添加设置字段和章节
}
} カスタムデータベーステーブルの作成
複雑なデータを保存する必要があるプラグインの場合、カスタムデータテーブルを作成する必要がある場合があります。この作業は、プラグインをアクティブにしたときに実行する必要があります。
WordPressはデータベース操作クラスを簡単に提供しています。 wpdbテーブルを作成するコードは通常、<script< タグで囲まれています。 register_activation_hook 登録された関数の中で。
function my_plugin_create_database_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'my_custom_data';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
user_id mediumint(9) NOT NULL,
data text NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'my_plugin_create_database_table'); プラグインのセキュリティと配布
プラグインを公開する前に、そのセキュリティを確保し、配布の基本的な流れを理解する必要があります。
セキュリティベストプラクティスの実施
ユーザーから受け取ったすべてのデータ、それがどこから来たとしても、 $_GET、$_POST データベースでも、検証、クレンジング、エスケープ処理が必要です。常にWordPressが提供する関数を使用してください。例えば、 esc_html()、wp_strip_all_tags()、intval() も prepare() SQLクエリを処理して、XSSやSQLインジェクション攻撃を防止する方法。
実行管理者や重要な操作に関する能力チェックを行う場合は、必ず能力チェック関数を使用してください。例えば、 current_user_can('manage_options') または check_ajax_referer()。
プラグインを公式カタログに提出する準備をします
もしあなたがプラグインを世界中のユーザーに無料で配布したい場合は、WordPress.orgのプラグインカタログにそれを提出することができます。これには、SVNを使用してバージョン管理を行い、コードの品質を確保し、翻訳ファイルを提供するなど、いくつもの基準に厳密に従う必要があります。優れたプラグインは readme.txt このファイルは必要であり、プラグインの詳細ページに情報を表示するための特定の形式に従っています。
概要
WordPressのプラグイン開発は、コアフックシステムの理解から始めて、機能の構築、管理ページの処理、データの取り扱いに至るまで、安全性と配布に焦点を当てて学びます。初心者の方は、まずシンプルなフィルターを備えたプラグインを作成し、オブジェクト指向プログラミングや設定ページの追加、カスタムデータベーストーブの操作に取り組んでみましょう。安全性は開発の最優先事項であり、WordPressが提供する多数のセキュリティ関数を習得することは、信頼性の高いプラグインを作成するための鍵です。開発標準やベストプラクティスに従うことで、プラグインのメンテナンスが容易になり、将来的に公式カタログやマーケットにリリースするための基盤が整います。
FAQ よくある質問
プラグインにはどのくらいのファイルが必要なのでしょうか?
プラグインは最低1つのPHPファイルで構成されます。ファイルには正しいプラグインヘッダー情報が含まれており、そしてファイルが適切な場所に保存されている限りです。 /wp-content/plugins/ カタログまたはそのサブカタログの下に、WordPressはそれを認識して読み込むことができます。
もちろん、機能が複雑にな流につれ、コードを(JavaScript、CSS、個別のPHPクラスファイルなど)複数のファイルに分割する方が、組織化しやすくなります。
WordPressのプラグインのフック(hooks)とフィルター(filters)の違いは何ですか?
アクションフックとフィルターフックは、時には「フック」と総称されますが、それらの用途は異なります。
アクションフックでは、WordPressが実行する特定のライフサイクルポイントにカスタムコードを「挿入」することができます。戻り値は期待されず、メールの送信やログ記録など、単に何かを「実行」するだけです。コア関数は次のとおりです。 add_action() と do_action()。
フィルターフックでは、変数(通常は文字列や配列)の値を「変更」することができます。コールバック関数が変更後の値を返すことを期待します。コア関数は次のようになります。 add_filter() と apply_filters()。
簡単に言えば、アクションは「何かをする」こと、フィルターは「データを変更する」ことです。
プラグインの関数名がテーマや他のプラグインと競合しないようにするにはどうすればいいでしょうか?
最善の方法は、オブジェクト指向プログラミングを利用して、すべての機能をクラスにカプセル化することです。そうすれば、クラス名とメソッド名だけを一意にする必要があります。
手順型プログラミングを利用する場合、すべての関数名、定数名、およびグローバル変数名に、ユニークで識別性の高いプレフィックスを追加する必要があります。通常、プレフィックスにはプラグイン名や略語が使用されます。例えば、プラグインの名前が「Super Tool」である場合、関数名は次のように設定できます。 stool_get_data()、stool_OPTION_KEY はい。
もう1つのより徹底的な方法は、PHPの名前空間を利用する方法です。これにより、コードを最も効果的に分離することができます。
プラグイン開発では、ユーザーの設定やオプションをどのように処理すればいいのでしょうか?
WordPressでは、プラグインのオプションを処理する際にSettings APIの使用を強く推奨しています。このAPIは、オプションの安全な保存を処理してくれます(< wp_options テーブル内のデータのバインド、非CE検証、フィールドのレンダリング、およびフォームの送信は、安全かつ標準化された方法です。
主なステップは次のとおりです。使用する register_setting() オプショングループを登録し、使用するには add_settings_section() と add_settings_field() 設定領域とフィールドを追加し、最後にフロントエンドで使用します。 settings_fields() と do_settings_sections() これで、完全な設定フォームが生成されます。オプションを保存する際には This will generate a complete setup form. When saving the options, use update_option() 関数。
次はどうする?
拡大読書と実践的知識
以下は、この記事のトピックに関連しており、さらに深く読むのに適している。あなたの現在の問題に最も近い記事から優先順位をつけ、徐々に周辺のトピックに広げていく方が良い場合が多い。