究極のWordPressプラグイン開発ガイド: 入門から実践マスターまで

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

WordPressプラグインを開発するには、まずその基本構成を理解する必要があります。プラグインとは、本質的には1つまたは複数のPHPファイルで構成されており、WordPressの特定の仕様に従っています。これらのファイルはフック(Hook)システムを通じてWordPressのコアと通信し、ウェブサイトの機能を拡張したり変更したりします。プラグインを開発するには、少なくとも1つのメインファイルが必要で、その中にはプラグインを識別するための標準的なヘッダーコメントが含まれています。

自分の最初のプラグインを作ってみましょう。

まずは最もシンプルな「Hello World」プラグインの作成から始めましょう。このプロセスを通じて、プラグインの構造や有効化・無効化の手順に慣れていきます。

プラグインのメインファイルを作成します。

まず、WordPressのインストールディレクトリの下にあるwp-content/pluginsフォルダ内で新しいフォルダを作成してください。例えば、my-first-pluginそのフォルダ内に、「」という名前のファイルを作成してください。my-first-plugin.phpこのファイルは、サイトの主要なPHPコードが格納されているファイルです。このファイル名は通常、フォルダ名と同じです。

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

見せるmy-first-plugin.phpファイルに、以下の標準的なプラグインヘッダー情報を入力してください:

UltaHostのWordPressホスティングサービス
30日間の返金保証、無制限の帯域幅とデータベースサービス、無料のDDoS防御機能が付きます。3年契約をすると、501TPから4Tまでのプランで割引が適用されます。
<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习的简单Hello World插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

このコメントは非常に重要です。WordPressはスキャンを通じて…wp-content/pluginsおよびそのサブディレクトリ内にあるすべてのPHPファイルPlugin Name:このプラグインは、アクセス履歴を識別し、その情報をバックエンドのプラグイン管理ページに表示します。

基本機能の実装とアクティベーションフックの設定

次に、プラグインに簡単な機能を追加します。それは、ウェブサイトのフッターにカスタムテキストを表示するというものです。また、WordPressのライフサイクルフックを利用して、プラグインが有効になったときや無効になったときに実行できる処理をデモンストレーションします。

ヘッダーのコメントの下に、以下のコードを追加してください:

// 定义一个函数,在页脚输出信息
function my_first_plugin_display_footer_text() {
    echo '<p style="text-align: center;">初めてのWordPressプラグインへようこそ!</p>';
}
// 使用 ‘wp_footer’ 动作钩子挂载我们的函数
add_action( 'wp_footer', 'my_first_plugin_display_footer_text' );

// 插件激活时执行的操作
function my_first_plugin_activate() {
    // 可能在这里创建数据库表、设置默认选项等
    update_option( 'my_first_plugin_installed', current_time( 'mysql' ) );
}
register_activation_hook( __FILE__, 'my_first_plugin_activate' );

// 插件停用时执行的操作
function my_first_plugin_deactivate() {
    // 清理临时数据,但保留可能由用户创建的数据
    delete_option( 'my_first_plugin_installed' );
}
register_deactivation_hook( __FILE__, 'my_first_plugin_deactivate' );

現在、WordPressの管理画面にログインし、「プラグイン」ページに移動してください。そこに「My First Plugin」という名前のプラグインが表示されているはずです。「有効にする」をクリックしてください。その後、ウェブサイトの表示画面に戻り、下までスクロールすると、追加したカスタムテキストが確認できるはずです。この簡単な例は、プラグインの作成から実行までの基本的な流れを示しています。

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

WordPressのフックシステムを深く理解する

フックはWordPressプラグイン開発の基盤となる要素です。これにより、コアコードが実行される特定のポイントに自分のコードを挿入することができ、コアファイルを直接変更する必要はありません。フックには主に2種類あります:アクション(Action)とフィルター(Filter)です。

アクションフックの使用方法

アクションフックは、特定のイベントが発生したときに実行されます。例えば、記事を投稿したときや、ページのヘッダーやフッターを読み込んだときなどです。アクションフックは何らかの値を返すことを期待されておらず、単に「コードを実行する」だけの役割を果たします。私たちはすでに最初のプラグインでアクションフックを使用しています。wp_footerこのアクションフック。

もう一つのよくある例はinitフック(Hook)とは、WordPressが初期化される際に実行される処理です。主に、カスタムの記事タイプやカテゴリを登録するために使用されます。

hosting.com 共有ホスティング
AMD EPYC CPU、NVMe SSDストレージ、LiteSpeedによる高いパフォーマンス、24時間365日の専門家による社内サポート、SSL、ブルートフォース、マルウェア、DDoS保護などの高度なセキュリティ対策、最大73%のコスト削減
function my_plugin_custom_init() {
    // 在这里注册自定义文章类型
}
add_action( 'init', 'my_plugin_custom_init' );

アクションフックは以下のように機能します:add_action( $hook_name, $function_to_add, $priority, $accepted_args )関数のマウント(Function Mounting)

フィルターフックの使用方法

フィルターフックはデータを変更するために使用されます。データが使用される前(例えばデータベースに保存されたり、ブラウザに出力されたりする前)にそれがフックに渡され、そこで処理を行った後に修正された値が返されます。the_contentこのフィルターを使うと、記事の内容を変更することができます。

function my_plugin_add_disclaimer_to_content( $content ) {
    if ( is_single() ) {
        $disclaimer = '<p><em>このテキストは私のプラグインによって処理されました。</em></p>';
        $content .= $disclaimer;
    }
    return $content; // 必须返回修改后的内容
}
add_filter( 'the_content', 'my_plugin_add_disclaimer_to_content' );

フィルターフックが正常に機能しています。add_filter( $hook_name, $function_to_add, $priority, $accepted_args )関数のマウント(ロード)。優先順位$priority複数の関数が同じフックにマウントされた場合の実行順序が決まります。数字が小さいほど、優先順位が高くなります。

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

プラグインアーキテクチャとセキュリティのベストプラクティス

プラグインの機能が複雑になるにつれて、優れたアーキテクチャと厳格なセキュリティ対策が、プラグインの安定性、保守性、および安全性を保証するための鍵となります。

オブジェクト指向プログラミングを採用する。

对于功能丰富的插件,建议使用类(Class)来组织代码。这有助于封装功能,避免函数名冲突,并使代码结构更清晰。

インターサーバー共有ホスティング
共有ホスティング月$2.50米ドル, 最初の月$0.1米ドルプロモーションコードtryinterserver, 461クラウドアプリケーションスクリプト, 1クリックインストール.
&lt;?php
/**
 * Plugin Name: 高级示例插件
 */
if ( ! class_exists( &#039;Advanced_Sample_Plugin&#039; ) ) {
    class Advanced_Sample_Plugin {
        public function __construct() {
            // 在构造函数中挂载钩子
            add_action( &#039;wp_footer&#039;, array( $this, &#039;display_message&#039; ) );
            add_filter( &#039;the_title&#039;, array( $this, &#039;modify_title&#039; ) );
        }

public function display_message() {
            echo &#039;<p>高級プラグインクラスからのメッセージです。</p>';
        }

public function modify_title( $title ) {
            return '前缀 - ' . $title;
        }
    }
    // 初始化插件类
    new Advanced_Sample_Plugin();
}

セキュリティ対策の実施

WordPressプラグインのセキュリティは非常に重要です。最も重要な原則は、「ユーザーが入力したデータを絶対に信じてはならない」ということです。すべてのユーザー入力データに対しては、厳格なチェックと処理が必要です。$_GET$_POST$_COOKIEすべての超グローバル変数から取得したデータについては、検証、クリーニング、およびエスケープ処理を行う必要があります。

1. 検証:データが期待される形式(メールアドレスや数字など)に合致しているかを確認します。sanitize_email()is_email()などの関数です。
2. クリーニング:データ内の不正な文字や安全でない文字を削除します。テキスト入力の場合には、以下の方法を使用してください。sanitize_text_field()HTMLが許可されているコンテンツについては、以下の方法を使用してください:wp_kses_post()またはwp_kses()
3. エスケープ処理:データをHTML、JavaScript、またはURLに出力する際には、安全にエンコードすることを確認してください。esc_html()esc_js()esc_url()などの関数です。

例えば、ショートコード属性を処理する場合:

function my_shortcode_handler( $atts ) {
    // 使用 shortcode_atts 设置默认值并提取属性
    $atts = shortcode_atts( array(
        'url' =&gt; '#',
    ), $atts, 'my_shortcode' );

// 清理并转义 URL 属性
    $clean_url = esc_url( $atts['url'] );

return "<a href='/ja/{$clean_url}/'>セキュリティリンク</a>"php
add_shortcode('my_shortcode', 'my_shortcode_handler');

プラグインに管理インターフェースと国際化機能を追加する

成熟したプラグインには通常、設定オプションが必要であり、多言語対応も考慮されるべきです。

管理設定ページを作成する。

WordPressのSettings APIを使用して、安全で標準化された管理ページを作成することをお勧めします。この方法では、セキュリティ(nonce検証)やフォームのUIの一貫性が自動的に処理されます。

以下は、トップメニューと設定ページを追加した簡略化された例です:

class My_Plugin_Admin {
    public function __construct() {
        add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
        add_action( 'admin_init', array( $this, 'settings_init' ) );
    }

public function add_admin_menu() {
        add_menu_page(
            '我的插件设置', // 页面标题
            '我的插件',     // 菜单标题
            'manage_options', // 权限
            'my-plugin',      // 菜单slug
            array( $this, 'options_page_html' ) // 回调函数,输出页面内容
        );
    }

public function settings_init() {
        register_setting( 'my_plugin_settings', 'my_plugin_options' ); // 注册设置

// 添加设置区域和字段
        add_settings_section( 'my_plugin_section', '主要设置', null, 'my-plugin' );
        add_settings_field( 'api_key', 'API密钥', array( $this, 'api_key_field_html' ), 'my-plugin', 'my_plugin_section' );
    }

public function api_key_field_html() {
        $options = get_option( 'my_plugin_options' );
        ?&gt;
        <input type='text' name='my_plugin_options[api_key]' value='<?php echo esc_attr( $options['api_key'] ?? '' ); ?>'>
        <?php
    }

public function 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( 'my_plugin_settings' );
                do_settings_sections( 'my-plugin' );
                submit_button();
                ?>
            <input type="hidden" name="trp-form-language" value="ja"/></form>
        </div>
        &lt;?php
    }
}
new My_Plugin_Admin();

プラグインの国際化を実現する

プラグインを世界中のユーザーが利用できるようにするためには、多言語対応が必要です。これは以下の方法で実現されます:__( ‘Text’, ’text-domain’ )_e( ‘Text’, ’text-domain’ )すべてのユーザーに表示されるテキストは、翻訳関連の関数によって処理されています。あなたがプラグインのヘッダー部分のコメントで定義したものです。Text Domain: my-first-pluginこれはそのために用意されたものです。

1. コード内で、翻訳が必要なすべての文字列に対して翻訳関数を使用してください。

    echo __( ‘欢迎使用我的插件!’, ‘my-first-plugin’ );
    $title = esc_html__( ‘设置页面’, ‘my-first-plugin’ );

2. Poeditのようなツールを使用して、プラグインのコード内にある翻訳文字列をスキャンし、それに基づいて翻訳データを生成します。.potテンプレートファイルです。翻訳者はこれに基づいて、各言語に対応するファイルを作成します。.poそしてコンパイル後の.moファイル(例えば)zh_CN.po/mo)。
3. これらの言語ファイルをプラグインの適切な場所に配置してください。languagesフォルダ内にあります。WordPressはサイトの言語設定に基づいて、対応する翻訳を自動的に読み込みます。

概要

WordPressプラグインの開発とは、シンプルなスクリプトから複雑なアプリケーションへと進化していくプロセスです。その鍵は、フックシステムを理解し、熟知することにあります。アクションやフィルターを使って、自分の機能をWordPressのライフサイクルにシームレスに統合するのです。オブジェクト指向のアーキテクチャの考え方に従うことで、コードの整理性と保守性を高めることができます。セキュリティは開発において非常に重要であり、ユーザーからの入力はすべて検証し、クリーニングし、出力時にはエスケープ処理を行う必要があります。最後に、Settings APIを使ってプロフェッショナルなバックエンドインターフェースを作成し、国際化機能を活用してプラグインを世界中に広めましょう。まずは、シンプルなプラグインから始めてみるといいでしょう。my-first-plugin.phpこれらの概念を段階的に実践していけば、強力で安全かつ人気のあるWordPressプラグインを開発することができるでしょう。

FAQ よくある質問

WordPressプラグインを開発するには、どのような基礎知識が必要ですか?

PHPプログラミング言語の習得が必要です。なぜなら、このプラグインは主にPHPで書かれているからです。また、HTML、CSS、JavaScriptについても基本的な知識が必要であり、これらを使ってフロントエンドのインターフェースやインタラクションを構築します。最も重要なのは、WordPressの基本的な仕組みを理解することです。具体的には、テーマ、フック、ループ、データの保存方法などです。

プラグインをローカルでテストしても、オンラインのウェブサイトに影響は出ませんか?

もちろんです!実際、これは強く推奨されています。プラグインの開発は、ローカル開発環境(XAMPP、MAMP、Local by Flywheelなどのツールを使用して構築する)または独立したテストサーバー上で行うべきです。そうすることで、コードのエラーによってオンラインサイトがクラッシュしたりデータが失われたりするのを防ぐことができます。

私のプラグインコードのデバッグ方法は何ですか?

WordPressにはさまざまなデバッグツールが用意されています。まず、wp-config.phpファイル内でデバッグモードを有効にする:定義WP_DEBUG定数は(constant is)…trueこれにより、PHPのエラー、警告、および通知がページ上に直接表示されます。より複雑なデバッグには、別のツールや方法を使用することができます。error_log()この関数は、情報をサーバーのエラーログに書き込むか、Query Monitorのような専用のデバッグプラグインを使用します。Query Monitorは、データベースクエリ、フック、PHPエラーなどに関する詳細な情報を提供することができます。

開発が完了した後、プラグインをWordPressの公式ディレクトリに提出するにはどうすればよいでしょうか?

WordPress.orgにアクセスし、アカウントを作成してください。その後、Subversion(SVN)ツールを使用して、自分が開発したプラグインのコードをWordPressが提供するSVNリポジトリにコミットしてください。コミットする前に、プラグインのコードが公式のプラグイン開発基準やガイドライン(セキュリティ、コード品質、ドキュメント、国際化など)に準拠していることを確認してください。審査に合格すれば、あなたのプラグインは公式のディレクトリに掲載され、ユーザーがダウンロードしてインストールできるようになります。