/* 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":145139,"date":"2026-06-12T11:12:29","date_gmt":"2026-06-12T11:12:29","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=145139"},"modified":"2026-06-12T11:12:29","modified_gmt":"2026-06-12T11:12:29","slug":"extra-tegoed-en-free-spins-meteen-van-spin-sahara-casino-in-nederland","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/extra-tegoed-en-free-spins-meteen-van-spin-sahara-casino-in-nederland\/","title":{"rendered":"Extra tegoed en Free Spins Meteen van Spin Sahara Casino in Nederland"},"content":{"rendered":"
\n

Spin Sahara Casino lokt Nederlandse spelers aan met een uitgebreid aanbod aan bonussen en gratis spins https:\/\/spinssahara.com\/nl-nl\/<\/a>. Deze acties zijn bedoeld je speelsessie meteen een boost te geven en je nieuwe spellen te uit te proberen. Het casino heeft een naam verworven om bonussen vlot bij te schrijven, zodat je voordeel onmiddellijk inzetbaar is. Hier ontdek je precies wat er allemaal mogelijk is en hoe je er het beste gebruik van maakt.<\/p>\n

Stortingsbonussen voor Regelmatige Spelers<\/h2>\n

De aandacht voor spelers stopt niet na het welkomstpakket. Spin Sahara Casino waardeert regelmatige bezoekers met herhaalde stortingsbonussen. Bijvoorbeeld wekelijkse reload bonussen, bijvoorbeeld 50% extra op een storting elke maandag, of bijzondere weekendacties. Het spoort spelers aan om terug te komen en hun populairste spellen verder te ontdekken.<\/p>\n

De voorwaarden voor deze bonussen zijn doorgaans gunstiger dan die van de welkomstbonus, met mindere omspeeleisen. Soms worden ze gecombineerd met extra free spins of toegangsmogelijkheden tot besloten toernooien. Het is een methode voor het casino om toewijding te vergoeden en het spelplezier op peil te houden voor de Nederlandse spelers.<\/p>\n

Spelers krijgen vaak een individuele melding over deze reload bonussen, via e-mail of een pop-up bij het inloggen. Het constante aanbod van dergelijke acties bewijst dat Spin Sahara zich inspant voor een blijvende en plezierige spelerservaring voor zijn Nederlandse klanten.<\/p>\n

Bonus zonder eigen inleg: Zijn ze er echt<\/h2>\n

Een stortingsvrije bonus, een zogeheten no deposit bonus, is een schaarse maar populaire aanbieding. Spin Sahara Casino kan dit soort acties af en toe aanbieden, onder andere als welkomstgeschenk of extraatje voor loyale spelers. Het kan gaan om een kleine hoeveelheid bonusgeld of een paar gratis spins, die je kunt benutten zonder eigen inleg in te leggen.<\/p>\n

Deze bonussen bieden een uitstekende, risicovrije kans om het casino en de software te verkennen. Uiteraard zitten ook hier stringente voorwaarden aan, vooral wat betreft de omspeelvereisten en hoogste uitbetaling. Het levert soms echte winsten op, maar werkt vooral als een kennismakingsinstrument.<\/p>\n

Om in aanmerking te komen voor een no deposit bonus dien je soms een speciale code ingeven tijdens de registratie. Het is een krachtig middel dat het casino hanteert om zich te onderscheiden in de concurrerende Nederlandse markt, waar spelers op zoek zijn naar duidelijke en transparante aanbiedingen.<\/p>\n

Gratis Spin Acties en Hoe ze Werken<\/h2>\n

Free spin acties worden erg populair onder enthousiastelingen van slots. Spin Sahara Casino geeft ze voor nieuwe leden en voor bestaande leden, via dagelijkse, wekelijkse of exclusieve aanbiedingen. De spins worden meestal verbonden aan specifieke spellen, zoals populaire titels van bekende gameproviders. Ze worden direct of na een deposito aan je account toegevoegd.<\/p>\n

Gewonnen bedragen die je verkrijgt met gratis spins worden meestal uitgekeerd als promotiegeld. Ook daar bestaan inzetvereisten voor. Soms geldt een maximumbedrag dat je uit free spin-winsten kunt uitbetalen. Het is daarom aan te raden om de bonusvoorwaarden even te doorlezen. Dan weet je precies wat je van deze gratis beurten kunt verwachten.<\/p>\n

Een veelvoorkomende strategie is het aanbieden van free spins als component van een ‘Spel van de Week’ promotie. Zo wordt u aangemoedigd om nieuwe gokkasten te proberen die net in de lobby staan. Meestal zijn de spins een gelimiteerde duur geldig, dus je moet ze op tijd benutten om ze niet te kwijtraken.<\/p>\n

Adviezen om Bonusvoordelen Optimaal te Inzetten<\/h2>\n

Om het beste uit een bonus bij Spin Sahara Casino te halen, is een verstandige aanpak aan te raden. Kies als eerste een bonus die past bij je speelstijl; een slots-liefhebber gaat voor free spins, een tafelspel-fan voor bonusgeld. Speel verder vooral spellen die geheel meetellen voor het behalen van de omspeelvoorwaarden.<\/p>\n

Houd je inzetten binnen de opgelegde limieten en let op de vervaldatum van de bonus. Het kan raadzaam zijn om tijdens het omspelen te focussen op spellen met een grotere RTP (Return to Player). Dat verbetert je kansen op een gunstig resultaat. Blijf praktisch en zie de bonus vooral als een extraatje bij je entertainment.<\/p>\n

    \n
  1. Bepaal je speelsessie: bedenk van tevoren hoeveel tijd je aan het omspelen wilt besteden.<\/li>\n
  2. Houd bij hoe ver je bent met het behalen van de omspeelvoorwaarden.<\/li>\n
  3. Vermijd spellen met een extreem hoge volatiliteit tijdens het omspelen, tenzij je bereid bent meer risico te nemen.<\/li>\n
  4. Controleer na een grote winst of je nog steeds binnen de maximale inzetlimiet speelt.<\/li>\n<\/ol>\n

    Spin Sahara’s Unieke Werkwijze voor de Nederlandse Markt<\/h2>\n

    Spin Sahara Casino biedt zijn bonusaanbod aangepast op de behoeften en richtlijnen van de Nederlandse markt. Het casino snapt dat lokale spelers veel geven om transparantie, snelle uitbetalingen en correcte voorwaarden. Daarom deelt het alle promoties duidelijk, zonder onzichtbare clausules die voor onprettige verrassingen kunnen zorgen.<\/p>\n

    De software en het spelassortiment zijn geselecteerd met het Nederlandse publiek in het achterhoofd. Dat is te zien in de spellen die voor free spin-acties worden gekozen. Deze specifieke aanpak garandeert dat de bonussen niet alleen interessant zijn, maar ook relevant voor de speelstijlen die in Nederland in trek zijn.<\/p>\n

    Door samen te werken met betrouwbare betaalmethoden en zich te houden aan de regels van de Kansspelautoriteit, positioneert Spin Sahara zich als een geloofwaardige partner. De bonussen zijn een component van deze uitgebreidere inzet op een hoogwaardige en veilige speelomgeving voor alle ingeschreven spelers uit Nederland.<\/p>\n

    Startbonus voor Beginnende Spelers<\/h2>\n

    Nieuwe spelers uit Nederland verkrijgen bij Spin Sahara Casino een groot welkomstpakket. Dit pakket omvat vaak een mix van bonusbedrag op de eerste stortingen en een reeks gratis spins. Het idee is om je breed kennis te laten maken met het casino, van tafelspellen tot de nieuwste video slots.<\/p>\n