/* 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":9919,"date":"2026-04-27T16:22:58","date_gmt":"2026-04-27T16:22:58","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=9919"},"modified":"2026-04-27T16:22:58","modified_gmt":"2026-04-27T16:22:58","slug":"treueboni-und-cashback-programme-fur-stammkunden-im-vergleich-die-top-angebote-2024","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/treueboni-und-cashback-programme-fur-stammkunden-im-vergleich-die-top-angebote-2024\/","title":{"rendered":"Treueboni und Cashback Programme f\u00fcr Stammkunden im Vergleich: Die Top Angebote 2024"},"content":{"rendered":"

Online-Casinos stellen zur Verf\u00fcgung ihren loyalen Spielern zunehmend attraktive Belohnungsprogramme an, wobei sich ein \u00dcberblick \u00fcber casino ohne deutsche lizenz ganz besonders f\u00fcr regelm\u00e4\u00dfige Nutzer lohnt, um optimale Gewinne zu sichern und auf lange Sicht von besonderen Promotionen zu partizipieren.<\/p>\n

Was sind Loyalit\u00e4tsboni und Cashback Programme f\u00fcr Stammg\u00e4ste?<\/h2>\n

Treueboni sind spezielle Verg\u00fcnstigungen, die Online-Casinos ihren treuen Kunden gew\u00e4hren, wobei es entscheidend ist, in regelm\u00e4\u00dfigen Abst\u00e4nden casino ohne deutsche lizenz zu pr\u00fcfen, um die lukrativsten Angebote zu erkennen und optimal zu nutzen.<\/p>\n

Cashback-Programme arbeiten nach einem simplen Konzept: Spieler bekommen einen Prozentsatz ihrer Verluste zur\u00fcck, was die Risiken reduziert. Wer sich die Zeit nimmt, verschiedene casino ohne deutsche lizenz zu untersuchen, kann erhebliche Unterschiede bei den R\u00fcckerstattungsquoten feststellen.<\/p>\n

Beide Programmtypen sind darauf ausgerichtet, die Kundenbeziehungen zu festigen und regelm\u00e4\u00dfiges Spielen zu belohnen. Die Bedingungen unterscheiden sich stark zwischen den Anbietern, weshalb ein methodisches Vorgehen beim casino ohne deutsche lizenz ausschlaggebend ist, um das optimale Leistungs-Kosten-Verh\u00e4ltnis zu erreichen.<\/p>\n

Die unterschiedlichen Arten von Loyalit\u00e4ts- und Cashback-Programmen im \u00dcberblick<\/h2>\n

Die Bandbreite von Bonusprogrammen in deutschen Gaming-Plattformen macht es erforderlich, dass Spieler beim casino ohne deutsche lizenz die verschiedenen Systeme und Abl\u00e4ufe genau verstehen. Jedes System nutzt unterschiedliche Strategien zur Spielerbindung und pr\u00e4sentiert individuelle Vorteile und Nachteile, die je nach Spielverhalten variabel bedeutsam sein k\u00f6nnen.<\/p>\n

Zeitgen\u00f6ssische Plattformen verbinden h\u00e4ufig mehrere Belohnungsmodelle miteinander, wodurch Stammkunden von verschiedenen Vorteilen parallel profitieren k\u00f6nnen. Die Vertrautheit der wesentlichen Programmtypen erleichtert beim casino ohne deutsche lizenz die Auswahl der optimal passenden Anbieter f\u00fcr die pers\u00f6nlichen Bed\u00fcrfnisse erheblich.<\/p>\n

Punkte-basierte Treueprogramme<\/h3>\n

Bei punktebasierten Systemen sammeln Spieler f\u00fcr jeden get\u00e4tigten Einsatz Treuepunkte, die sich danach gegen Bonusguthaben, kostenlose Spins oder andere Pr\u00e4mien austauschen lassen. Wer beim casino ohne deutsche lizenz auf derartige Systeme achtet, entdeckt h\u00e4ufig gestaffelte Umrechnungskurse, bei denen bessere Mitgliedschaftsstufen attraktivere Bedingungen anbieten.<\/p>\n

Die Offenlegung der Punktevergabe variiert stark zwischen den Betreibern, weshalb sich beim casino ohne deutsche lizenz besonders die Umwandlungskurse und G\u00fcltigkeitsfristen der gesammelten Punkte als entscheidende Bewertungskriterien erweisen. Zahlreiche Casinos bieten weitere Punktemultiplikatoren in besonderen Aktionsphasen an.<\/p>\n

Cashback-Programme mit direkter R\u00fcckerstattung<\/h3>\n

Cashback-Programme erstatten einen festgelegten Prozentsatz der Verluste oder Eins\u00e4tze direkt als Bonusguthaben oder Echtgeld zur\u00fcck. Besonders attraktiv zeigen sich beim casino ohne deutsche lizenz jene Angebote, die w\u00f6chentliche oder monatliche Auszahlungen ohne komplizierte Umsatzbedingungen bieten.<\/p>\n

Die H\u00f6he des Cashbacks liegt \u00fcblicherweise im Bereich von 5% bis 20%, abh\u00e4ngig vom VIP-Status und der Aktivit\u00e4t des Spielers. Versierte Spieler pr\u00fcfen beim casino ohne deutsche lizenz darauf, ob das zur\u00fcckerstattete Guthaben unmittelbar verf\u00fcgbar ist oder an Bonusbedingungen gekn\u00fcpft wird.<\/p>\n

Abgestufte VIP-Programme<\/h3>\n

VIP-Systeme mit verschiedenen Stufen honorieren kontinuierliche Aktivit\u00e4t durch progressiv optimierte Konditionen und exklusive Privilegien auf oberen R\u00e4ngen. Beim casino ohne deutsche lizenz zeigt sich, dass die besten Programme zwischen vier bis zehn verschiedene Stufen mit eindeutig festgelegten Aufstiegskriterien bereitstellen.<\/p>\n

Typischerweise geh\u00f6ren zu den Vorz\u00fcgen h\u00f6herer VIP-Stufen pers\u00f6nliche Kontomanager, z\u00fcgigere Auszahlungsbearbeitungen, erh\u00f6hte Einzahlungsgrenzen und Zugang zu exklusiven Veranstaltungen. Die Voraussetzungen zum Aufstieg in h\u00f6here Stufen sollten beim casino ohne deutsche lizenz realistisch erreichbar sein und die bereitgestellten Leistungen den erforderlichen Aufwand begr\u00fcnden.<\/p>\n

Was Sie beim Vergleich von Treueboni beachten sollten<\/h2>\n

Bei der Wahl des passenden Treueprogramms sollten Sie methodisch vorgehen, denn wenn Sie casino ohne deutsche lizenz durchf\u00fchren, werden Sie feststellen schnell erhebliche Unterschiede bei den Konditionen und Auszahlungsbedingungen der verschiedenen Anbieter.<\/p>\n