/* 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":9915,"date":"2026-04-27T16:14:37","date_gmt":"2026-04-27T16:14:37","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=9915"},"modified":"2026-04-27T16:14:37","modified_gmt":"2026-04-27T16:14:37","slug":"casino-willkommensbonus-ohne-einzahlung-in-deutschland-entdecken-und-optimal-einsetzen","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/casino-willkommensbonus-ohne-einzahlung-in-deutschland-entdecken-und-optimal-einsetzen\/","title":{"rendered":"Casino Willkommensbonus ohne Einzahlung in Deutschland entdecken und optimal einsetzen"},"content":{"rendered":"

Spieler in Deutschland haben die Gelegenheit, mit einem casino bonus ohne einzahlung Deutschland moderne Casino-Plattformen risikofrei zu testen und dabei echtes Geld zu gewinnen, ohne eigenes Kapital einsetzen zu m\u00fcssen.<\/p>\n

Was ist ein Casino-Bonus ohne Einzahlung?<\/h2>\n

Ein No Deposit Bonus gestattet Spielern, ohne vorherige Geld\u00fcberweisung mit realem Geld zu spielen. Online-Casinos bieten einen casino bonus ohne einzahlung Deutschland als Willkommensgeschenk, um neue Kunden anzulocken und ihnen einen risikofreien Einstieg zu gew\u00e4hrleisten. Dabei erhalten Spieler Bonusguthaben oder kostenlose Drehungen direkt nach der Registrierung.<\/p>\n

Die H\u00f6he solcher Angebote liegt zwischen 5 und 50 Euro Bonusgeld oder 10 bis 100 Freispielen. Casinos nutzen einen casino bonus ohne einzahlung Deutschland gezielt, um sich im umk\u00e4mpften Markt von der Konkurrenz abzuheben. Spieler k\u00f6nnen damit unterschiedliche Spiele ausprobieren und die Plattform erkunden, bevor sie eigenes Geld einsetzen.<\/p>\n

Wichtig zu verstehen ist, dass diese Boni an bestimmte Umsatzbedingungen gebunden sind. Gewinne aus einem casino bonus ohne einzahlung Deutschland m\u00fcssen in der Regel mehrmals durchgespielt werden, bevor eine Abhebung m\u00f6glich ist. Dennoch bieten sie eine hervorragende Chance, Online-Gaming ohne finanzielle Gefahr zu erfahren und m\u00f6glicherweise reale Gewinne zu erzielen.<\/p>\n

Die top Arten von Bonusoptionen ohne Einzahlung<\/h2>\n

Internet-Casinos bieten an unterschiedliche Arten von Gratisangeboten an, wobei jeder casino bonus ohne einzahlung Deutschland seine eigenen Besonderheiten und Vorteile mit sich bringt. Die Palette erstreckt sich von klassischen Freispielen \u00fcber tats\u00e4chliches Bonusgeld bis hin zu innovativen Cashback-Programmen, die unterschiedliche Spielertypen adressieren und umfangreiche Optionen er\u00f6ffnen.<\/p>\n

W\u00e4hrend manche Gamer die unmittelbare Verwaltung \u00fcber ihr Bonusguthaben bevorzugen, sch\u00e4tzen andere die Spannung von Freispielen an popul\u00e4ren Spielautomaten. Jeder casino bonus ohne einzahlung Deutschland sollte daher gr\u00fcndlich nach die individuellen Pr\u00e4ferenzen und Spielgewohnheiten ausgerichtet sein, um das volle Potential zu nutzen und ein bestm\u00f6gliches Spielerlebnis zu garantieren.<\/p>\n

Kostenlose Freispiele ohne Einzahlung<\/h3>\n

Freispiele geh\u00f6ren zu den beliebtesten Bonusformen, da sie Spielern erm\u00f6glichen, ausgew\u00e4hlte Spielautomaten risikofrei auszuprobieren. Ein typischer casino bonus ohne einzahlung Deutschland beinhaltet zwischen 10 und 50 kostenlose Spins an popul\u00e4ren Slots, w\u00e4hrend die Gewinne aus diesen Runden \u00fcblicherweise bestimmten Umsatzbedingungen unterliegen.<\/p>\n

Die Anziehungskraft von Freispielen besteht in ihrer Einfachheit und der Gelegenheit, neue Slots kennenzulernen, ohne das pers\u00f6nliche Guthaben zu belasten. Zahlreiche Casinos nutzen einen casino bonus ohne einzahlung Deutschland mit kostenlosen Drehs gezielt ein, um ihre neuesten Spielautomaten-Neuerungen zu bewerben und Spielern einen ersten Eindruck von der Spielweise zu vermitteln.<\/p>\n

Kostenloses Willkommensbonus<\/h3>\n

Beim Startguthaben erhalten Neukunden einen festen Geldbetrag auf ihr Kundenkonto eingezahlt, der variabel f\u00fcr verschiedene Casinospiele eingesetzt werden kann. Ein derartiger Bonus casino bonus ohne einzahlung Deutschland bietet typischerweise 5 bis 50 Euro zur Verf\u00fcgung, die nach erfolgreicher Registrierung unmittelbar bereitgestellt sind und gr\u00f6\u00dftm\u00f6gliche Flexibilit\u00e4t beim Spielen gew\u00e4hrleisten.<\/p>\n

Der wesentliche Vorteil gegen\u00fcber Freispielen besteht in der freien Wahl der Spiele, wodurch Spieler nicht auf bestimmte Slots beschr\u00e4nkt sind. Wer einen casino bonus ohne einzahlung Deutschland mit Startguthaben nutzt, kann Tischspiele, Live-Casino oder unterschiedliche Slots testen und dabei die komplette Spielauswahl des Anbieters erkunden.<\/p>\n

Cashback-Promotionen<\/h3>\n

Cashback-Bonusse arbeiten nach einem unterschiedlichen Konzept und zahlen einen Teil der Verluste zur\u00fcck, was vor allem f\u00fcr vorsichtige Spieler interessant ist. Ein casino bonus ohne einzahlung Deutschland mit Cashback-Element gew\u00e4hrt typischerweise zwischen 10 und 25 Prozent Erstattung von Nettoverluste innerhalb eines bestimmten Zeitraums.<\/p>\n

Diese Bonusform reduziert das Verlustrisiko erheblich und gibt Spielern eine zweite Chance, ihre Strategie anzupassen und fortzufahren. W\u00e4hrend klassische Boni vor dem Spielen gutgeschrieben werden, greift ein casino bonus ohne einzahlung Deutschland mit Cashback erst nachtr\u00e4glich und belohnt damit auch Spieler, die beim initialen Spiel kein Gl\u00fcck hatten.<\/p>\n

So finden Sie vertrauensw\u00fcrdige Spielbanken mit kostenlosem Willkommensbonus<\/h2>\n

Die Wahl eines vertrauensw\u00fcrdigen Online-Casinos erfordert sorgf\u00e4ltige Recherche, insbesondere wenn Sie einen casino bonus ohne einzahlung Deutschland nutzen m\u00f6chte und dabei auf Sicherheit und faire Spielbedingungen Wert legen.<\/p>\n