get_server_info(); // Build the title with server information. $title = sprintf( /* translators: 1: PHP version, 2: Database version, 3: Server software, 4: WordPress version */ esc_html__( '* PHP %1$s | %2$s | %3$s | WP %4$s *', 'admin-bar-server-info' ), esc_html( $server_info['php_version'] ), esc_html( $server_info['db_version'] ), esc_html( $server_info['server_software'] ), esc_html( $server_info['wp_version'] ) ); // Add menu item to admin bar (right side). // Using 'top-secondary' as parent ensures it appears on the right side. $wp_admin_bar->add_node( array( 'id' => 'abs_server_info', 'title' => $title, 'parent' => 'top-secondary', 'meta' => array( 'title' => '', 'class' => 'abs-server-info', ), ) ); } /** * Get server and environment information. * * @since 1.0.0 * @return array Array containing server information. */ private function get_server_info() { global $wpdb; $info = array(); // Get PHP version. $info['php_version'] = $this->get_php_version(); // Get database version. $info['db_version'] = $this->get_database_version( $wpdb ); // Get server software. $info['server_software'] = $this->get_server_software(); // Get WordPress version. $info['wp_version'] = get_bloginfo( 'version' ); return $info; } /** * Get PHP version. * * @since 1.0.0 * @return string PHP version. */ private function get_php_version() { $php_version = PHP_VERSION; // Extract major and minor version (e.g., "8.2" from "8.2.15"). $version_parts = explode( '.', $php_version ); if ( count( $version_parts ) >= 2 ) { return $version_parts[0] . '.' . $version_parts[1]; } return $php_version; } /** * Get database version. * * @since 1.0.0 * @param wpdb $wpdb WordPress database object. * @return string Database version. */ private function get_database_version( $wpdb ) { // Get database version from WordPress database object. $db_version = $wpdb->db_version(); if ( empty( $db_version ) ) { return esc_html__( 'Unknown', 'admin-bar-server-info' ); } // Extract major and minor version if possible. $version_parts = explode( '.', $db_version ); if ( count( $version_parts ) >= 2 ) { // Check if it's MariaDB (MariaDB version strings are different). if ( stripos( $db_version, 'mariadb' ) !== false ) { // For MariaDB, try to get a cleaner version. $mariadb_version = preg_replace( '/[^0-9.]/', '', $db_version ); if ( ! empty( $mariadb_version ) ) { $parts = explode( '.', $mariadb_version ); if ( count( $parts ) >= 2 ) { return 'MariaDB ' . $parts[0] . '.' . $parts[1]; } return 'MariaDB ' . $mariadb_version; } } return 'MySQL ' . $version_parts[0] . '.' . $version_parts[1]; } return 'MySQL ' . $db_version; } /** * Get server software name. * * @since 1.0.0 * @return string Server software name. */ private function get_server_software() { // Check if SERVER_SOFTWARE is available. if ( ! isset( $_SERVER['SERVER_SOFTWARE'] ) || empty( $_SERVER['SERVER_SOFTWARE'] ) ) { return esc_html__( 'Unknown', 'admin-bar-server-info' ); } $server_software = sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ); // Detect common server software. if ( stripos( $server_software, 'apache' ) !== false ) { return 'Apache'; } elseif ( stripos( $server_software, 'nginx' ) !== false ) { return 'Nginx'; } elseif ( stripos( $server_software, 'litespeed' ) !== false ) { return 'LiteSpeed'; } elseif ( stripos( $server_software, 'iis' ) !== false ) { return 'IIS'; } elseif ( stripos( $server_software, 'caddy' ) !== false ) { return 'Caddy'; } // If no known server detected, return first part of SERVER_SOFTWARE. $parts = explode( '/', $server_software ); if ( ! empty( $parts[0] ) ) { return esc_html( trim( $parts[0] ) ); } return esc_html__( 'Unknown', 'admin-bar-server-info' ); } } /** * Initialize the plugin. * * @since 1.0.0 */ function abs_init() { new Admin_Bar_Server_Info(); } add_action( 'init', 'abs_init' );