web-dev-qa-db-fra.com

Comment ajouter un onglet d'aide à toutes les pages d'administration - y compris les pages de plug-in

J'ai un code de travail qui ajoute un onglet d'aide à tous les écrans de l'administrateur qui ont déjà des options d'aide ou un écran d'aide. Cependant, les écrans qui n'ont pas d'aide contextuelle, tels que le plugin que j'écris, ne reconnaissent pas non plus l'action add_action. call - comment puis-je m'assurer que le fichier help_tab apparaît sur chaque écran de l'administrateur?

Quelques codes simples - mais plus ou moins exactement comme dans le Codex .

J'ajoute l'action dans la classe __construct

// add help tab to admin UI ##
add_action( "load-{$GLOBALS['pagenow']}", array( $this, 'add_help_tab' ), 20 );

Ceci appelle une méthode de la classe "add_help_tab":

public function add_help_tab() {
        foreach ( $this->help_tabs as $id => $data ) {
            get_current_screen()->add_help_tab( 
                array(
                    'id'       => $id
                   ,'title'    => __( $data['title'], 'q_support' )
                   // Use the content only if you want to add something
                   // static on every help tab. Example: Another title inside the tab
                   ,'callback' => array( $this, 'callback_function' )
                ) 
            );
        }
}

Qui à son tour appelle la méthode de rappel "callback_function" - tout fonctionne comme prévu, sauf sur les écrans sans onglets d'aide préexistants - puis-je m'assurer que chaque page inclut la fonction d'onglet Aide?

2
Q Studio

Voici comment ajouter des onglets d’aide à toutes les pages de l’administrateur, qu’il en existe ou non:

add_action('in_admin_header', 'wpse_124979_add_help_tabs');

function wpse_124979_add_help_tabs() {
    if ($screen = get_current_screen()) {
        $help_tabs = $screen->get_help_tabs();
        $screen->remove_help_tabs();

        $screen->add_help_tab(array(
            'id' => 'my_help_tab',
            'title' => 'My Help',
            'content' => '<p>My help content...</p>',
        ));

        if (count($help_tabs))
            foreach ($help_tabs as $help_tab)
                $screen->add_help_tab($help_tab);
    }
} // function wpse_124979_add_help_tabs

Dans votre paramètre OOP, cela devrait ressembler à ceci:

// This could go in your constructor, for instance
add_action('in_admin_header', array($this, 'add_help_tabs'));

function add_help_tabs() {
    if ($screen = get_current_screen()) {
        $help_tabs = $screen->get_help_tabs();
        $screen->remove_help_tabs();

        foreach ($this->help_tabs as $id => $data)
            $screen->add_help_tab(array(
                'id' => $id,
                'title' => __($data['title'], 'q_support'),
                'callback' => array($this, 'callback_function'),
            ));

        if (count($help_tabs))
            foreach ($help_tabs as $help_tab)
                $screen->add_help_tab($help_tab);
    }
} // function add_help_tabs

in_admin_header est en gros le dernier crochet d’action avant le rendu de la méta de l’écran (et donc de l’aide).

Alors, qu'est-ce que vous obtenez de cela?

  • Ajouter des onglets d'aide à chaque page d'administration (noyau, plugin, autre);
  • vos onglets viendront avant/sur les onglets d'aide d'origine (s'il y en a);
  • même s'il n'y a aucun onglet d'aide, vos onglets seront ajoutés à la méta de l'écran.
3
tfrommen