だから、私は数日間この問題を見つめてきました。私はPHP開発において私のスキルをさらにプッシュしようとしています、そしてWPアプローチでOOPプラグインに取り組むことにしました。 WPは必ずしもこれに最適な選択ではないことを私は知っていますが、私は良い挑戦が大好きです。
私はHelperクラスを書いています、私はかなり定期的にいくつかの機能を使うつもりですが、私は少し問題にぶつかっています。
Class Helper implements HelperInterface
{
/**
* Default Options for making an admin page
*
* @var array
*/
public $default_options = [
'slug' => '',
'title' => '',
'page_title' => '',
'parent' => null,
'id' => '',
'capability' => 'update_core',
'icon' => 'dashicons-admin-generic',
'position' => null,
'file_name' => null,
'desc' => '',
];
/**
* Store options passed in by user.
*
* @var array
*/
public $options = [];
public $parent_id;
public $settings_id;
/**
* Stores the media type for a stylesheet
*
* @var string
*/
public $media_type;
public function __construct( )
{
}
public function add_new_page( $opt )
{
$this->options = array_merge( $this->default_options, $opt );
add_action( 'admin_menu', function() {
add_menu_page(
$this->options['page_title'],
$this->options['title'],
$this->options['capability'],
$this->options['slug'],
array($this, display_page_template),
$this->options['icon'],
$this->options['position']
);
} );
}
Class GoogleMaps
{
protected $helper;
public function __construct()
{
$this->helper = new Helper;
$this->helper->add_new_page([
'slug' => 'google-maps',
'title' => 'EdsGoogleMaps',
'page_title' => 'EdsGoogleMaps',
'capability' => 'update_core',
'icon' => 'dashicons-admin-generic',
'position' => null,
'file_name' => 'GoogleMapsHome.php',
]);
$this->helper->add_new_page([
'slug' => 'google-maps-2',
'title' => 'EdsGoogleMaps2',
'page_title' => 'EdsGoogleMaps2',
'capability' => 'update_core',
'icon' => 'dashicons-admin-generic',
'position' => null,
'file_name' => 'GoogleMapsHome.php',
]);
$this->helper->add_new_page([
'slug' => 'google-maps-3',
'title' => 'EdsGoogleMaps3',
'page_title' => 'EdsGoogleMaps3',
'capability' => 'update_core',
'icon' => 'dashicons-admin-generic',
'position' => null,
'file_name' => 'GoogleMapsHome.php',
]);
}
}
私の現在の考えは、ヘルパー関数が呼び出されるたびにadd_actionが呼び出されるという事実に加えて、add_actionと無名関数を使用することと関係があるということです。
うまくいけば、誰かがこれに対する解決策のある種の考えを持っています、そしてうまくいけば私は私の問題で十分にはっきりしています。
ありがとう:)
無名関数の呼び出しはadd_new_page
のすべての実行の後に行われます。その後、メニュー項目を作成するためにすべての要素を格納する必要があります。
そのようにHelperクラスを修正してみてください
public function __construct() // method to modify
{
add_action("admin_menu", [$this, "add_admin_menu_items"]);
}
public function add_new_page( $opt ) // method to modify
{
$element = array_merge( $this->default_options, $opt );
$this->options[] = $element;
}
public function add_admin_menu_items() // method to create
{
$helper = $this;
foreach ($this->options as $element) {
add_menu_page(
$element['page_title'],
$element['title'],
$element['capability'],
$element['slug'],
function () use ($helper, $element) {
$helper->display_page_template($element);
},
$element['icon'],
$element['position']
);
}
}
public function display_page_template($itemDatas)
{
?>
<pre><?php
echo htmlspecialchars(var_export($itemDatas, TRUE));
?></pre>
<?php
}
}