WordPressプラグイン開発の究極ガイド:ゼロから始めて、あなたの最初のプラグインを作成する

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

準備作業と環境設定

コードの執筆を始める前に、適切な開発環境が必要です。これには、ローカルにインストールされたWordPress、コードエディタ、そして基本的なPHPの知識が含まれます。XAMPP、MAMP、またはLocal by Flywheelなどを使用して、ローカルのWordPress環境を迅速に構築することをお勧めします。使用するPHPのバージョンがWordPressの公式要件を満たしていることを確認してください。通常、PHP 7.4以降が推奨されています。

プラグインとは本質的に、1つまたは複数のPHPファイルで構成され、WordPressにインストールされるものです。wp-content/pluginsディレクトリ内にあります。各プラグインには一意の名前が必要であり、そのメインファイルのヘッダーには標準的なプラグイン情報のコメントを含める必要があります。これがWordPressがプラグインを認識するための基本です。

最初のプラグインファイルを作成しましょう。

まず、wp-content/pluginsディレクトリ内に新しいフォルダを作成します。例えば:my-first-pluginその後、そのフォルダ内にメインのPHPファイルを作成します。このファイルの名前は通常、フォルダの名前と同じになります。my-first-plugin.phpこのファイルに、プラグインのヘッダー情報を記述する必要があります。

推薦図書 WordPressプラグイン開発の完全ガイド:ゼロから始めて、あなたの最初のプラグインを作成する

<?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
 */

ファイルを保存した後、WordPressの管理画面(バックエンド)にある「プラグイン」ページにアクセスします。そこでは、「My First Plugin」というプラグインがプラグインリストに表示されているはずです。このプラグインを有効にします。現時点ではまだ何の機能もありませんが、これであなたの作成したプラグインがWordPressに正常に読み込まれたことになります。

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

WordPressのコアメカニズムを理解する:フックとフィルター

WordPressの強力な拡張性は、イベント駆動型のアーキテクチャに由来しており、その中心にあるのが「フック(Hook)」です。フックには2種類あります:アクション(Action)とフィルター(Filter)です。これらを理解することは、効果的なプラグイン開発を行うための鍵となります。

アクションフックを使用すると、特定のタイミング(記事の公開やページの読み込みなど)に自分のコードを挿入して実行することができます。例えば、記事が公開されたときにメールを送信するといった処理が可能です。add_action()この関数は、あなたが定義したカスタム関数を指定されたアクションフックにマウントします。

フィルターフックを使用すると、データを変更することができます。データが使用される前(例えば、データベースに保存されたり、ブラウザに表示されたりする前)に、そのデータを遮断して修正することができます。例えば、記事のタイトルやコメントの内容を変更するといったことが可能です。add_filter()関数を使用してフィルターを適用します。

アクションフックを使用して機能を追加する

仮に、ウェブサイトの管理バックエンドのフッターにカスタムテキストを追加したいとします。WordPressには「Custom Meta Fields」と呼ばれる機能が用意されています。admin_footerアクションフックです。プラグインのメインファイルに以下のコードを追加することができます:

推薦図書 WordPressプラグイン開発入門ガイド:ゼロから最初の機能付きプラグインを作成する方法

// 定义一个在管理后台页脚显示信息的函数
function myplugin_display_admin_footer_text() {
    echo '<p>「私の最初のプラグイン」をご利用いただき、ありがとうございます!</p>';
}
// 将函数挂载到 admin_footer 动作钩子
add_action( 'admin_footer', 'myplugin_display_admin_footer_text' );

ファイルを保存し、WordPressの管理画面を更新してください。ページの下部までスクロールすると、追加したテキストが表示されるはずです。これがアクションフックの基本的な使い方です:特定の場所でコードを実行するのです。

フィルターを使用してコンテンツを変更する

では、すべての記事のタイトルを修正してみましょう。タイトルの末尾に統一して商標記号を付け加えましょう。そのためには、以下の方法を使用できます:the_titleフィルター。

// 定义一个修改文章标题的函数
function myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且非管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
// 将函数挂载到 the_title 过滤器钩子,参数2表示接受2个参数
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

このコードは、現在の環境がフロントエンドの記事メインループ内にあるかどうかをチェックします。もしそうであれば、タイトルの後に「™」記号を追加します。10これは優先順位を示しています(数字が小さいほど、先に実行されます)。2これは、私たちの関数が2つのパラメータを受け取ることを示しています(オリジナルのものです)。$title$post_id)。

hosting.com 共有ホスティング
AMD EPYC CPU、NVMe SSDストレージ、LiteSpeedによる高いパフォーマンス、24時間365日の専門家による社内サポート、SSL、ブルートフォース、マルウェア、DDoS保護などの高度なセキュリティ対策、最大73%のコスト削減

プラグイン機能の構築:管理メニューと設定ページの作成

成熟なプラグインでは、通常WordPressの管理画面で設定オプションを提供する必要があります。これには、プラグイン専用の管理メニューページを作成することが含まれます。WordPressには、この機能を実現するための豊富なAPI関数が用意されています。例えば…add_menu_page()add_options_page()

トップレベルの管理メニューを追加します。

プラグインには独立したトップメニューを追加する予定です。これは一般的に…admin_menuアクションフック内で処理が完了しました。メニューやページを定義するための関数を作成しましょう。

// 定义添加管理菜单的函数
function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',               // 菜单标题
        'manage_options',         // 所需权限(管理员)
        'myplugin-settings-page', // 菜单slug(唯一标识)
        'myplugin_display_settings_page', // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(Dashicons)
        30                        // 菜单位置
    );
}
// 将函数挂载到 admin_menu 钩子
add_action( ‘admin_menu’, ‘myplugin_add_admin_menu’ );

次に、コールバック関数を定義する必要があります。myplugin_display_settings_page()レンダリング設定ページのHTMLコンテンツを表示するために。

推薦図書 WordPressプラグイン開発入門から上級者へ:カスタム機能を構築するための完全ガイド

// 定义设置页面的显示内容
function myplugin_display_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>私のプラグイン設定</h1>
        <form method="post" action="/ja/options.php/" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、安全nonce等
            settings_fields( ‘myplugin_settings_group’ );
            do_settings_sections( ‘myplugin-settings-page’ );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="ja"/></form>
    </div>
    あなたのアカウントは有効です。あなたはログインしています。

登録設定、フィールド、およびパーティション

フォームデータを安全に処理するためには、WordPressの設定APIを使用する必要があります。これには、設定の登録、設定セクションやフィールドの追加などが含まれます。

// 初始化插件设置
function myplugin_settings_init() {
    // 1. 注册一个设置(存储在wp_options表中)
    register_setting(
        ‘myplugin_settings_group’, // 设置组名,与 settings_fields() 对应
        ‘myplugin_options’ // 存储在数据库中的选项名
    );

// 2. 添加一个设置分区
    add_settings_section(
        ‘myplugin_section_basic’, // 分区ID
        ‘基础设置’, // 分区标题
        ‘myplugin_section_basic_callback’, // 分区介绍的回调函数
        ‘myplugin-settings-page’ // 所属页面的slug
    );

// 3. 为分区添加一个字段
    add_settings_field(
        ‘myplugin_field_message’, // 字段ID
        ‘欢迎信息’, // 字段标签
        ‘myplugin_field_message_callback’, // 渲染字段HTML的回调函数
        ‘myplugin-settings-page’, // 所属页面的slug
        ‘myplugin_section_basic’ // 所属分区的ID
    );
}
add_action( ‘admin_init’, ‘myplugin_settings_init’ );

// 分区介绍的回调函数
function myplugin_section_basic_callback() {
    echo ‘<p>プラグインの基本情報を設定します。</p>’;
}

// 字段渲染的回调函数
function myplugin_field_message_callback() {
    // 从数据库获取现有值
    $options = get_option( ‘myplugin_options’ );
    $value = $options[‘message’] ?? ‘’; // PHP 7.0+ 空合并运算符
    // 输出输入框
    echo ‘<input type="“text”" name="“myplugin_options[message]”" value="“‘" . esc_attr( $value ) ‘” class ="“regular-text”" />‘;
}

これで、あなたのプラグインにはWordPressの標準に準拠した完全な管理設定ページが備わりました。設定オプションを安全に保存したり読み取ったりすることができるようになりました。

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

プラグインの国際化とセキュリティに関するベストプラクティス

あなたのプラグインを世界中のユーザーが利用できるようにするためには、国際化(i18n)は欠かせないステップです。また、セキュリティ規格を遵守することは、あなたとユーザーのウェブサイトを攻撃から守るための基本です。

テキストの国際化を実現する

WordPressを使用しています。__()_e()翻訳を実現するためには、`translate`などの関数を使用する必要があります。まず、プラグインのヘッダー部分で正しく設定が行われていることを確認してください。Text Domain(例:)my-first-pluginその後、ユーザー向けのすべての文字列を翻訳関数で囲みます。

// 在插件代码中,将硬编码的文本替换
// 修改前:echo ‘<p>「私の最初のプラグイン」をご利用いただき、ありがとうございます!</p>’;
// 修改后:
function myplugin_display_admin_footer_text() {
    echo ‘<p>‘ . esc_html__( ‘感谢使用“我的第一个插件”!’, ‘my-first-plugin’ ) . ‘</p>’;
}

次に、Poeditのようなツールを使用して生成する必要があります。.pot(テンプレート)ファイルは、プラグインの中に置いてください。languagesフォルダの中にあります。翻訳者は対応するものを作成することができます。.poそしてコンパイル後の.moファイルです。最後に、プラグインの初期化時にこれを使用してください。load_plugin_textdomain()「Function loading」の翻訳です。

function myplugin_load_textdomain() {
    load_plugin_textdomain( ‘my-first-plugin’, false, dirname( plugin_basename( __FILE__ ) ) . ‘/languages/’ );
}
add_action( ‘plugins_loaded’, ‘myplugin_load_textdomain’ );

セキュアコーディングの規範に従ってください。

セキュリティは最優先事項です。まず第一に、ユーザーが入力したデータを絶対に信じてはいけません。ユーザーや外部からのすべてのデータについては……$_GET$_POST$_COOKIEすべてのデータは、検証、クリーニング、およびエスケープ処理を経なければなりません。

  • エスケープ出力:データをHTML、JavaScript、またはURLに出力する際には、対応するエスケープ関数を使用してください。
    // 输出到HTML属性
    echo ‘<input value="“‘" . esc_attr( $value ) ‘“ />‘;
    // 输出到HTML内容
    echo ‘<p>‘『 . esc_html( $text ) . 』‘</p>’;
    // 输出到JavaScript变量
    echo ‘<script>var msg = “‘ . esc_js( $message ) . ‘“;</script>’;
    // 输出到URL
    echo ‘<a href="/ja/“‘/" . esc_url( $url ) ‘“>リンク</a>’;
  • 入力内容の検証:データが期待される形式(メールアドレス、数字など)に合致しているかを確認します。
    if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
        // 不是有效的邮箱地址
        wp_die( ‘无效的邮箱格式。’ );
    }
  • 能力検査:管理操作を実行する前に、現在のユーザーが必要な権限を持っているかを確認します。
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘你没有执行此操作的权限。’ );
    }
  • Nonce検証:状態変更を伴う操作(フォーム送信、AJAXリクエストなど)において、Nonce(一回限りの数字)を使用することで、クロスサイトリクエストフォージング(CSRF)攻撃を防ぎます。
    // 在表单中输出nonce字段
    wp_nonce_field( ‘myplugin_action’, ‘myplugin_nonce’ );
    // 在处理请求时验证nonce
    if ( ! isset( $_POST[‘myplugin_nonce’] ) || ! wp_verify_nonce( $_POST[‘myplugin_nonce’], ‘myplugin_action’ ) ) {
        wp_die( ‘安全校验失败。’ );
    }

概要

このガイドを通じて、基本的なプラグインファイルの作成からWordPressコアのフックシステムの理解と活用、管理インターフェースの構築、さらには国際化の実装や基本的なセキュリティ対策の適用に至るまでの全プロセスを完了しました。機能が充実し、構造が明確で、安全かつ信頼性の高いWordPressプラグインを開発するために必要な核心的なスキルを身につけました。プラグイン開発の鍵は、アクションやフィルターフックを活用してWordPressの機能を拡張することにありますが、常にセキュリティとメンテナビリティを最優先に考えることが大切です。次には、カスタムデータベーステーブルの作成、AJAXインタラクション、REST APIエンドポイントなど、より複雑なAPIを探求し、より強力なツールを構築してみることができます。

FAQ よくある質問

###: WordPressプラグインを開発するには、どのような前提知識が必要ですか?
PHPの基本的なプログラミング知識が必要です。HTML、CSS、JavaScript(特にjQuery)についても理解していると非常に役立ちます。何よりも、WordPressの基本構造、つまりテーマ、プラグイン、記事の種類、ユーザーロールなどの概念についての初歩的な知識があることが求められます。このガイドでは、これらの基本知識を既にお持ちの方を対象としています。

私のWordPressプラグインをどのようにデバッグすればいいのでしょうか?

まず、ご自身の環境が正しく設定されていることを確認してください。wp-config.phpファイルの中にWP_DEBUG定数は次のように設定されています。trueこれにより、PHPのエラー、警告、および通知がページ上に表示されます。次に、以下の方法を使用することができます:error_log()この関数は、デバッグ情報をサーバーのエラーログに書き込みます。より複雑なデバッグを行う場合には、Query Monitorのような専用のデバッグプラグインを使用することを検討してください。Query Monitorを使用すると、データベースクエリの内容、フックの実行状況、スクリプトの読み込み状況などの詳細な情報を確認することができます。

私が開発したプラグインをどのように配布すればよいでしょうか?

個人使用や小規模な共有の場合は、ZIPファイルにして直接配布することができます。公開して配布したい場合には、主に2つの方法があります。1つ目は、WordPressの公式プラグインディレクトリ(WordPress.org)に提出することです。これには提出ガイドラインやコードの基準に従う必要がありますが、最も広範な認知を得ることができます。2つ目は、自分のウェブサイトやCodeCanyonなどの第三者マーケットを通じて配布する方法です。公式ディレクトリに提出する前には、コードの品質とセキュリティに十分注意してください。

私のプラグインにカスタムの記事タイプや分類法を追加するにはどうすればよいですか?

あなたはそれを使用することができます。register_post_type()この関数を使用して、カスタムの記事タイプ(CPT: Custom Post Type)を作成します。register_taxonomy()これらの操作は、カスタムの分類法を作成するための関数を使用して行うのが最適です。initアクションフック内で実行されます。WordPress CodexおよびDeveloper Handbookには、これら2つの関数に関する詳細なパラメータ説明があります。これは、WordPressのコンテンツ管理機能を拡張するための強力な方法です。

プラグイン内の関数名は、他のプラグインと衝突しないようにするにはどうすればよいでしょうか?

関数名、クラス名、定数名の衝突を防ぐためのベストプラクティスは、名前空間(PHP 5.3以降)の使用です。もしプラグインがより古いPHP環境をサポートする必要がある場合、または最大限の互換性を維持したい場合は、すべての識別子に一意の接頭辞を付ける方法を採用できます。例えば、プラグインの名前やその略称を接頭辞として使用するといった方法です。myplugin_function_nameMyPlugin_ClassNameまたはMYPLUGIN_CONSTANTこのガイドブックに記載されているサンプルコードはすべて、プレフィックス方式を採用しています。