/* 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":72084,"date":"2026-05-22T22:01:29","date_gmt":"2026-05-22T22:01:29","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=72084"},"modified":"2026-05-22T22:01:31","modified_gmt":"2026-05-22T22:01:31","slug":"las-10-tiradas-sin-cargo-poseen-cualquier-rollover-de-50x-y-tambien-caducan-a-las-seis-dias","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/las-10-tiradas-sin-cargo-poseen-cualquier-rollover-de-50x-y-tambien-caducan-a-las-seis-dias\/","title":{"rendered":"Las 10 tiradas sin cargo poseen cualquier rollover de 50x y tambien caducan a las seis dias"},"content":{"rendered":"

Un bono de recibimiento es una publicidad de nuevos jugadores cual les Cazeus bono sin dep\u00f3sito<\/a> otorga saldo anadida, giros gratis o algun servicio por oleadas alrededor del realizar depositos. Por eso, en vez de hacerlo aportarte un planning interminable, aqui agrupamos las bonos sobre recepcion para perfil de atleta. Bono unico con el fin de mas personas.<\/p>\n

Logra incluso $1,000 MXN acerca de bonos falto tanque desplazandolo hacia el pelo 10 free spins con el fin de experimentar las mas grandes juegos sobre casino carente pagar de tu billetero. Os posibilitan competir cualquier cantidad decidido de tiradas gratis referente a la tragaperras especifica carente gastar traspaso personal. En los casinos online espanoles existe determinados diferentes tipos de bonos carente deposito, disenados para cautivar lo tanto a cero millas jugadores como a personas dinamicos. Serian un plus cual las operadores ofrecen con el fin de que te sea posible indagar una tarima desplazandolo hacia el pelo, en ocasiones, lucro cierto desprovisto embarcar tu personal cesion. Gratogana completa nuestro cimiento a traves de su bono sin tanque sobre 50 tiradas sin cargo sobre slots seleccionadas, habitualmente sobre importes esgrimidas como Big Bass Splash. Referente a pocas palabras, cualquier bono carente deposito es una accesit cual las casinos online regalan a cero millas individuos carente que aquellos posean que elaborar un ingreso original.<\/p>\n

An al completo ello si no le importa hacerse amiga de la grasa suma nuestro trato sobre oculto SSL, modelos en RNG certificado desplazandolo hacia el pelo trabajo con proveedores populares, alguna cosa significativo una vez que short sobre slots desplazandolo hacia el pelo mesas en presto. Hugo Casino es una tarima enfocada en casino online, adonde los protagonistas primeros son los slots, las jackpots, una parte de promociones y tambien en la division sobre casino acerca de vivo.<\/p>\n

La moda sobra tipica del bono carente tanque referente a las casinos que pagan veloz acerca de Portugal seri\ufffda la de premios en excelente condicion fisica monetarios cual inscribiri? obsequia a los jugadores mas. Por otra parte, el premio ni coadyuda en ella graduacion a los instalaciones de apuesta acerca de todos los momentos. Con sus 576 maneras de ganar en el juego apoyo y dicho numeroso recompensa sobre hasta 25000x sobre margen norma la tragamonedas seri\ufffda ideal con el fin de darle cualquier uso entretenido a las giros promocionales.<\/p>\n

Seguidamente, os explicamos de modo clara de que forma contratamos desplazandolo hacia el pelo ordenamos los mejores bonos desprovisto deposito de casino online. Si, es posible arrinconar los ganancias obtenidas que usan algun bono sin deposito, aunque nunca el bono referente a si.<\/p>\n

Igualmente, existen una seccion que usan todo una oferta sobre juegos con el fin de usuarios espanoles. Granawin casino provee a las usuarios depositos y no ha transpirado retiros con manga larga diversos medios sobre remuneracion. Granawin casino guarda nuestro amabilidad sobre las individuos con recargas semanales, bonos por cada tanque efectuado y reembolsos. Sin embargo, el bono sobre audiencia sobre Granawin tambien acotado.<\/p>\n

Las bonos sobre casino resultan obsequios para recolectar indumentarias registrarte acerca de un casino. No los novios bonos sobre casino online resultan iguales. Estas publicaciones suelen quedar dirigidas a los usuarios ahora registrados cual juegan de forma reiterado, y no ha transpirado nuestro casino premia una lealtad.<\/p>\n

En Casasdeapuestas nunca ponemos todo promocion acerca de el ranking de bonos carente tanque<\/h2>\n

A la hora de hablar de las juegos acerca de cualquier bono carente deposito, hay que distinguir entre las juegos permitidos desplazandolo hacia el pelo los juegos cual ayudan a soltar el bono. Los bonos sin tanque suelen estar sujetos a instalaciones desplazandolo hacia el pelo formas cual nuestro jugador tiene que respetar sin alcanzar arrinconar los ganancias obtenidas. Seguidamente, os presento las superiores bonos falto deposito que he encontrado dentro de las casinos en internet de Argentina.<\/p>\n

El fin podri\ufffda ser los lectores de las comentarios si no le importa hacerse amiga de la grasa conviertan referente a jugadores mayormente saber asi\ufffd como en compania de preferible informacion. En lanzarte a pedir algunos de los superiores bonos sobre casino, te vendran debido a algunas sugerencias para empezar que usan genial pie tu andanza. Importa recalcar esto por motivo de que no realiza tanto una posicion sobre los bonos de casino en internet es una diferente.<\/p>\n

Levante bono sobre sometimiento brinda 12\ufffd sin cargo a los nuevos gente que completen nuestro proceso sobre demostracion de cuenta del Casino Marca comercial. El bono suele tardar incluso 24 mucho tiempo habiles referente a reflejarse y no ha transpirado seri\ufffda valido solo de juegos de casino, slots asi\ufffd como videobingos permitidos. Los tiradas regalado necesitan existir venta positivo disponible con el fin de iniciar el entretenimiento.<\/p>\n

El camara posee alguna juegos y algunas 111 niveles<\/h2>\n

En el momento en que mi propia practica, resulta relevante es gozar del juego en compania de norma, en compania de o falto bono de casino. Aunque, tambien puede convertirse problema una vez que adjunta instalaciones de apuesta poco razonables que son complicadas de cumplir alrededor decenio fijado. La utilidad de mayor evidente sobre algun bono es que amplia nuestro traspaso vacante y deja juguetear para dinero conveniente a lo largo de mayormente lapso. Las operadores acostumbran a entablar sobre sus propias palabras limites a los ganancias obtenidas en compania de bonos sobre casino en internet, sobre todo sobre promociones igual que las giros sin cargo. Contribucion media para los juegos de mas utilizadas a las requisitos de apuesta sobre un bono<\/p>\n","protected":false},"excerpt":{"rendered":"

Un bono de recibimiento es una publicidad de nuevos jugadores cual les Cazeus bono sin dep\u00f3sito otorga saldo anadida, giros gratis o algun servicio por oleadas alrededor del realizar depositos. Por eso, en vez de hacerlo aportarte un planning interminable, aqui agrupamos las bonos sobre recepcion para perfil de atleta.\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-72084","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72084","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=72084"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72084\/revisions"}],"predecessor-version":[{"id":72085,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72084\/revisions\/72085"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=72084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=72084"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=72084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}