init(); } /** * Initialize the plugin. * */ public function init() { add_action('admin_init', array($this, 'register_settings')); add_action('admin_menu', array($this, 'register_admin_menu')); add_action('admin_bar_menu', array($this, 'add_label_to_admin_bar'), 1); add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts_and_styles')); add_action('admin_enqueue_scripts', array($this, 'inline_styles')); add_action('wp_enqueue_scripts', array($this, 'inline_styles')); add_filter('plugin_action_links_'.plugin_basename(__FILE__), array($this, 'add_action_link')); } /** * Register the plugin's options variable. */ public function register_settings() { register_setting('admin_bar_styler', 'admin_bar_styler', array()); } /** * Register admin menu item as a submenu under the core Settings item. * */ public function register_admin_menu() { add_submenu_page( 'themes.php', __('Admin Bar', 'alar-admin-bar-styler'), __('Admin Bar', 'alar-admin-bar-styler'), 'manage_options', 'admin-bar-styler', array($this, 'render_admin_page') ); } /** * Add a Settings link to the plugin admin page. * * @param array $links * @return array $links * */ public function add_action_link($links) { $links[] = ''.__('Settings', 'alar-admin-bar-styler').''; return $links; } /** * Render the settings page. * */ public function render_admin_page() { $options = get_option('admin_bar_styler', array()); // Open content wrapper and print title. echo '
'; echo '

'.__('Admin Bar Styler', 'alar-admin-bar-styler').'

'; settings_errors(); echo '
'; settings_fields('admin_bar_styler'); wp_nonce_field('admin_bar_styler_nonce'); echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; // Wrap up the table. echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo ''.__('Text', 'alar-admin-bar-styler').''; echo ''.__('Text', 'alar-admin-bar-styler').''; echo ''.__('Text', 'alar-admin-bar-styler').''; echo ''.__('Text', 'alar-admin-bar-styler').''; echo '
'; echo ''.__('Click to load a preset', 'alar-admin-bar-styler').'
'."\n"; // Serve up the submit button. submit_button(); echo '
'."\n"; echo '
'."\n"; } /** * Load scripts and styles for the plugin. */ public function enqueue_scripts_and_styles() { GLOBAL $plugin_page; if (strstr($plugin_page, 'admin-bar-styler')) { wp_enqueue_style('admin-bar-styler', plugins_url('/styles/styles.css', __FILE__)); wp_enqueue_script('admin-bar-styler', plugins_url('/scripts/scripts.js', __FILE__), array('jquery')); } } /** * Add a text label to the admin bar. * * @param array $wp_admin_bar */ public function add_label_to_admin_bar($wp_admin_bar) { $options = get_option('admin_bar_styler'); if (empty($options['label'])) { return; } $args = array( 'id' => 'admin-bar-styler', 'title' => esc_html($options['label']), 'href' => '', 'meta' => array('class' => 'admin-bar-styler-label') ); $wp_admin_bar->add_node($args); } /** * Inline styles. * * Inlining CSS only works if the style sheet is already enqueued. Even * though this plugin doesn't use a stylesheet, the handle must still be * registered and enqueued ahead of the inline styles being added. * */ public function inline_styles() { // Ensures the admin bar reflects latest values. if (isset($_POST['admin_bar_styler'])) { $this->update_settings(); } // Aforementioned requirements. wp_register_style('enviro-css', false); wp_enqueue_style('enviro-css'); // Inline the CSS. $options = get_option('admin_bar_styler', array()); $css = 'div#wpadminbar {background: '.$options['bg_color'].' !important;}'; $css .= '#wpadminbar .ab-top-menu > li.hover > .ab-item,'; $css .= '#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus,'; $css .= '#wpadminbar:not(.mobile) .ab-top-menu > li:hover > .ab-item,'; $css .= '#wpadminbar:not(.mobile) .ab-top-menu > li > .ab-item:focus {color: '.$options['font_color'].' !important;background: '.$options['hover_color'].' !important;}'; $css .= '#wpadminbar .ab-top-menu > li > a,'; $css .= '#wpadminbar .ab-top-menu > li > a span,'; $css .= '#wpadminbar .ab-item::before,'; $css .= '#wpadminbar .ab-icon::before,'; $css .= '#wpadminbar #adminbarsearch::before {color: '.$options['font_color'].' !important;}'; $css .= '#wpadminbar .ab-top-menu > li.admin-bar-styler-label > div.ab-empty-item {color: '.$options['font_color'].' !important;font-size:18pt;font-weight:bold;}'; wp_add_inline_style('enviro-css', $css); } /** * Update the plugin's settings. */ public function update_settings() { // Yeah, no. if (!isset($_POST['_wpnonce'])) { return false; } // Nonce cool? Grab options as a whitelist. if (wp_verify_nonce((string)$_POST['_wpnonce'], 'admin_bar_styler_nonce')) { $options['label'] = sanitize_text_field($_POST['admin_bar_styler']['label']); $options['bg_color'] = sanitize_text_field($_POST['admin_bar_styler']['bg_color']); $options['hover_color'] = sanitize_text_field($_POST['admin_bar_styler']['hover_color']); $options['font_color'] = sanitize_text_field($_POST['admin_bar_styler']['font_color']); update_option('admin_bar_styler', $options); } } /** * Initialize (on install) or get (on reactivate) plugin options. */ public function activation() { $options = array( 'label' => '', 'bg_color' => '#1565c0', 'font_color' => '#dddddd', 'hover_color' => '#0d47a1', ); update_option('admin_bar_styler', $options); } /** * Delete plugin options on plugin deletion. */ public static function uninstallation() { delete_option('admin_bar_styler'); } } new AlarAdminBarStyler;