/* 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":61236,"date":"2026-05-21T12:55:47","date_gmt":"2026-05-21T12:55:47","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=61236"},"modified":"2026-05-21T12:55:48","modified_gmt":"2026-05-21T12:55:48","slug":"dentro-del-permanecer-empleando-este-sitio-aceptas-la-politica-de-privacidad","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/dentro-del-permanecer-empleando-este-sitio-aceptas-la-politica-de-privacidad\/","title":{"rendered":"Dentro del permanecer empleando este sitio, aceptas la politica de privacidad"},"content":{"rendered":"

La noticia personal estuviese encriptada y no ha transpirado las transacciones financieras vienen a traves de canales seguros<\/h2>\n

Las tecnicas no dan garanti\ufffda de una trofeo, aunque permiten apostar que usan de mayor dominacion, acotar perdidas desplazandolo hacia el pelo aumentar las alternativas de exito. Cualquier es transparente, falto comisiones ocultas.<\/p>\n

Durante inminente computo comentamos los definitivos singularidades que tienen las mejores casinos cual aceptan Salvoconducto igual que aparato de remuneracion. Bastantes para casinos en internet deben levante sistema de pago que se encuentre muy famoso dentro del ambiente. Verified by Visa es nuestro metodo sobre empuje que tiene a disposicii?n la agencia de los beneficios electronicos.<\/p>\n

Los tragamonedas son excesivamente esgrimidas desplazandolo hacia el pelo estan disponibles para la totalidad de las plataformas. Que las plataformas sobre apuestas para escritorio asi\ufffd como moviles lo perfectamente reconocen. Por lo tanto, algunas plataformas se fabrican con incentivos a las usuarios que se sienten a gusto con Pasaporte. FiabilidadSitios de microjuegos confiables garantizan que su informacion permanezca para ti.<\/p>\n

El modo inscribiri? actualiza de forma constante, las especialistas vigilan los riesgos desplazandolo hacia el pelo las algoritmos funcionan joviales certeza<\/h2>\n

Es ampliamente aceptada sobre casinos en internet y no ha transpirado suele ocurrir carente inconvenientes las estrategias sobre demostracion. Funciona sin intermediarios lo mucho que el cesion de el cuenta bancaria, cosa que promueve mantener nuestro dominacion de el gasto. Ademas existen bancos que aplican comisiones indumentarias bloquean ingresos emparentados con manga larga esparcimiento online, en funcii?n de una politica interna asi\ufffd como de el cuenta de el consumidor. Una de las inconvenientes de mayor comentadas alrededor universo podri\ufffda ser nunca los casinos posibilitan retiradas a Salvaguardia. Salvaguardia actua joviales medios antifraude vanguardistas y, acerca de Espana, algunas de beneficios gastan para 3D Secure.<\/p>\n

+49 anosVisa nacio referente a 1976, bastante antiguamente cual los casinos online. La gran habilidad del sector para casinos online nos sirve como motivo a la hora de examinar las casinos en linea cual aceptan pagos con Ninja Crash<\/a> manga larga Visa. En cierta ocasion tengas el cesion referente a tu perfil, revisa en caso de que posees cualquier bono vacante desplazandolo hacia el pelo solicitalo si te gustaria. Los ingresos que usan Pase resultan inmediatos por eso a los unos segundos debe producirse nuestro venta referente a tu perfil. Que usan noveno opciones sobre deposito asi\ufffd como seis sobre jubilacion, igualmente directrices detalladas con el fin de cada organizacion sobre pago, levante casino garantiza una experiencia conveniente con el fin de aquellos que priorizan eficiencia desplazandolo hacia el pelo confianza en sus transacciones. Todos varones posibilitan hacer retiradas con manga larga Pasaporte y no ha transpirado nunca por traspaso como piden demas.<\/p>\n

Prepara limites periodicos sobre tanque asi\ufffd como sobre liberacii?n con el fin de sostener cualquier esparcimiento asentado, preveniendo peligros innecesarios entretanto exploras los promociones de Salvoconducto. Lo cual incrementa su traspaso original y no ha transpirado facilita sufrir de mayor juegos falto riesgo anadida. PayPal esta debido a la proteccion en el comprador desplazandolo hacia el pelo transacciones rapidas, no obstante no las parejas casinos permiten llevarlo puesto para promociones.<\/p>\n

Spinanga provee una experiencia unica que usan excepcional ayuda al consumidor y rapidas transacciones. Explora algunas 5000 juegos, mesas sobre casino sobre avispado y apuestas de deporte instantaneas, cualquier optimizado para cuando un esparcimiento fluido acerca de Android, iOS o cualquier buscador. Registrate en Spinanga desplazandolo hacia el pelo cuenta con un bono de el 100% referente a tu inicial deposito, que usan dinero conveniente para utilizar sobre cientos sobre juegos de tragamonedas y no ha transpirado casino referente a vivo.<\/p>\n

Entre los populares juegos de casino en vivo disponibles acerca de Spinanga se encuentran Oriente cantidad realiza la propuesta de muchos otras casinos online, garantizando cual invariablemente haya alguna cosa fresco y no ha transpirado apasionante cual probar. Spinanga Casino provee una eleccion inigualable sobre juegos sobre mesa con el fin de los novios jugadores.<\/p>\n

Puedes juguetear a los tragaperras, juegos sobre mesa desplazandolo hacia el pelo casino acerca de listo o en la barra apostar referente a hacen de sports favoritos al mi\ufffdnimo instante. A lo largo de , hemos versado una inclusion de 47 nuevos titulos que incluyen slots con manga larga mecanicas top, juegos de asiento con el pasar del tiempo oportunidades exclusivas y no ha transpirado sensaciones sobre Spinanga Casino tiene muchos juegos, inclusive una enorme diversidad sobre tragaperras, juegos sobre mesa, opciones sobre casino referente a presto desplazandolo hacia el pelo algun grande sportsbook. Spinanga destaca para el gran y no ha transpirado variada imprenta de juegos, cual incluye una impresionante eleccion sobre tragamonedas, juegos sobre caja de ahorros y no ha transpirado alternativas sobre casino referente a vivo. Si, Spinanga pago desprovisto problemas por motivo de que resultan algun casino en internet totalmente indudablemente asi\ufffd como fiable cual nos permite quedar tranquilos mediante que la agencia propietaria del casino tiene una gran vivencia en casinos online, asi que podemos esperar una enorme calidad al casino gracias al profundo conocimientos que poseen de su fabrica de el juego en linea. Podri\ufffdamos acceder al auxilio de el casino unicamente que usan acceder alrededor del chat referente a avispado disponible en dicho website, con la capacidad opinar que usan un representante de servicio al consumidor sobre modo extremadamente simple.<\/p>\n","protected":false},"excerpt":{"rendered":"

La noticia personal estuviese encriptada y no ha transpirado las transacciones financieras vienen a traves de canales seguros Las tecnicas no dan garanti\ufffda de una trofeo, aunque permiten apostar que usan de mayor dominacion, acotar perdidas desplazandolo hacia el pelo aumentar las alternativas de exito. Cualquier es transparente, falto comisiones\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-61236","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/61236","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=61236"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/61236\/revisions"}],"predecessor-version":[{"id":61237,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/61236\/revisions\/61237"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=61236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=61236"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=61236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}