プラグインからWordPress開発を学ぶ理由は何でしょうか?
WordPressの核心的な設計哲学の一つはその高い拡張性であり、プラグインがこの特徴を実現するための主要な手段です。テーマを直接変更することと比べて、functions.phpファイルと比較して、独立したプラグインを作成することには顕著な利点があります。プラグインは機能ロジックとテーマの外観を分離するため、ウェブサイトのテーマを変更してもコア機能はそのまま保持されます。これにより、プラグインはより組織的でメンテナンスしやすくなり、コードの再利用、バージョン管理、他の開発者との共有が容易になります。
技術的な観点から見ると、プラグインとは本質的に1つまたは複数のPHPファイルであり、特定のWordPressの規格に従って作成されており、WordPressのシステム内に配置されるものです。/wp-content/plugins/ディレクトリ内にあります。WordPressが初期化される際には、このディレクトリをスキャンし、すべてのアクティブなプラグインのコードを読み込みます。これにより、プラグインを通じてWordPressのあらゆる部分をほぼ無制限に変更したり拡張したりすることができます。シンプルなショートコードの追加から、複雑な管理パネルの作成まで、さまざまなことが可能です。
自分の最初のプラグインの基本構造を構築しましょう。
WordPressプラグインを作成する第一歩は、その基本ファイル構造を確立することです。プラグインが1つのファイルだけで構成されている場合もありますが、適切な構造を持つことで長期的なメンテナンスが容易になります。
推薦図書 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
*/ プラグインのコアクラスを定義する
コードの封装性を保ち、名前の衝突を避けるための最善の方法は、オブジェクト指向プログラミングを使用し、プラグインのすべての機能を1つのクラスにまとめることです。このクラスはメインファイル内で定義します。
if ( ! class_exists( 'My_First_Plugin' ) ) {
class My_First_Plugin {
/**
* 构造方法,用于初始化插件
*/
public function __construct() {
// 初始化钩子
$this->init_hooks();
}
/**
* 初始化WordPress动作和过滤器钩子
*/
private function init_hooks() {
// 钩子将在这里添加
}
}
// 实例化插件类
new My_First_Plugin();
} if ( ! class_exists( 'My_First_Plugin' ) )これはセキュリティチェックであり、クラスが重複して定義されるのを防ぐためのものです。__construct()これはクラスのコンストラクタであり、クラスがインスタンス化される際に自動的に呼び出されます。その中で、プライベートメソッドを呼び出しています。init_hooks()すべてのフックの登録を一元管理するために。
フックシステムを利用して機能を追加する
WordPressのフック(Hook)システムは、そのイベント駆動型アーキテクチャの核心であり、アクション(Actions)とフィルター(Filters)に分かれています。アクションを使用すると、特定のタイミングでコードを実行することができ、フィルターを使用するとデータを変更することができます。
推薦図書 WordPressプラグイン開発入門から上級者へ:カスタム機能の作成方法を丁寧に解説。
为文章内容添加自定义版权
よくある要求の一つに、各記事の末尾に自動的に著作権情報を追加することがあります。これは以下の方法で実現できます:the_contentフィルターを使用して実現します。私たちは…init_hooks()このフィルターをメソッドに追加してください。
まず、更新します。init_hooks()方法:
private function init_hooks() {
// 使用过滤器在文章内容后追加版权信息
add_filter( 'the_content', array( $this, 'append_copyright_notice' ) );
} ここでは、add_filter()この関数は、私たちのクラス内にあるものを処理します。append_copyright_noticeメソッドがマウントされました。the_contentフィルター上です。次に、このコールバックメソッドを定義する必要があります。
/**
* 在文章内容后追加版权信息的回调函数
*
* @param string $content 原始文章内容。
* @return string 追加了版权信息后的内容。
*/
public function append_copyright_notice( $content ) {
// 仅在主查询的单篇文章页面显示
if ( is_single() && in_the_loop() && is_main_query() ) {
$copyright_text = sprintf(
'<p><small>© 著作権声明:本稿は%sにて初めて公開されました。転載する場合は出典を明記してください。</small></p>',
get_bloginfo( 'name' )
);
$content .= $copyright_text;
}
return $content;
} この方法は、原始データを受け取ります。$content条件判断を通じてis_single()、in_the_loop()とis_main_query()私たちは、著作権情報がフロントエンドの単一記事ページの本文部分にのみ表示され、ページ全体、要約、または管理バックエンドに影響を与えないようにしています。その後、著作権テキストを作成し、文字列結合演算子を使用してそれを組み立てます。.=元の内容の後にそれを追加し、最終的に修正された内容を返します。
管理メニューページを作成します。
プラグインに簡単な設定ページを追加することもよくある機能です。これにはアクションフックを使用する必要があります。私たちはトップレベルの管理メニューページを作成します。
はい。init_hooks()その中にもう一つアクションを追加してください:
推薦図書 WordPressプラグイン開発入門ガイド:ゼロから始めて、あなたの最初の機能モジュールを作成する。
private function init_hooks() {
add_filter( 'the_content', array( $this, 'append_copyright_notice' ) );
// 添加管理菜单
add_action( 'admin_menu', array( $this, 'add_admin_menu_page' ) );
} WordPressが管理メニューを構築する際に、以下の処理がトリガーされます:admin_menuアクションです。次にこれを定義しましょう。add_admin_menu_page()方法。
/**
* 向WordPress管理后台添加一个自定义菜单页面
*/
public function add_admin_menu_page() {
add_menu_page(
'我的第一个插件', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限要求
'my-first-plugin-page', // 菜单别名
array( $this, 'render_admin_page' ), // 回调函数,用于输出页面内容
'dashicons-admin-plugins', // 图标
80 // 菜单位置
);
} add_menu_page()この関数はWordPressのコアAPIであり、トップレベルのメニューを登録するために使用されます。manage_optionsこれは権限識別子であり、管理者のみがこのメニューを見ることができることを意味します。私たちはそれを指定しました。render_admin_pageページコンテンツをレンダリングするための方法です。
/**
* 渲染管理页面内容的回调函数
*/
public function render_admin_page() {
?>
<div class="wrap">
<h1>私の最初のプラグイン管理ページ</h1>
<p>おめでとうございます!管理ページを備えたWordPressプラグインを無事に作成しました。</p>
<p>これはシンプルなサンプルページで、ここにフォームを追加したり、オプションを設定したりすることができます。</p>
<p>現在のサイト名は:<strong><?php echo esc_html( get_bloginfo( 'name' ) ); ?></strong></p>
</div>
あなたのアカウントは有効です。あなたはログインしています。 国際化およびセキュリティのベストプラクティスを実現する
標準的なプラグインは、国際化とセキュリティを考慮に入れている必要があります。これにより、世界中のユーザーが安全にそのプラグインを利用できるようになります。
プラグインに多言語対応を実装する
国際化(i18n)により、プラグインのテキストを翻訳することが可能になります。私たちはすでにプラグインのヘッダー内のコメントでそのことを明記しています。Text Domain: my-first-plugin現在、これを使用する必要があります。__()または_e()関数を使って、出力されるすべての文字列をラップします。
まず、__construct()またはinit_hooks()翻訳ファイルを読み込むためのアクションを追加してください:
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) ); 「ロード処理の翻訳方法を定義する:」
public function load_textdomain() {
load_plugin_textdomain(
'my-first-plugin',
false,
dirname( plugin_basename( __FILE__ ) ) . '/languages/'
);
} その後、以前に出力されたテキストがある場所を修正してください。例えば、更新する必要があります。append_copyright_noticeメソッド内のテキスト:
$copyright_text = sprintf('<p><small>© %s:%s、%s。</small></p>',
__( '版权声明', 'my-first-plugin' ),
sprintf( __( '本文首发于%s', 'my-first-plugin' ), get_bloginfo( 'name' ) ),
__( '转载请注明出处', 'my-first-plugin' )
); 同様に、管理ページ内の文字列も更新してください:
<h1><?php esc_html_e( '我的第一个插件管理页面', 'my-first-plugin' ); ?></h1>
<p><?php esc_html_e( '恭喜!你已经成功创建了一个带有管理页面的WordPress插件。', 'my-first-plugin' ); ?></p> esc_html_e()この関数は、翻訳されたテキストを出力すると同時にHTMLエスケープも行っており、セキュリティが向上しています。
エスケープ処理と入力値の検証
プラグイン開発において、フロントエンドやブラウザに出力されるすべてのデータはエスケープ処理を行う必要があります。また、ユーザーや外部ソースからのすべての入力データについては検証とクリーニングを行う必要があります。
サイト名を出力する際には、すでに必要な処理を行っています。esc_html()これはクロスサイトスクリプティング(XSS)攻撃を防ぐための重要な手順です。関数名が「_e」で終わっている場合(これは「echo」を意味します)、その関数は通常、エスケープ処理された内容をそのまま出力します。一方で「__」で始まる関数は翻訳後の文字列を返すため、出力する前に自分でエスケープ処理を行う必要があります。
もし将来私たちの管理ページでフォームの送信処理を行う必要がある場合、必ずそれに対応する機能を使用しなければなりません。wp_verify_nonce()これを使用してリクエストを検証します。sanitize_text_field()、intval()ユーザーが入力したデータをクリーニングするために、` Cleanser`などの関数を使用し、その後でデータベースに保存したり、その他の処理を行ったりします。これはウェブサイトのセキュリティを守るために欠かせないステップです。
概要
このガイドに沿って、基本的なプラグインファイルの構造を作成するところから始め、徐々にプラグインの核心機能を実現してきました。オブジェクト指向の方法でコードを組織する方法や、WordPressの強力なアクションやフィルターフックを利用してプラグインの実行プロセスに介入し、記事の内容にカスタム機能を追加する方法を学びました。また、管理画面も作成しました。さらに、国際化(i18n)やセキュアな出力/入力といった、プロフェッショナルなプラグイン開発において非常に重要な要素についても検討しました。
これはあくまで出発点に過ぎません。このフレームワークを基に、さらに多くの可能性を探求することができます。設定オプションの追加、カスタムの記事タイプや分類法の作成、ウィジェット(Widget)の開発、AJAXによるインタラクションの実装、ショートコード(Shortcode)の処理などです。WordPressの公式プラグインマニュアルやコアコードを読むことが、深く学ぶための最良の方法であることを忘れないでください。今や、ゼロからWordPressプラグインを構築するための基本スキルを身につけましたので、自分のアイデアを現実に変えることができるようになりました。
FAQ よくある質問
プラグインは必ずクラスを使用して開発しなければなりませんか?
必ずしもそうとは限りません。WordPressのプラグインは、純粋なプロシージャベースの関数を使用して作成することもできます。しかし、クラス(オブジェクト指向プログラミング)を使用することが推奨されます。なぜなら、クラスを使用することでコードをより整理しやすくなり、変数やメソッドを独立した名前空間に封じ込めることができるため、他のプラグインやテーマの関数名との衝突を効果的に避けることができ、コードの保守性や再利用性が向上するからです。
プラグインをデバッグするには?
WordPressの開発においてよく使われるデバッグ方法は、`WP_DEBUG`を有効にすることです。これを行うには、ウェブサイトのルートディレクトリ内にある`wp-config.php`ファイルを編集し、`WP_DEBUG`の設定を`true`に変更します。wp-config.phpファイル内で、以下の行を見つけて修正してください:define( 'WP_DEBUG', true );また、複数の設定を同時に行うこともできます。define( 'WP_DEBUG_LOG', true );このようにすると、エラーメッセージが記録されます。/wp-content/debug.logそのファイルはページ上には表示されません。また、ブラウザの開発者ツールのコンソール(Console)やネットワーク(Network)タブ、そしてPHPのエラーログを利用することも、問題を特定するのに有効な方法です。
プラグイン内で直接jQueryを使用することはできますか?
はい、可能です。WordPressのコアにはjQueryライブラリが組み込まれています。あなたのカスタムJavaScriptファイルや依存関係を正しく、安全に読み込むためには、以下の方法を使用するべきです:wp_enqueue_script()関数を定義し、依存関係のある要素を含む配列の中でその関数を宣言します。array( 'jquery' )このようにすることで、WordPressはjQueryをあなたのスクリプトよりも先に読み込むようになります。プラグイン内にjQueryのCDNリンクを直接コードで記述することは絶対に避けてください。そうすると、競合やセキュリティ上の問題が発生する可能性があります。
プラグインをリリースする前に、どのようなチェックを行う必要がありますか?
在发布插件前,建议进行以下检查:确保代码符合WordPress编码标准;完成国际化准备,所有用户可见字符串都已使用翻译函数包裹;在多个WordPress版本和PHP版本下进行兼容性测试;检查所有输出是否已正确转义,所有输入是否已妥善验证和清理;提供一个清晰的卸载方法,可以删除插件创建的所有数据库选项和表(如果需要);编写详细的readme.txtこれらの手順により、プラグインの専門性と信頼性が向上します。
次はどうする?
拡大読書と実践的知識
以下は、この記事のトピックに関連しており、さらに深く読むのに適している。あなたの現在の問題に最も近い記事から優先順位をつけ、徐々に周辺のトピックに広げていく方が良い場合が多い。