'sanitize_text_field', 'aia_widget_color' => 'aia_widget_sanitize_color', 'aia_widget_phone' => 'sanitize_text_field', 'aia_widget_email' => 'sanitize_email', 'aia_widget_position' => 'aia_widget_sanitize_position', 'aia_widget_script_url' => 'aia_widget_sanitize_script_url', ); foreach ($options as $option_name => $sanitize_callback) { register_setting( 'aia_widget_options_group', $option_name, array( 'type' => 'string', 'sanitize_callback' => $sanitize_callback, 'default' => aia_widget_get_default_option($option_name), ) ); } } add_action('admin_init', 'aia_widget_register_settings'); /** * Custom color sanitizer with default fallback */ function aia_widget_sanitize_color($value) { $value = sanitize_text_field($value); if (empty($value)) { return '#00407d'; } // Validate hex format (#123456 or #123) if (preg_match('/^#(?:[a-fA-F0-9]{3}|[a-fA-F0-9]{6})$/', $value)) { return $value; } return '#00407d'; } /** * Whitelist sanitizer for position selection */ function aia_widget_sanitize_position($value) { $allowed_positions = array('left', 'right'); $value = sanitize_text_field($value); if (in_array($value, $allowed_positions, true)) { return $value; } return 'right'; } /** * Custom script URL sanitizer */ function aia_widget_sanitize_script_url($value) { $value = esc_url_raw($value); if (empty($value)) { return 'https://widget.aia.report/loader.js'; } return $value; } /** * Get option defaults */ function aia_widget_get_default_option($option_name) { $defaults = array( 'aia_widget_public_key' => '', 'aia_widget_color' => '#00407d', 'aia_widget_phone' => '', 'aia_widget_email' => '', 'aia_widget_position' => 'right', 'aia_widget_script_url' => 'https://widget.aia.report/loader.js', ); return isset($defaults[$option_name]) ? $defaults[$option_name] : ''; } /** * Add options page to WordPress Admin Menu under Settings */ function aia_widget_add_admin_menu() { add_options_page( __('AIA Accessibility Widget', 'aia-report-widget'), __('AIA Widget', 'aia-report-widget'), 'manage_options', 'aia-report-widget', 'aia_widget_render_settings_page' ); } add_action('admin_menu', 'aia_widget_add_admin_menu'); /** * Enqueue styles and scripts for the plugin settings page in WP Admin */ function aia_widget_enqueue_admin_assets($hook) { if ('settings_page_aia-report-widget' !== $hook) { return; } wp_enqueue_style( 'aia-report-widget-admin-css', plugins_url('css/admin.css', __FILE__), array(), '1.0.0' ); wp_enqueue_script( 'aia-report-widget-admin-js', plugins_url('js/admin.js', __FILE__), array(), '1.0.0', true ); } add_action('admin_enqueue_scripts', 'aia_widget_enqueue_admin_assets'); /** * Add shortcut Settings link on the Plugins management page */ function aia_widget_add_action_links($links) { $settings_link = '' . __('Settings', 'aia-report-widget') . ''; array_unshift($links, $settings_link); return $links; } add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'aia_widget_add_action_links'); /** * Render the Plugin Settings Page in WP Admin */ function aia_widget_render_settings_page() { if (!current_user_can('manage_options')) { return; } $public_key = get_option('aia_widget_public_key', ''); $color = get_option('aia_widget_color', '#00407d'); $phone = get_option('aia_widget_phone', ''); $email = get_option('aia_widget_email', ''); $position = get_option('aia_widget_position', 'right'); $script_url = get_option('aia_widget_script_url', 'https://widget.aia.report/loader.js'); $is_active = !empty(trim($public_key)); ?>
AIA

', 'aia-report-widget'); ?>

de toutes vos pages :', 'aia-report-widget'); ?>

$script_url, 'data-public-key' => $preview_key, ); if (!empty($color) && $color !== '#00407d') { $attrs['data-primary-color'] = $color; $attrs['data-color'] = $color; } if (!empty($phone)) { $attrs['data-phone'] = $phone; } if (!empty($email)) { $attrs['data-email'] = $email; } if (!empty($position) && $position !== 'right') { $attrs['data-position'] = $position; } $code = " $v) { $code .= " " . $k . '="' . esc_attr($v) . "\"\n"; } $code .= " async\n>"; echo esc_html($code); ?>
'async') ); } add_action('wp_enqueue_scripts', 'aia_widget_enqueue_frontend_scripts'); /** * Add data-* attributes to the enqueued widget script element */ function aia_widget_script_loader_tag($tag, $handle, $src) { if ('aia-report-widget-script' !== $handle) { return $tag; } $public_key = get_option('aia_widget_public_key', ''); if (empty(trim($public_key))) { return ''; } $color = get_option('aia_widget_color', '#00407d'); $phone = get_option('aia_widget_phone', ''); $email = get_option('aia_widget_email', ''); $position = get_option('aia_widget_position', 'right'); $attrs = array( 'data-public-key' => esc_attr(trim($public_key)), ); if (!empty($color) && $color !== '#00407d') { $attrs['data-primary-color'] = esc_attr(trim($color)); $attrs['data-color'] = esc_attr(trim($color)); } if (!empty($phone)) { $attrs['data-phone'] = esc_attr(trim($phone)); } if (!empty($email)) { $attrs['data-email'] = esc_attr(trim($email)); } if (!empty($position) && $position !== 'right') { $attrs['data-position'] = esc_attr(trim($position)); } $attr_str = ''; foreach ($attrs as $k => $v) { $attr_str .= ' ' . $k . '="' . $v . '"'; } return str_replace(' src=', $attr_str . ' src=', $tag); } add_filter('script_loader_tag', 'aia_widget_script_loader_tag', 10, 3);