WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
PHP
システム開発
[WordPress]プラグイン制作_管理画面で自作テーブルのデータの一覧表示
システム開発担当のTFです。
※WordPress6.2対応
前回
やり方
- 管理画面にメニューを追加する
- 一覧表示に必要なリソースを読み込む
- 追加されたページで、自作テーブルから情報を読み取り一覧表示を行う
参考
管理メニューの追加
【WordPress】admin_enqueue_scriptsアクション等の使い方と重要な注意点
関数リファレンス/wpdb Class
サンプル
<?php
/*
Plugin Name: SamplePlugin
Description: サンプルプラグイン
Version: 1.0
Author: MIX
Licence: GPL v2
Licence URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
// DBは省略(前回要参照)
// ディレクトリとURLの定義
define( 'SAMPLE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'SAMPLE_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
// 管理画面判定
if( is_admin() ){
// 管理画面にメニュー追加
add_action('admin_menu', 'add_admin_menu');
// リソースの読み込み
add_action('admin_enqueue_scripts', 'admin_enqueue_resources');
}
// 管理画面にメニュー追加
function add_admin_menu()
{
// add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
add_menu_page(
'サンプルページ', // ページタイトル(title)
'サンプル', // メニュータイトル
'manage_options', // メニュー表示するユーザーの権限
'sample', // メニューのスラッグ
'sample_page', // メニュー表示時に使われる関数
'dashicons-feedback' // メニューのテキスト左のアイコン
// メニューを表示する位置 ( デフォルトは一番下 )
);
}
// ページの表示
function sample_page()
{
// データの一覧取得
$datas = getSampleDatas();
// viewファイルを読み込み表示する
include( SAMPLE_PLUGIN_DIR . "/views/admin/index.php");
}
// 自作テーブルデータの一覧取得
function getSampleDatas()
{
global $wpdb;
$table_name = $wpdb->prefix . "sample";
$params = [];
$sql = "SELECT * FROM $table_name ;";
// 安全な置き換え
$query = $wpdb->prepare( $sql, $params );
// 配列で返す
return $wpdb->get_results( $query, ARRAY_A );
}
// リソースの読み込み
function admin_enqueue_resources($hook)
{
// menu_slugの確認( $hookが toplevel_page_sample 等になる)
if( substr( $hook , -strlen( 'sample' ) ) == 'sample' ){
wp_register_style( 'sample.admin', SAMPLE_PLUGIN_URL. 'css/sample_admin.css', [], '1.0' );
wp_enqueue_style( 'sample.admin');
}
}
// ベースのURLを返す
function getBaseUrl() {
return (is_ssl() ? 'https' : 'http') . '://' . $_SERVER["HTTP_HOST"] . $_SERVER['SCRIPT_NAME'] . '?page=sample';
}
<div class="wrap">
<h1>サンプル一覧</h1>
<table class="table_list">
<tr>
<th>日時</th>
<th>タイトル</th>
<th></th>
</tr>
<?php foreach($datas AS $data): ?>
<tr>
<td><?= $data['created_at'] ?></td>
<td><?= $data['title'] ?></td>
<td>
<a href="<?= getBaseUrl() ?>&action=edit&id=<?= $data['id'] ?>">編集</a>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
.table_list {
width: 100%;
border: 1px solid #000;
}
.table_list th {
padding: 10px;
font-weight: bold;
text-align: center;
background: #aaaaff;
}
.table_list td {
padding: 10px;
}