hook_suffix = add_options_page( __( 'Environment Badge Settings', 'abhinavdev-environment-badge' ), __( 'Environment Badge', 'abhinavdev-environment-badge' ), 'manage_options', 'abhinavdev-environment-badge', array( $this, 'render_settings_page' ) ); } /** * Register plugin settings with WordPress Settings API. */ public function register_settings() { register_setting( 'abhinavdev_env_badge_settings_group', Abhinavdev_Env_Badge_Core::OPTION_NAME, array( 'type' => 'array', 'sanitize_callback' => array( $this, 'sanitize_settings' ), 'default' => Abhinavdev_Env_Badge_Core::get_default_options(), ) ); } /** * Enqueue scripts and styles on settings page. * * @param string $hook Page hook. */ public function enqueue_admin_assets( $hook ) { if ( $hook !== $this->hook_suffix ) { return; } // Enqueue WordPress core color picker. wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'wp-color-picker' ); // Enqueue custom settings styles & script. wp_enqueue_style( 'abhinavdev-env-badge-settings-css', ABHINAVDEV_ENV_BADGE_URL . 'assets/css/admin-settings.css', array( 'wp-color-picker' ), ABHINAVDEV_ENV_BADGE_VERSION ); wp_enqueue_script( 'abhinavdev-env-badge-settings-js', ABHINAVDEV_ENV_BADGE_URL . 'assets/js/admin-settings.js', array( 'jquery', 'wp-color-picker' ), ABHINAVDEV_ENV_BADGE_VERSION, true ); } /** * Strict data sanitization callback for Settings API. * * @param array $input Raw user input. * @return array */ public function sanitize_settings( $input ) { $defaults = Abhinavdev_Env_Badge_Core::get_default_options(); $output = array(); if ( ! is_array( $input ) ) { return $defaults; } // Mode: 'auto' or 'manual' $output['mode'] = ( isset( $input['mode'] ) && in_array( $input['mode'], array( 'auto', 'manual' ), true ) ) ? $input['mode'] : 'auto'; // Manual Environment $valid_envs = array( 'production', 'staging', 'development', 'local', 'custom' ); $output['manual_env'] = ( isset( $input['manual_env'] ) && in_array( $input['manual_env'], $valid_envs, true ) ) ? $input['manual_env'] : 'production'; // Production Domain $raw_domain = isset( $input['production_domain'] ) ? sanitize_text_field( $input['production_domain'] ) : ''; if ( ! empty( $raw_domain ) ) { $parsed = wp_parse_url( $raw_domain, PHP_URL_HOST ); if ( ! empty( $parsed ) ) { $raw_domain = $parsed; } $raw_domain = strtolower( trim( $raw_domain, "/ \t\n\r\0\x0B" ) ); } $output['production_domain'] = $raw_domain; // Custom Label override $output['custom_label'] = isset( $input['custom_label'] ) ? sanitize_text_field( $input['custom_label'] ) : ''; // Display checkboxes $output['show_on_backend'] = ! empty( $input['show_on_backend'] ) ? 1 : 0; $output['show_on_frontend'] = ! empty( $input['show_on_frontend'] ) ? 1 : 0; $output['show_details_popup'] = ! empty( $input['show_details_popup'] ) ? 1 : 0; // Badge Position $output['badge_position'] = ( isset( $input['badge_position'] ) && 'left' === $input['badge_position'] ) ? 'left' : 'right'; // Color configurations $output['colors'] = array(); foreach ( $valid_envs as $env ) { $def = $defaults['colors'][ $env ]; $raw = isset( $input['colors'][ $env ] ) ? $input['colors'][ $env ] : array(); $bg = isset( $raw['bg'] ) ? sanitize_hex_color( $raw['bg'] ) : ''; $text = isset( $raw['text'] ) ? sanitize_hex_color( $raw['text'] ) : ''; $label = isset( $raw['text_label'] ) ? sanitize_text_field( $raw['text_label'] ) : ''; $output['colors'][ $env ] = array( 'bg' => $bg ? $bg : $def['bg'], 'text' => $text ? $text : $def['text'], 'text_label' => $label ? $label : $def['text_label'], ); } add_settings_error( 'abhinavdev_env_badge_settings', 'abhinavdev_env_badge_settings_updated', __( 'Environment Badge settings saved successfully.', 'abhinavdev-environment-badge' ), 'success' ); return $output; } /** * Render the Settings Page HTML. */ public function render_settings_page() { if ( ! current_user_can( 'manage_options' ) ) { return; } $options = Abhinavdev_Env_Badge_Core::get_options(); $detected_env = Abhinavdev_Env_Badge_Core::detect_environment(); $badge_data = Abhinavdev_Env_Badge_Core::get_badge_data(); ?>

' . esc_html( strtoupper( $detected_env ) ) . ''; ?>





__( 'Live Production', 'abhinavdev-environment-badge' ), 'staging' => __( 'Staging', 'abhinavdev-environment-badge' ), 'development' => __( 'Development', 'abhinavdev-environment-badge' ), 'local' => __( 'Local Dev', 'abhinavdev-environment-badge' ), 'custom' => __( 'Custom', 'abhinavdev-environment-badge' ), ); ?>
$title ) : $env_data = $options['colors'][ $key ]; ?>

Abhinav Saxena

abhinavdev


define( 'WP_ENVIRONMENT_TYPE', 'staging' );