web-dev-qa-db-fra.com

Ecran de configuration administrateur sans menu

Je veux créer une sous-configuration à partir d'une page du panneau d'administration, par exemple:

J'ai configuré le menu de configuration de cette façon:

add_menu_page( 'E+', 'CRE+', 8, 'cr_e_plus_user_config', 'cr_e_plus_user_config');
add_submenu_page( 'cr_e_plus_user_config', 'E+', 'Configurations', 8, 'cr_e_plus_user_config', 'cr_e_plus_user_config');

De la page Configurations, je dois charger une autre page lorsque je clique sur un lien. Maintenant, je ne veux pas que cette nouvelle page soit répertoriée dans le menu, car elle nécessitera un certain paramètre avant que je puisse la montrer.

5
ariefbayu

Les pages d’administrateur ne sont fondamentalement parlées qu’un crochet à une fonction. Il n’est donc techniquement pas problématique d’ajouter vos propres pages sans utiliser le menu.

Je ne connaissais pas de fonction API permettant d’enregistrer facilement des pages personnelles, mais il existe une fonction d’aide dans Wordpress que vous pouvez utiliser: get_plugin_page_hookname() (fonction non documentée). A côté de cela, le hook doit être enregistré dans un registre global de tous les hooks de page ($GLOBALS['_registered_pages']) afin qu'il soit considéré comme valide lorsque la page est demandée.

Je l'ai intégré dans un exemple de code, il suffit de l'enregistrer dans votre dossier /wp-content/mu-plugins: admin_page_demo.php (Exemple de plug-in MU-Wordpress)

Vous y trouverez une fonction register_admin_page() qui peut enregistrer tout rappel nécessaire selon le hook admin_menu. C'est l'important, comparez à Ajout de menus d'administration (Codex Wordpress) .

La fonction renvoie l'URL de la nouvelle page d'administration. Vous avez écrit que vous pourriez avoir besoin d'ajouter plus de paramètres, alors j'ai pensé que cela pourrait être pratique.

Pour la page de démonstration que j'ai codée en dur dans cet exemple, l'URL est la suivante: /wp-admin/options-general.php?page=adminpagedemo_demo_page.

N'oubliez pas que vous devez vérifier vous-même la sécurité de cette page, car Wordpress ne le fait pas. Quelque chose comme

current_user_can( ... );
wp_die( __('You do not have sufficient permissions to access this page.') );

pourrait être un indice supplémentaire utile.

5
hakre