api_url, [ 'timeout' => 15, 'sslverify' => false // For local dev/flexibility, though true is better for prod ]); if (is_wp_error($response)) { return; } $code = wp_remote_retrieve_response_code($response); if ($code === 200) { $body = wp_remote_retrieve_body($response); $notices = json_decode($body, true); if (is_array($notices)) { update_option('advaipbl_remote_notices', $notices, false); // false = not autoloaded unless needed } } } public function display_notices() { if (!current_user_can('manage_options')) { return; } $notices = get_option('advaipbl_remote_notices', []); $dismissed = get_option('advaipbl_dismissed_notices', []); if (empty($notices) || !is_array($notices)) { return; } $current_version = defined('ADVAIPBL_VERSION') ? ADVAIPBL_VERSION : '8.13.11'; foreach ($notices as $notice) { if (in_array($notice['id'], $dismissed)) { continue; } // Version check if (!empty($notice['target_version_min']) && version_compare($current_version, $notice['target_version_min'], '<')) { continue; } if (!empty($notice['target_version_max']) && version_compare($current_version, $notice['target_version_max'], '>')) { continue; } $type = isset($notice['type']) ? sanitize_text_field($notice['type']) : 'info'; // Classes: notice-info, notice-success, notice-warning, notice-error $class = 'notice notice-' . $type . ' is-dismissible advaipbl-remote-notice'; $button_html = ''; if (!empty($notice['button_text']) && !empty($notice['button_link'])) { $button_html = '
' . esc_html($notice['button_text']) . '
'; } echo '' . wp_kses_post($notice['message']) . '
'; echo wp_kses_post($button_html); echo '