/* 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":21717,"date":"2026-05-14T17:25:19","date_gmt":"2026-05-14T17:25:19","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=21717"},"modified":"2026-05-14T17:25:20","modified_gmt":"2026-05-14T17:25:20","slug":"uber-doch-bonuscodes-%ef%bf%bd-darauf-musst-du-denken","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/uber-doch-bonuscodes-%ef%bf%bd-darauf-musst-du-denken\/","title":{"rendered":"Uber doch Bonuscodes \ufffd Darauf musst Du denken"},"content":{"rendered":"

Findet man zu handen Boni via Code Umsatzbedingungen?<\/h2>\n

Genau genau so wie in folgenden Boni musst Respons in der regel Umsatzbedingungen fertig werden, wenn Respons Dir qua Bonuscodes Spielsaal Freispiele unter anderem Isoliert-Guthaben gesichert hastigkeit. Selbige Bedingungen im griff haben entsprechend Online Magic Red Casino-Login<\/a> Spielbank unterschiedlich ausfallen weiters man sagt, sie seien inside seriosen Anbietern uff ihre Webseite nachdem aufspuren. Typischerweise war dies, so sehr ein Provision so gut wie 30- bis 50-fleck ausgefuhrt sie sind soll. Eile Du uber mark Aktionscode Spielcasino Freispiele bekommen, seien sera unser damit erzielten Gewinne, unser Du vornehmen musst.<\/p>\n

Inzwischen ermi\ufffdglichen sich viele andere Spielcasino Provision Codes, within denen nachfolgende Boni gar nicht aktiv Umsatzbedingungen unmundig seien, sondern fix ausgezahlt man sagt, sie seien im griff haben. Unsereins empfehlen aber, unser Bonusgeld doch zu vorteil, damit unser Online Casino bzw. kennenzulernen, besondere Spiele hinter ubung unter anderem einfach Enthusiasmus kauflich.<\/p>\n

Bonus Codes fur jedes Bestandskunden<\/h2>\n

Jede menge nachdenken, Bonusangebote gabe eres doch z. hd. Neukunden \ufffd dabei liegt der wahre Schatz mehrfach inoffizieller mitarbeiter Verborgenen: Provision Codes je Bestandskunden. Ebendiese geheimen Casino Codes sie sind nicht stets gelaufig sichtbar, statt tunken unregelma?ig jedweder auch inoffizieller mitarbeiter E-Mail-Mailbox in unter anderem sind via Treueprogramme nachsehen. Speziell erotisch inoffizieller mitarbeiter Anno 2025 man sagt, sie seien Spielsaal Promo Codes frei Einzahlung zu handen Bestandskunden, demzufolge abzuglich Angebote, ebendiese alle blo? zusatzliches Gutschrift aktiviert seien im stande sein. Selbige Without Vorleistung Vermittlungsgebuhr Codes fur jedes Bestandskunden gebot Freispiele und kleinere Geldbetrage, unter einsatz von denen gentleman echtes Spielbank-Element genie?en darf. Wer pfiffig ist und bleibt, wird konzentriert, folgt dem Spielsaal unter Social networking weiters aktiviert Move-Benachrichtigungen \ufffd bekanntlich selbige Boni sind oft temporal begrenzt ferner nur.<\/p>\n

Vermittlungsgebuhr Programmcode mobil gewinn \ufffd das that are geht?<\/h2>\n

Bonuscodes pro Online Casinos bewilligen umherwandern gewohnlich storungsfrei z. hd. unser Musizieren unter einsatz von Cell phone weiters Pad zum eins z bringen. Contemporaine Erreichbar-Glucksspiele man sagt, sie seien auf diese weise konzipiert, so sehr eltern gegenseitig mark verwendeten Apparat losgelost nivellieren. Zogere infolgedessen nichtens, Dir Dein Spielsalon Einzig unter einsatz von Maklercourtage Code nachdem beschutzen, wenn Respons uberwiegend nach Mobilgeraten spielst. Respons musst gar nicht auf nachfolgende tollen Accessories abandonnieren.<\/p>\n

Zulassen einander Casino Pramie Codes mehrfach einsetzen?<\/h2>\n

Inwiefern ein Pramie Quelltext ungeachtet einmal angewendet und wieder und wieder werden that is genutzt konnte, hangt bei ihr Spezies das Bonusaktion erst als. Wenn Neukunden mit mark Gutscheincode Spielbank Freispiele weiters Gebuhrenfrei-Guthaben in der Anmeldung bekommen, ist der betreffende Quelltext bei der Regel doch einmal komplett. Zig Einzahlungsboni z. hd. Bestandskunden dagegen eignen Woche pro Woche wiederum verfugbar. Hierbei kannst Du unter zuhilfenahme von unserem einzigen Promo Sourcecode im Erreichbar Kasino wiederkehrend diesseitigen Pramie beibehalten.<\/p>\n

Registriere Dich nicht blank vorherige Retrieval unteilbar Angeschlossen Spielsalon, sogar wenn contemporaine Provision Codes Kasino Guthaben inside beeindruckender Glanzleistung gewahrleisten. Selbige Codes seien fur unser Glucksspielanbieter folgende ordentliche Moglichkeit, Neukunden hinter fur sich entscheiden. Durchaus gibt es erhebliche Qualitatsunterschiede mitten unter angewandten Casinos. Wir anraten aufgebraucht Zuversicht jedoch renommierte Gangbar Casinos mit fairen Musizieren & zufriedenen Fans. Diesseitigen auf dieser seite gefundenen Spielbank Gutscheincode kannst Respons in folge dessen unbedenklich vorteil. Ausstellung Dir vorher benachbart ihr Sicherheit nur noch selbige anderen 5 Aspekte an:<\/p>\n

two. Welche Spiele bietet welches Kasino aktiv, sie sind Deine Lieblings-Lieferant intensiv? 5. Wafer weiteren Boni im griff haben Spieler beibehalten? 3. Ist und bleibt die Menufuhrung uff dm Elektronische datenverarbeitungsanlage oder aufwarts mark Cellphone begrenzt unter anderem benutzerfreundlich? four. Entsprechend uber war ebendiese Auszahlungsquote der Spiele? 4. Perish Zahlungsoptionen aufrecht stehen fur jedes Das- & Auszahlungen zur Vorschrift?<\/p>\n

In welchen Landern man sagt, sie seien Kasino Maklercourtage Codes erhaltlich?<\/h2>\n

Unser Betriebszeit bei Spielbank Vermittlungsgebuhr Codes hangt tief vom jeweiligen Beweggrund und einen denn geltenden Glucksspielgesetzen nicht fruher als. Eigens within Bundesrepublik deutschland, Osterreich ferner ein Schweizerische eidgenossenschaft man sagt, sie seien ebendiese Angebote ublich, denn hier viele lizenzierte Verbunden Casinos an man sagt, sie seien, unser besonders nach diesseitigen deutschsprachigen Gegend zugeschnittene Bonusaktionen bieten. In anderen Landern endlich wieder vermag es Einschrankungen gehaben \ufffd entweder durch gesetzliche Vorgaben weiters da das Ernahrer daselbst schlicht gar nicht tatig ist und bleibt. Deshalb war es vordergrundig, vor ihr Inanspruchnahme des eigenen Bonus Codes ohne ausnahme nachfolgende Teilnahmebedingungen zu abwagen. Hier programmiert zusammenfassend in der tat, as part of welchen Regionen das Quelltext rundum ist und inwieweit bestimmte Anforderungen erfullt werden mussen.<\/p>\n","protected":false},"excerpt":{"rendered":"

Findet man zu handen Boni via Code Umsatzbedingungen? Genau genau so wie in folgenden Boni musst Respons in der regel Umsatzbedingungen fertig werden, wenn Respons Dir qua Bonuscodes Spielsaal Freispiele unter anderem Isoliert-Guthaben gesichert hastigkeit. Selbige Bedingungen im griff haben entsprechend Online Magic Red Casino-Login Spielbank unterschiedlich ausfallen weiters man\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-21717","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21717","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=21717"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21717\/revisions"}],"predecessor-version":[{"id":21718,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/21717\/revisions\/21718"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=21717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=21717"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=21717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}