Je viens d'essayer d'ajouter un simple onglet d'aide, à partir d'une classe (exemple à tester ci-dessous). Je voulais utiliser un fn d'assistance/rappel pour préparer le contenu de différents onglets d'aide. Selon le noyau, la fonction prend quelques arguments:
WP 3.3 /wp-admin/includes/screen.php LIGNE 722
// If it exists, fire tab callback.
if ( ! empty( $tab['callback'] ) )
call_user_func_array( $tab['callback'], array( $this, $tab ) );
Pour une raison quelconque, j'obtiens l'objet complet WP_Screen
dans le rappel, au lieu de simplement l'onglet. Voir Pastebin ici .
Voici l'exemple. Pour votre commodité, en tant que plugin, le test est plus facile (sur les écrans de publication).
<?php
/**
* Plugin Name: Help Tab Test Case
* Plugin URI: http://unserkaiser.com
* Description: Add Help Tab test case
*/
class example_help
{
public $tabs = array(
'EXAMPLE' => array(
'title' => 'TEST ME!'
,'content' => 'FOO'
)
);
static public function init()
{
$class = __CLASS__ ;
new $class;
}
public function __construct()
{
add_action( "load-{$GLOBALS['pagenow']}", array( $this, 'add_tabs' ), 20 );
}
public function add_tabs()
{
foreach ( $this->tabs as $id => $data )
{
get_current_screen()->add_help_tab( array(
'id' => $id
,'title' => __( $data['title'], 'some_textdomain' )
,'content' => $data['content']
,'callback' => array( $this, 'prepare' )
) );
}
}
/* HELPER */
public function prepare( $tab )
{
error_reporting( E_ALL );
// FAILS: return blank
// _dump( $tab['tabs'] );
// No error output on screen
var_dump( $tab );
// I can dump it using my own function,
// that adds the data to a global and then calls & prints it on shutdown
// See Pastebin for content
// _dump( $tab );
return printf(
'<p>%s</p>'
,__( 'test', 'dmb_textdomain' )
);
}
}
add_action( 'load-post.php', array( 'example_help', 'init' ) );
add_action( 'load-post-new.php', array( 'example_help', 'init' ) );
Si je viens de sortir print $tab
dans le rappel, j'obtiens Array
en tant que chaîne de sortieabovele contenu réel (WP_Screen
est un objet). J'ai essayé de vider toutes les parties du tableau sans aucun résultat (écran blanc, pas d'erreur).
D'accord. La réponse estPASsimple, mais après quelques essais et erreurs, lire le noyau, etc. J'ai découvert le problème:
Le rappel (qui doit être utiliséà la place dede content
) accepte deux arguments: $current_screen
et $tab
.
Voici à quoi ressemble $tab
, lorsqu'il est vidé pour un seul onglet.
Array
(
[title] => TEST ME
[id] => EXAMPLE_A
[content] =>
[callback] => Array
(
[0] => dmb_help Object
(
[tabs] => Array
(
[EXAMPLE_A] => Array
(
[title] => TEST ME
[content] => FOO
)
[EXAMPLE_B] => Array
(
[title] => TEST ME ALSO
[content] => BAR
)
)
)
[1] => prepare
)
)
INFORMATION IMPORTANTE: Vous n'êtes pas !! (jamais de toute façon) autorisé à utiliser des espaces à l'intérieur d'une chaîne id
-. Ensuite, vous pouvez obtenir le contenu réel de l'objet:
public function prepare( $screen, $tab )
{
printf(
'<p>%s</p>'
,__(
$tab['callback'][0]->tabs[ $tab['id'] ]['content']
,'some_textdomain'
)
);
}
Vous devez déposer content
dans le tableau d'entrée complètement (jusqu'à ce que vous ne vouliez pas ajouter du contenu répétitif lorsque vous parcourez plusieurs onglets d'aide).
Voici le cas de texte de travail en tant que plugin.
<?php
/**
* Plugin Name: Help Tab Test Case
* Plugin URI: http://unserkaiser.com
* Description: Add Help Tab test case
*/
class example_help
{
public $tabs = array(
// The assoc key represents the ID
// It is NOT allowed to contain spaces
'EXAMPLE' => array(
'title' => 'TEST ME!'
,'content' => 'FOO'
)
);
static public function init()
{
$class = __CLASS__ ;
new $class;
}
public function __construct()
{
add_action( "load-{$GLOBALS['pagenow']}", array( $this, 'add_tabs' ), 20 );
}
public function add_tabs()
{
foreach ( $this->tabs as $id => $data )
{
get_current_screen()->add_help_tab( array(
'id' => $id
,'title' => __( $data['title'], 'some_textdomain' )
// Use the content only if you want to add something
// static on every help tab. Example: Another title inside the tab
,'content' => '<p>Some stuff that stays above every help text</p>'
,'callback' => array( $this, 'prepare' )
) );
}
}
public function prepare( $screen, $tab )
{
printf(
'<p>%s</p>'
,__(
$tab['callback'][0]->tabs[ $tab['id'] ]['content']
,'dmb_textdomain'
)
);
}
}
// Always add help tabs during "load-{$GLOBALS['pagenow'}".
// There're some Edge cases, as for example on reading options screen, your
// Help Tabs get loaded before the built in tabs. This seems to be a core error.
add_action( 'load-post.php', array( 'example_help', 'init' ) );
add_action( 'load-post-new.php', array( 'example_help', 'init' ) );
Si vous ne savez pas combien ou quel type d'arguments parviennent à votre rappel, essayez ces deux fonctions php utiles:
func_num_args()
et
func_get_args()
Le premier vous montre combien d'arguments sont envoyés. La seconde vous donne un tableau avec les arguments.
public function prepare(){
echo 'Number of arguments: ' . $func_num_args();
echo 'Arguments:';
var_dump( func_get_args() );
}