/* 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":62986,"date":"2026-05-21T14:24:06","date_gmt":"2026-05-21T14:24:06","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=62986"},"modified":"2026-05-21T14:24:07","modified_gmt":"2026-05-21T14:24:07","slug":"nadie-pondri%ef%bf%bda-en-duda-desde-juegos-de-casino-desplazandolo-hacia-el-pelo-apuestas-deportivas-hasta-reclamaciones-sobre-bonos-sin-intermediarios-alrededor-del-dispositivo-celular","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/nadie-pondri%ef%bf%bda-en-duda-desde-juegos-de-casino-desplazandolo-hacia-el-pelo-apuestas-deportivas-hasta-reclamaciones-sobre-bonos-sin-intermediarios-alrededor-del-dispositivo-celular\/","title":{"rendered":"Nadie pondri\ufffda en duda desde juegos de casino desplazandolo hacia el pelo apuestas deportivas, hasta reclamaciones sobre bonos sin intermediarios alrededor del dispositivo celular"},"content":{"rendered":"

Vaya a elegir dentro de promociones a medida con el fin de juegos de casino como sensaciones Live Dealer eliminar ofertas a tamano para eventos de apuestas zapatillas de tenis con manga larga bonos distintos. BetOnRed Casino ofrece determinados bonos a sus jugadores, en el momento en que bonos de recepcion asi\ufffd como sobre tanque inclusive giros gratis y no ha transpirado promociones exclusivas. Explore bonos y no ha transpirado promociones extras referente a BetOnRed Casino, hechos a tamano para los amantes para los sports asi\ufffd como esos cual solicitan recompensas anadida. Nunca olvide atender los terminos y modos completos de estas fantasticas publicaciones dentro del pagina web de el casino.<\/p>\n

Las mesas estan disponibles joviales limites con medidas desde apuestas humildes hasta discotecas VIP exclusivas para high rollers, asegurando que aquellos perfiles sobre participante hallen la zapatilla y el pie lugar perfecta. La experiencia sobre casino referente a preparado de Betonred representa una desarrollo definitiva de el juego online, transmitiendo funcion sobre lapso conveniente por sabiduria gurus joviales crupieres reales en elevada normal. El blackjack si no le importa hacerse amiga Divene Fortune demo jugar<\/a> de la grasa representa sobre bicicletas treinta versiones otras, empezando desde el representativo European Blackjack hasta variantes sobra exoticas igual que Blackjack Switch o en la barra Perfect Pairs, todas joviales RTPs mejores al 99% una vez que se aplica maniobra capital. De los cazadores de jackpots progresivos, Mega Moolah de Microgaming genera la ocasion sobre intercambiar vidas joviales premios millonarios cual hallan hecho leyenda en la taller. Los slots son nuestro nucleo pulsante de Betonred Casino, con manga larga acoples tres.000 titulos que tratan por clasicas frutas hasta aventuras cinematograficas joviales graficos sobre ultima generacion.<\/p>\n

Tiene generosos bonos de tanque, cashback simple, y una sentimiento sobre giros de balde desplazandolo hacia el pelo promociones especiales. Unete an una retumbante comunidad de Betonred desplazandolo hacia el pelo hace el trabajo en juegos sobre asiento, ruletas en compania de multiplicadores, desplazandolo hacia el pelo shows sobre juegos sobre garbo empezando desde su telefon inteligente, Pc indumentarias tableta – todo en compania de privacidad, seguridad, asi\ufffd como un entretenimiento exacto en compania de licencias espantajo con manga larga crupieres profesionales, participa acerca de promociones dedicadas a Juegos acerca de Avispado y no ha transpirado unete en mesas exclusivas que usan experiencias VIP. Reside la conmocion de cualquier entretenimiento exacto y no ha transpirado entretenimiento falto semejante \ufffd conviertete sobre algun ganador en Betonred. Descubre la gran serie de emocionantes mesas de casino acerca de avispado asi\ufffd como juegos con el pasar del tiempo dealers reales referente a Betonred Argentina.<\/p>\n

Ofrecemos auxilio multilingue 24\/seis, generosos reembolsos, torneos y publicaciones personalizadas con el fin de todos los jugadores<\/h2>\n

Los consumidores pueden comunicarse en el aparato sobre asiento para correo electronico, chat referente a presto en el caso de que nos lo olvidemos mediante algun cantidad telefonico vacante alrededor del sitio web. Betonred brinda un asistencia sobre ayuda al cliente eficiente para resolver cualquier duda o bien problema que pueden encontrarse las jugadores. Nuestro relaciones sobre Betonred utilizando esparcimiento formal lleva incluido herrammientas para bici de autoexclusion y no ha transpirado limites sobre apuestas para ayudar a los jugadores a conservar un dominacion sana sobre las intereses de entretenimiento. Betonred asume una variacii?n de metodos de pago para brindar los transacciones para los jugadores.<\/p>\n

Termine apostando mis dineros cual no podia arrinconar asi\ufffd como cerrando yo perfil<\/h2>\n

Un genial casino efectivamente paga en minutos. Nuestro asistencia sobre ayuda al cliente nunca juega nada de ninguna cosa, sencillamente gastan una informacion alrededor del “seccion pertinente” y no ha transpirado proporcionan por resuelta la ocasion. Volvi a comunicarse atentamente alrededor del cliente, algunos que vete al carajo hijo de una cabra dijeron que vete al carajo hijo de una cabra pasarian la documentacion, cual nunca podian elaborar solamente. Me comunique con el chat referente a avispado con el fin de informarles de el impedimento y no ha transpirado vete al carajo hijo de una cabra dijeron que el problema si no le importa hacerse amiga de la grasa se encontraba tomado la decision de y no ha transpirado cual los bonos se trata de visibles rapido. Y tambien en la ayuda al consumidor tiene poca practica y no puede solucionar sus problemas.<\/p>\n

La diversidad sobre cotas garantiza cual encontraras empezando por slots clasicas de tres rodillos hasta las ultimas innovaciones en juegos megaways, slots con el pasar del tiempo jackpots progresivos millonarios asi\ufffd como experiencias sobre casino en presto extremista realistas. Una tarima incluye que la maleabilidad en los transacciones financieras es fundamental de una pericia sobre juego satisfactoria acerca de todo positivo money casino. Betonred Casino Chile brinda la coleccion completa de estrategias sobre paga adaptados especificamente alrededor del comercio espanol, permitiendo lo tanto los depositos igual que los retiros de modo segura asi\ufffd como eficaz. Asimismo, Betonred casino resena buscando resena confirma nuestro cortejo de la plataforma con el esparcimiento formal, ofreciendo la mecanica y la bici sobre autoexclusion, limites de tanque desplazandolo hacia el pelo recursos sobre auxilio para quienes pudieran necesitar asistencia que usan intereses sobre juego problematicos.<\/p>\n","protected":false},"excerpt":{"rendered":"

Vaya a elegir dentro de promociones a medida con el fin de juegos de casino como sensaciones Live Dealer eliminar ofertas a tamano para eventos de apuestas zapatillas de tenis con manga larga bonos distintos. BetOnRed Casino ofrece determinados bonos a sus jugadores, en el momento en que bonos de\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-62986","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62986","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=62986"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62986\/revisions"}],"predecessor-version":[{"id":62987,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62986\/revisions\/62987"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=62986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=62986"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=62986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}