WordPressプラグイン開発の基礎と環境準備
コードを書き始める前に、WordPressプラグインの基本概念を理解し、開発環境を整えておくことが非常に重要です。WordPressプラグインは本質的に1つ以上のPHPファイルで構成され、WordPressが提供するフック(Hooks)システムを通じてコア機能を拡張または変更します。プラグインは、ショートコードを1つ追加するだけのシンプルなものから、完全なECシステムを構築するような複雑なものまでさまざまです。
開発環境の中核となるのは、ローカルのサーバー環境を構築することです。XAMPP、MAMP、Local by Flywheel、Docker などのツールを使えば、PHP、MySQL、Apache/Nginx を含むローカルの WordPress サイトをすばやく構築できます。PHP のバージョンは、現在 WordPress が公式に推奨しているバージョンに合わせてください。コードエディターは、Visual Studio Code、PhpStorm、Sublime Text などが優れた選択肢です。これらは構文のハイライト、コード補完、デバッグ対応を提供し、開発効率を大きく高めます。
標準的なWordPressプラグインには、少なくとも1つのメインPHPファイルが必要で、そのファイルの先頭には所定のプラグイン情報コメントを記載する必要があります。これらのコメントは、WordPressがプラグインを認識するための重要な要素です。また、必須ではありませんが、プラグイン専用のディレクトリを作成することを強くおすすめします。そうすることで、リソースファイル、言語パック、その他の依存関係を管理しやすくなります。
推薦図書 WordPressプラグイン開発入門から上級者へ:パーソナライズされたウェブサイトを作成するための完全ガイド。
最初のプラグインファイルを作成しましょう。
それでは、最初のプラグインのコアファイルを作成していきましょう。まず、WordPressのインストールディレクトリに移動する必要があります。/wp-content/plugins/フォルダー。ここで、プラグイン用の新しいフォルダーを作成し、たとえば次のような名前を付けますmy-first-plugin。
このフォルダー内に、メインのPHPファイルを1つ作成します。通常、このメインファイルはプラグインフォルダーと同じ名前にします。たとえば、my-first-plugin.php。このファイルの先頭には標準のプラグインヘッダー情報を含める必要があります。
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于学习的简单WordPress插件示例。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
* Domain Path: /languages
*/ このコメントには、WordPressプラグイン管理画面に必要なすべてのメタ情報が含まれています。ファイルを保存すると、WordPress管理画面の「プラグイン」ページでこのプラグインを確認して有効化できるようになります。現時点ではまだ機能はありませんが、基本的な構成はすでにできています。
プラグインに簡単な機能を追加しましょう。
プラグインを有効化したら、最初の実用的な機能として、サイトのフッターにカスタムテキストを1行表示する機能を追加します。WordPressのwp_footerフック。
プラグインのメインファイル内my-first-plugin.phpのヘッダーコメントの下に、以下のコードを追加してください:
推薦図書 WordPressプラグイン開発をゼロからマスターする:カスタム機能の構築と拡張。
// 在网站页脚输出自定义文本
function mfp_add_footer_text() {
echo '<p style="text-align: center; color: #666;">本サイトをご利用いただきありがとうございます!「私の最初のプラグイン」によって提供されています。</p>';
}
add_action( 'wp_footer', 'mfp_add_footer_text' ); ここでは、mfp_add_footer_textこれは独自に定義した関数で、出力するHTMLコンテンツが含まれています。add_action()アクションフックを追加するための中核関数で、WordPressコアに関数を「フック」しますwp_footerこの実行箇所で。ファイルを保存してサイトのフロント画面を更新すると、ページの下部にこのテキストが表示されます。
ショートコードでコンテンツ編集を拡張
ショートコード(Shortcode)は、WordPressが提供する便利な機能で、記事や固定ページ内にシンプルなタグを使って動的なコンテンツを挿入できます。次に、現在の日付を表示するシンプルなショートコードを作成します。
同じメインファイルに、以下のコードを続けて追加します。
// 创建一个显示当前日期的短代码
function mfp_show_current_date( $atts ) {
// 定义短码的默认属性
$attributes = shortcode_atts(
array(
'format' => 'Y年m月d日',
),
$atts
);
// 根据属性中的格式返回日期
return date( $attributes['format'] );
}
add_shortcode( 'show_date', 'mfp_show_current_date' ); 関数mfp_show_current_dateショートコードのロジックを定義します。shortcode_atts()この関数は、ユーザー定義の属性とデフォルト属性をマージし、コードの堅牢性を確保します。最後に、add_shortcode()関数は[show_date]このタグをカスタム処理関数に関連付けます。
これで、投稿、固定ページ、またはウィジェットのテキストエディターに入力できます[show_date]デフォルト形式の日付を表示するか、または次を使用します[show_date format="F j, Y"]英語形式の日付を表示します。
フックとフィルターを深く理解する
WordPressプラグイン開発の核となる哲学は「フック」(Hooks)です。フックは2種類に分かれます。アクション(Action)とフィルター(Filter)です。これまで使用してきたadd_action()アクションフックを追加するだけです。
推薦図書 ゼロから始める:はじめてのWordPressプラグイン作成。
アクションフックは特定のタイミングでコードを実行し、戻り値は必要ありません。通常は、フッターにテキストを追加するなど、内容の出力や特定の処理の実行に使われます。フィルターフックはデータを変更するために使われます。値を受け取り、関数で処理した後、変更した値を必ず返す必要があります。
フィルターで記事タイトルを変更
すべての記事タイトルに自動で接頭辞を追加するフィルターを作成しましょう。プラグインのメインファイルに次を追加します。
// 使用过滤器为文章标题添加前缀
function mfp_add_title_prefix( $title, $id = null ) {
// 确保只在主循环且是文章页面的标题上生效
if ( in_the_loop() && is_single() && get_post_type( $id ) === 'post' ) {
$title = '【推荐阅读】' . $title;
}
return $title;
}
add_filter( 'the_title', 'mfp_add_title_prefix', 10, 2 ); ここでは、the_titleフィルターフックです。add_filter()3つ目の引数「10」は優先度(数字が小さいほど先に実行)で、4つ目の引数「2」は、私たちの処理関数が2つの引数(元のを受け取ることを示します。$titleと投稿ID)。この関数は条件を確認し、個別投稿ページでメインループ内にある場合にのみ、タイトルに接頭辞を追加します。
プラグインのセキュリティとベストプラクティス
プラグインを開発する際は、セキュリティを最優先に考える必要があります。ユーザー入力は決して信用せず、必ず検証・サニタイズ・エスケープを行ってください。
データ検証とエスケープ処理
プラグインがフォームやURLからのデータを処理する必要がある場合は、WordPressが提供する安全な関数を必ず使用してください。たとえば、使用します。sanitize_text_field()テキスト入力をクリアするには、 օգտագործելesc_html()またはesc_attr()HTMLや属性に出力する際はエスケープし、クロスサイトスクリプティング(XSS)攻撃を防ぎます。
シンプルな設定ページを作成
完全なプラグインには、通常、管理画面の設定ページが必要です。ここでは、シンプルなオプションページを作成し、設定項目を安全に保存する方法を紹介します。
// 在后台管理菜单中添加一个选项页面
function mfp_add_admin_menu() {
add_options_page(
'我的第一个插件设置', // 页面标题
'我的插件设置', // 菜单标题
'manage_options', // 权限要求
'my-first-plugin', // 菜单slug
'mfp_options_page_html' // 用于显示页面内容的回调函数
);
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );
// 注册一个设置项
function mfp_settings_init() {
register_setting( 'mfpPlugin', 'mfp_settings' ); // 设置组,选项名
add_settings_section(
'mfp_plugin_section', // 区块ID
'基础设置', // 区块标题
null, // 区块介绍的回调函数(此处为null)
'my-first-plugin' // 所属页面slug
);
add_settings_field(
'custom_text', // 字段ID
'自定义显示文本', // 字段标签
'mfp_custom_text_field_html', // 用于输出字段HTML的回调函数
'my-first-plugin', // 页面slug
'mfp_plugin_section' // 所属区块ID
);
}
add_action( 'admin_init', 'mfp_settings_init' );
// 渲染设置字段的HTML
function mfp_custom_text_field_html() {
$options = get_option( 'mfp_settings' );
$value = isset( $options['custom_text'] ) ? esc_attr( $options['custom_text'] ) : '';
?>
<input type='text' name='mfp_settings[custom_text]' value='<?php echo $value; ?>'>
<p class="description">ここに入力したテキストはフッターに表示されます。</p>
<?php
}
// 渲染整个选项页面的HTML
function mfp_options_page_html() {
// 检查用户权限
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
?>
<div class="wrap">
<h1></h1>
<form action="/ja/options.php/" method="post" data-trp-original-action="options.php">
<?php
settings_fields( 'mfpPlugin' ); // 输出安全字段
do_settings_sections( 'my-first-plugin' ); // 输出设置区块和字段
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="ja"/></form>
</div>
あなたのアカウントは有効です。あなたはログインしています。 このコードは、「設定」メニュー内にあるサブページを作成し、カスタムテキストを保存するためのものです。なお、ユーザー権限の確認に注意してください(current_user_can)と出力データのエスケープ(esc_html, esc_attr)これらはすべてセキュリティ対策の一部です。その後、先ほどのフッター出力用の関数を次のように変更できます。get_option( 'mfp_settings' )からこの値を読み取って動的に表示します。
概要
このチュートリアルを通して、ゼロから機能がそろったWordPressプラグインを構築する一連の流れを完了しました。プラグインの基本的なファイル構成の作成方法や、アクションフックの活用方法を学びました。add_actionフッターにコンテンツを追加するにはadd_shortcodeカスタムショートコードを作成し、フィルターフックを使用するadd_filter記事データを変更します。さらに重要なのは、プラグインのセキュリティに関する中核的な概念に触れ、プラグインの設定を管理するための安全な管理画面の作成方法を実践したことです。
プラグイン開発は、継続的に学びながら実践していくプロセスです。次のステップとして、プラグインに国際化対応を追加してみましょう(__()と_e()関数)を使ったり、JavaScriptやCSSのリソースを読み込んだり、オブジェクト指向プログラミング(OOP)でコード構造を再設計して、保守や拡張をしやすくしたりできます。スキル向上の最善の方法は、WordPress公式のプラグインハンドブックとコアコードを読むことを忘れないでください。
FAQ よくある質問
私のWordPressプラグインをどのようにデバッグすればいいのでしょうか?
WordPressのデバッグモードを有効にすることが最初の一歩です。サイトのwp-config.phpファイルの中で、WP_DEBUG定数は次のように設定されています。trueこれにより、PHPのエラー、警告、および通知がページ上に直接表示されます。より複雑なデバッグには、別のツールや方法を使用することができます。error_log()この関数は情報をサーバーのエラーログに書き込んだり、Query Monitorのような専用デバッグプラグインを使って、データベースクエリ、フックの実行状況、パフォーマンスデータを確認したりできます。
私のプラグインは、どのようにして異なるWordPressバージョンと互換性を持たせることができるのでしょうか?
プラグインのコードでは、WordPressコアの関数、クラス、定数が存在するかどうかを条件分岐で確認してから使用してください。使用できますfunction_exists()、class_exists()またはdefined()判断を行います。同時に、プラグインのreadme.txtファイル内で、あなたのプラグインがサポートする最低 WordPress バージョンを明確に宣言します(次を通じてRequires at least項目)を表示すると、ユーザーが互換性を把握しやすくなります。
プラグインの開発にオブジェクト指向プログラミングを使用しなければならないのでしょうか?
必須ではありません。純粋な手続き型プログラミング(このチュートリアルの例のような方法)でも、機能が充実したプラグインを開発できます。オブジェクト指向プログラミング(OOP)の主な利点は、コードの整理、カプセル化、再利用性に優れていることで、大規模で複雑なプラグイン開発により適しています。小規模なプラグインであれば、手続き型プログラミングのほうがシンプルで直接的な場合もあります。プロジェクトの規模や複雑さに応じて、適切な方法を選んでください。
WordPress公式プラグインディレクトリにプラグインを公開するにはどうすればよいですか?
まず、WordPress.orgでアカウントを登録し、プラグインを申請する必要があります。プラグインのコードは、セキュリティ、悪意のあるコードを含まないこと、GPL互換ライセンスの使用など、公式のコーディング規約とガイドラインに準拠している必要があります。詳細なものを作成する必要があります。readme.txt文件,并确保插件的主文件头部注释符合规范。提交后,会有插件审查团队的志愿者进行审核,通过后即可发布。
次はどうする?
拡大読書と実践的知識
以下は、この記事のトピックに関連しており、さらに深く読むのに適している。あなたの現在の問題に最も近い記事から優先順位をつけ、徐々に周辺のトピックに広げていく方が良い場合が多い。