準備作業と環境設定
コードの執筆を始める前に、開発環境が適切に設定されていることを確認する必要があります。優れたローカル開発環境は、開発効率とデバッグの体験を大幅に向上させることができます。
まず、ローカルコンピューターにWebサーバー環境をインストールする必要があります。これは一般的に「ローカルサーバー環境」と呼ばれます。最も人気のある選択肢の一つにXAMPPやMAMPがあり、これらにはApache、MySQL/MariaDB、PHPが統合されています。もう一つの強力な方法としては、Dockerを使用して本番環境に近い環境を構築する方法があります。どの方法を選択するにしても、使用するPHPのバージョン(7.4以上が推奨されます)とMySQLのバージョンが、ほとんどのWordPressホスティング環境と互換性があることを確認してください。
次に、最新バージョンのWordPressをダウンロードしてインストールしてください。WordPressのファイルを、ローカルサーバーのウェブサイトのルートディレクトリ(例えばXAMPPの場合は`http://localhost`)に解凍してください。 htdocs フォルダを作成し、有名な「5分でインストール」の手順に従って設定を完了してください。このローカルのWordPressサイトに正常にアクセスできることを確認してください。
推薦図書 わかりやすく解説:ゼロからWordPressプラグイン開発をマスターするための完全ガイド。
最後に、非常に重要なステップです:コードエディタを用意してください。Visual Studio Code、PhpStorm、Sublime Textなど、コードのハイライト表示、インテリセンス機能、デバッグ機能を備えたエディタの使用をお勧めします。特にPHP開発においては、これらの機能により多くの低レベルな文法エラーを防ぐことができます。
プラグインの基本構造とメインファイル
あるWordPressプラグインは、標準的で必須のファイル構造を持っており、その核心となる部分は以下の場所にあります: /wp-content/plugins/ ディレクトリ内にある同名のフォルダー、およびそのフォルダー内にあるメインのPHPファイルです。
プラグインのメインファイルを作成する
まず、 /wp-content/plugins/ ディレクトリ内に新しいフォルダを作成し、その名前は簡潔で一意であり、プラグインの機能を表すものにしてください。例えば「my-first-plugin」とします。次に、そのフォルダ内にフォルダと同じ名前のPHPファイルを作成してください。 my-first-plugin.php。
このメインファイルはプラグインの「エントリーポイント」であり、WordPressはこのファイルの冒頭にあるプラグインヘッダー情報を読み取ることでプラグインのメタデータを認識します。プラグインヘッダー情報は標準的なPHPのコメントブロックであり、ファイルの冒頭に必ず記述する必要があります。最低限、プラグインの名前と説明を含める必要があります。
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个学习WordPress插件开发的示例插件,用于展示“Hello World”。
* Version: 1.0.0
* Author: 你的名字
* License: GPL v2 or later
* Text Domain: my-first-plugin
* Domain Path: /languages
*/ 上記のコードにおいて、Plugin Name これらは必須項目ですが、その他の項目はすべて任意ですが記入をお勧めします。これらの情報はWordPressの管理画面にある「プラグイン」管理ページに表示されます。Text Domain 国際化(多言語対応)のために使用され、後続で呼び出される翻訳関数で使用されるテキストデータと一致しています。
推薦図書 ゼロからWordPressプラグインの開発をマスターする:原理、実践、そして高級テクニック。
プラグインの基本定数を定義する
良いプラグイン開発の習慣とは、最初にプラグインのファイルパスやURLなどの有用な定数を定義しておくことです。これにより、後のコードでこれらの定数を簡単に参照できるようになります。パスをハードコーディングすることを避けることができ、コードのメンテナンスや移植が容易になります。
メインファイル内で、プラグインのヘッダ情報の直後に以下のコードを追加することで、定数を定義することができます:
// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
exit; // 如果 ABSPATH 未定义,则退出
}
// 定义插件路径和URL常量
define( 'MFP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'MFP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'MFP_PLUGIN_VERSION', '1.0.0' ); ここでは、plugin_dir_path( FILE ) と plugin_dir_url( FILE ) これはWordPressが提供するコア関数で、現在使用中のプラグインファイルのディレクトリパスとURLを安全に取得することができます。MFP_PLUGIN_VERSION 定数はプラグインのバージョン番号を保存するために使用され、スクリプトのスタイルを読み込んだり、バージョンを比較したりする際に便利です。
コア機能の実装とフックの使用
WordPressプラグイン開発の精髓は、「フック(Hooks)」システムの利用にあります。フックには2種類あります:アクション(Actions)とフィルター(Filters)です。これらを使うことで、WordPressが特定のタイミングで実行する処理(例えばページの読み込みや記事の保存時)に自分のコードを挿入したり、他の関数が返すデータを変更したりすることができます。
シンプルなアクションフックを追加します。
では、最もシンプルな機能を実現しましょう:ウェブサイトのフッターに一行のテキストを追加します。アクションフックを使用してこれを行います。 wp_footerそれはページのフッター領域でHTMLが出力される前にトリガーされます。
メインファイルに関数を追加し、その関数を通じて… add_action この関数は、それを特定の場所にマウント(つまり、利用可能な状態にする)します。 wp_footer このフックに。
推薦図書 ワードプレスのプラグイン開発ガイド: ゼロから自分のプラグインを作る方法を一通り説明します。
/**
* 在网站页脚输出自定义文本
*/
function mfp_display_footer_text() {
echo '<p style="text-align: center; color: #666;">私の最初のWordPressプラグインをご利用いただき、ありがとうございます!</p>';
}
add_action( 'wp_footer', 'mfp_display_footer_text' ); 今、プラグインを有効にしてウェブサイトのフロントエンドにアクセスし、ページの下部までスクロールしてください。そこにこのテキストが表示されるはずです。これがアクションフックの基本的な使い方です:指定されたタイミングで何かを実行するのです。
フィルターを使用してコンテンツを変更する
フィルターは、既存の値を変更するために使用されます。例えば、記事のタイトルを変更したい場合、「【推薦】」という文字をすべてのタイトルの前に付け加えたいとします。これは以下のようにして実現できます: the_title フィルターを使用して実現します。
新しい関数を作成してください。この関数は、フィルタリングするための元のタイトルをパラメータとして受け取り、修正されたタイトルを返します。その後、それを…(続きがありますが、ここでは具体的な処理内容が記載されていません)。 add_filter マウントします。
/**
* 在所有文章标题前添加前缀
* @param string $title 原始标题
* @return string 修改后的标题
*/
function mfp_add_prefix_to_title( $title ) {
// 确保只在主循环中修改,避免影响后台列表等其他地方
if ( is_single() && in_the_loop() ) {
$title = '【推荐】' . $title;
}
return $title;
}
add_filter( 'the_title', 'mfp_add_prefix_to_title' ); この簡単な例は、フィルターの強力さを示しています。条件(例えば…)をチェックすることができます。 is_single() 特定のコンテキストにおいてのみ内容を修正し、そのページが単一の記事ページであるかどうかを判断する。
管理ページの追加とセキュリティ対策の実施
機能が充実したプラグインには、多くの場合、ウェブサイトの管理者が設定を行えるようなバックエンドの設定ページが必要です。また、コードの安全性を確保することも非常に重要です。
プラグインの設定ページを作成する
私たちは使用する予定です。 add_menu_page この関数は、プラグインにトップレベルの管理メニューとそれに対応する設定ページを追加します。
まず、設定ページのHTMLコンテンツを生成する関数を作成し、それを何らかの方法で表示するためにマウント(掛載)します。 admin_menu このメニューを登録するために、アクションフックの関数を使用します。
/**
* 渲染插件设置页面的HTML内容
*/
function mfp_render_settings_page() {
// 检查用户权限
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( __( '你没有足够的权限访问此页面。', 'my-first-plugin' ) );
}
?>
<div class="wrap">
<h1></h1>
<p>これは私の最初のプラグインの設定ページです。将来的には、ここにフォームやオプションを追加することができるでしょう。</p>
<form action="/ja/options.php/" method="post" data-trp-original-action="options.php">
<?php
// 后续可以在这里添加设置字段
// settings_fields( 'mfp_options_group' );
// do_settings_sections( 'mfp-settings-page' );
// submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="ja"/></form>
</div>
<?php
}
/**
* 注册插件管理菜单
*/
function mfp_add_admin_menu() {
add_menu_page(
'我的第一个插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限 (manage_options)
'mfp-settings-page', // 菜单slug
'mfp_render_settings_page', // 回调函数
'dashicons-admin-plugins', // 图标 (Dashicons)
80 // 菜单位置
);
}
add_action( 'admin_menu', 'mfp_add_admin_menu' ); プラグインを有効にすると、WordPressの管理画面(バックエンド)の左側に「My Plugins」という新しいメニュー項目が表示されます。それをクリックすると、簡単な設定ページに移動します。ここにはWordPress Settings APIを使用してフォームフィールドを追加するためのインターフェースが用意されており、これはユーザーの入力を安全に処理するための標準的な方法です。
データ検証とエスケープ処理
ユーザーから受け取ったデータやブラウザに送信されるデータはすべて処理する必要があり、クロスサイトスクリプティ(XSS)攻撃やSQLインジェクションを防ぐためです。WordPressには豊富なセキュリティ関連の関数が用意されています。
- エスケープ出力の使用:
esc_html()、esc_attr()、esc_url()とwp_kses_post()などの関数を使用して、HTMLに出力される内容をクリーンにします。 - データ検証:使用
sanitize_text_field()、sanitize_email()などの関数を使用して、フォームから送信された入力データをクリーンアップします。 - 非CE暗号キー:データの変更を伴うフォーム操作には、この暗号キーの使用が必須です。
wp_nonce_field()とwp_verify_nonce()リクエストの合法性を検証します。
セキュリティはプラグイン開発にとって非常に重要な要素であり、最初から良い習慣を身につけることが不可欠です。
概要
このチュートリアルを通じて、私たちはWordPressプラグイン開発の完全なプロセスを完了しました。ゼロから始めて開発環境を構築し、規格に準拠したプラグインのメインファイル構造を作成しました。また、フッターにテキストを追加したり記事のタイトルを変更したりする機能を実装することで、WordPressが機能するためのアクションフックとフィルターフックの基本的な使い方を深く理解しました。最後に、プラグインに基本的な管理ページを追加し、データの検証、権限チェック、出力のエスケープ処理などのセキュリティ対策の重要性についても説明しました。
このシンプルな「Hello World」レベルのプラグインには、商用プラグインに必要な核心要素がすでに含まれています:標準的な構造、フックの使用、バックエンドインターフェース、そしてセキュリティ対策です。これを出発点として、WordPressのSettings APIを統合して本格的なオプションを作成したり、カスタムのデータベーステーブルを作成したり、より複雑なショートコードやツールを開発したりすることができます。公式の開発マニュアルを継続的に学び、優れたオープンソースプラグインのコードを参考にすることが、スキルを向上させる最良の方法です。
FAQ よくある質問
###: WordPressプラグインのデバッグ方法は?
WordPressのデバッグモードを有効にすることが第一歩です。あなたの… wp-config.php ファイルの中で、 WP_DEBUG 定数の値を以下のように設定します: true。さらに設定を行うこともできます。 WP_DEBUG_LOG ために trueエラー情報を以下の場所に記録してください: /wp-content/debug.log ファイル内では、エラーメッセージが直接ページ上に表示されてユーザーに影響を与えることがないようにしてください。
さらに、ブラウザの開発者ツール(F12)の「Console」(コンソール)や「Network」(ネットワーク)パネルを使用してJavaScriptのエラーやAPIリクエストを確認したり、XdebugなどのPHPデバッグツールをコードエディタ(例:VS Code)と統合してブレークポイントを設定してデバッグを行うことも、非常に効率的なプロフェッショナルなデバッグ手法です。
なぜ私のプラグインが有効化される際に「致命的なエラー」が発生するのでしょうか?
これは通常、PHPの文法エラー、または存在しない関数やクラスが呼び出されたために発生します。まず、WordPressのデバッグログを確認してください(上記で説明した通り)。エラーメッセージには、問題が発生したファイルとその行番号が明確に記載されています。
よくある原因には、セミコロンの欠落、括弧の不一致、引用符の不適切な使用、必要なファイルが含まれていないにもかかわらず関数が呼び出されること、プラグインが無効になっているにもかかわらずコードが実行されようとすることなどがあります。PHPのバージョンが要件を満たしていることを確認し、すべての関数が使用される前に正しく定義されているかを確認してください。
どうやって私のプラグインを多言語対応(国際化)にできるでしょうか?
WordPressはGNU gettextフレームワークを使用して国際化(i18n)とローカライゼーション(l10n)を実現しています。まず、チュートリアルに従って、メインファイルのヘッダー情報内で正しく設定を行う必要があります。 Text Domain(例えば) my-first-pluginそして Domain Path。
プラグインのコード内で、翻訳が必要なすべての文字列については、翻訳関数を使用してそれらをラップします。例えば:__( ‘文本’, ‘my-first-plugin’ ) または _e( ‘文本’, ‘my-first-plugin’ )その後、Poeditのようなツールを使用してコード内のこれらの文字列をスキャンし、.potテンプレートファイルを生成します。そして、対応する言語(例えば中国語zh_CN)の.poおよび.moファイルを作成し、適切な場所に配置します。 /languages/ ディレクトリ内にあります。
プラグイン開発において、データベースと安全にやり取りするにはどうすればよいでしょうか?
絶対に、ユーザーの入力をそのまま使ってSQL文を直接書いてはいけません。WordPressが提供するデータベース操作用のクラスを使用する必要があります。 $wpdbそれは、次のような機能を提供します: $wpdb->prepare() このような方法を用いると、SQLクエリに対して安全な準備文処理を行うことができ、SQLインジェクションを効果的に防ぐことができます。
例えば、データを検索する際には次のように記述します:
global $wpdb;
$user_input = $_POST['some_input'];
$safe_query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}table WHERE column = %s", $user_input );
$results = $wpdb->get_results( $safe_query ); 同時に、ユーザーが入力したデータに対して厳格な検証とクリーニングを行います。例えば、以下のような処理を使用することができます: sanitize_text_field() などの関数です。
次はどうする?
拡大読書と実践的知識
以下は、この記事のトピックに関連しており、さらに深く読むのに適している。あなたの現在の問題に最も近い記事から優先順位をつけ、徐々に周辺のトピックに広げていく方が良い場合が多い。