ゼロからWordPressプラグイン開発をマスターする:完全ガイドと実践トレーニング

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

なぜWordPressプラグインの開発を選んだのでしょうか?

現在のウェブサイトエコシステムにおいて、WordPressはその比類のない柔軟性と巨大なユーザーベースにより支配的な地位を占めています。この柔軟性は、主にそのプラグインシステムによるものです。開発者は自分でプラグインを作成することで、あるアイデアを再利用可能な機能モジュールに変え、世界中の何百万ものウェブサイトで活用することができます。これにより、特定のビジネスニーズに対応するだけでなく、WordPressの公式ディレクトリやサードパーティのマーケットを通じてプラグインを配布し、継続的な価値と収益を生み出すことも可能になります。

直接修改テーマとは対照的に… functions.php ファイルが別々になっているため、プラグインは機能ロジックとテーマの外観を分離しており、ウェブサイトの持続可能なメンテナンスを実現しています。テーマを変更する場合、プラグインが提供する機能はシームレスに引き継がれますが、テーマ内に書かれたコードは再処理が必要になります。このようなモジュール化された開発手法は、プロフェッショナルで安定したWordPressサイトを構築するための最良の実践です。

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

プラグイン開発を始める第一歩は、WordPressの標準に準拠した基本構造を作成することです。これは単にファイルを作るだけでなく、メンテナンスが容易で拡張性のあるコードの組織方法を確立することでもあります。

推薦図書 WordPressプラグイン開発入門ガイド:ゼロから最初のカスタム機能拡張を構築する

コアプラグインファイルの作成

すべてのWordPressプラグインにはメインファイルが必要であり、そのファイル名は通常プラグインの名前になります。例えば: my-first-plugin.phpこのファイルのヘッダーにあるコメントは、プラグインの「身分証明書」のようなもので、プラグインの名前、説明、バージョン、作者などのメタ情報をWordPressシステムに提供します。このヘッダーがなければ、WordPressはあなたのプラグインを認識したり有効にしたりすることができません。

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

シンプルな機能を実装する

プラグインのヘッダー部分を定義した後、機能コードの追加を始めることができます。典型的な入門例としては、ウェブサイトのフッターにカスタムテキストを表示するというものがあります。これにはWordPressの「フック(Hook)」メカニズムを利用します。具体的には、以下のように処理を行います: wp_footer このアクションフック。

ウェブサイトのフッターにカスタムテキストを出力する
 */
function my_first_plugin_display_footer_text() {
    echo ‘  ウェブサイトのフッターにカスタムテキストを出力する
 */
function my_first_plugin_display_footer_text() {
    echo ’<p style="“text-align:" center;”>このサイトは、私が作成した最初のプラグインによって技術的なサポートを受けています。</p>’;
}

上記のコードブロックをあなたのメインプラグインファイルに追加し、保存した後でサーバーにアップロードしてください。 /wp-content/plugins/ 目次。その後、WordPressの管理画面(バックエンド)にある「プラグイン」ページにアクセスすると、「私の最初のプラグイン」が表示され、有効にすることができます。ウェブサイトのフロントエンドを更新すると、ページの下部に追加したテキストが表示されます。

WordPressプラグインのアーキテクチャを深く理解する

強力でプロフェッショナルなプラグインを開発するためには、WordPressが提供するコアのプログラミングインターフェースやアーキテクチャパターンを深く理解する必要があります。これは単にPHP関数を書くだけのことではなく、WordPressのコアと安全かつ効率的にやり取りする方法を学ぶことでもあります。

フックメカニズム:アクションとフィルター

WordPressのフックメカニズムはその拡張性の基盤となっており、主にアクションフック(Action Hooks)とフィルターフック(Filter Hooks)に分けられます。アクションフックを使用すると、特定のタイミングで自分のコードを実行することができます。例えば、init フックはWordPressが初期化される際に実行されます。wp_enqueue_scripts フックは、スクリプトやスタイルを安全に追加するために使用されます。

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

フィルターフック(filter hook)を使用すると、データを「変更」することができます。データが使用される前(例えば、ページに表示される前やデータベースに保存される前)に、そのデータを拦截して修正することができるのです。the_content このフィルターを使うと、記事の内容を変更することができます。

// 使用过滤器修改文章内容,在末尾添加一段话
add_filter(‘the_content’, ‘my_first_plugin_modify_content’);

function my_first_plugin_modify_content($content) {
    if (is_single()) { // 仅在单篇文章页面生效
        $extra_text = ‘<div class="“plugin-note”">この記事をお読みいただき、ありがとうございます!</div>’データベースからデータを取得する際にエラーが発生しました。エラーの詳細は次のとおりです。\n';  
    if (isset($$extra_text)) {  
        $content .= $$extra_text;  
    }  
    return $content;  
}

プラグインのセキュリティとデータ検証

セキュリティはプラグイン開発において決して見過ごしてはならない要素です。ユーザーや外部からのデータを絶対に信用してはいけません。WordPressには、データの検証、エスケープ処理、クリーニングを行うための一連の関数が用意されています。

フォームから送信された `$_POST` または `$_GET` データを処理する際には、必ず以下の方法を使用しなければなりません。 sanitize_text_field(), intval(), wp_kses_post() などの関数を使用してデータをクリーンアップする必要があります。データをHTMLページに出力する際には、必ずこれらの処理を行う必要があります。 esc_html(), esc_attr(), esc_url() これらの関数を使用してエスケープ処理を行い、クロスサイトスクリプティング(XSS)攻撃を防ぎます。

hosting.com 共有ホスティング
AMD EPYC CPU、NVMe SSDストレージ、LiteSpeedによる高いパフォーマンス、24時間365日の専門家による社内サポート、SSL、ブルートフォース、マルウェア、DDoS保護などの高度なセキュリティ対策、最大73%のコスト削減
// 安全地处理并输出一个来自短代码的属性
function my_first_plugin_safe_shortcode($atts) {
    // 使用 shortcode_atts 设置默认值并合并用户输入
    $atts = shortcode_atts(
        array(
            ‘message’ =&gt; ‘Hello World’,
        ), $atts
    );

// 清理用户输入的 message 属性
    $safe_message = sanitize_text_field($atts[‘message’]);

// 转义后安全输出
    return ‘<div>’あなたのメッセージは送信されました。私たちはできるだけ早く返信します。‘</div>’セキュリティ確保済みのグリーティングを追加します。このコードはウェブページのどこにでも追加できます。  
function my_first_plugin_safe_shortcode() {  
  echo ‘こんにちは’;  
}
add_shortcode(‘safe_greeting’, ‘my_first_plugin_safe_shortcode’);

构建一个功能完整的插件

これらの知識を統合して、少し複雑だが実用的なプラグインを作りましょう。それは「記事の読了時間推定」プラグインです。このプラグインは、記事の予想読了時間を自動的に計算し、記事のタイトルの下に表示します。

プラグインクラスの構造を作成する

機能がやや複雑なプラグインについては、オブジェクト指向プログラミング(OOP)のクラス構造を使用する方が良い選択です。これによりコードの整理が容易になり、関数名の衝突を避けることができ、メンテナビリティも向上します。

<?php
/**
 * Plugin Name:       文章阅读时间估算
 */
class Article_Reading_Time {
    /**
     * 构造函数,初始化插件
     */
    public function __construct() {
        // 在文章内容前添加阅读时间
        add_filter(‘the_content’, array($this, ‘add_reading_time_to_content’));
        // 初始化脚本和样式(如果需要)
        add_action(‘wp_enqueue_scripts’, array($this, ‘enqueue_assets’));
    }

/**
     * 计算文章的阅读时间(以分钟计)
     * @param string $content 文章内容
     * @return int 预计阅读分钟数
     */
    private function calculate_reading_time($content) {
        // 去除 HTML 标签,只计算纯文本
        $text = strip_tags($content);
        // 估算中文阅读速度:每分钟约300-500字,这里取400字/分钟
        $word_count = mb_strlen($text, ‘UTF-8’);
        $reading_time = ceil($word_count / 400);
        // 至少1分钟
        return max(1, $reading_time);
    }

/**
     * 在文章内容前添加阅读时间显示
     * @param string $content 原始文章内容
     * @return string 添加阅读时间后的内容
     */
    public function add_reading_time_to_content($content) {
        // 确保只在主循环的单篇文章页面显示
        if (is_single() && in_the_loop() && is_main_query()) {
            $reading_minutes = $this->読書時間を計算する($content);  
$読書時間_html = sprintf(  
  ‘<div class="“reading-time”"><strong>予想読了時間:</strong>\n%d 分</div>’,
                esc_html($reading_minutes)
            );
            $content = $reading_time_html . $content;
        }
        return $content;
    }

/**
     * 加载插件所需的CSS样式
     */
    public function enqueue_assets() {
        if (is_single()) {
            wp_enqueue_style(
                ‘article-reading-time-style’,
                plugin_dir_url(__FILE__) . ‘assets/css/style.css’,
                array(),
                ‘1.0.0’
            );
        }
    }
}

// 实例化插件类,启动插件
new Article_Reading_Time();

管理設定ページを追加します。

専門的プラグインには、通常、ユーザーがその動作をカスタマイズできるようなバックエンド設定ページが必要です。WordPressの「設定API」を利用することで、標準的な方法でオプションページを作成することができます。

推薦図書 WordPressテーマ開発の完全ガイド:入門から上級者までの実践トレーニング

まず、プラグインクラスに新しいメソッドを追加する必要があります。このメソッドは、設定メニューやフィールドを登録するためのものです。

// 在构造函数中添加管理菜单钩子
add_action(‘admin_menu’, array($this, ‘add_admin_menu’));
add_action(‘admin_init’, array($this, ‘register_settings’));

public function add_admin_menu() {
    add_options_page(
        ‘阅读时间设置’,          // 页面标题
        ‘阅读时间估算’,          // 菜单标题
        ‘manage_options’,       // 权限
        ‘reading-time-settings’, // 菜单slug
        array($this, ‘render_settings_page’) // 回调函数
    );
}

public function register_settings() {
    register_setting(‘reading_time_settings_group’, ‘reading_time_words_per_minute’);
    add_settings_section(‘reading_time_main’, ‘主要设置’, null, ‘reading-time-settings’);
    add_settings_field(
        ‘words_per_minute’,
        ‘每分钟阅读字数’,
        array($this, ‘render_words_per_minute_field’),
        ‘reading-time-settings’,
        ‘reading_time_main’
    );
}

public function render_words_per_minute_field() {
    $value = get_option(‘reading_time_words_per_minute’, 400);
    echo ‘<input type="“number”" name="“reading_time_words_per_minute”" value="“’" . esc_attr($value) ‘” />’; echo ‘
    エコー '<p class="“description”">読書時間を計算するための基準値(文字数/分)。</p>’設定ページをレンダーする関数です。  
     

```
    <div class="“wrap”">
        <h1>記事の読了時間を推定する設定</h1>
        <form action="/ja/“options.php”/" method="“post”" data-trp-original-action="“options.php”">
            <?php
            settings_fields(‘reading_time_settings_group’);
            do_settings_sections(‘reading-time-settings’);
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="ja"/></form>
    </div>
    &lt;?php
}

// 然后修改 calculate_reading_time 方法,使用用户设置的值
private function calculate_reading_time($content) {
    $text = strip_tags($content);
    $words_per_minute = get_option(‘reading_time_words_per_minute’, 400);
    $word_count = mb_strlen($text, ‘UTF-8’);
    $reading_time = ceil($word_count / $words_per_minute);
    return max(1, $reading_time);
}

プラグインの国際化と公開準備

あなたのプラグインを世界中のユーザーが利用できるようにするためには、国際化(i18n)は欠かせないステップです。また、リリースする前に十分なテストを行い、ドキュメントを整理することも非常に重要です。

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

テキスト翻訳機能の実装をサポートします。

WordPressはGNU gettextテクノロジーを使用して多言語対応を実現しています。プラグイン内で直接出力されるすべてのテキストを、特定の関数で囲む必要があります。最も一般的に使用される関数は __() これは翻訳後の文字列を返すためのものであり、さらに… _e() 直接出力翻譯後の文字列です。

まず、プラグイン内にあるすべてのハードコードされたテキストを修正してください。

// 在插件头部定义 Text Domain
// Text Domain:       article-reading-time

// 在插件初始化时加载语言文件
add_action(‘init’, array($this, ‘load_textdomain’));

public function load_textdomain() {
    load_plugin_textdomain(
        ‘article-reading-time’,
        false,
        dirname(plugin_basename(__FILE__)) . ‘/languages/’
    );
}

// 修改输出文本的代码,使其可翻译
$reading_time_html = sprintf(
    ‘<div class="“reading-time”"><strong>%s</strong>\n%d %s</div>’,
    esc_html__(‘预计阅读时间:’, ‘article-reading-time’),
    esc_html($reading_minutes),
    esc_html(_n(‘分钟’, ‘分钟’, $reading_minutes, ‘article-reading-time’))
);

その後、Poeditのようなツールを使用して、プラグインのソースコードをスキャンし、必要なデータを生成する必要があります。 .pot テンプレートファイルに基づいて、翻訳者は以下のようなものを作成することができます: zh_CN.po.mo 翻訳されたファイルをプラグインの適切な場所に配置してください。 /languages/ ディレクトリ内にあります。

テストを行い、公式ディレクトリに提出します。

公開する前に、必ず異なる環境(異なるPHPバージョン、異なるWordPressバージョン)でプラグインのすべての機能をテストしてください。PHPの警告やエラーがないかを確認し、よく使われるテーマや他のプラグインとの衝突がないかを確認してください。

もしプラグインをWordPressの公式プラグインディレクトリに提出する予定であれば、厳格なコード基準とガイドラインに従う必要があります。これには、競合しない、説明的な関数名やクラス名の前缀の使用、コードのセキュリティの確保、そして詳細なドキュメントの提供などが含まれます。 readme.txt ファイルは公式の標準に従った形式で作成し、すべてのデバッグ用コードを削除してください。

「明確でわかりやすいものを準備しましょう。」 readme.txt ファイルは審査に合格するための鍵となります。その中には、プラグインの説明、インストール手順、スクリーンショット、よくある質問、更新履歴などの情報が含まれている必要があります。

概要

WordPressプラグインの開発は、アイデアを実際に配布可能な製品に変えるための強力なスキルです。シンプルな単一ファイルのプラグインの作成から始め、徐々にフックの仕組み、セキュリティ対策、オブジェクト指向アーキテクチャ、APIの設定、国際化へと学びを深めていくことで、ビジネスレベルのプラグインを構築するための確かな基盤が築かれます。最も重要なのは、WordPressの中心的なインタラクションメカニズムである「フック」を理解し、常にセキュアなコーディングとデータ検証の原則を守ることです。コードをモジュール化し、構造化して整理し、管理インターフェースや翻訳サポートを事前に計画することで、プラグインの専門性、保守性、市場適応性が高まります。優れたプラグインとは、単なる機能の集合体ではなく、ユーザー体験、コードの品質、そしてエコシステムとの統合が反映されたものだということを忘れないでください。

FAQ よくある質問

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

このプラグインのコアロジックはPHPで書かれているため、しっかりとしたPHPプログラミングの基礎が必要です。また、フロントエンドの表示やインタラクションを処理するために、HTML、CSS、JavaScriptについても基本的な知識が必要です。WordPressが便利なデータベース操作クラスを提供しているにもかかわらず、MySQLデータベースの基本概念に精通していることは、複雑なプラグインを開発する上で非常に有益です。さらに、オブジェクト指向プログラミングの考え方にも慣れているとよいでしょう。

プラグインとテーマのfunctions.phpファイルの違いは何ですか?

テーマにコードを追加してください。 functions.php ファイルは機能を迅速に実装するための手段ですが、その機能は現在のテーマと密接に関連しています。テーマを切り替えると、これらの機能は失われてしまいます。一方、プラグインはテーマとは独立した機能モジュールであり、どのテーマを使用してもプラグインが有効になっていればその機能は常に利用可能です。これにより、機能の移植性とウェブサイトのメンテナンスの柔軟性が保証されます。

プラグインの関数名が他のプラグインと衝突するのを防ぐにはどうすればよいですか?

オブジェクト指向プログラミング(OOP)を使用し、コードをクラスの中に封じ込めることが、関数名の衝突を避ける最善の方法です。プロシージャルプログラミングを使用する場合は、すべての関数、定数、グローバル変数に一意の接頭辞を付ける必要があります。この接頭辞は十分にユニークである必要があり、例えば、自社のブランド名やプラグインの略称などを含めるとよいでしょう。 myplugin_ または art_rt_

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

まず、WordPressの wp-config.php ファイルでデバッグモードを有効にするには: define(‘WP_DEBUG’, true);define(‘WP_DEBUG_LOG’, true);このようにすると、PHPのエラーや警告が記録されます。 /wp-content/debug.log ファイルの中にあります。さらに、ブラウザの開発者ツールを使用してフロントエンドの問題を調査することができ、それを活用することもできます。 error_log() 関数はコード内で変数の値をログファイルに出力し、デバッグを行います。

ビジネス用プラグインを開発する際には、どのような法的問題を考慮する必要がありますか?

最も重要な法的な問題は、WordPressのライセンス契約を遵守することです。WordPressの公式ディレクトリにプラグインを公開する場合、そのプラグインはGPLv2またはそれ以上のライセンスに従う必要があります。つまり、プラグインのコードはオープンソースでなければなりません。サポートサービスの提供、追加機能の販売、ドキュメントの作成、ホスティングサービスの提供などによって収益を得ることができます。また、ユーザーデータを扱う場合は、GDPRなどのデータ保護規制に注意を払い、それに従う必要があります。プラグインのプライバシーステートメントにおいて、データの収集方法や使用目的を明確に記載することをお勧めします。