WordPressのプラグイン開発をマスターすることは、ウェブサイトの機能を拡張し、個別のニーズに応えるための重要なスキルです。テーマを修正することと比べても、プラグインを使うことでより柔軟でカスタマイズ性の高いウェブサイトを構築することができます。 functions.php ファイルと比較して、プラグインを使用することで機能がテーマから独立し、移行や管理、メンテナンスが容易になります。この記事では、ゼロから始めて、WordPressのコーディング基準に準拠した、構造が整ったプラグインを作成する方法をご紹介します。
準備作業と環境設定
最初のコード行を書く前に、適切な開発環境とWordPressのアーキテクチャについての基本的な理解が必要です。
開発環境の構成
標準的なローカル開発環境は、効率的な開発のための基盤です。XAMPP、MAMP、Local by Flywheelなどのツールをお勧めします。これらのツールを使えば、Apache、MySQL/Nginx、PHP、WordPressをワンクリックでインストールできます。さらに、使用しているテキストエディタやIDE(VS Code、PhpStormなど)がPHPの構文ハイライトやコードヒントをサポートしていることを確認してください。これにより、開発効率が大幅に向上します。
推薦図書 WordPressプラグイン開発を徹底解説:ゼロから始める効率的なカスタマイズ。
WordPressのプラグインアーキテクチャを理解する
WordPressのプラグインとは、本質的には1つまたは複数のPHPファイルで構成されており、それらはWordPressのディレクトリ内に保存されています。 wp-content/plugins/ そのコンポーネントはディレクトリ内に存在します。その核心的な仕組みは「フック」メカニズムです。プラグインは「アクションフック」を通じて特定のタイミングでコードを実行したり、または「フィルターフック」を通じて他の関数が出力するデータを変更したりします。 add_action と add_filter これら2つの関数は、プラグイン開発を始めるための重要なツールです。
自分の最初のプラグインを作成しましょう:「挨拶小工具」
私たちは「Daily Greeting」という名前のシンプルなプラグインを作成します。このプラグインにより、ウェブサイトの管理バックエンドのダッシュボードにカスタマイズされたウェルカムツールが表示されるようになります。
プラグインのメインファイルを作成する
まず、 wp-content/plugins/ カタログの下に新しいフォルダを作成し、名前を付けます。 my-first-greeting-pluginそのフォルダ内に、メインプラグインファイルを作成してください。 my-first-greeting-plugin.php。
すべてのプラグインは、標準的なプラグインヘッダーのコメントで始めなければなりません。これはWordPressがプラグインの情報を認識するための識別子です。メインファイルを開き、以下のコードを入力してください:
<?php
/**
* Plugin Name: 每日问候
* Plugin URI: https://www.yourwebsite.com/my-first-greeting-plugin
* Description: 这是一个示例插件,用于在仪表盘显示个性化问候。
* Version: 1.0.0
* Author: Your Name
* Author URI: https://www.yourwebsite.com
* License: GPL v2 or later
* Text Domain: my-first-greeting
*/ ファイルを保存した後、WordPressの管理画面(バックエンド)にある「プラグイン」ページにアクセスします。そこでは「Daily Greetings」というプラグインがリストに表示されており、有効にすることができます。ただし、現時点ではこのプラグインにはまだ何の機能もありません。
推薦図書 WordPressプラグイン開発の究極ガイド:ゼロから始めて、あなたの最初のプラグインを作成する。
ダッシュボードに小道具(ツール)を追加する
次に、WordPressを使用して… wp_dashboard_setup アクションフックを使用して、カスタムのダッシュボードツールを追加します。メインファイルのヘッダー部分のコメントの下に、以下のコードを追加してください:
// 添加仪表盘小工具
function mfgp_add_dashboard_widget() {
wp_add_dashboard_widget(
'mfgp_dashboard_widget', // 小工具唯一ID
'每日问候', // 小工具标题
'mfgp_dashboard_widget_content' // 显示内容的回调函数
);
}
add_action( 'wp_dashboard_setup', 'mfgp_add_dashboard_widget' );
// 定义小工具内容
function mfgp_dashboard_widget_content() {
$user = wp_get_current_user();
$hour = date('G'); // 获取当前小时(24小时制)
if ( $hour >= 5 && $hour < 12 ) {
$greeting = '早上好';
} elseif ( $hour >`= 12 && $hour` < 18 ) {
$greeting = '下午好';
} else {
$greeting = '晚上好';
}
echo '<p>' . sprintf( esc_html__( '%s,%s!欢迎回来。', 'my-first-greeting' ), $greeting, esc_html( $user->display_name ) ) . '</p>';
echo '<p>' . esc_html__( '这是你的第一个插件创建的问候小工具。', 'my-first-greeting' ) . '</p>';
} このコードは2つのことを行っています。まず、関数を定義しています。 mfgp_add_dashboard_widget用途 wp_add_dashboard_widget 関数を登録するための小さなツールがあります。その後、定義が行われました。 mfgp_dashboard_widget_content この関数は、小道具のコンテンツを生成するためのもので、1日の中の異なる時間帯に応じて異なる挨拶文を表示し、現在ログインしているユーザー名も表示します。注目すべきは、私たちが以下のような処理を行っている点です: esc_html__() と esc_html() 関数が翻訳の準備を行い、出力データをエスケープ処理することは、セキュリティと国際化を確保するための重要な実践です。
プラグインを有効にした後、ダッシュボードページを更新すると、「毎日の挨拶」ツールが表示されます。
プラグイン機能の強化とセキュリティ対策
基本的プラグインはすでに完成していますが、より堅牢でプロフェッショナルなものにするためには、セキュリティ、メンテナビリティ、ユーザー設定に注意を払う必要があります。
プラグイン設定ページを追加します。
ユーザーが挨拶文を自分でカスタマイズできるようにすると、より便利になるでしょう。プラグイン用に簡単な設定ページを用意します。
まず、を使用して admin_menu アクションフックにサブメニューページを追加します:
推薦図書 WordPressプラグイン開発入門ガイド:ゼロから最初のカスタムプラグインを作成する方法。
// 添加设置菜单
function mfgp_add_admin_menu() {
add_options_page(
'每日问候设置', // 页面标题
'每日问候', // 菜单标题
'manage_options', // 所需权限
'my-first-greeting-plugin', // 菜单slug
'mfgp_settings_page_content' // 回调函数
);
}
add_action( 'admin_menu', 'mfgp_add_admin_menu' ); その後、設定ページの内容を作成し、登録設定オプションを設定し、フォームの保存処理を行います。
// 设置页面内容
function mfgp_settings_page_content() {
?>
<div class="wrap">
<h1></h1>
<form action="/ja/options.php/" method="post" data-trp-original-action="options.php">
<?php
settings_fields( 'mfgp_settings_group' ); // 输出安全字段
do_settings_sections( 'my-first-greeting-plugin' ); // 输出设置区块
submit_button(); // 输出提交按钮
?>
<input type="hidden" name="trp-form-language" value="ja"/></form>
</div>
<?php
}
// 初始化设置
function mfgp_settings_init() {
register_setting(
'mfgp_settings_group', // 选项组名
'mfgp_custom_message', // 选项名
array( 'sanitize_callback' => 'sanitize_text_field' ) // 清理回调
);
add_settings_section(
'mfgp_section', // 区块ID
'自定义问候设置', // 区块标题
null, // 区块描述回调(无)
'my-first-greeting-plugin' // 所属页面
);
add_settings_field(
'mfgp_field',
'自定义问候语前缀',
'mfgp_field_callback', // 输出字段HTML的回调
'my-first-greeting-plugin',
'mfgp_section'
);
}
add_action( 'admin_init', 'mfgp_settings_init' );
// 设置字段的回调函数
function mfgp_field_callback() {
$value = get_option( 'mfgp_custom_message', '祝您有愉快的一天,' );
echo '<input type="text" name="mfgp_custom_message" value="' . esc_attr( $value ) . '" class="regular-text" />';
echo '<p class="description">このテキストは挨拶文の前に追加されます。</p>';
} 最後に、ユーザーのカスタム設定を有効にするために、小道具のコンテンツを変更する関数を修正してください。
// 更新小工具内容函数,使用自定义消息
function mfgp_dashboard_widget_content() {
$user = wp_get_current_user();
$hour = date('G');
$custom_msg = get_option( 'mfgp_custom_message', '祝您有愉快的一天,' );
if ( $hour >= 5 && $hour < 12 ) {
$greeting = '早上好';
} elseif ( $hour >`= 12 && $hour` < 18 ) {
$greeting = '下午好';
} else {
$greeting = '晚上好';
}
echo '<p>' . esc_html( $custom_msg ) . sprintf( esc_html__( '%s,%s!', 'my-first-greeting' ), $greeting, esc_html( $user->display_name ) ) . '</p>';
} 現在、WordPressの管理画面の「設定」メニューに「毎日の挨拶」オプションページが追加され、管理者はカスタムの挨拶文の前缀を保存することができます。
セキュリティおよびコーディングの基準に従うこと
開発過程においては、WordPressのセキュリティガイドラインに従う必要があります。ユーザーやデータベースから取得され、出力されるすべてのデータに対して、適切なエスケープ関数を使用する必要があります。 esc_html, esc_attr, esc_url);すべてのユーザー入力を検証し、クリーニングを行います(例えば、以下のような処理を使用して)。 sanitize_text_field;使用する wp_kses_post または wp_kses 安全なHTMLの使用を許可します。また、以下のガイドラインに従うことをお勧めします: WordPress公式のPHPコーディングスタンダードコードの明瞭性と一貫性を確保するためです。
プラグインの国際化と公開準備
あなたのプラグインを世界中のユーザーが利用できるようにするためには、国際化(インターナショナライゼーション)は欠かせないステップです。また、公式ディレクトリに公開するための準備も、いくつかの規範に従う必要があります。
プラグインの国際化を実現する
私たちはコード内でそれを既に使用しています。 esc_html__() パッケージングを行うためのテキストが必要です。国際化を実現するには、プラグインディレクトリ内にファイルを作成する必要があります。 languages フォルダーを作成します。その後、メインファイルのヘッダー部分にあるコメントの後に以下のコードを追加し、テキストフィールドを読み込みます:
// 加载文本域以实现国际化
function mfgp_load_textdomain() {
load_plugin_textdomain( 'my-first-greeting', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'mfgp_load_textdomain' ); その後、Poeditのようなツールを使用して、プラグインのコード内にある翻訳文字列をスキャンし、生成することができます。 .pot テンプレートファイルを用意し、中国語などの異なる言語に対応させます。 zh_CN)作成 .po そしてコンパイル後の .mo ファイルを、ここに入れてください。 languages フォルダー
公式カタログに公開する準備ができました。
もしプラグインをWordPress.orgのプラグインディレクトリに提出する予定であれば、コードの品質を確保し、必要なメタデータファイルを含めることが必要です。例えば、以下のようなファイルを作成するとよいでしょう: readme.txt ファイルの形式は必ず以下の要件を満たさなければなりません。 WordPressの特定の規範プラグインの名前、説明、インストール手順、よくある質問、アップデート履歴などを含めてください。さらに、ユーザーがプラグインを削除した際にデータベース内の設定情報をクリアするためのアンインストール処理(アンインストールフック)も追加することを検討してください。
// 插件卸载时清理选项
function mfgp_uninstall_hook() {
delete_option( 'mfgp_custom_message' );
}
register_uninstall_hook( __FILE__, 'mfgp_uninstall_hook' ); 概要
この「毎日の挨拶」プラグインを作成することで、WordPressプラグイン開発の核心的なプロセスをすべて経験しました。基本的なファイル構造の作成から、アクションフックを利用して機能を追加すること、管理インターフェースの作成、セキュリティ基準の確保、そして国際化の準備までです。重要なのは、WordPressのフックシステムを理解し、熟知して活用すること、そして常にセキュリティとコードの品質を最優先にすることです。このシンプルな例は、プラグイン開発の旅の出発点に過ぎません。この基盤の上で、より複雑なショートコードやカスタム記事タイプ、REST APIエンドポイントなどの機能を探求し、機能豊富なプロフェッショナルなプラグインを開発することができます。
FAQ よくある質問
プラグインはどのディレクトリに配置する必要がありますか?
WordPressのプラグインは、ウェブサイトの特定の場所に配置する必要があります。 wp-content/plugins/ ディレクトリ内にあります。各プラグインは独立したPHPファイルとして存在することもできますが、より一般的なのはプラグインの名前を付けたフォルダ内にメインファイルやその他のリソースが収められている形です。
なぜ私のプラグインがバックエンドのリストに表示されないのでしょうか?
メインプラグインファイルのヘッダーにあるコメント(「Plugin Name」、「Description」など)の書式が正しく、完全であるかを確認してください。ファイルが正しいディレクトリにあること、そしてWordPressがそのファイルを読み取る権限を持っていることも確認してください。さらに、PHPコードの冒頭に余分なスペースや文字がないかも確認してください。
プラグイン内のPHPエラーをどのようにデバッグするか?
はい。 wp-config.php ファイルの中で、 WP_DEBUG 定数は次のように設定されています。 trueこれにより、WordPress はページ上に PHP のエラー、警告、および通知を表示することができるようになります。ただし、この機能は開発環境でのみ有効にしてください。本番環境に導入する前には必ずオフにしてください。
プラグインとテーマの `functions.php` ファイルにはどのような違いがありますか?
テーマに関しては、 functions.php 追加された機能は特定のテーマに紐付いており、テーマを切り替えるとこれらの機能が正常に動作しなくなる場合があります。一方、プラグインが提供する機能はテーマとは独立しており、どのテーマを使用してもプラグインが有効になっていれば常に利用できます。汎用性の高い機能については、プラグインを開発する方がより適切な選択肢です。
他の開発者に私のプラグインを拡張してもらうにはどうすればよいですか?
カスタムの「アクションフック」や「フィルターフック」を提供することで、他の開発者があなたのプラグインを拡張できるようになります。 do_action() アクションフックを作成し、コードを注入する必要がある場所で「アクションを実行」します。 apply_filters() フィルターフックを作成することで、プラグイン内の特定のデータ値を変更できるようにします。これはWordPressエコシステムにおけるプラグイン間の協力の一般的な方法です。
次はどうする?
拡大読書と実践的知識
以下は、この記事のトピックに関連しており、さらに深く読むのに適している。あなたの現在の問題に最も近い記事から優先順位をつけ、徐々に周辺のトピックに広げていく方が良い場合が多い。