Intereting Posts
Определить глубину терминов Не удалось добраться до панели администратора Как создать это меню с помощью wp_nav_menu ()? Должен ли я использовать функции function_exists () и / или add_action () в разработке темы? Как оставить строку между абзацами при написании текста в визуальном или текстовом редакторе Woocommerce: Показать категорию в алфавитном порядке на странице магазина Как передавать значения для построения функции с помощью Actions? Сохранение пользовательских параметров виджетов панели инструментов в wordpress Отображать аватар профиля пользователя при входе в систему Сохранить jQuery UI Sortable в WordPress Как установить значение по умолчанию '=> $ current_user-> user_login Архив настраиваемого почтового архива, дающий 404 Рабочий процесс для пользователей для загрузки файлов? Как добавить / изменить значение свойства $ wpdb / var? Отключить кеш WordPress программно по запросу

Вкладки справки с помощью: add_help_tab () обратного вызова – Как работает аргумент?

Я просто попытался добавить простую вкладку справки из класса (пример для теста ниже). Я хотел использовать вспомогательный / обратный вызов fn для подготовки контента для разных вкладок справки. Согласно ядру, функция принимает некоторые аргументы:

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

По какой-то причине я получаю полный объект WP_Screen в WP_Screen , а не только вкладку. См. PasteBin здесь .

Вот пример. Для вашего удобства в качестве плагина, поэтому тестирование проще (на почтовых экранах).

 <?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' ) ); 

Редактировать:

Если я просто вывожу print $tab в WP_Screen , я получаю Array качестве выходной строки над фактическим содержимым ( WP_Screen – это объект). Я попытался сбросить все части массива без каких-либо результатов (белый экран, без ошибок).

Solutions Collecting From Web of "Вкладки справки с помощью: add_help_tab () обратного вызова – Как работает аргумент?"

ОК. Ответ НЕ прост, но после некоторых попыток и ошибок, чтения ядра и т. Д. Я выяснил, в чем проблема:

Обратный вызов (который должен использоваться вместо content ) принимает два аргумента: $current_screen и $tab .

Вот как выглядит $tab при сбрасывании одной вкладки.

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

ВАЖНАЯ ИНФОРМАЦИЯ: Вы не! (никогда в любом случае) разрешено использовать пробелы внутри id строки. Затем вы можете получить фактический контент от объекта:

 public function prepare( $screen, $tab ) { printf( '<p>%s</p>' ,__( $tab['callback'][0]->tabs[ $tab['id'] ]['content'] ,'some_textdomain' ) ); } 

Вы должны полностью удалить content во входном массиве (пока вы не захотите добавить какой-либо повторяющийся контент при переходе по нескольким вкладкам справки).

Окончательный рабочий пример:

Вот пример рабочего текста как плагин.

 <?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' ) ); 

Если вы не знаете, сколько или каких аргументов достигнет вашего обратного вызова, попробуйте две полезные функции php:

 func_num_args() 

а также

 func_get_args() 

Первый показывает, сколько аргументов отправлено. Второй дает вам массив с аргументами.

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