Donc, je regarde ce problème depuis quelques jours maintenant. J'essaie de pousser mes compétences plus loin dans le développement de PHP et j'ai décidé de m'attaquer à un plugin WP avec une approche OOP. Je sais que WP n'est pas nécessairement le meilleur choix pour cela, mais j'adore les défis.
J'écris une classe Helper, car j'ai l'intention d'utiliser certaines fonctions assez régulièrement, mais je rencontre un petit problème.
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',
]);
}
}
Mon opinion actuelle est que cela a quelque chose à voir avec l'utilisation de add_action et une fonction anonyme, parallèlement au fait que add_action est appelée à chaque fois que la fonction d'assistance est appelée.
J'espère que quelqu'un a en quelque sorte une idée de solution, et j'espère que j'ai été assez clair dans mon problème.
Merci :)
l'appel à la fonction anonyme est effectué après toutes les exécutions de add_new_page
. vous devez ensuite stocker tous les éléments pour créer des éléments de menu.
essayez de modifier la classe Helper comme ça
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
}
}