Tabs de Ajuda com: add_help_tab () callback – Como funciona o argumento?

Eu apenas tentei adicionar uma guia de ajuda simples, dentro de uma class (exemplo para testar abaixo). Eu queria usar um helper / callback fn para preparar o conteúdo para diferentes guias de ajuda. De acordo com o núcleo, a function leva alguns args:

WP 3.3 /wp-admin/includes/screen.php LINE 722

// If it exists, fire tab callback. if ( ! empty( $tab['callback'] ) ) call_user_func_array( $tab['callback'], array( $this, $tab ) ); 

Por algum motivo, eu recebo o object WP_Screen completo no retorno de chamada, em vez de apenas a guia. Veja PasteBin aqui .

Aqui está o exemplo. Para sua conveniência, como um plugin, então o teste é mais fácil (nas canvass posteriores).

  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( '

%s

' ,__( 'test', 'dmb_textdomain' ) ); } } add_action( 'load-post.php', array( 'example_help', 'init' ) ); add_action( 'load-post-new.php', array( 'example_help', 'init' ) );

Editar:

Se eu apenas exibir print $tab no retorno de chamada, eu obtenho Array como uma seqüência de saída acima do conteúdo real ( WP_Screen é um object). Eu tentei despejar todas as partes da matriz sem nenhum resultado (canvas branca, sem erro).

Solutions Collecting From Web of "Tabs de Ajuda com: add_help_tab () callback – Como funciona o argumento?"

Está bem. A resposta NÃO é simples, mas depois de algumas tentativas e erros, leitura do núcleo, etc. Descobri o problema:

O retorno de chamada (que deve ser usado em vez do content ) aceita dois argumentos: $current_screen e $tab .

Veja o que parece a $tab , quando despejado para uma única guia.

 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 ) ) 

INFORMAÇÃO IMPORTANTE: você não é !! (nunca de qualquer forma) permissão para usar espaços dentro de um id -string. Então você pode obter o conteúdo real do object:

 public function prepare( $screen, $tab ) { printf( '

%s

' ,__( $tab['callback'][0]->tabs[ $tab['id'] ]['content'] ,'some_textdomain' ) ); }

Você deve descartar completamente o content na matriz de input (até que você não deseja adicionar algum conteúdo repetitivo ao fazer o loop através de várias guias de ajuda).

Exemplo de trabalho final:

Aqui está o caso do texto de trabalho como um 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' => '

Some stuff that stays above every help text

' ,'callback' => array( $this, 'prepare' ) ) ); } } public function prepare( $screen, $tab ) { printf( '

%s

' ,__( $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' ) );

Se você não sabe quantos ou quais tipos de argumentos alcançam seu retorno de chamada, experimente estas duas funções php úteis:

 func_num_args() 

e

 func_get_args() 

O primeiro mostra quantas argumentos são enviados. O segundo fornece uma matriz com os argumentos.

 public function prepare(){ echo 'Number of arguments: ' . $func_num_args(); echo 'Arguments:'; var_dump( func_get_args() ); }