WordPressプラグインの基本構造とファイル
標準的なWordPressプラグインには、少なくとも1つのメインファイルが必要です。このメインファイルは通常、プラグインの名前で命名されます。例えば: my-first-plugin.phpこのファイルの冒頭には、WordPressシステムにプラグインのメタ情報を宣言するための特定のヘッダーコメントを含める必要があります。これらの情報には、プラグインの名前、説明、バージョン、作者などが含まれ、バックエンドの「プラグイン」管理ページに表示されます。
メインファイルの他に、機能が充実したプラグインには通常、コードを整理するための他のディレクトリやファイルが含まれています。一般的なディレクトリ構造には、CSSやJavaScriptファイルを格納するためのディレクトリなどがあります。/assets目次には、PHPのクラスファイルが含まれています。/includes目次、およびユーザーインターフェーステンプレート用のもの/templates目次。このモジュール化された構造は、コードのメンテナンスやチームワークの促進に役立ちます。
プラグインのメインファイルは、そのプラグインのすべての機能にアクセスするための入口点です。メタ情報を宣言するだけでなく、主な役割としてはフックの登録や無効化、必要な依存ファイルの読み込み、そしてプラグインのコア機能の初期化などがあります。適切なファイル構成により、機能が複雑であってもプラグインの構造を明確に保つことができます。
推薦図書 WordPressプラグイン開発入門ガイド。
最初の基本的なプラグインを作成しましょう。
まずは、最もシンプルな「Hello World」プラグインの作成から始めましょう。これにより、プラグインの作成手順や基本的なライフサイクルに慣れることができます。
プラグイン情報とメイン関数の定義
まず、あなたのローカルのWordPressのインストールディレクトリ内で…/wp-content/plugins/パス内に「hello-world」という名前の新しいフォルダを作成してください。そのフォルダ内に、さらに「...“(続きがないため省略)という名前のファイルを作成してください。hello-world.phpのファイルです。
このファイルの冒頭に、プラグインヘッダー情報を追加する必要があります。典型的なプラグインヘッダーの例は以下の通りです:
<?php
/**
* Plugin Name: 你好世界示例插件
* Plugin URI: https://yourwebsite.com/hello-world
* Description: 这是一个用于演示的简单WordPress插件。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://yourwebsite.com
* License: GPL v2 or later
* Text Domain: hello-world
* Domain Path: /languages
*/ 次に、このプラグインに簡単な機能を追加しましょう:記事の内容の最後に自動的にテキストを追加する機能です。これを実現するには…the_contentフィルターを使用して実現します。メインファイルのヘッダー情報の後に以下のコードを追加してください:
function hello_world_add_footer_text( $content ) {
// 仅在单篇文章页面添加
if ( is_single() ) {
$footer_text = '<p><em>この文章は「你好世界」プラグインによって生成されました。</em></p>';
$content .= $footer_text;
}
return $content;
}
add_filter( 'the_content', 'hello_world_add_footer_text' ); プラグインの有効化と無効化の処理
プロフェッショナルなプラグインは、アクティブ化および非アクティブ化時のロジックを適切に処理する必要があります。例えば、プラグインがアクティブ化されるとデータベースのテーブルを作成したり、デフォルト設定を設定したりする必要があるかもしれません。また、非アクティブ化されると一時的なデータを削除する必要があるかもしれません。私たregister_activation_hookとregister_deactivation_hook関数を使用して、対応するフックを登録します。
推薦図書 ワードプレスのプラグイン開発を初心者から上級者まで:カスタム機能と効率的な拡張の構築。
このコードをメインファイルに追加してください。
// 插件激活时执行的操作
function hello_world_activate() {
// 例如:添加一个选项到数据库
if ( ! get_option( 'hello_world_installed' ) ) {
add_option( 'hello_world_installed', time() );
}
// 可以在这里刷新固定链接规则,以确保新注册的URL结构生效
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'hello_world_activate' );
// 插件停用时执行的操作
function hello_world_deactivate() {
// 例如:删除我们创建的临时选项(谨慎操作,用户数据通常不删除)
// delete_option( 'hello_world_installed' );
// 清理重写规则
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'hello_world_deactivate' ); 上記の手順を完了すると、WordPressの管理画面(バックエンド)の「プラグイン」ページで「Hello World Example Plugin」を確認し、有効にすることができます。有効になると、どの記事にアクセスしても、コンテンツの下部に追加されたテキストが表示されるようになります。
WordPressのコアAPIを利用して機能を拡張する
WordPressは非常に豊富なAPIを提供しており、プラグイン開発者はこれらを利用してコアシステムと安全かつ標準的にやり取りすることができます。これらのAPIを習得することは、プロフェッショナルな開発を行う上で鍵となります。
アクションフックとフィルターの使用
アクションフック(Action Hooks)を使用すると、特定のタイミングで自分のコードを「挿入」して実行することができます。例えば、記事が公開されたときにWordPressがトリガーを発火させるように設定することもできます。save_postアクション。あなたは以下の方法で…add_action()この関数は、自身をこのフックにマウント(つまり、そのフックの処理ルーチンとして実行されるように設定)します。
function hello_world_on_post_publish( $post_id, $post, $update ) {
// 检查是否不是修订版本,并且是发布操作
if ( wp_is_post_revision( $post_id ) || $post->post_status != 'publish' ) {
return;
}
// 发送邮件通知或执行其他逻辑
// wp_mail( '[email protected]', '新文章已发布', '文章标题:' . $post->post_title );
}
add_action( 'save_post', 'hello_world_on_post_publish', 10, 3 ); フィルターフック(Filter Hooks)を使用すると、データを変更することができます。the_content例えば、フィルタリング機能を持つアプリケーションがその典型的な例です。もう一つのよくある例としては、記事のタイトルを変更するというケースが挙げられます。
function hello_world_modify_title( $title ) {
return '【推荐】' . $title;
}
// add_filter( 'the_title', 'hello_world_modify_title' ); // 谨慎使用,这会修改所有标题 管理メニューおよびオプションページの作成
多くのプラグインでは、設定を行うためのバックエンドインターフェースが必要です。WordPressには、管理バックエンドにトップメニューやサブメニューを簡単に追加するための関数が用意されています。
推薦図書 WordPressプラグイン開発をマスターしよう:ゼロから効率的なカスタム機能モジュールを構築する。
以下のコードは、簡単なオプションページを追加する方法、およびWordPressの設定APIを使用してオプションを安全に保存する方法を示しています。
// 步骤1:向管理后台添加一个菜单项
function hello_world_add_admin_menu() {
add_menu_page(
'你好世界设置', // 页面标题
'你好世界插件', // 菜单标题
'manage_options', // 所需权限
'hello-world-settings', // 菜单slug
'hello_world_settings_page', // 用于渲染页面的回调函数
'dashicons-admin-generic', // 图标(可选)
80 // 菜单位置
);
}
add_action( ‘admin_menu‘, ‘hello_world_add_admin_menu’ );
// 步骤2:定义设置页面的HTML内容
function hello_world_settings_page() {
?>
<div class="”wrap”">
<h1>「Hello World」プラグインの設定</h1>
<form method="”post”" action="/ja/”options.php”/" data-trp-original-action="”options.php”">
<?php
settings_fields( ‘hello_world_settings_group’ ); // 输出设置字段和非ce字段
do_settings_sections( ‘hello-world-settings’ ); // 输出设置部分
submit_button(); // 输出提交按钮
?>
<input type="hidden" name="trp-form-language" value="ja"/></form>
</div>
<?php
}
// 步骤3:注册设置、字段和章节
function hello_world_settings_init() {
// 注册一个新的设置项到“hello_world_settings_group”组
register_setting( ‘hello_world_settings_group’, ‘hello_world_custom_message’ );
// 在页面中新增一个章节
add_settings_section(
‘hello_world_settings_section’,
‘自定义消息设置’,
‘hello_world_settings_section_callback’,
‘hello-world-settings‘
);
// 向章节中添加一个字段
add_settings_field(
‘hello_world_message_field’,
‘前台显示的消息’,
‘hello_world_message_field_render’,
‘hello-world-settings’,
‘hello_world_settings_section’
);
}
add_action( ‘admin_init’, ‘hello_world_settings_init’ );
// 章节描述的回调函数
function hello_world_settings_section_callback() {
echo ‘<p>ここで、プラグインがフロントエンドで表示するメッセージの内容を設定します。</p>’;
}
// 字段渲染的回调函数
function hello_world_message_field_render() {
$option = get_option( ‘hello_world_custom_message’, ‘这是默认消息’ );
echo ‘<input type="”text”" name="”hello_world_custom_message”" value="”‘" . esc_attr( $option ) ‘“ size ="”40”" />’;
} 上記のコードを使用することで、WordPressの基準に準拠し、データを安全に保存できる設定ページをバックエンドで作成することができます。
プラグインのセキュリティ、パフォーマンス、およびリリース準備
プラグインを他人に共有したり、公式のディレクトリに提出する前に、その安全性、効率性、そして使いやすさを確認することが非常に重要です。
セキュリティのベストプラクティスに従ってください。
セキュリティはプラグイン開発において最優先事項です。最も重要な原則は、「ユーザーの入力を絶対に信じてはならない」ということです。ユーザーや外部ソースからのすべてのデータについては、$_GET, $_POST, $_COOKIEデータベースクエリに使用する前、ページに出力する前、またはシステムコマンドを実行する前には、必ず検証、クリーニング、またはエスケープ処理を行う必要があります。
HTMLに出力する内容については、以下の方法を使用してください:esc_html(), esc_attr()またはwp_kses_post()などの関数を使用してエスケープ処理を行います。
`echo ‘`‘<div class="”“‘" . esc_attr( $user_provided_class ) ‘“>’ . esc_html( $user_provided_content ) . ‘</div>’; データベースクエリにおいては、絶対に変数を直接SQL文に組み込んではいけません。必ず以下の方法を使用してください:$wpdb->prepare()この方法を用いて前処理を行います。
global $wpdb;
$user_id = 123;
$query = $wpdb->prepare(
“SELECT * FROM {$wpdb->prefix}my_table WHERE user_id = %d”,
$user_id
);
$results = $wpdb->get_results( $query ); さらに、すべてのユーザーがアクセスできるコールバック関数(フロントエンドのAJAXであれバックエンドの操作であれ)は、必ず以下の規則に従って使用しなければなりません:current_user_can()またはcheck_ajax_referer()などの関数を使用して、権限やセキュリティのチェックを行います。
プラグインのパフォーマンスを最適化する
パフォーマンスが悪いプラグインは、ウェブサイト全体のユーザー体験に悪影響を与えます。最適化にはいくつかの方法があります。例えば、キャッシュを適切に利用することで、ページが読み込まれるたびに複雑なデータベースクエリやリモートAPIの呼び出しを避けることができます。WordPressには「インスタントAPI(Transient API)」という機能も用意されています。(Transients API)一時的なデータを簡単に保存することができます。
// 尝试从缓存获取数据
$data = get_transient( ‘my_plugin_expensive_data’ );
if ( false === $data ) {
// 缓存中没有,执行昂贵操作
$data = expensive_database_query();
// 将结果缓存12小时
set_transient( ‘my_plugin_expensive_data’, $data, 12 * HOUR_IN_SECONDS );
} 次に、CSSやJavaScriptのファイルが必要なページでのみ読み込まれるようにしてください。そのためには、以下の方法を使用します:wp_enqueue_script()とwp_enqueue_style()関数によって、リソースの読み込みや依存関係を正確に制御することができます。バックエンドリソースについては、それらを適切な場所にマウントすることができます。admin_enqueue_scriptsフック(hook);フロントエンドのリソースについては、それにマウント(mount)する。wp_enqueue_scriptsフック。
国際化および公開の準備を行います。
プラグインを世界中のユーザーが利用できるようにするためには、国際化(i18n)は欠かせないステップです。つまり、ユーザーに表示されるすべてのテキストを特定の関数でラップする必要があるのです。
プラグイン内の文字列を以下のように変更してください:
echo “Hello World!”; 変更後の内容:
echo __( ‘Hello World!’, ‘hello-world’ ); その中で‘hello-world’それはプラグインのヘッダー内であなたが定義したものです。Text Domainその後、Poeditのようなツールを使用して生成することができます。.potテンプレートファイルを使用することで、翻訳者はそれに基づいて異なる言語のコンテンツを作成することができます。.poと.moファイルです。これらの翻訳ファイルをプラグインのヘッダー部分に配置してください。Domain Path指定されたディレクトリ(例えば…)/languages)その下に置いてください。
公開する前に、必ず詳細な説明文を作成してください。readme.txt提出するファイルは、WordPress公式の要件に準拠した形式でなければなりません。ファイルにはプラグインの説明、インストール手順、よくある質問などが含まれている必要があります。これはWordPressのプラグインディレクトリに提出する際の必須条件です。また、プラグインのコード内には詳細なPHPドキュメントコメントを追加することが推奨されます。これにより、他の人があなたのコードを理解しやすくなるだけでなく、プロフェッショナリズムの表れにもなります。
概要
この記事では、ゼロからプロフェッショナルなWordPressプラグインを開発するまでの全プロセスを体系的に紹介しています。まず、プラグインの基本構造を理解した上で、アクティベート/ディアクティベートのロジックを備えたシンプルなプラグインを実際に作成しました。その後、WordPressの強力なアクションとフィルターフックシステムについて詳しく説明し、それらをコアシステムと深く統合する方法を学び、標準的な管理設定ページも作成しました。最後に、プラグイン開発において欠かせないセキュリティ対策、パフォーマンス最適化の手法、そしてグローバルに公開するための国際化対応についても強調しました。これらの核心的な知識とスキルを身につければ、安全で効率的かつメンテナンスしやすいプロフェッショナルレベルのWordPressプラグインを構築することができ、個人のニーズを満たすだけでなく、より広範なユーザー層にサービスを提供することができるようになります。
FAQ よくある質問
WordPressプラグインを開発するには、どのような基礎知識が必要ですか?
WordPressプラグインを開発するには、まずPHPプログラミングのしっかりとした基礎が必要です。なぜなら、プラグインのコードは主にPHPで構成されているからです。また、HTML、CSS、JavaScriptについても基本的な知識が必要であり、これによりフロントエンドの表示やユーザーインタラクションを処理できるようになります。最も重要なのは、WordPressのコアコンセプト、つまりフック(Hooks)、ショートコード(Shortcodes)、カスタム記事タイプ(Custom Post Types: CPT)、データベース操作に精通していることです。$wpdbの使用方法。
開発中のWordPressプラグインをどのようにデバッグするか?
有効なデバッグ方法の一つは、WordPressのデバッグ機能を有効にすることです。WP_DEBUG「モード。あなたの…」wp-config.phpファイルの中で、define( ‘WP_DEBUG’, false );に変えるdefine( ‘WP_DEBUG’, true );また、複数の機能を同時に有効にすることもできます。WP_DEBUG_LOGエラーをログファイルに記録するか、またはその機能を有効にします。WP_DEBUG_DISPLAYページ上にエラーメッセージを表示します(開発環境限定)。さらに、ブラウザのデベロッパーツール(コンソールやネットワークタブ)を使用することは、フロントエンドのJavaScriptやAJAXリクエストをデバッグするために不可欠です。
私のプラグインは他のプラグインとどのように互換性を持たせることができますか?
良好な互換性を確保するための鍵は、WordPressのコーディング基準に従い、グローバル変数や関数名の使用に注意することです。プラグインの関数、クラス、定数に一意の接頭辞を付けることは、名前の衝突を避けるための最善の方法です。例えば、以下のようにします:myplugin_開発者が定めた略語をプレフィックスとして使用することもあります。他のプラグインと関連する可能性のあるコンテンツ(記事の内容やタイトルなど)を変更する際には、使用するフィルタリングコールバック関数が適切な優先順位を持っていることを確認してください。add_filter(3番目のパラメータを使用し、その戻り値の形式に注意してください。また、適切に利用してください。)class_exists()またはfunction_exists()あるクラスや関数が既に定義されているかをチェックすることで、条件付きの読み込みを実現したり、代替案を用意したりすることができます。
プラグインの開発において、オブジェクト指向プログラミング(OOP)の知識が必要かどうか?
虽然使用传统的面向过程编程方式也可以开发功能完整的插件,但强烈推荐学习和使用面向对象编程(OOP)。OOP能够更好地组织代码,通过类(Class)来封装功能,提高代码的可复用性和可维护性。对于中大型插件项目,使用OOP结合命名空间(Namespaces)和自动加载(Autoloading)是行业内的标准做法,它能让你更清晰地区分不同模块,并显著降低代码的耦合度。
次はどうする?
拡大読書と実践的知識
以下は、この記事のトピックに関連しており、さらに深く読むのに適している。あなたの現在の問題に最も近い記事から優先順位をつけ、徐々に周辺のトピックに広げていく方が良い場合が多い。