get_memory_notice_data(); // Return if notice is not required. if ( ! isset( $notice_data['show_notice'] ) || ! $notice_data['show_notice'] ) { return; } // Add notice using Astra_Notices system. $this->display_memory_notice( $notice_data ); } /** * Get memory notice data including whether to show notice and notice type * * @return array Array with memory data and notice information. */ private function get_memory_notice_data() { // Only show to administrators. if ( ! current_user_can( 'manage_options' ) ) { return array( 'show_notice' => false, 'notice_type' => '', ); } $memory_limit = $this->get_memory_limit_in_bytes(); $memory_usage = memory_get_peak_usage( true ); $memory_percentage = $memory_limit > 0 ? ( $memory_usage / $memory_limit * 100 ) : 0; // Prepare base return data to avoid repetition. $return_data = array( 'memory_limit' => $memory_limit, 'memory_usage' => $memory_usage, 'memory_percentage' => $memory_percentage, ); // Show warning notice at threshold usage. if ( $memory_percentage >= $this->warning_threshold ) { return array_merge( $return_data, array( 'show_notice' => true, 'notice_type' => 'warning', ) ); } return array( 'show_notice' => false, 'notice_type' => '', ); } /** * Get recommended memory limit based on current limit * * @param int $current_limit_bytes Current memory limit in bytes. * @return string Recommended memory limit string. */ private function get_recommended_memory_limit( $current_limit_bytes ) { $current_limit_mb = $current_limit_bytes / ( 1024 * 1024 ); if ( $current_limit_mb < 512 ) { return '512M'; } if ( $current_limit_mb < 1024 ) { return '1G'; } return '2G'; } /** * Get PHP memory limit in bytes */ private function get_memory_limit_in_bytes() { $memory_limit = ini_get( 'memory_limit' ); if ( $memory_limit == -1 ) { return PHP_INT_MAX; // Unlimited } // Handle edge cases where ini_get returns false or empty if ( false === $memory_limit || empty( $memory_limit ) ) { return 134217728; } $unit = strtolower( substr( $memory_limit, -1 ) ); $value = (int) $memory_limit; if ( $value <= 0 ) { return 134217728; } switch ( $unit ) { case 'g': $value *= 1024 * 1024 * 1024; break; case 'm': $value *= 1024 * 1024; break; case 'k': $value *= 1024; break; } return $value; } /** * Register memory notice with Astra_Notices system * * @param array $notice_data Array containing memory data and notice type. */ private function display_memory_notice( $notice_data ) { $limit = isset( $notice_data['memory_limit'] ) ? $notice_data['memory_limit'] : 0; $recommended_limit = $this->get_recommended_memory_limit( $limit ); $message = '
' . esc_html__( '🔔 PHP Memory Limit Notice', 'astra' ) . '
'; $message .= '' . esc_html__( 'Your site is nearing its PHP memory limit, which may affect stability.', 'astra' ) . '
'; $message .= '' . sprintf( esc_html__( 'We recommend increasing it to at least %s for best performance.', 'astra' ), '' . esc_html( $recommended_limit ) . '' ) . '
'; $message .= ''; $message .= esc_html__( 'Learn how to increase your PHP memory', 'astra' ) . '
'; $message .= ''; if ( $memory_percentage >= $this->warning_threshold ) { $description .= sprintf( __( 'Your site is using %1$s of %2$s available PHP memory (%3$s%%). Only %4$s remaining.', 'astra' ), '' . esc_html( $memory_usage_formatted ) . '', '' . esc_html( $memory_limit_formatted ) . '', '' . esc_html( $percentage_formatted ) . '', '' . esc_html( $memory_remaining_formatted ) . '' ); $description .= '
'; $description .= __( 'While your site is currently functioning, this high memory usage puts you at risk of crashes and errors, especially when using memory-intensive features like the customizer, page builders, or plugins.', 'astra' ); } else { $description .= sprintf( __( 'Your site is using %1$s of %2$s available PHP memory (%3$s%%). You have %4$s remaining.', 'astra' ), '' . esc_html( $memory_usage_formatted ) . '', '' . esc_html( $memory_limit_formatted ) . '', '' . esc_html( $percentage_formatted ) . '', '' . esc_html( $memory_remaining_formatted ) . '' ); $description .= '
'; $description .= __( 'Your memory usage is within acceptable limits. The Astra theme and your plugins have sufficient memory to operate properly.', 'astra' ); } $description .= '
'; $description .= ''; $description .= __( 'About PHP Memory: PHP memory limit determines how much memory your website can use. Themes, plugins, and WordPress core all consume memory. When the limit is reached, your site may display errors or stop working.', 'astra' ); $description .= '
'; return $description; } /** * Get Site Health actions based on memory usage * * @param float $memory_percentage Memory usage percentage. * @return string Actions HTML. */ private function get_site_health_actions( $memory_percentage ) { $actions = ''; if ( $memory_percentage >= $this->warning_threshold ) { $current_limit = $this->get_memory_limit_in_bytes(); $recommended_limit = $this->get_recommended_memory_limit( $current_limit ); $actions .= 'define(\'WP_MEMORY_LIMIT\', \'' . esc_html( $recommended_limit ) . '\');php_value memory_limit ' . esc_html( $recommended_limit ) . 'memory_limit = ' . esc_html( $recommended_limit ) . '' . __( 'Recommended memory limits:', 'astra' ) . '
'; $actions .= ''; $actions .= sprintf( __( 'For detailed instructions, visit our documentation on increasing PHP memory limit.', 'astra' ), 'https://wpastra.com/docs/system-requirement-for-astra-theme/' ); $actions .= '
'; } else { $actions .= '' . __( 'No action required. Your memory usage is within acceptable limits.', 'astra' ) . '
'; $actions .= '' . __( 'Continue monitoring your memory usage, especially when installing new plugins or themes.', 'astra' ) . '
'; } return $actions; } } // Initialize the memory notice class new Astra_Memory_Limit_Notice();