ワードプレスのプラグイン開発:カスタム機能プラグインをゼロから作成する

3分で読了
2026-03-14
2026-06-03
2,171
以下のリンクからお買い物をしていただくと、コミッションを差し上げます。.

なぜ自分でWordPressプラグインを開発することを選ぶのでしょうか?

WordPressエコシステムにおいて、プラグインはウェブサイトの機能を拡張するための核心です。公式のディレクトリやサードパーティのマーケットには多数のプラグインが揃っていますが、自分でプラグインを開発することには独自の利点があります。既存のプラグインがビジネスロジックに完全には対応していない場合、パフォーマンスのボトルネックがある場合、または不要な機能が過剰に含まれている場合には、カスタム開発が最善の選択肢となります。カスタム開発により、必要なコードのみを含む軽量で専門性の高いソリューションを構築することができ、ウェブサイトのパフォーマンスを向上させることができます。

さらに重要なのは、カスタムプラグインによって完全な制御権が得られることです。プロジェクトの要件に応じて機能を繰り返し改良したり、内部APIやサードパーティサービスとシームレスに統合したりでき、コードが自分のセキュリティ基準やコーディングルールに準拠していることを確認できます。開発者にとっては、WordPressのコアアーキテクチャ(その仕組みを含む)を深く理解するための優れた手段でもあります。Hook(フック)システムやデータベースの操作に関する優れた実践例です。プラグイン開発のスキルを身につけることで、どんなWordPressプロジェクトにも真にカスタマイズされたソリューションを提供できるようになります。

自分の最初のプラグインの基本構造を構築しましょう。

WordPressプラグインの作成は、シンプルなディレクトリとメインファイルから始まります。プラグインの基本構造は、その後に追加されるすべての機能開発のための土台となります。

推薦図書 WordPressプラグイン開発をマスターしよう:ゼロから効率的なカスタム機能モジュールを構築する

プラグインのメインファイルを作成する

すべてのWordPressプラグインには、メインのPHPファイルが必要であり、その中には特定のプラグインヘッダーのコメントが含まれていなければなりません。これがWordPressがプラグインを認識するための鍵となります。あなたは…wp-content/pluginsカタログの下に新しいフォルダを作成してください。例えば、my-first-pluginその後、そのフォルダ内にメインファイルを作成してください。my-first-plugin.php

UltaHostのWordPressホスティングサービス
30日間の返金保証、無制限の帯域幅とデータベースサービス、無料のDDoS防御機能が付きます。3年契約をすると、501TPから4Tまでのプランで割引が適用されます。

ファイルの冒頭にあるコメントには、プラグインの名前、説明、バージョン、作者などの情報を含める必要があります。以下が最も基本的な例です:

<?php
/**
 * Plugin Name:       我的第一个自定义插件
 * Plugin URI:        https://www.yourwebsite.com/
 * Description:       这是一个用于学习WordPress插件开发的自定义插件。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

ファイルを保存した後、WordPressの管理画面(バックエンド)の「プラグイン」ページでそのプラグインを確認し、有効にすることができます。現時点ではまだ何の機能もありませんが、プラグインの基本構造はすでに整っています。

プラグインのディレクトリとファイルの構成

機能が増えるにつれて、適切なファイル構造が非常に重要になります。異なる種類のコードを別々のサブディレクトリに分けることをお勧めします。これにより、長期的なメンテナンスが容易になります。典型的なシンプルなプラグインディレクトリの例は以下の通りです:

my-first-plugin/
├── my-first-plugin.php      // 主文件,包含插件头和管理核心钩子
├── includes/                // 存放核心功能类或函数文件
│   └── class-core-functions.php
├── admin/                   // 后台相关的CSS、JS和PHP文件
│   ├── css/
│   ├── js/
│   └── admin-settings.php
├── public/                  // 前端相关的CSS、JS和PHP文件
│   ├── css/
│   ├── js/
│   └── class-public-handler.php
└── languages/               // 国际化翻译文件(.po/.mo)

メインファイル内でmy-first-plugin.phpその中で、あなたは使用することができます。require_onceまたはinclude_onceこれらのモジュール化されたファイルは必要に応じて導入されます。このような構造により、バックエンドのロジック、フロントエンドの表示、およびコア機能が明確に分離されます。

推薦図書 わかりやすく解説:ゼロからWordPressプラグイン開発をマスターするための完全ガイド

フックとフィルターを利用して機能を実現する

WordPressのプラグインアーキテクチャは、イベント駆動型のフックシステムに基づいて構築されており、主に以下の要素で構成されています:Action(アクション)そしてFilter(フィルター)これらを理解し、適切に活用することは、プラグイン開発の核心です。

アクションフックを通じてタスクを実行する

アクションフックを使用すると、WordPressの特定のライフサイクルのタイミング(例えば初期化時、フロントエンドヘッダーの読み込み時、記事の保存時など)に自分のコードを挿入することができます。add_action()この関数は、カスタム関数をこれらのフックに「マウント」します。

例えば、ウェブサイトの管理バックエンドの上部に管理者向けの通知を表示したい場合は、以下の方法を利用できます:admin_noticesこのアクションフックについてです。まず、メインプラグインファイル内で関数を定義してください。my_custom_admin_noticeその後、それをフックにマウントします。

hosting.com 共有ホスティング
AMD EPYC CPU、NVMe SSDストレージ、LiteSpeedによる高いパフォーマンス、24時間365日の専門家による社内サポート、SSL、ブルートフォース、マルウェア、DDoS保護などの高度なセキュリティ対策、最大73%のコスト削減
// 定义显示通知的函数
function my_custom_admin_notice() {
    echo '<div class="notice notice-success is-dismissible"><p>私のカスタムプラグインが正常に有効になりました!</p></div>';
}
// 将函数挂载到 admin_notices 动作钩子
add_action( 'admin_notices', 'my_custom_admin_notice' );

WordPressが実行中に…admin_noticesこのタイミングで、あなたがマウントした関数が自動的に呼び出され、通知が出力されます。アクションフックは「何かを行う」ために使用され、返り値を要求しません。

フィルターフックを使用してデータを変更する

アクションフックとは異なり、フィルターフックは「何かを変更する」ために使用されます。これにより、WordPressのコア、他のプラグイン、またはテーマから渡されたデータを変更することができます。add_filter()この関数は、フィルターを適用するためのものです。

典型的例えとしては、記事の内容の最後の文字を変更するというケースがあります。WordPressではこれを実現するための機能が用意されています。the_contentフィルターを使用すると、表示される記事の内容を変更することができます。

推薦図書 WordPressプラグイン開発の完全ガイド:初心者から上級者までのステップアップ

// 定义修改内容的函数
function append_custom_text_to_content( $content ) {
    if ( is_single() ) { // 仅对单篇文章页面生效
        $custom_text = '<p><em>お読みいただきありがとうございます!この記事は私のプラグインのサポートによって作成されました。</em></p>';
        $content .= $custom_text;
    }
    return $content; // 必须返回修改后的内容
}
// 将函数挂载到 the_content 过滤器钩子
add_filter( 'the_content', 'append_custom_text_to_content' );

フィルタ関数は、1つの入力値を受け取ります(ここでは…)。$content処理を経た後には、必ず値を返す必要があります。この方法を使えば、WordPressが処理するほぼすべてのデータを柔軟に変更することができます。

プラグイン用の管理設定ページを作成する

ユーザーが設定を行う必要があるプラグインについては、使いやすいバックエンド設定ページを用意することが不可欠です。WordPressでは、メニューページやオプションページの作成を簡素化するための一連のAPIが提供されています。

インターサーバー共有ホスティング
共有ホスティング月$2.50米ドル, 最初の月$0.1米ドルプロモーションコードtryinterserver, 461クラウドアプリケーションスクリプト, 1クリックインストール.

トップメニューやサブメニューを追加する

あなたはそれを使用することができます。add_menu_page()この関数は、プラグイン用に独立したバックグラウンドトップメニューを作成するか、またはそれを使用するためのものです。add_submenu_page()既存のメニュー(例えば「設定」)のサブアイテムとしてそれを追加します。通常、この操作には何らかの設定や処理が必要になります。admin_menuフックでのアクション。

以下のコードは、シンプルなトップレベルの設定ページを追加する方法を示しています:

function my_plugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',        // 所需权限(管理员)
        'my-plugin-settings',    // 菜单slug(URL标识)
        'my_plugin_settings_page', // 用于输出页面内容的回调函数
        'dashicons-admin-generic', // 图标(Dashicons)
        80                       // 菜单位置
    );
}
add_action( 'admin_menu', 'my_plugin_add_admin_menu' );

次に、コールバック関数を定義する必要があります。my_plugin_settings_pageこれはページのHTMLコンテンツをレンダリングするためのものです。

構築設定フォームおよび保存オプション

ワードプレスのSettings API安全な登録、認証、および設定の保存のための標準化された方法が提供されています。これにより、データを直接処理することを避けることができます。$_POSTデータの安全性が向上しました。

まず、を使用してregister_setting()設定グループを登録して使用します。add_settings_section()地域を追加し、それを使用してください。add_settings_field()具体的なフィールドを追加してください。その後、以前に定義したコールバック関数の中でそれらを使用してください。settings_fields()do_settings_sections()この関数はフォームの内容を出力します。

function my_plugin_settings_page() {
    // 检查用户权限
    if ( !current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <div class="wrap">
        <h1></h1>
        <form action="/ja/options.php/" method="post" 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>
    あなたのアカウントは有効です。あなたはログインしています。

とおすSettings APIテキストボックス、ドロップダウンメニュー、チェックボックスなど、さまざまなフィールドを含む設定ページを簡単に作成できます。すべてのデータは安全に保存されます。wp_options表内では、以下の方法で操作が可能です:get_option()関数はフロントエンドでもバックエンドでも呼び出すことができます。

プラグインの安全性とメンテナビリティを保証する

堅牢なプラグインを作成するには、機能の実装だけでなく、セキュリティ、パフォーマンス、そして将来的なメンテナビリティも考慮する必要があります。ベストプラクティスに従うことが非常に重要です。

データ検証、エスケープ処理、および非セキュアな処理

これはプラグインのセキュリティにおける最初の防衛線です。ユーザーや外部からのすべてのデータ(例:$_GET$_POST$_COOKIEデータベースに格納される前や、ページ上に表示される前には、すべて厳格な検証とエスケープ処理を行う必要があります。

入力データをデータベースに保存する前に、検証関数を使用してデータの正確性や有効性を確認することが重要です。これにより、エラーや不正なデータの侵入を防ぎ、システムの信頼性と安定性を高めることができます。sanitize_text_field()absint()データのクリーニングを行います。データベースから取得したデータをブラウザに表示する前には、エスケープ関数などを使用してください。esc_html()esc_attr()esc_url()これはXSS攻撃を防ぐためのものです。

// フォーム送信の処理(例:通常はoptions.php内でSettings APIによって処理されます)
$$user_input = isset($$_POST['my_field']) ? sanitize_text_field($$_POST['my_field']) : '';

// データベースから取得したデータをフロントエンドに表示する
echo '<div class="info">'`. esc_html( get_option( 'my_saved_option' ) ) . `'</div>';

さらに、データベースクエリを実行する際には、必ず以下の方法を使用しなければなりません:$wpdbクラスが提供するメソッド(例えば)$wpdb->prepare()SQLインジェクションを防ぐためです。

国際化(Internationalization: I18n)とローカライゼーション(Localization: L10n)のサポートを実現する

あなたのプラグインを世界中のユーザーが利用できるようにするためには、国際化(i18n)のサポートが不可欠です。つまり、ユーザーに表示されるすべてのテキストは、WordPressの翻訳機能を使用して処理される必要があります。

利用する__()この関数は文字列を翻訳し、その結果を返します。_e()関数を使って文字列を翻訳し、その結果を直接出力します。これはプラグインのヘッダー内で定義されています。Text Domain(テキストフィールド)ここで使用されているテキストフィールドと一致していなければなりません。

// 错误示例:直接输出英文字符串
echo “Hello World”;

// 正确示例:可翻译的字符串
echo esc_html__( ‘Hello World’, ‘my-first-plugin’ );
// 或者
_e( ‘Hello World’, ‘my-first-plugin’ );

その後、Poeditのようなツールを使用して、すべてのマークアップされた文字列を抽出し、生成することができます。.potこのファイルは、翻訳者が異なる言語のテキストを作成するために使用されます。.po.moファイルです。それをプラグインの中に置いてください。languagesフォルダ内にあるWordPressは、サイトの言語設定に応じて自動的に対応する翻訳データを読み込みます。

概要

WordPressプラグインの開発とは、アイデアを実際の機能に変えるための体系的なプロセスです。標準的なヘッダーコメントを含むメインファイルを作成することから始め、あなたはすでに第一歩を踏み出しました。アクション(Action)とフィルターフック(Filter Hook)を深く理解し、活用することがプラグインに動的な機能を持たせるための鍵となります。これにより、WordPressが動作するあらゆる段階でシームレスに介入することができます。Settings APIを通じて構築された管理インターフェースにより、ユーザーフレンドリーな設定環境が提供され、プラグインの専門性が向上します。

開発プロセス全体を通じて、セキュリティの原則を常に徹底する必要があります。これには、厳格なデータ検証、エスケープ処理、そして標準化されたデータベース操作が含まれます。また、国際化(インターナショナライゼーション)のサポートにより、プラグインをより広範なグローバルユーザー層に提供することが可能になります。明確なファイル構造(バックエンド、フロントエンド、コアコードの分離など)とコーディング規格に従うことで、プラグインの長期的なメンテナンスや機能拡張のための堅固な基盤が築かれます。優れたプラグインとは、単に動作するコードではなく、安全で効率的、かつメンテナンスが容易なソリューションであるということを忘れてはなりません。

FAQ よくある質問

WordPressプラグインを開発するには、以下のようなコア技術を習得する必要があります:

PHPの基礎に精通していることが求められます。なぜなら、このプラグインは主にPHPで書かれているからです。また、HTML、CSS、JavaScriptについても理解している必要があります。これらはフロントエンドおよびバックエンドのインターフェースやインタラクションの構築に使用されます。最も重要なのは、WordPress特有の知識体系をマスターすることです。これには、WordPressのフックシステム(ActionsおよびFilters)やデータベース操作の仕組みなどが含まれます。$wpdbSettings APIやREST APIなどについても理解しておくと役立ちます。また、WordPressのテーマやプラグインにおける実行優先順位についてもある程度の知識があるとよいでしょう。

如何调试自己开发的WordPress插件

まず、確認してください。wp-config.phpファイルを開くWP_DEBUGこのモードでは、PHPのエラー、警告、および通知がページ上に直接表示されます。使用方法は以下の通りです。error_log()関数やプロセスの動向を追跡するために、情報をカスタムのログファイルに書き込むことができます。複雑なAjaxやREST APIの呼び出しについては、ブラウザの開発者ツールにある「ネットワーク」パネルを利用して詳細を確認できます。さらに、「Query Monitor」のような優れたプラグインも多数存在し、データベースのクエリやフックの実行状況、パフォーマンスのボトルネックなどを詳細に分析するのに役立ちます。これらは開発やデバッグに非常に便利なツールです。

プラグインの開発が完了したら、どのようにしてWordPressの公式ディレクトリに公開するのでしょうか?

まず、プラグインのコードがWordPress公式のコーディング基準およびディレクトリ構造の要件に準拠していることを確認する必要があります。例えば、標準的なファイル構造を含んでいる必要があります。readme.txtまず、ファイルを準備します。次に、WordPress.orgで開発者アカウントを申請し、作成したプラグインを提出してレビューを受けます。レビューでは、コードの品質、セキュリティ、ライセンス契約(GPL互換であること)、機能の説明などがチェックされます。レビューに合格すると、SVNツールを使用してプラグインのコードを公式のSVNリポジトリに投稿することができ、その後はバックエンドの管理画面からプラグインのバージョンを更新できるようになります。

カスタムプラグインとテーマの `functions.php` ファイルにコードを追加する際の違いは何でしょうか?

将代码添加到当前主题的functions.phpファイルは、サイトに特定の機能を迅速に追加したりテストしたりするための簡単な方法です。しかし、この方法には明らかな欠点があります。その機能はテーマに依存しており、テーマを変更するとその機能も使用できなくなってしまいます。また、コードの封装(カプセル化)や命名空間の設計が不十分であるため、他のコードとの衝突が発生しやすいのです。

独立したプラグインを作成することで、その機能をテーマから分離し、どのテーマを使用しても問題なく動作するようにします。プラグインには完全な構造があり、コードの整理、依存関係の管理、設定ページの提供、そして独立した更新が可能です。再利用を計画している機能や複雑な機能、または他の人に配布する必要がある機能については、プラグインが最適な選択肢です。