準備作業と環境設定
コードの執筆を始める前に、適切な開発環境を整えておく必要があります。これには、ローカルにインストールされたWordPressとコードエディタが含まれます。ローカル環境を使用することで、オンラインのウェブサイトに影響を与えることなく、自由にテストやデバッグを行うことができます。よく使用されるローカル開発環境のソフトウェアには、Local by Flywheel、XAMPP、MAMPなどがあります。
プラグインにはユニークな名前を付ける必要があります。その名前は、プラグインのメインディレクトリ名およびメインファイル名として使用されます。例えば、プラグインの名前が「Hello World」であれば、メインのプラグインファイルは「HelloWorld.js」という名前にすることができます。 hello-world.phpプラグインの名前と説明文がWordPressのプラグインディレクトリ内で他のプラグインと重複しないようにしてください。これにより、他のプラグインとの衝突を効果的に防ぐことができます。
さらに、WordPressの公式開発マニュアルやコードリファレンスに精通していることが非常に重要です。アクションフック(Action Hooks)、フィルターフック(Filter Hooks)、ショートコード(Shortcodes)、設定API(Settings API)といったWordPressのコアコンセプトを理解することで、開発においてしっかりとした基盤を築くことができます。
推薦図書 WordPressプラグイン開発の完全ガイド: ゼロからプロのPHPプラグインを作成する方法。
最初のプラグインファイルを作成します。
プラグインの核心は、1つまたは複数のPHPファイルです。最もシンプルな場合、プラグインは1つのPHPファイルのみで構成されています。有効なプラグインを作成するためには、メインのプラグインファイルの冒頭に標準的なプラグイン情報のコメントを追加する必要があります。このコメントブロックには、プラグインの名前、説明、バージョン、作者など、WordPressに必要なすべてのメタ情報が記載されます。
プラグインのヘッダー情報を作成する
WordPressは、ファイルの冒頭にある特定の形式のコメントを読み取ることで、プラグインの情報を認識し表示します。以下は、最も基本的なプラグインヘッダーの例です:
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于学习和演示的简单 WordPress 插件。
* Version: 1.0.0
* Requires at least: 5.2
* Requires PHP: 7.2
* Author: 你的名字
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
* Domain Path: /languages
*/ このコードを新しいPHPファイルに保存してください。例えば、`new_file.php`という名前にしてください。 my-first-plugin.phpその後、このファイルを自分のローカルのWordPressインストールディレクトリに置いてください。 wp-content/plugins フォルダ内にあります。この時点で、WordPressの管理画面にある「プラグイン」ページにアクセスすると、「私の最初のプラグイン」という名前の新しいプラグインがリストに表示され、有効にすることができます。ただし、現時点ではこのプラグインにはまだ何の機能もありません。
プラグインに基本機能を追加する
プラグインを有効にすると、記事の内容の最後に自動的にカスタムテキストを追加するというシンプルな機能を追加できるようになります。これにはWordPressのフィルターフックを使用します。 the_content。
以下のコードを、先ほどのプラグインのヘッダー情報の下に追加してください:
推薦図書 ゼロから始める:WordPressプラグイン開発の全てのプロセスを詳細に説明。
/**
* 在文章内容末尾添加自定义文本
*
* @param string $content 当前文章内容。
* @return string 修改后的文章内容。
*/
function mfp_add_footer_text( $content ) {
// 仅针对主循环中的单个文章页面
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_text = '<p><em>この記事をお読みいただき、ありがとうございます。これは「私の最初のプラグイン」によって提供されています。</em></p>';
$content .= $custom_text;
}
return $content;
}
// 将自定义函数挂载到 `the_content` 过滤器上
add_filter( 'the_content', 'mfp_add_footer_text' ); このコードは、``という名前のものを定義しています。 mfp_add_footer_text その関数は、記事の内容を受け取ります。 $content パラメータとして。関数の内部ではまず条件タグを使用します。is_single(), in_the_loop(), is_main_query()これにより、単一の記事ページのメインループ内でのみ内容を変更できるようになり、ホームページやアーカイブページなど他のページに影響が及ばないようになります。その後、カスタムのHTMLテキストを生成し、元のコンテンツの後に追加します。最後に、 add_filter この関数は、カスタム関数をWordPressに「マウント」します。 the_content フィルターの上にあります。
ファイルを保存した後、フロントエンドの記事ページを更新すると、記事本文の最後に追加したテキストが表示されます。
開発の高度な機能:管理メニューとオプションページの作成
機能が充実したプラグインでは、通常、管理者とのやり取りが必要となります。これは、バックエンドに設定ページを追加することで実現されます。WordPress では、管理メニューやオプションページを作成するための豊富な API が提供されています。
バックエンドにプラグインメニューアイテムを追加する
プラグイン用に独立した管理メニューページを作成し、いくつかのオプションを設定するために使用します。 add_action フックと… admin_menu アクション。
あなたのプラグインのメインファイルに、以下のコードを続けて追加してください:
/**
* 在 WordPress 后台管理菜单中添加一个新的顶级菜单项
*/
function mfp_register_admin_menu() {
add_menu_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限
'my-first-plugin', // 菜单 slug
'mfp_render_settings_page', // 渲染页面的回调函数
'dashicons-admin-plugins', // 图标(可选)
80 // 菜单位置
);
}
add_action( 'admin_menu', 'mfp_register_admin_menu' ); add_menu_page この関数は、新しいトップレベルのメニューを登録するために使用されます。manage_options これは権限識別子であり、「管理オプション」の権限を持つユーザー(通常は管理者)のみがこのメニューを表示できることを意味します。mfp_render_settings_page これは、次に定義する予定の関数名で、設定ページのHTMLコンテンツを出力するために使用されます。
推薦図書 WordPressプラグイン開発の究極ガイド:ゼロから最初のカスタムプラグインを作成する。
构建设置页面的内容
では、先ほど述べたコールバック関数を定義する必要があります。 mfp_render_settings_page 簡単な設定ページをレンダリングするために来ました。
/**
* 渲染插件设置页面的内容
*/
function mfp_render_settings_page() {
?>
<div class="wrap">
<h1></h1>
<form action="/ja/options.php/" method="post" data-trp-original-action="options.php">
<?php
// 输出设置字段、安全 nonce 字段等
settings_fields( 'mfp_settings_group' );
do_settings_sections( 'my-first-plugin' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="ja"/></form>
</div>
あなたのアカウントは有効です。あなたはログインしています。 この関数は、WordPressの管理ページの基本構造を出力します。その構造にはタイトルとフォームが含まれています。この関数では、WordPressの設定APIを利用した2つのコア関数が使用されています。settings_fields と do_settings_sectionsそれを動作させるためには、設定、セクション、フィールドの登録も必要です。
設定APIを使用して登録オプションを登録します。
WordPressの設定APIは、フォームオプションの登録、保存、検証を処理するための安全で標準化された方法を提供しています。以下のコードを追加して、シンプルなテキストフィールドを登録しましょう。
/**
* 初始化插件的设置
*/
function mfp_settings_init() {
// 注册一个新的设置项 `mfp_options` 到数据库
register_setting( 'mfp_settings_group', 'mfp_options' );
// 在页面内添加一个新的节
add_settings_section(
'mfp_section_basic',
'基础设置',
'mfp_section_basic_callback',
'my-first-plugin'
);
// 向节中添加一个字段
add_settings_field(
'mfp_field_custom_text',
'自定义页脚文本',
'mfp_field_custom_text_callback',
'my-first-plugin',
'mfp_section_basic',
array( 'label_for' => 'mfp_field_custom_text' )
);
}
add_action( 'admin_init', 'mfp_settings_init' );
/**
* 节描述的回调函数(可以为空)
*/
function mfp_section_basic_callback() {
echo '<p>ここでプラグインの基本設定を行います。</p>';
}
/**
* 字段 `mfp_field_custom_text` 的回调函数,用于输出 HTML 输入框
*/
function mfp_field_custom_text_callback() {
// 从数据库获取现有值
$options = get_option( 'mfp_options' );
$value = isset( $options['custom_text'] ) ? $options['custom_text'] : '';
?>
<input type="text"
id="mfp_field_custom_text"
name="mfp_options[custom_text]"
value="<?php echo esc_attr( $value ); ?>"
class="regular-text" />
<p class="description">このテキストは記事の最後に表示されます。</p>
あなたのアカウントは有効です。あなたはログインしています。 さて、今回は以前に作成したものを修正する必要があります。 mfp_add_footer_text その関数に、ハードコードされたテキストの代わりに、私たちが新しく作成したオプション値を使用させてください。
function mfp_add_footer_text( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$options = get_option( 'mfp_options' );
$custom_text = isset( $options['custom_text'] ) ? $options['custom_text'] : '';
if ( ! empty( $custom_text ) ) {
$content .= '<p><em>'`. esc_html($custom_text)`.'</em></p>';
}
}
return $content;
} これで、あなたのプラグインには完全なバックエンド設定ページができ上がりました。管理者は「マイプラグイン」メニューから設定ページにアクセスし、カスタムのフッターテキストを入力して保存することができます。このテキストは、ウェブサイトのフロントエンドにある記事の末尾に動的に表示されます。
プラグインの最適化とセキュリティ対策
プラグインを開発する際には、ベストプラクティスに従うことがセキュリティ、パフォーマンス、メンテナビリティの観点から非常に重要です。ここではいくつかの核心的な原則を紹介します。
コードのセキュリティを確保する
フロントエンドや管理インターフェースから受け取ったすべてのデータは、ブラウザに出力されたりデータベースに保存されたりする前に、必ず検証、クリーニング、エスケープ処理を行う必要があります。これにより、クロスサイトスクリプティ(XSS)やSQLインジェクションなどのセキュリティ上の脆弱性を防ぐことができます。
- エスケープ出力:関数などを使用して
esc_html(),esc_attr(),esc_url(),wp_kses_post()ダイナミックコンテンツをエスケープするには… - 入力内容のクリーニング:`use functions such as`
sanitize_text_field(),sanitize_email(),intval()ユーザーが送信したフォームデータを処理します。 - 権限チェック:管理者用のコールバック関数内で使用します。
current_user_can()二次権限確認を行ってください。データの変更に関わるAJAXやREST APIのエンドポイントでは、必ずnonce(デジタルトークン)を使用して認証を行う必要があります。
ワードプレスのコーディング標準に従ってください。
WordPressのコーディングスタンダードを採用することで、コードのスタイルがコアコードと一致し、可読性が向上し、他の開発者との協力が容易になります。これには、正しいインデントの使用、括弧のスタイル、命名規則(関数や変数には小文字とアンダースコアを使用する)などが含まれます。PHP CodeSnifferをWordPressの標準ルールと組み合わせて使用することで、コードを自動的にチェックすることができます。
国際化対応の実装
プラグインに初めから国際化対応を追加することで、世界中のユーザーが簡単に自分の言語に翻訳することができます。これは主に以下のステップで実現されます:
1. プラグインのヘッダー部分にあるコメント内で、正しく設定を行ってください。 Text Domain と Domain Path。
2. すべての翻訳が必要な文字列の周りにWordPressの翻訳機能を使用してください。例えば: (), _e(), esc_html() その他
3. Poeditのようなツールを使用して生成します。 .pot テンプレートファイル:翻訳者が使用するためのものです。 .po と .mo 翻訳ファイル。
例えば、設定ページの説明テキストを国際化するには:
function mfp_section_basic_callback() {
echo '<p>' . esc_html__( '在这里配置插件的基础选项。', 'my-first-plugin' ) . '</p>';
} 概要
この記事では、ゼロから始めて、基本的でありながらも機能的に完全なWordPressプラグインを作成するまでの全過程をご案内します。環境の準備、プラグインファイルの作成、プラグインヘッダー情報の記述、アクションフックやフィルターフックを使用して記事にコンテンツを追加する方法、そしてWordPressの設定APIを利用して複雑な管理インターフェースを構築する方法について説明しました。最後に、プラグイン開発において非常に重要なセキュリティ、コーディングスタンダード、国際化などの最適化手法についても考察しました。
この実践を通じて、WordPressプラグイン開発の核心的なプロセスや基本的なツールをすでにマスターしているはずです。次のステップとしては、カスタムの記事タイプの作成、データベーステーブルのカスタマイズ、jQueryを使用したインタラクティブ性の向上、または自分のプラグインをWordPressの公式プラグインディレクトリに提出するなど、より複雑な機能の開発に挑戦してみてください。継続的な学習とコアコードの読解こそが、開発スキルを向上させる最良の方法であることを忘れないでください。
FAQ よくある質問
WordPressのプラグインをどのようにデバッグするか?
WordPressのデバッグモードを有効にすることが最初のステップです。あなたの… wp-config.php ファイルの中で、 WP_DEBUG 定数は次のように設定されています。 trueこれにより、PHPのエラー、警告、および通知がページ上に直接表示されます。
また、以下の方法も利用できます: error_log() この関数は、カスタムのデバッグ情報をサーバーのエラーログに書き込むか、またはブラウザのデベロッパーツール(コンソールやネットワークタブ)を使用してJavaScriptおよびAJAXリクエストをデバッグします。複雑なロジックの場合は、Xdebugのような専門的なデバッグツールを使用すると効果的です。
私のプラグインはテーマや他のプラグインと競合しますか?
あり得ます。特に、同じフックを処理したり、共通のグローバル変数名やクラス名を使用する場合にはそうです。衝突をできるだけ減らすために、すべての関数、クラス、変数、オプション名に一意の接頭辞を付けるようにしてください。例えば、以下のようにしてください: add_footer_textではなく、類似の方法を使用します。 myplugin_add_footer_text その名称です。
グローバルなコンテンツ(例えばクエリ変数など)を変更する前に、十分なチェックと条件制限を行ってください。公開する前には、できるだけ多くの環境や異なるテーマの組み合わせでプラグインをテストしてください。
高度なプラグインを開発するためには、どのような技術を学ぶ必要がありますか?
PHPのしっかりとした基礎に加えて、以下の内容についても深く理解する必要があります:
– JavaScript:フロントエンドでのインタラクションやWordPressのカスタマイザー開発に使用されます。
– jQuery:WordPressは現代のJavaScriptフレームワークへと移行していますが、jQueryは依然として広く使用されています。
- REST API:用于创建解耦的前端应用或与外部服务交互。
- 数据库知识:了解 WordPress 的数据库结构,以及如何安全地进行自定义查询或创建新表。
- Composer:用于管理 PHP 依赖包。
- 构建工具:如 Webpack,用于管理现代 JavaScript 和 SASS 的编译。
私のプラグインをWordPressの公式ディレクトリにどのように公開するか?
まず、ご使用のプラグインが公式のプラグイン開発ガイドラインおよびセキュリティのベストプラクティスを完全に遵守していることを確認してください。WordPress.orgのアカウントが必要です。そのアカウントを使って、プラグインの圧縮ファイルを提出し、審査を受けてください。審査ではコードの品質、セキュリティ、ライセンス(GPL互換である必要があります)などがチェックされます。
もしあなたのプラグインが審査に合格すれば、それはSVNリポジトリに追加されます。そうすることで、SVNを使ってプラグインを更新やメンテナンスすることができるようになります。公開された後は、ユーザーは自分のWordPressの管理画面で直接、あなたのプラグインを検索し、インストールしたりアップデートしたりできるようになります。
次はどうする?
拡大読書と実践的知識
以下は、この記事のトピックに関連しており、さらに深く読むのに適している。あなたの現在の問題に最も近い記事から優先順位をつけ、徐々に周辺のトピックに広げていく方が良い場合が多い。