/* 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":183381,"date":"2026-06-22T16:08:32","date_gmt":"2026-06-22T16:08:32","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=183381"},"modified":"2026-06-22T16:08:32","modified_gmt":"2026-06-22T16:08:32","slug":"so-sicherst-du-dir-ja-deutscher-glucksspieler-diese-erfolgreichsten-mobilen-casino-boni-7","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/so-sicherst-du-dir-ja-deutscher-glucksspieler-diese-erfolgreichsten-mobilen-casino-boni-7\/","title":{"rendered":"So sicherst du dir ja deutscher Glucksspieler diese erfolgreichsten mobilen Casino Boni"},"content":{"rendered":"

Alive https:\/\/locowincasino-de.com\/app\/<\/a> Rauschgifthandler Spiele sind nicht mehr da Galleries ubermitteln, diese echten Luxuscasinos ahnlich sein und von echten Spielleitern geleitet sind. Diese Verzicht erfolgt in hochwertigem Clips und Gerausch \ufffd alles, das du brauchst, ist diese stabile Internetverbindung. Insgesamt gewohnlich dich diese benutzerfreundliche Aussehen, diese auch fur jedes Touchscreens und diese Anwendung auf dem Handy geeignet ist, wenn einige Kameraperspektiven. Inoffizieller mitarbeiter Reside Casino z\u00e4hlen nach einen interaktivsten mobilen Auffuhren & Lightning Toothed wheel, Abgedreht Go steady und Sugary Bonanza CandyLand.<\/p>\n

Google android Casinos: Positive aspekte & Nachteile<\/h2>\n

Android betriebssystem Casinospiele machen Spa\u00df und prasentation dir ganz Funktionen, diese du brauchst, dar\u00fcber in einem Moglich Casino nach auffuhren. Wie in allen Glucksspielen findet man zwar auch beim Spielen auf mobilen Geraten ein und zwei welle Unzuli\ufffdnglichkeiten. Wir sehen united nations samtliche Im voraus- und Nachteile potpourri mobilen Spielens angeschaltet, daruber du entschlie?en kannst, in wie weit mobiles Wette nach dir passt.<\/p>\n

Storungsfrei nach tatig sein und praktisch Enorme Wahl angeschaltet mobilen Casinospielen Frei Aktionen fur google android Casinos Viele einige Zahlungsmoglichkeiten Kundenservice ist leicht umsetzbar Nicht frei von Umsatzbedingungen Eingeschrankte Wege zum Multitasking beim Auffuhren Kann von kleinere Bildschirme schwer machen Erfordert regelma?ige Updates f\u00fcr reibungslose Anwendung<\/p>\n

Casino Boni geh\u00f6ren zum festen Punkt vos Erreichbar Glucksspiels \ufffd irrelevant in wie weit am Computer, auf dem Handy und Mobile phone. \u00dcber mobilen Casino Serviceleistungen kannst du dein Spielerlebnis vergro?ern. Du kannst lot Casino Boni ?, vielleicht nebensachlich spezielle Aktionen nach handen droid Computer-nutzer. Hier sind einige ein gangigen Casino Aktionen:<\/p>\n

Ein gro?teil mobilen Casinos vorschlag dir zum Abfahrt einen Willkommensbonus auf deine gute Einzahlung. Meistens handelt es sich um einen Einzahlungsbonus, Bonusguthaben und Freispiele. Beachte, so ich diese besten Willkommensboni angeschaltet Umsatzbedingungen geknupft sind, meistens auf 20x und 40x. Mehr verschiedenen Einschrankungen sind Einsatzlimits, Laufzeit, teilnehmende Spiele und Spielgewichtung.<\/p>\n

Diese Aktionen sind nur nach handen Spieler inoffizieller mitarbeiter mobilen Casino zuganglich. Die zu tun sein daf\u00fcr beflugeln, diese mobilen Plattformen nach vorteil. Sie Angebote leben z.b. ja Provision fur das Laden ein Computerprogramm package, Pramie f\u00fcr das Beteiligen \u00fcber Handy, ohne Freispiele, Einzahlungsboni und Boni uber Pump-Benachrichtigungen. Du kannst dir diese Boni freund und konkurrent reibungslos behuten, dar\u00fcber du somit einen QR-Code scannst und aufwarts einen entsprechenden Internet-adresse des Casinos klickst.<\/p>\n

Boni frei Einzahlung sind eine unkomplizierte Opportunitat, echte Geldgewinne nach auf die beine stellen. Sie sind sich speziell fur innovative Spieler \u00fcber begrenztem Haushalt, diese keine finanzielle Verpflichtung beantworten mochten. Du kannst innovative Spielautomaten \u00fcber dem Provision ohne Einzahlung ausprobieren, dar\u00fcber du dich storungsfrei anmeldest auf anderem einen Provision Code eingibst. Schon sind diese Boni selten und haufig angeschaltet hohe Umsatzbedingungen geknupft.<\/p>\n

Viele android Casino Ernahrer haben Treueprogramme. Auf das Anmeldung kannst du somit ich mitmachen & wirst automatisch Punkt davon; du kannst inoffizieller mitarbeiter Niveau hervorheben und andere Positive aspekte erhalten. Erstklassige Beruhmte personlichkeit Casinos angebot diese Pluspunkte meistens in form von personalisierten Belohnungen, Freispielen, Cashback Aktionen, dem personlichen Star Betreuer, hoheren Auszahlungslimits, Zugriff auf exklusiven Veranstaltungen und noch mehr.<\/p>\n

So startest du inoffizieller mitarbeiter mobilen Casino<\/h2>\n

Es ist leicht nach wissen, wie android betriebssystem Casinos tun. Wenn du zwar gar nicht wei?t, wie du dein Abenteuer uber Gemeinsam Spielautomaten auf dem Handy beginnst, unterstutzt dir diese Schritt-fur-Schritt-Anleitung von Nightrush \u00fcber vier einfacheren Schritten.<\/p>\n

Wahle ein sicheres mobiles Casino<\/h2>\n

Sieh dir unsere Nightrush Moglich Casino Bewertungen & Verzeichnen z. hd. android Casinos angeschaltet. Entscheide, diese Angebot am besten nach deinem Spielstil und deinen Bedurfnissen passt, wenn du auf Android- und apple’s ios-Geraten inoffizieller mitarbeiter mobilen Casino spielst.<\/p>\n

Registriere das Casino Konto<\/h2>\n

Registriere dich dann z. hd. ein mobiles Casino Konto. Gib deine personlichen Informationen ein und bestatige dein Konto \u00fcber Telefon und E-E-mail. Lies dir diese Allgemeinen Geschaftsbedingungen des Casinos intensiv von.<\/p>\n

Einlosen und Provision beschutzen<\/h2>\n

Uberprufe diese verfugbaren Zahlungsmethoden inoffizieller mitarbeiter Casino und informiere dich \u00fcber mogliche Einschrankungen. Wahle eine Chance, gib einen gewunschten Einzahlungsbetrag das und achte darauf, deinen Willkommensbonus nach pushen.<\/p>\n","protected":false},"excerpt":{"rendered":"

Alive https:\/\/locowincasino-de.com\/app\/ Rauschgifthandler Spiele sind nicht mehr da Galleries ubermitteln, diese echten Luxuscasinos ahnlich sein und von echten Spielleitern geleitet sind. Diese Verzicht erfolgt in hochwertigem Clips und Gerausch \ufffd alles, das du brauchst, ist diese stabile Internetverbindung. Insgesamt gewohnlich dich diese benutzerfreundliche Aussehen, diese auch fur jedes Touchscreens und\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-183381","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/183381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=183381"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/183381\/revisions"}],"predecessor-version":[{"id":183388,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/183381\/revisions\/183388"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=183381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=183381"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=183381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}