Blog スタッフブログ

PHP システム開発

[WordPress]プラグイン制作_管理画面で自作テーブルのデータの一覧表示

システム開発担当のTFです。

※WordPress6.2対応

前回

  [WordPress]プラグイン制作_DBテーブルの更新

やり方

  • 管理画面にメニューを追加する
  • 一覧表示に必要なリソースを読み込む
  • 追加されたページで、自作テーブルから情報を読み取り一覧表示を行う

参考

  管理メニューの追加
  【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;
}