admin-post.php、admin-ajax.php、admin.phpの3つのエンドポイントの違い
WordPressでは、管理画面やデータ処理に関連するエンドポイントがいくつか用意されています。その中でも、admin-post.php、admin-ajax.php、admin.phpは頻繁に使われます。それぞれの役割と使い分け方を解説します。
admin-post.phpの特徴と使用例
admin-post.phpは、フォーム送信処理やリダイレクト処理に特化したエンドポイントです。以下に特徴をまとめます。
- フォーム送信後の処理専用:POST/GETリクエストを受け取り、適切な処理を実行します。
- UIを持たない:管理画面のレイアウトは表示せず、データ処理専用のエンドポイントです。
- 非ログインユーザー対応:
admin_post_nopriv_
フックで非ログインユーザーのリクエストも処理可能です。
admin-post.phpのコード例
例えば、VCFファイルをエクスポートする処理を実装する場合:
add_action('admin_post_export_customer_vcf', function() {
// データ処理例: VCFエクスポート
header('Content-Type: text/vcard');
echo 'BEGIN:VCARD';
echo 'FN:Example User';
echo 'END:VCARD';
exit;
});
admin-ajax.phpの特徴と使用例
admin-ajax.phpは、非同期データ処理に特化したエンドポイントです。JavaScriptからリクエストを送り、リアルタイムでデータを送受信できます。
- 非同期リクエスト対応:ページをリロードせずにデータの処理が可能。
- 動的なUI更新に最適:ユーザー操作に応じてリアルタイムで画面を更新できます。
- アクションフック:
wp_ajax_
とwp_ajax_nopriv_
を使用して処理を定義します。
admin-ajax.phpのコード例
JavaScriptからデータを送信して処理を行う例:
// JavaScriptコード例
jQuery.ajax({
url: ajaxurl, // wp_localize_scriptで定義
type: 'POST',
data: {
action: 'my_ajax_action',
nonce: my_ajax_obj.nonce,
},
success: function(response) {
console.log(response.message);
}
});
// PHPコード例
add_action('wp_ajax_my_ajax_action', function() {
check_ajax_referer('my_ajax_nonce', 'nonce');
// データ処理例
wp_send_json_success(['message' => '処理が完了しました']);
});
// 非ログインユーザー用
add_action('wp_ajax_nopriv_my_ajax_action', function() {
// 同様の処理
});
admin.phpの特徴と使用例
admin.phpは、管理画面のUI構築に使用されます。主にプラグインやテーマの設定ページを作成する際に便利です。
- 管理画面UI表示:ヘッダー、メニュー、フッターを含む完全な管理画面を提供。
- アクションフック:
admin_menu
を使用してメニューに新しいページを追加します。
admin.phpのコード例
プラグイン設定ページを追加する例:
add_action('admin_menu', function() {
add_menu_page(
'カスタム設定', // ページタイトル
'設定', // メニュータイトル
'manage_options', // 権限
'custom-settings', // スラッグ
'custom_settings_page' // コールバック関数
);
});
function custom_settings_page() {
echo '<h1>カスタム設定ページ</h1>';
}
admin-post.php
と admin.php
の違い
特徴 | admin-post.php | admin.php |
---|---|---|
主な用途 | フォーム送信処理 | 管理画面UI表示 |
ページ遷移 | あり | あり |
レスポンス | リダイレクト | HTML |
アクションフック | admin_post_ | admin_menu |
特徴的な機能 | POST/GETリクエスト処理、リダイレクト対応 | 管理画面のヘッダー、メニュー、フッターを含むUI表示 |
admin-ajax.php
の特徴
特徴 | admin-ajax.php |
---|---|
主な用途 | 非同期データ処理 |
ページ遷移 | なし |
レスポンス | JSON形式、その他データ形式 |
アクションフック | wp_ajax_ (ログインユーザー)wp_ajax_nopriv_ (非ログインユーザー) |
3つのファイルの比較表
特徴 | admin-post.php | admin-ajax.php | admin.php |
---|---|---|---|
主な用途 | フォーム送信処理 | 非同期データ処理 | 管理画面UI表示 |
ページ遷移 | あり | なし | あり |
レスポンス | リダイレクト | JSON/データ | HTML |
アクションフック | admin_post_ | wp_ajax_ | admin_menu |
まとめ
WordPressでの開発では、それぞれのエンドポイントを適切に使い分けることが重要です。
- admin-post.php:フォーム送信処理に最適。
- admin-ajax.php:非同期処理やリアルタイムなデータ送受信に使用。
- admin.php:管理画面の設定ページなどUIを提供する場面で活用。