一つのパネルを追加するだけなら、関数内で何とか作りこめますが、DBで取得した情報をパネル別にしたいということとなると、パネルを追加する関数を複数回行う必要があります。
もちろんパネルを追加するたびに必要な情報を取り出す形をとればいいと思うんですが、それだとどの情報を取り出すのかというキーをどうやって渡せばいいのだろうか?と悩みました。
やはり作業しやすいのは、情報を取り出したあと、その情報分パネルの追加関数に引数でデータを渡して実行という方法だと思うんです。
しかし、前回のダッシュボードに実行する方法は以下のような方法。
// ダッシュボードに独自のパネルを追加する
add_action('wp_dashboard_setup', 'my_dashboard_panel');
// パネルを作成する関数
function my_dashboard_panel(){
global $wp_meta_boxes;
wp_add_dashboard_widget('custom_my_panel', 'よく使う項目', 'panel_text'); // 任意の認識ID(適当), パネルのタイトル, パネル内容メソッド名
}
// パネル内容メソッド
function panel_text(){
echo '<h1>独自パネル</h1>
<p>テキスト</p>
<p><a href="リンク先URL">リンクも出来る</a></p>';
}
このpanel_text()にどうやってmy_dashboard_panel()内にあるwp_add_dashboard_widgetからデータを渡せばいいのだろうか?と考えていました。
最初はglobal変数を作成し、代入してからpanel_text()内で引継ぎ使用するという考えでしたが、上手くいかず。
関数をしていする引数があるということは、その関数にデータ渡す方法もあっていいんじゃないかなー?と思い調べてみると・・・
ありました!これは嬉しい!
ちゃんとmy_add_dashboard_widget()にありました。この関数は以下のような引数を用意しています。
wp_add_dashboard_widget( string $widget_id, string $widget_name, callable $callback, callable $control_callback = null, array $callback_args = null, string $context = 'normal', string $priority = 'core' )
五番目の$callback_argsが、$callbackにしていする実行させる関数にデータを渡す引数だそう。array型の為、ちゃんとデータ渡すときは配列で送るようにします。
そして、実行する側も受け取る引数を用意する必要があるそうです。
以下のような内容で情報を受け取ることができました。
function myplugin_dashboard_widgets(){
global $wp_meta_boxes;
require_once( ABSPATH.'wp-load.php');
global $wpdb;
global $db_table;
// DBから情報を取り出す
$results = $wpdb->get_results("SELECT * FROM ". $db_table['mymemo'] ." WHERE dashboard_flag = 'する' and del = 0 ORDER BY created DESC");
// ヒットしたデータがある場合
if ($results) {
// 情報分パネル追加を繰り返す
foreach ($results as $key => $value) {
$data_ary['title'] = $value->memo_title;
$data_ary['text'] = $value->memo_text;
wp_add_dashboard_widget('mypluguin_widget'.$key, $value->data_title, 'mypluguin_dashboard_box', '', $data_ary);
}
}
}
// ダッシュボードに表示するパネル
function mypluguin_dashboard_box($post, $data_ary){
echo "<div>". nl2br($data_ary["args"]['title'])."</div>";
echo "<div>". nl2br($data_ary["args"]['text'])."</div>";
}
add_action('wp_dashboard_setup', 'mypluguin_dashboard_widgets');
気づいた点は、データを渡したときに中身を確認すると、[“args”]というキーが含まれていました。それと、パネル表示関数の第一引数の部分は何も渡ってきていませんでした。とりあえず第二引数に渡ってきたデータが入っていました。
もっと他に良いやり方もあったかも知れませんが、ひとまずデータ渡す方法はあるという事が分かっただけでも今回はめちゃくちゃデカい収穫でした。