* $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 .= '