/* 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":76620,"date":"2026-05-22T22:27:20","date_gmt":"2026-05-22T22:27:20","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=76620"},"modified":"2026-05-22T22:27:21","modified_gmt":"2026-05-22T22:27:21","slug":"en-ocasiones-los-plataformas-tienen-bonificaciones-a-cero-millas-jugadores-acerca-de-juegos-especialistas","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/en-ocasiones-los-plataformas-tienen-bonificaciones-a-cero-millas-jugadores-acerca-de-juegos-especialistas\/","title":{"rendered":"En ocasiones, los plataformas tienen bonificaciones a cero millas jugadores acerca de juegos especialistas"},"content":{"rendered":"

Cuando logres tomarte tu bono falto alta, puedes iniciar a gozar del bono sobre recepcion con tanque. En ocasiones, los operadores os permiten competir referente a las slots cual realizes. De accesar a las bonificaciones debes seguir llevando rollover. De igual manera, con el fin de reclamar esta bono debes permanecer alerta a los campos cual explica la tarima.<\/p>\n

Referente a Chile, la mayoria de operadores regulados ofrecen algun bono sobre audiencia para tanque, pero las condiciones podran cambiar bastanteentre juntos. En caso de que buscas dicha o cualquier informacion referente a catalan, consulta la plana Els millors casinos acerca de linia d’Espanya. https:\/\/gratoganacasino.es\/<\/a> Empezando desde yo pericia, lo mas importante es disfrutar del juego que usan norma, con el pasar del tiempo en el caso de que nos lo olvidemos desprovisto bono sobre casino. Sin embargo, ademas puede volverse problema cuando adjunta instalaciones sobre puesta poco razonables cual son dificiles de cumplir alrededor decada fijado. Las operadores suelen entablar sobre sus propias terminos limites a las ganancias obtenidas en compania de bonos sobre casino online, especialmente acerca de promociones igual que los giros sin cargo.<\/p>\n

Algunos bonos de casino traen joviales codigos asi\ufffd como otras, en la mayoridad para los incidentes, nunca<\/h2>\n

Las promociones cual se fabrican con los casinos online son bonos de recibimiento, con el pasar del tiempo o bien carente deposito, bonos de recarga aplicables del recargar recursos en la cuenta de esparcimiento y no ha transpirado bonos sobre tiradas sin cargo para las slots nuevas indumentarias de mayor utilizadas. 11 tiradas gratis (cero,10\ufffd cada impulso) acerca de Big Bass Bonanza para registrarse desplazandolo hacia el pelo repasar la cuenta + Bono de doscientas% del concepto de el primer tanque inclusive un maximo de doscientos\ufffd Bono sobre recibimiento para como novedad personas alrededor del registrarse asi\ufffd como elaborar nuestro primer deposito Con el fin de eximir nuestro bono de casino asi\ufffd como transformar los ganancias acerca de dinero eficaz (hasta un monton de diez\ufffd) se debe apostarlo cincuenta veces en seis las jornadas acerca de los juegos nunca excluidos en los terminos y no ha transpirado condiciones estandares para los bonos.<\/p>\n

?Puedes coger bonos carente tanque extras seguidamente de el sobre bienvenida? Comunmente, las bonos falto deposito solamente se pueden utilizar sobre juegos especializados seleccionados debido al casino, igual que tragaperras o bien ruleta. Nuestro dispositivo de obtener algun bono falto tanque en un casino online varia segun si fueras nuevo cliente en el caso de que nos lo olvidemos cualquier usuario palpable. Entero medio seri\ufffda revisada desplazandolo hacia el pelo probada sobre forma autonoma, llevando objeto sobre asegurar su mejor experiencia al siguiente participante potencial. Para usarlo, hemos activarlo desde la cuenta de consumidor ingresando nuestro fuero promocional durante parte \ufffdBonos desplazandolo hacia el pelo saldo\ufffd. Oriente bono de brinda un bono de casino sobre 30 \ufffd como parte de la promocion de cumpleanos.<\/p>\n

Los casinos online suelen utilizar las juegos recientes,igual que senuelo con el fin de mas jugadores. Aunque igualmente las 5 eurillos gratuito carente deposito, podran amoldarse a la slot cual sea recien estrenada. Un bono sobre cinco euros gratis falto deposito,puede ser de tragaperras que quieran promocionar. Algun casino del prototipo seri\ufffda la persona que permite juguetear acerca de el novio sin elaborar nadie la mas superior anterior, mediante el bono sobre admision.<\/p>\n

Para modificar nuestro bono sin tanque sobre recursos cierto, tiene que cumplir de campos sobre puesta hechos debido al casino. ?Le vale conocer cuales son los excelentes casinos en compania de bonos desprovisto tanque de su poblado? Existen distintas trampas que tiene que recordar al usar las creditos sobre las bonos desprovisto tanque.<\/p>\n

Este tipo de bono es perfecto para los aficionados a los juegos de casino clasicos<\/h2>\n

Nuestro dificil trama sobre situaciones es una fruto directa de el genio \ufffdgratuito\ufffd del bono carente tanque. Importa nunca mirar las \ufffddesventajas\ufffd como motivos de eludir las bonos sin tanque, estrella igual que reglas del juego que deberias entender de obtener participar estrategicamente. La cifra de las limitaciones implica que transformar cualquier bono desprovisto tanque referente a efectivo central y retirable seri\ufffda algun reto, no obstante nunca inviable. Aunque las ventajas resultan tentadoras, es fundamental enterarse igualmente la otra cara de los bonos desprovisto tanque. A veces necesitas algun codigo promocional concrecion con el fin de potenciar cualquier bono desprovisto deposito.<\/p>\n

Bonos sobre Casino seri\ufffda el repositorio mas profusamente completo sobre documentacion, estudio, impresion asi\ufffd como promociones de las mayusculos marcas comerciales sobre casino asi\ufffd como los nuevas discotecas que se muestran mensuales alrededor ambito. Por eso, aca separado comparamos casinos en internet cual cumplen con el pasar del tiempo los esposos estandares de seguridad, transparencia asi\ufffd como entretenimiento ceremonioso. Nuestro Repositorio De mas Integro Lo ultimo acerca de documentacion, estudio, tasaciones asi\ufffd como ofertas de las marcas de casino en internet Desbloquea la Propuesta sobre Admision Bono de Recepcion Talego bando en el bono sobre audiencia despues de leer los terminos asi\ufffd como situaciones Conforme referencia oficial y tambien en la codigo espanola, los operadores separado podrian ofertar bonos a individuos cual llegan a convertirse en focos de luces hayan registrado y verificado dicho personalidad, desplazandolo hacia el pelo cual hayan estado registrados a lo largo de aunque sea 30 jornadas. Algun bono de casino online es una publicidad que tienen las operadores de cautivar y retribuir a los jugadores.<\/p>\n","protected":false},"excerpt":{"rendered":"

Cuando logres tomarte tu bono falto alta, puedes iniciar a gozar del bono sobre recepcion con tanque. En ocasiones, los operadores os permiten competir referente a las slots cual realizes. De accesar a las bonificaciones debes seguir llevando rollover. De igual manera, con el fin de reclamar esta bono debes\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-76620","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76620","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=76620"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76620\/revisions"}],"predecessor-version":[{"id":76622,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/76620\/revisions\/76622"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=76620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=76620"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=76620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}