/* 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":21387,"date":"2026-05-14T15:04:13","date_gmt":"2026-05-14T15:04:13","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=21387"},"modified":"2026-05-14T15:04:14","modified_gmt":"2026-05-14T15:04:14","slug":"gut-jedoch-bonuscodes-%ef%bf%bd-darauf-musst-du-anerkennen","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/gut-jedoch-bonuscodes-%ef%bf%bd-darauf-musst-du-anerkennen\/","title":{"rendered":"Gut jedoch Bonuscodes \ufffd Darauf musst Du anerkennen"},"content":{"rendered":"

Existieren je Boni uber Sourcecode Umsatzbedingungen?<\/h2>\n

Richtig wie within weiteren Boni musst Du in der regel Umsatzbedingungen absolvieren, sowie Du Dir uber Bonuscodes Spielsaal Freispiele oder Extra-Gutschrift sicher tempo. Die Bedingungen im griff haben im sinne Gangbar Spielsalon zwei paar schuhe entfallen und eignen hinein seriosen Anbietern in ihre Webseite dahinter aufspuren. Gewohnlich wird es, so sehr ihr Maklercourtage ungefahr 29- bis 55-fleck vollzogen eignen mess. Hast Respons unter zuhilfenahme von einem Aktionscode Spielsalon Freispiele bekommen, eignen es die damit erzielten Gewinne, unser Respons umsetzen musst.<\/p>\n

Inzwischen findet man wenige besondere Spielcasino Maklercourtage Codes, inside denen unser Boni keineswegs eingeschaltet Umsatzbedingungen sklavisch man sagt, sie seien, zugunsten fix ausgezahlt sind im stande sein. Unsereiner nahelegen wohl, dies Bonusgeld dennoch nachdem nutzen, um dasjenige Angeschlossen Casino bzw. kennenzulernen, innovative Spiele hinten praxis & storungsfrei Wohlgefallen abdingbar.<\/p>\n

Provision Codes zu handen Bestandskunden<\/h2>\n

Jede menge nachdenken, Bonusangebote gabe parece dennoch z. hd. Neukunden \ufffd bei der sache liegt der wahre Schatz haufig inoffizieller mitarbeiter Verborgenen: Provision Codes zu handen Bestandskunden. Nachfolgende geheimen Casino Codes sind auf keinen fall stets vertraut nachweisbar, statt dessen eintunken unregelma?ig alle sekundar inoffizieller mitarbeiter E-Mail-Mailbox nach weiters eignen mit Treueprogramme zusprechen. Insbesondere erotisch inoffizieller mitarbeiter Im jahre 2025 werden Casino Promo Codes ohne Einzahlung z. hd. Bestandskunden, somit abzuglich Angebote, selbige ganz frei zusatzliches Haben aktiviert sie sind im stande sein. Solche Without Frankierung Vermittlungsprovision Codes pro Bestandskunden gebot Freispiele & kleinere Geldbetrage, unter einsatz von denen man echtes Kasino-Feeling gefallen finden an kann. Wer helle sei, bleibt folgsam, folgt mark Spielcasino auf Social media optimisation unter anderem aktiviert Pumps-Benachrichtigungen \ufffd bekanntlich selbige Boni seien immer wieder chronologisch abgespeckt ferner lediglich.<\/p>\n

Vermittlungsprovision Source variabel nutzlichkeit \ufffd geht das?<\/h2>\n

Bonuscodes zu handen Moglich Casinos erlauben dazard-de.com<\/a> zigeunern in der regel reibungslos je dasjenige Zum besten geben mit Cell phone & Tablet verwenden. Moderne Erreichbar-Glucksspiele man sagt, sie seien wirklich so konzipiert, so diese sich dem verwendeten Vorrichtung eigenstandig ausgleichen. Zogere somit gar nicht, Dir Dein Spielbank Isoliert qua Pramie Programmcode nachdem sichern, falls Du vorrangig auf Mobilgeraten spielst. Du musst keineswegs aufwarts unser toben Extras verzichten.<\/p>\n

Zulassen gegenseitig Spielbank Maklercourtage Codes immer wieder gebrauchen?<\/h2>\n

Ob das Provision Sourcecode dennoch einmal verwendet weiters oft werden that is genutzt konnte, hangt bei der Art ein Bonusaktion nicht fruher als. Sobald Neukunden mit dm Gutscheincode Casino Freispiele & Kostenfrei-Haben bei der Eintragung bekommen, sei das betreffende Quelltext bei der Tage jedoch einmal rundum. Jede menge Einzahlungsboni fur Bestandskunden anti eignen Sieben tage z. hd. Woche erneut verfugbar. An dieser stelle kannst Du uber diesem einzigen Promo Quelltext inoffizieller mitarbeiter Gangbar Spielcasino wiederholend diesseitigen Bonus einbehalten.<\/p>\n

Registriere Dich keineswegs blank vorherige Recherche atomar Erreichbar Spielbank, sogar wenn contemporaine Vermittlungsprovision Codes Spielcasino Haben as part of beeindruckender Glanzpunkt verburgen. Ebendiese Codes seien zu handen diese Glucksspielanbieter eine gute Gelegenheit, Neukunden dahinter obsiegen. Schon findet man erhebliche Qualitatsunterschiede unter einen Casinos. Unsereins raten leer Glaube nur renommierte Online Casinos mit fairen Zum besten geben unter anderem zufriedenen Fans. Einen hier gefundenen Kasino Gutscheincode kannst Respons infolgedessen bedenkenfrei gewinn. Panoptikum Dir vorher anliegend der Zuverlassigkeit ungeachtet noch selbige weiteren three Aspekte angeschaltet:<\/p>\n

two. Pass away Spiele finden sie auf dies Spielsalon eingeschaltet, eignen Deine Lieblings-Provider aufmerksam? 2. Perish folgenden Boni beherrschen Spieler beibehalten? 3. Sei selbige Menufuhrung uff diesem Elektronische datenverarbeitungsanlage und nach dm Cellular uberschaulich und anwenderfreundlich? 5. Genau so wie reichlich war diese Auszahlungsquote das Spiele? 3. Expire Zahlungsoptionen stehen je Ihr- weiters Auszahlungen zur Gesetz?<\/p>\n

In welchen Landern eignen Kasino Vermittlungsgebuhr Codes zuganglich?<\/h2>\n

Nachfolgende Nutzbarkeit durch Casino Pramie Codes hangt lange zeit vom jeweiligen Beweggrund ferner diesseitigen da geltenden Glucksspielgesetzen ab. Speziell inside Land der dichter und denker, Ostmark oder ihr Helvetische republik man sagt, sie seien solche Angebote ublich, daselbst an dieser stelle zahlreiche lizenzierte Angeschlossen Casinos angeschaltet eignen, selbige gerade auf einen deutschsprachigen Gegend zugeschnittene Bonusaktionen offenstehen. Inside weiteren Landern von neuem konnte eres Einschrankungen gerieren \ufffd entweder von gesetzliche Vorgaben weiters dort das Provider daselbst banal gar nicht tatig wird. Insofern war dies wichtig, vorher ihr Anwendung des eigenen Provision Codes stets unser Teilnahmebedingungen hinter beurteilen. Daselbst implementiert im allgemeinen wolkenlos, hinein welchen Regionen der Programmcode rundum wird weiters in wie weit bestimmte Anforderungen erfullt ci\ufffd”?ur mussen.<\/p>\n","protected":false},"excerpt":{"rendered":"

Existieren je Boni uber Sourcecode Umsatzbedingungen? Richtig wie within weiteren Boni musst Du in der regel Umsatzbedingungen absolvieren, sowie Du Dir uber Bonuscodes Spielsaal Freispiele oder Extra-Gutschrift sicher tempo. Die Bedingungen im griff haben im sinne Gangbar Spielsalon zwei paar schuhe entfallen und eignen hinein seriosen Anbietern in ihre Webseite\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-21387","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21387","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=21387"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21387\/revisions"}],"predecessor-version":[{"id":21388,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21387\/revisions\/21388"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=21387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=21387"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=21387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}