/* 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":72222,"date":"2026-05-22T22:03:05","date_gmt":"2026-05-22T22:03:05","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=72222"},"modified":"2026-05-22T22:03:06","modified_gmt":"2026-05-22T22:03:06","slug":"una-vez-que-hayas-liberado-su-bono-sin-tanque-probablemente-querras-retirarlo-tan-pronto-probable","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/una-vez-que-hayas-liberado-su-bono-sin-tanque-probablemente-querras-retirarlo-tan-pronto-probable\/","title":{"rendered":"Una vez que hayas liberado su bono sin tanque, probablemente querras retirarlo tan pronto probable"},"content":{"rendered":"

Producir una cuenta seri\ufffda un capacidad necesario con el fin de entrar a todo bono falto deposito<\/h2>\n

Por eso, algunos casinos online inclusive os siguen bonos para recolectar indumentarias eximir utilizando este tipo de decision. Nuestro objetivo de estas es beneficiarse alrededor maximo los dinero propios y el bono sobre audiencia desprovisto deposito. Es decir tal como serian opiniones si necesitas respetar que usan los requisitos de puesta para descargar algun bono. Concierna que consultes dicha noticia referente a el estado asociadas en una descuento. Esto puede cambiar conforme el metodo de paga y nuestro casino online en donde estes escrito.<\/p>\n

Continua fomentando entre modelos anuncios y no ha transpirado tiene la practica de juego fiable desplazandolo hacia el pelo falto peligros<\/h2>\n

El inicial transito con el fin de sacar algun bono desprovisto tanque es fabricar una cuenta acerca de cualquier casino con manga larga atribucion. Para comenzar, debes reconocer vayamos por partes casinos con manga larga facultad de la DGOJ poseen ahora esa propaganda. Es por ello que en los subsiguientes lineas te proporciona los 3 mas grandes casinos de lo que se podri? adquirir un bono falto deposito.<\/p>\n

Si no le importa hacerse amiga de la grasa activa normalmente buscando el registro y la comprobacion de el perfil, desplazandolo hacia el pelo suele ofrecerse en forma de giros gratuito o bien traspaso promocional. Para algunos que se encuentran comenzado, encontrar bonos carente tanque puede ser demasiado apasionante como acometer algun agasajo inesperado. Individuo podria hablar de cual hacen el trabajo bien igual que la llave para buscar novedosas opciones, la especie de degustacion de el menu del casino. Todos estos diminutos tesoros permiten a las jugadores internarse en la vivencia sobre un casino online sin urgencia de disponer su propio dinero en riesgo nadie pondri\ufffda en duda desde el primer segundo.<\/p>\n

Ciertos casinos en internet aseguran algun maximo a la numero cual se podri? apartar de estas ganancias obtenidas con algun bono falto tanque. El arduo entramado de condiciones resulta una fruto directa del indole \ufffdgratuito\ufffd del bono falto deposito. Una suma de las limitaciones significa que modificar algun bono desprovisto deposito sobre competente principal asi\ufffd como retirable seri\ufffda cualquier desafio, sin embargo nunca impracticable.<\/p>\n

Locowin igualmente brinda la magnifico eleccion sobre juegos de banco tipicos, igual que el blackjack, la ruleta y el poker. Locowin Casino provee algun largo bono de recibo de los cero millas jugadores que llegan a convertirse en focos de luces registren en el momento en que Portugal. Los cero millas jugadores pueden utilizar el Casino GranVia bono sin dep\u00f3sito<\/a> locowin bono de audiencia, cual provee cualquier impulso significativo a su bankroll inaugural. Locowin brinda la gran variedad de metodos sobre remuneracion, lo que posibilita a los jugadores espanoles efectuar depositos y no ha transpirado retiros sobre manera rapida y no ha transpirado segura. Los retiros demoran dentro de 24 asi\ufffd como 72 mucho tiempo habiles, pues unico llegan a convertirse en focos de luces posibilitan a traves de transferencias bancarias.<\/p>\n

Al completo juego de casino online tiene la posibilidad de contribuir con manga larga una porcion diferente a los instalaciones de apuesta del bono falto tanque. Un elemento importante a meditar en el usar en los casinos sus bonos de recibimiento de balde sin tanque es el conocido como rollover de el bono, es decir, sus requisitos de puesta. Y, imagino, quedar informados en caso de que la regulacion acerca del casino online en Espana pobre el gorro regulatorio de el DGOJ deja en el segundo ofertar bonos de admision gratuito desprovisto deposito. Atane haber en tu pensamiento otras enfoque antes de aspirar por usar un bono desprovisto tanque referente a algun casino en internet.<\/p>\n

Tragaperras sin descargaTiradas gratis asi\ufffd como de mas?Acerca de como funcionan las bonos carente tanque? Un bono sin deposito resulta una oferta que los casinos online brindan a recientes jugadores, permitiendoles juguetear desprovisto necesidad sobre efectuar un tanque original.<\/p>\n

Sobre todo compra estrategia desglosamos nuestro precio del bono, las juegos elegibles asi\ufffd como, lo mas importante, la contribucion al rollover; un documento vital para saber el estado de libertad. 5?? ?Existen algunas restricciones si juego que usan algun bono sin deposito? Hay muchos bonos carente deposito utiles en el mundo de internet, aunque creemos que las bonos carente tanque de Gratogana asi\ufffd como sobre OneCasino son para los mas grandes. Una enorme variacii?n de bonos falto tanque cual tenemos en el sector podrian llevarte en reclaar todos los bonos sin deposito es un error. Pero es cierto que las bonos sin tanque serian extremadamente atractivos, no nos referimos a opulencia todo lo que reluce.<\/p>\n

Los juegos que hay en el comercio para bonos desprovisto tanque pueden insertar tragamonedas, juegos de bandada desplazandolo hacia el pelo, algunas veces, juegos de casino sobre presto. En seguida los bonos de casino online y las bonos de recepcion resultan 100% legales asi\ufffd como tienen empuje sobre su canjeo desplazandolo hacia el pelo uso en Chile. En caso de que te gustaria mas posibilidades sumado a las bonos sin tanque, explora nuestra coleccion de casinos con manga larga tiradas sin cargo desplazandolo hacia el pelo bonos sobre casino falto deposito.<\/p>\n

Esos sobre aqui arriba inscribiri? traducen sobre bonos recibimiento sin cargo carente tanque Chile en la disyuntiva diferentes tragaperras del casino. Los casinos bonos audiencia sin cargo falto tanque Portugal realmente abarcan un maximo de que implique nunca acumular ni algun euro. ?Un monton de que necesitas con el fin de acontecer algun ‘as’ del casino nadie pondri\ufffda en duda desde nuestro minuto 1 algunos de estos bonos sobre admision!<\/p>\n

Entre la diversas casinos bonos falto deposito asi\ufffd como anuncios, al momento es mas dificil de el consumidor escoger una plataforma con el fin de probar. Todo el mundo compiten para fascinar cero millas clientes, asi\ufffd como una de los medios sobre cumplir levante objeto resultan las ofertas de bonos falto tanque. La tercera manera de mayor segura desplazandolo hacia el pelo comodo sobre conseguir bonos falto deposito es echando un ojo a nuestra pagina. Despues de dirigirte an una division sobre promociones veras un monton de anuncios modernos de el casino, entre las cuales deberias procurar el bono carente deposito. Existe nuestro peligro que, justo acerca de el momento, el casino lleve a cabo enfasis sobre otras promociones y tambien en la referencia de los bonos desprovisto tanque quede desplazada por otras publicaciones.<\/p>\n","protected":false},"excerpt":{"rendered":"

Producir una cuenta seri\ufffda un capacidad necesario con el fin de entrar a todo bono falto deposito Por eso, algunos casinos online inclusive os siguen bonos para recolectar indumentarias eximir utilizando este tipo de decision. Nuestro objetivo de estas es beneficiarse alrededor maximo los dinero propios y el bono sobre\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-72222","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72222","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=72222"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72222\/revisions"}],"predecessor-version":[{"id":72223,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72222\/revisions\/72223"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=72222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=72222"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=72222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}