* $help = new WpmuDev_ContextualHelper(); * $help->add_page( * 'dashboard', * array( * array( * 'id' => 'myid', * 'title' => __('My title', 'textdomain'), * 'content' => '

' . __('My content lalala', 'textdomain') . '

', * ), * ), * '

My awesome sidebar!

', * false // Don't clear existing items. * ); * $help->initialize(); * */ class WpmuDev_ContextualHelp { private $_pages = array(); private $_auto_clear_wp_help = false; public function __construct () {} /** * Add an array of tabs to a certain page. * * @param string $screen_id Screen ID to which to bind the help. Can be obtained by something like $screen = get_current_screen(); $screen_id = @$screen->id; * @param array $tabs (optional) Array of tabs to add. Each tab is an associative array, with these keys: id, title, content. * @param string $sidebar (optional) HTML string to be displayed as contextual help sidebar. * @param bool $clear (optional) Clear the existing contextual help content for this page before the new tabs. */ public function add_page ($screen_id, $tabs=array(), $sidebar='', $clear=false) { if (!is_array($tabs)) return false; $this->_pages[$screen_id] = array( 'tabs' => $tabs, 'sidebar' => $sidebar, 'clear' => $clear, ); } /** * Removes a page from instance queue. * * @param string $screen_id Screen ID to clear. */ public function remove_page ($screen_id) { $this->_pages[$screen_id] = array(); } /** * Adds a contextual tab to be displayed on a page. * * @param string $screen_id Screen ID to which to bind the tab. * @param array $tab An associative array representing a tab. */ public function add_tab ($screen_id, $tab=array()) { if (!is_array($tab)) return false; $this->_pages[] = isset($this->_pages[$screen_id]) ? $this->_pages[$screen_id] : array(); $this->_pages[$screen_id]['tabs'][] = $tab; } /** * Removes a tab from instance queue. * * @param string $screen_id Screen ID to which to bind the tab. * @param string $tab_id The value of "id" key of tab to be removed. */ public function remove_tab ($screen_id, $tab_id) { if (!$tab_id) return false; $tabs = @$this->_pages[$screen_id]['tabs']; if (!$tabs) return false; $tmp = array(); foreach ($tabs as $tab) { if (@$tab['id'] == $tmp_id) continue; $tmp[] = $tab; } $this->_pages[$screen_id]['tabs'] = $tmp; } /** * Set up automatic clearing of existing help * prior to adding queued help content. */ public function clear_wp_help () { $this->_auto_clear_wp_help = true; } /** * Sets up queued items as contextual help. */ public function initialize () { $this->_add_hooks(); } private function _add_hooks () { global $wp_version; $version = preg_replace('/-.*$/', '', $wp_version); if (version_compare($version, '3.3', '>=')) { add_action('admin_head', array($this, 'add_contextual_help'), 999); } else { add_filter('contextual_help', array($this, 'add_compatibility_contextual_help'), 1, 1); } } /** * Hook hander. * No need to be called manually. */ public function add_contextual_help () { $screen = get_current_screen(); if (!is_object($screen)) return false; if (!isset($this->_pages['_global_'])) { $screen_id = @$screen->id; if (!isset($this->_pages[$screen_id]) || !@$this->_pages[$screen_id] || !@$this->_pages[$screen_id]['tabs']) return false; $info = $this->_pages[$screen_id]; } else { $info = $this->_pages['_global_']; } $clear = (@$info['clear'] || $this->_auto_clear_wp_help); if ($clear) $screen->remove_help_tabs(); if (!empty($info['sidebar'])) $screen->set_help_sidebar(@$info['sidebar']); foreach ($info['tabs'] as $tab) { $screen->add_help_tab($tab); } } /** * Compatibility layer for pre-3.3 installs. */ public function add_compatibility_contextual_help ($help) { if (!isset($this->_pages['_global_'])) { $screen = get_current_screen(); if (!is_object($screen)) return $help; $screen_id = @$screen->id; if (!@$this->_pages[$screen_id] || !@$this->_pages[$screen_id]['tabs']) return $help; $info = $this->_pages[$screen_id]; } else { $info = $this->_pages['_global_']; } $clear = (@$info['clear'] || $this->_auto_clear_wp_help); if ($clear) $help = ''; foreach ($info['tabs'] as $tab) { $help .= '

' . $tab['title'] . '

' . $tab['content']; } return $help; } }