Settings'; array_unshift( $links, $link ); return $links; } ); /** * Load files. */ function jn_admin_tailor_init_hook() { require_once JN_ADMIN_TAILOR_PATH . '/includes/admin.php'; add_action( 'admin_enqueue_scripts', function( $hook ) { // Only load on our settings page if ( $hook !== 'settings_page_admin-tailor' ) { return; } // Media. if ( ! did_action( 'wp_enqueue_media' ) ) wp_enqueue_media(); // Styles. wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_style( 'jn-admin-tailor-style', plugins_url( '/assets/css/style.css' , JN_ADMIN_TAILOR_FILE ), array(), JN_ADMIN_TAILOR_VERSION ); // Script. wp_enqueue_script( 'jn-admin-tailor-script', plugins_url( '/assets/js/script.js' , JN_ADMIN_TAILOR_FILE ), array( 'jquery', 'wp-color-picker' ), JN_ADMIN_TAILOR_VERSION, true ); } ); } /** * Settings page. */ add_action( 'admin_menu', function() { $hook = add_options_page( 'Admin Tailor Settings', 'Admin Tailor', 'administrator', 'admin-tailor', 'jn_admin_tailor_add_settings_page_content', 6 ); add_action( 'load-' . $hook, 'jn_admin_tailor_init_hook' ); } ); /** * Utility */ function jn_admin_tailor_hex2rgba( $color, $opacity ) { list( $r, $g, $b ) = sscanf( $color, '#%02x%02x%02x' ); return 'rgba(' . $r . ',' . $g . ',' . $b . ',' . $opacity . ')'; // double-quotes look messy :D } /** * Set login page styles. */ add_action( 'login_enqueue_scripts', function() { $login_color_palette = get_option( 'jn_admin_tailor_login_color' ); $login_footer_color = get_option( 'jn_admin_tailor_login_footer_color' ); $login_pattern_url = get_option( 'jn_admin_tailor_login_pattern_url' ); $image_id = get_option( 'jn_admin_tailor_login_logo_id' ); $image = wp_get_attachment_image_url( $image_id ); $bg_image_id = get_option( 'jn_admin_tailor_bg_image_id' ); $bg_image = wp_get_attachment_image_url( $bg_image_id ); $custom_css = get_option( 'jn_admin_tailor_custom_css' ); $form_border_radius = max( 0, min( 50, absint( get_option( 'jn_admin_tailor_form_border_radius', 0 ) ) ) ); $form_box_shadow = max( 0, min( 100, absint( get_option( 'jn_admin_tailor_form_box_shadow', 0 ) ) ) ); $form_transparency = max( 10, min( 100, absint( get_option( 'jn_admin_tailor_form_transparency', 100 ) ) ) ); $logo_border_radius = max( 0, min( 50, absint( get_option( 'jn_admin_tailor_logo_border_radius', 0 ) ) ) ); // Check if any customizations exist $has_customizations = $image || $login_color_palette || $login_footer_color || ( $bg_image || ( $login_pattern_url && jn_admin_tailor_get_pattern_url( 'default.png' ) !== $login_pattern_url ) ) || ( $form_border_radius || $form_box_shadow || 100 !== $form_transparency ) || $custom_css; if ( ! $has_customizations ) { return; } $styles = ''; if ( $image ) { $styles .= 'body.login div#login h1 a { background-image: url(' . esc_url( $image ) . ');'; if ( $logo_border_radius ) { $styles .= 'border-radius: ' . absint( $logo_border_radius ) . 'px;overflow: hidden;'; } $styles .= '}'; } if ( $login_color_palette ) { $color = esc_attr( $login_color_palette ); $styles .= 'body.login div#login .message { border-color: ' . jn_admin_tailor_hex2rgba( $color, .5 ) . '; }'; $styles .= 'body.login div#login #loginform input:focus { border-color: ' . $color . '; box-shadow: 0 0 0 1px ' . $color . '; }'; $styles .= 'body.login div#login #loginform .wp-pwd .button-secondary { color: ' . $color . '; }'; $styles .= 'body.login div#login #loginform #rememberme:focus { border-color: ' . $color . '; }'; $styles .= 'body.login div#login #loginform #wp-submit { background: ' . $color . '; border-color: ' . $color . '; }'; } if ( $login_footer_color ) { $styles .= 'body.login #backtoblog a, body.login #nav a, body.login .privacy-policy-link { color: ' . esc_attr( $login_footer_color ) . '; }'; } if ( $bg_image ) { $styles .= 'body.login { background-image: url(' . esc_url( $bg_image ) . '); background-position: center; background-size: cover; background-repeat: no-repeat; }'; } elseif ( $login_pattern_url && jn_admin_tailor_get_pattern_url( 'default.png' ) !== $login_pattern_url ) { $size = ( 'svg' === pathinfo( $login_pattern_url, PATHINFO_EXTENSION ) ) ? 'cover' : 'auto'; $styles .= 'body.login { background-image: url(' . esc_url( $login_pattern_url ) . '); background-position: center; background-size: ' . esc_html( $size ) . '; }'; } if ( $form_border_radius || $form_box_shadow || 100 !== $form_transparency ) { $styles .= 'body.login div#login #loginform {'; if ( $form_border_radius ) { $styles .= 'border-radius: ' . absint( $form_border_radius ) . 'px;'; } if ( $form_box_shadow ) { $shadow_intensity = absint( $form_box_shadow ) / 100; $styles .= 'box-shadow: 0 2px 10px rgba(0, 0, 0, ' . $shadow_intensity . ');'; } if ( 100 !== $form_transparency ) { $opacity = absint( $form_transparency ) / 100; $styles .= 'background-color: rgba(255, 255, 255, ' . $opacity . ');'; } $styles .= '}'; } if ( $custom_css ) { $styles .= wp_strip_all_tags( $custom_css ); } ?> #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { color: rgba(240, 245, 250, .6) !important; }'; $styles .= '#wpadminbar .ab-icon:before, #wpadminbar .ab-item:before { color: rgba(240, 245, 250, .6) !important; }'; } if ( $menu_highlight_color ) { $styles .= '#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head, #adminmenu .wp-menu-arrow, #adminmenu .wp-menu-arrow div, #adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu { background: ' . esc_attr( $menu_highlight_color ) . ' !important; }'; $styles .= '#adminmenu li a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { background-color: ' . esc_attr( $menu_highlight_color ) . ' !important; }'; $styles .= '#adminmenu .wp-submenu a:hover, #adminmenu .wp-submenu a:focus { background: ' . esc_attr( $menu_highlight_color ) . ' !important; }'; } if ( $styles ) { echo ''; } } ); add_action( 'wp_before_admin_bar_render', function() { global $wp_admin_bar; if ( get_option( 'jn_admin_tailor_hide_wp_logo' ) ) { $wp_admin_bar->remove_menu( 'wp-logo' ); } } ); add_action( 'wp_dashboard_setup', function() { if ( get_option( 'jn_admin_tailor_hide_welcome_panel' ) ) { remove_action( 'welcome_panel', 'wp_welcome_panel' ); update_user_meta( get_current_user_id(), 'show_welcome_panel', 0 ); } } ); add_filter( 'admin_footer_text', function( $footer_text ) { $custom_footer = get_option( 'jn_admin_tailor_admin_footer_text' ); return $custom_footer ? esc_html( $custom_footer ) : $footer_text; } ); add_filter( 'login_errors', function( $error ) { $custom_error = get_option( 'jn_admin_tailor_custom_login_error' ); if ( $custom_error && ! empty( trim( $custom_error ) ) ) { return 'ERROR: ' . esc_html( $custom_error ); } return $error; } ); // All done, have fun!