/* Widget Name: Button Description: Create a custom button with flexible styling, icon support, and click tracking functionality. Author: SiteOrigin Author URI: https://siteorigin.com Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/ Keywords: event, icon, link */ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget { public function __construct() { parent::__construct( 'sow-button', __( 'SiteOrigin Button', 'so-widgets-bundle' ), array( 'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ), 'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/', ), array( ), false, plugin_dir_path( __FILE__ ) ); } public function get_settings_form() { return array( 'responsive_breakpoint' => array( 'type' => 'measurement', 'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ), 'default' => '780px', 'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ), ), ); } public function initialize() { $this->register_frontend_styles( array( array( 'sow-button-base', plugin_dir_url( __FILE__ ) . 'css/style.css', array(), SOW_BUNDLE_VERSION, ), ) ); } public function get_widget_form() { return array( 'text' => array( 'type' => 'text', 'label' => __( 'Button Text', 'so-widgets-bundle' ), ), 'url' => array( 'type' => 'link', 'label' => __( 'Destination URL', 'so-widgets-bundle' ), 'allow_shortcode' => true, ), 'new_window' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Open in a new window', 'so-widgets-bundle' ), ), 'download' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Download', 'so-widgets-bundle' ), 'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ), ), 'button_icon' => array( 'type' => 'section', 'label' => __( 'Icon', 'so-widgets-bundle' ), 'fields' => array( 'icon_selected' => array( 'type' => 'icon', 'label' => __( 'Icon', 'so-widgets-bundle' ), ), 'icon_color' => array( 'type' => 'color', 'label' => __( 'Icon Color', 'so-widgets-bundle' ), ), 'icon' => array( 'type' => 'media', 'label' => __( 'Image Icon', 'so-widgets-bundle' ), 'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ), ), 'icon_placement' => array( 'type' => 'select', 'label' => __( 'Icon Placement', 'so-widgets-bundle' ), 'default' => 'left', 'options' => array( 'top' => __( 'Top', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'bottom' => __( 'Bottom', 'so-widgets-bundle' ), 'left' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), 'design' => array( 'type' => 'section', 'label' => __( 'Design and Layout', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'width' => array( 'type' => 'measurement', 'label' => __( 'Width', 'so-widgets-bundle' ), 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ), ), 'align' => array( 'type' => 'select', 'label' => __( 'Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'mobile_align' => array( 'type' => 'select', 'label' => __( 'Mobile Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'theme' => array( 'type' => 'select', 'label' => __( 'Button Theme', 'so-widgets-bundle' ), 'default' => 'flat', 'options' => array( 'atom' => __( 'Atom', 'so-widgets-bundle' ), 'flat' => __( 'Flat', 'so-widgets-bundle' ), 'wire' => __( 'Wire', 'so-widgets-bundle' ), ), ), 'button_color' => array( 'type' => 'color', 'label' => __( 'Button Color', 'so-widgets-bundle' ), ), 'text_color' => array( 'type' => 'color', 'label' => __( 'Text Color', 'so-widgets-bundle' ), ), 'hover' => array( 'type' => 'checkbox', 'default' => true, 'label' => __( 'Use hover effects', 'so-widgets-bundle' ), 'state_emitter' => array( 'callback' => 'conditional', 'args' => array( 'hover[show]: val', 'hover[hide]: ! val', ), ), ), 'hover_background_color' => array( 'type' => 'color', 'label' => __( 'Hover Background Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'hover_text_color' => array( 'type' => 'color', 'label' => __( 'Hover Text Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'font' => array( 'type' => 'font', 'label' => __( 'Font', 'so-widgets-bundle' ), 'default' => 'default', ), 'font_size' => array( 'type' => 'measurement', 'label' => __( 'Font Size', 'so-widgets-bundle' ), 'default' => '1em', ), 'icon_size' => array( 'type' => 'measurement', 'label' => __( 'Icon Size', 'so-widgets-bundle' ), 'default' => '1.3em', ), 'padding' => array( 'type' => 'measurement', 'label' => __( 'Padding', 'so-widgets-bundle' ), 'default' => '1em', ), 'rounding' => array( 'type' => 'multi-measurement', 'label' => __( 'Rounding', 'so-widgets-bundle' ), 'default' => '0.25em 0.25em 0.25em 0.25em', 'measurements' => array( 'top' => array( 'label' => __( 'Top', 'so-widgets-bundle' ), ), 'right' => array( 'label' => __( 'Right', 'so-widgets-bundle' ), ), 'bottom' => array( 'label' => __( 'Bottom', 'so-widgets-bundle' ), ), 'left' => array( 'label' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), ), 'attributes' => array( 'type' => 'section', 'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'id' => array( 'type' => 'text', 'label' => __( 'Button ID', 'so-widgets-bundle' ), 'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ), ), 'classes' => array( 'type' => 'text', 'label' => __( 'Button Classes', 'so-widgets-bundle' ), 'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ), ), 'title' => array( 'type' => 'text', 'label' => __( 'Title Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ), ), 'on_click' => array( 'type' => 'text', 'label' => __( 'Onclick', 'so-widgets-bundle' ), 'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ), 'onclick' => true, ), 'rel' => array( 'type' => 'text', 'label' => __( 'Rel Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ), ), ), ), ); } public function get_style_name( $instance ) { if ( empty( $instance['design']['theme'] ) ) { return 'atom'; } return $instance['design']['theme']; } /** * Get the variables for the Button Widget. * * @return array */ public function get_template_variables( $instance, $args ) { $button_attributes = array(); $attributes = $instance['attributes']; $classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : ''; if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement']; if ( ! empty( $instance['design']['hover'] ) ) { $classes .= ' ow-button-hover'; } $button_attributes['class'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $classes ) ) ); if ( ! empty( $instance['new_window'] ) ) { $button_attributes['target'] = '_blank'; $button_attributes['rel'] = 'noopener noreferrer'; } if ( ! empty( $instance['download'] ) ) { $button_attributes['download'] = null; } if ( ! empty( $attributes['id'] ) ) { $button_attributes['id'] = $attributes['id']; } if ( ! empty( $attributes['title'] ) ) { $button_attributes['title'] = $attributes['title']; } if ( ! empty( $attributes['rel'] ) ) { if ( isset( $button_attributes['rel'] ) ) { $button_attributes['rel'] .= " $attributes[rel]"; } else { $button_attributes['rel'] = $attributes['rel']; } } $icon_image_url = ''; if ( ! empty( $instance['button_icon']['icon'] ) ) { $attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] ); if ( ! empty( $attachment ) ) { $icon_image_url = $attachment[0]; } } return array( 'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ), 'href' => ! empty( $instance['url'] ) ? $instance['url'] : '', 'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '', 'align' => $instance['design']['align'], 'icon_image_url' => $icon_image_url, 'icon' => $instance['button_icon']['icon_selected'], 'icon_color' => $instance['button_icon']['icon_color'], 'text' => $instance['text'], ); } /** * Get the variables that we'll be injecting into the less stylesheet. * * @return array */ public function get_less_variables( $instance ) { if ( empty( $instance ) || empty( $instance['design'] ) ) { return array(); } $text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : ''; $button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : ''; $less_vars = array( 'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '', 'button_color' => $button_color, 'text_color' => $text_color, 'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em', 'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color, 'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color, 'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '', 'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '', 'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '', 'has_text' => empty( $instance['text'] ) ? 'false' : 'true', 'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ), 'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center', 'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center', 'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true', ); if ( ! empty( $instance['design']['font'] ) ) { $font = siteorigin_widget_get_font( $instance['design']['font'] ); $less_vars['button_font'] = $font['family']; if ( ! empty( $font['weight'] ) ) { $less_vars['button_font_weight'] = $font['weight_raw']; $less_vars['button_font_style'] = $font['style']; } } return $less_vars; } /** * Make sure the instance is the most up to date version. * * @return mixed */ public function modify_instance( $instance ) { if ( empty( $instance ) ) { return array(); } $migrate_props = array( 'button_icon' => array( 'icon_selected', 'icon_color', 'icon', ), 'design' => array( 'align', 'theme', 'button_color', 'text_color', 'hover', 'hover_text_color', 'hover_background_color', 'font_size', 'rounding', 'padding', ), 'attributes' => array( 'id', ), ); foreach ( $migrate_props as $prop => $sub_props ) { if ( empty( $instance[ $prop ] ) ) { $instance[ $prop ] = array(); foreach ( $sub_props as $sub_prop ) { if ( isset( $instance[ $sub_prop ] ) ) { $instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ]; unset( $instance[ $sub_prop ] ); } } } } // Migrate onclick setting to prevent Wordfence flag. if ( ! empty( $instance['attributes'] ) && ! empty( $instance['attributes']['onclick'] ) ) { $instance['attributes']['on_click'] = $instance['attributes']['onclick']; } // If the mobile_align setting isn't set, set it to the same value as the align value. if ( ! empty( $instance['design'] ) && ! empty( $instance['design']['align'] ) && empty( $instance['design']['mobile_align'] ) ) { $instance['design']['mobile_align'] = $instance['design']['align']; } // Migrate predefined settings to more customizable settings. if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) { $instance['design']['font_size'] .= 'em'; } if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) { $instance['design']['padding'] .= 'em'; } if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) { $instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em'; } if ( empty( $instance['design']['icon_size'] ) ) { $instance['design']['icon_size'] = '1.3em'; } return $instance; } public function get_form_teaser() { if ( class_exists( 'SiteOrigin_Premium' ) ) { return false; } return array( sprintf( __( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ), '', '' ), ); } } siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );{"id":5473,"date":"2026-04-24T16:00:36","date_gmt":"2026-04-24T16:00:36","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=5473"},"modified":"2026-04-24T16:00:36","modified_gmt":"2026-04-24T16:00:36","slug":"comment-trouver-le-meilleur-plateforme-de-paris-en-ligne-pour-vos-besoins","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/comment-trouver-le-meilleur-plateforme-de-paris-en-ligne-pour-vos-besoins\/","title":{"rendered":"Comment trouver le meilleur plateforme de paris en ligne pour vos besoins"},"content":{"rendered":"
S\u00e9lectionner un site de paris en ligne adapt\u00e9 \u00e0 vos besoins peut sembler difficile face \u00e0 la multitude d’options disponibles sur le march\u00e9 fran\u00e7ais. Ce guide vous permettra \u00e0 d\u00e9terminer les crit\u00e8res essentiels pour r\u00e9aliser un choix judicieux et fiable.<\/p>\n
Avant que vous vous engager, il est primordial d’v\u00e9rifier la licence et la r\u00e9gulation du site de paris en ligne qui vous int\u00e9resse. Une plateforme autoris\u00e9e doit disposer de une autorisation octroy\u00e9e par l’ARJEL ou l’ANJ, garantissant ainsi votre s\u00e9curit\u00e9 en tant que parieur.<\/p>\n
La s\u00e9curit\u00e9 des op\u00e9rations financi\u00e8res repr\u00e9sente \u00e9galement un \u00e9l\u00e9ment cl\u00e9 lors du s\u00e9lection d’un site de paris en ligne de confiance. Assurez-vous que la solution emploie des protocoles de cryptage avanc\u00e9s et offre des options de paiement \u00e9tablies.<\/p>\n
Au-del\u00e0 des consid\u00e9rations l\u00e9gales, consid\u00e9rez l’exp\u00e9rience utilisateur globale offerte par le site de paris en ligne que vous contemplez. Une interface conviviale disposant de fonctionnalit\u00e9s pratiques comme le streaming en direct, les statistiques d\u00e9taill\u00e9es et les alertes personnalis\u00e9es am\u00e9liorera significativement votre exp\u00e9rience de paris sportifs.<\/p>\n
La protection des donn\u00e9es forme le fondement de toute exp\u00e9rience de pari r\u00e9ussie. Un site de paris en ligne de confiance doit obligatoirement poss\u00e9der une licence valide octroy\u00e9e par l’Autorit\u00e9 Nationale des Jeux.<\/p>\n
Les parieurs hexagonaux sont tenus de contr\u00f4ler syst\u00e9matiquement la pr\u00e9sence d’un agr\u00e9ment ANJ avant toute inscription. Cette certification assure le respect des r\u00e8gles rigoureuses \u00e9tablies par les autorit\u00e9s.<\/p>\n
L’ANJ d\u00e9livre trois types de autorisations sp\u00e9cialis\u00e9es pour r\u00e9guler les activit\u00e9s de paris sportifs, hippiques et poker. Chaque site de paris en ligne doit pr\u00e9senter son num\u00e9ro d’agr\u00e9ment de mani\u00e8re apparente.<\/p>\n
Les plateformes autoris\u00e9es appliquent des obligations rigoureuses relatives \u00e0 la protection des joueurs et la pr\u00e9vention du blanchiment d’argent. Seuls les op\u00e9rateurs titulaires d’une licence fran\u00e7aise peuvent l\u00e9galement proposer leurs offres.<\/p>\n
Le cryptage SSL 256 bits constitue le standard minimal qu’un site de paris en ligne s\u00e9rieux doit impl\u00e9menter pour prot\u00e9ger les transactions. Cette solution prot\u00e8ge vos donn\u00e9es financi\u00e8res contre toute interception malveillante.<\/p>\n
La respect des exigences du RGPD assure que vos donn\u00e9es personnelles sont g\u00e9r\u00e9es avec transparence et respect. Un site de paris en ligne responsable propose \u00e9galement des options de v\u00e9rification en deux \u00e9tapes pour am\u00e9liorer la s\u00e9curit\u00e9.<\/p>\n
Les op\u00e9rateurs fiables proposent une large gamme de moyens de paiement \u00e9tablis tels que Visa, Mastercard, PayPal et virements bancaires. Un site de paris en ligne de qualit\u00e9 sup\u00e9rieure affiche de mani\u00e8re transparente ses temps de traitement pour chaque m\u00e9thode.<\/p>\n
Les portefeuilles num\u00e9riques comme Skrill ou Neteller proposent une s\u00e9curit\u00e9 renforc\u00e9e en contournant la transmission directe de vos coordonn\u00e9es bancaires. Privil\u00e9giez toujours un site de paris en ligne qui propose des limites de d\u00e9p\u00f4t personnalisables.<\/p>\n
Les promotions sp\u00e9ciales repr\u00e9sentent un \u00e9l\u00e9ment cl\u00e9 au moment de s\u00e9lectionner un site de paris en ligne et m\u00e9ritent une \u00e9tude d\u00e9taill\u00e9e. Les bonus de bienvenue diff\u00e8rent notablement d’une plateforme \u00e0 l’autre, incluant des paris gratuits simples aux promotions cumul\u00e9es incluant des bonus sur d\u00e9p\u00f4t et des promotions r\u00e9currentes. Il est essentiel de saisir les conditions de mise li\u00e9es \u00e0 chaque offre, car un bonus attrayant accompagn\u00e9 de conditions restrictives peut s’av\u00e9rer moins b\u00e9n\u00e9fique qu’une promotion plus modeste mais facilement d\u00e9blocable. La clart\u00e9 des conditions et conditions refl\u00e8tent g\u00e9n\u00e9ralement la fiabilit\u00e9 globale de l’op\u00e9rateur.<\/p>\n
Type de bonus<\/strong><\/td>\n| Montant typique<\/strong><\/td>\n | Conditions de mise<\/strong><\/td>\n | Avantages principaux<\/strong><\/td>\n<\/tr>\n | Bonus d’accueil<\/td>\n | 100\u20ac \u00e0 200\u20ac<\/td>\n | 5 \u00e0 10 fois la somme<\/td>\n | Capital initial augment\u00e9<\/td>\n<\/tr>\n | Paris gratuits<\/td>\n | 10\u20ac \u00e0 50\u20ac<\/td>\n | 1x \u00e0 3x le montant<\/td>\n | Sans risque financier<\/td>\n<\/tr>\n | Cashback<\/td>\n | entre 10% et 20%<\/td>\n | Restitution imm\u00e9diate<\/td>\n | Diminution des d\u00e9ficits<\/td>\n<\/tr>\n | Programme de fid\u00e9lit\u00e9<\/td>\n | \u00c9volutif en fonction de l’activit\u00e9<\/td>\n | Points cumulatifs<\/td>\n | R\u00e9compenses \u00e0 long terme<\/td>\n<\/tr>\n<\/table>\n | Avant de accepter une promotion sur un site de paris en ligne, examinez avec soin la dur\u00e9e de validit\u00e9 du bonus ainsi que les sports ou march\u00e9s \u00e9ligibles pour remplir les exigences de mise requises.<\/p>\n Les plans de loyaut\u00e9 repr\u00e9sentent \u00e9galement un b\u00e9n\u00e9fice important pour les parieurs r\u00e9guliers, offrant des r\u00e9compenses continues qui peuvent comprendre des mises gratuites chaque semaine ou chaque mois sur votre site de paris en ligne pr\u00e9f\u00e9r\u00e9.<\/p>\n L’exp\u00e9rience utilisateur et les fonctionnalit\u00e9s propos\u00e9es<\/h2>\nL’design et la convivialit\u00e9 repr\u00e9sentent des \u00e9l\u00e9ments d\u00e9terminants dans votre contentement au quotidien. Un site de paris en ligne performant doit proposer une navigation intuitive, un design \u00e9pur\u00e9 et des vitesses de chargement optimales, quel que soit un appareil desktop, mobile ou tablette. La qualit\u00e9 de l’interface influence directement votre capacit\u00e9 \u00e0 placer vos paris avec efficacit\u00e9 et \u00e0 tirer parti des opportunit\u00e9s disponibles.<\/p>\n
|