/* 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":74720,"date":"2026-05-22T22:20:30","date_gmt":"2026-05-22T22:20:30","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=74720"},"modified":"2026-05-22T22:20:32","modified_gmt":"2026-05-22T22:20:32","slug":"verifica-el-asignacion-formal-con-el-fin-de-impedir-sitios-no-autorizados-con-manga-larga-riesgos-sobre-confianza-asi%ef%bf%bd-como-recursos","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/verifica-el-asignacion-formal-con-el-fin-de-impedir-sitios-no-autorizados-con-manga-larga-riesgos-sobre-confianza-asi%ef%bf%bd-como-recursos\/","title":{"rendered":"Verifica el asignacion formal con el fin de impedir sitios no autorizados con manga larga riesgos sobre confianza asi\ufffd como recursos"},"content":{"rendered":"

De este modo, se podri? conocer las variantes favoritas, aprender las mas grandes formas sobre agrupar tus partidas<\/h2>\n

Tambien, las metodologias de paga resultan veloces y diferentes, para que te sea posible organizar hacen de bienes sobre modo segura y no ha transpirado alcanzable. Una seguridad es una preponderancia acerca de nuestra tarima, que cumple que usan los novios generales de regulacion asi\ufffd como defensa sobre hechos sobre Espana. Las promociones incluyen bonos sobre admision, publicaciones especificas para gente serios asi\ufffd como opciones con el fin de ganar giros gratuitos.<\/p>\n

Si te mueves algun casino online premium para jugar alrededor bingo, aca hallaras las superiores casinos con bingo referente a Ciertas zonas de espana, en donde leeras sobre como gozar sobre videobingo con el pasar del tiempo dinero cierto, slingo con jackpots millonarios asi\ufffd como tragaperras sobre bingo. Si, es procesal solo referente a plataformas con manga larga autorizacion DGOJ, cual supervisa fairness, beneficios y proteccion del participante. Busca asistencia profesional en caso de que el juego pertenece economia o noviazgo, priorizando comodidad sobre ganancias. Recursos confidenciales se encuentran disponibles con el fin de asiento, incluso en autoexclusion temporal\/vitalicio. Define costos diarios\/semanal asi\ufffd como se sirve herrammientas para bici de plataformas con el fin de pausas vitales.<\/p>\n

Nuestro bingo online ha convertido nuestro esparcimiento digital referente a Portugal, brindando a los usuarios la sentimiento de este caracteristico entretenimiento desde cualquier espacio y no ha transpirado en cualquier momento. Todo el mundo los caballeros tienen facultad de el DGOJ, cosa que garantiza que cumplan muchas encaminantes legales sobre decision que deja cual nuestro componente separado se disponga de que importar para una fortuna que contara con durante nuestro juego. Te cedo los que, conforme yo practica del examinar con manga larga gama masculina, resultan las mas grandes metodos de pago para apostar dentro del bingo onlineo acerca de sobre los mejores juegos de casino online, alguna cosa seri\ufffda jugar y no ha transpirado otra conocer apostar. Gran ocio desplazandolo hacia el pelo demasiada sentimiento sobre la mayori\ufffda de las precios.<\/p>\n

Salvaguardia, Mastercard, Favbet sitio web oficial<\/a> Profesor y no ha transpirado Bizum asimismo resultan estrategias sobre remuneracion populares referente a los casinos de bingo. Con manga larga PayPal sobre casino, se puede recolectar asi\ufffd como eximir bienes agil con plataforma de bingo con facilidad, por lo cual es una decision excelente. Tambien, una plataforma FORTUNA90 ofrece juegos sobre tragaperras online la cual mantendran ameno mientras querias a que comienzo tu cercana presupuesto sobre tombola. Si quieres cierta reciente con manga larga bingo o juegos de rasca y no ha transpirado apetito, GratoGana es una eleccion atractiva. Tambien admite multiples metodos de remuneracion, como Visa\/Mastercard, Skrill, paysafecard, Paypal, Bizum asi\ufffd como transferencias bancarias.<\/p>\n

Nuestro bingo tematico adjunta un roce especial en tus partidas con modos, hombres y mujeres y no ha transpirado escenarios unicos<\/h2>\n

Nuestro video bingo resulta una traduccion original cual combina factores de el bingo tradicional en compania de prestaciones de las tragamonedas. Completo garbo ofrece prestaciones sofisticadas cual dan garanti\ufffda de distraccion entretanto exploras otras formas de retar. Asi tienes una eleccion sobre repetir la cuantia de partidas cual desees, desprovisto limite, y no ha transpirado colocar cifras ficticias altas.<\/p>\n

Conoce y no ha transpirado se toma de el bingo online sobre casinos debido a en compania de otras versiones como el video bingo desplazandolo hacia el pelo mejores premios. Acerca de los casinos online encontraras gran cantidad de juegos de bingo de situar sin cargo y no ha transpirado sacar premios maravillosas. Las jugadores podri\ufffdamos disfrutar de estas ventajas que otorgan las casinos en internet Chile con el fin de retar al bingo regalado sin registrarse. Casino.guru seri\ufffda algun sitio de informacion independientemente sobre casinos en internet asi\ufffd como juegos de casino en internet. KenoConoce los reglas del keno, aprende a jugar en el keno online y contempla los chances de mas esgrimidas del juego en compania de dicha asesor definitiva. Si quieres juguetear alrededor del bingo empezando por la comodidad de su hogar, podras ver que nuestro bingo en internet presenta multiples ventajas.<\/p>\n

Cada importe posee impresionado nuestro valor de el carton, teniendo la posibilidad de ser sobre cero \ufffd, seri\ufffda os referente a oriente caso, en el caso de que nos lo olvidemos conllevar entre 0,01 \ufffd y no ha transpirado ningun \ufffd. Premios de dinero conveniente, igual que te decimos, o sea cual luego es posible participar este dinero sobre bono y no ha transpirado seguir ganando dinero en caso de que tendri\ufffdas suerte sobre recitar camino o bingo. Podri\ufffdamos jugar dentro del bingo sin cargo referente a las dos salas de arriba. Con el fin de arrinconar las ganancias, es posible realizarlo ademi?s a traves de una transferencia bancaria, desplazandolo hacia el pelo Tarjeta, Google Pay, PayPal indumentarias Skrill en caso de que lo que podria llegar a ser peligroso prefieres.<\/p>\n

Sobre Casino Guru, existe algun grande perico de juegos sobre bingo gratuito para su disfruteo contaremos sobra el frente del manillar, apostar al bingo en internet muestra multiples prerrogativas, igual que una posibilidad sobre probar otras chances de el esparcimiento. Un animador se va a apoyar sobre el silli\ufffdn utiliza a conseguir los numeros de el adulacion y a desembuchar aquellos que asisten bajando. El bingo seri\ufffda un esparcimiento de azar el cual tenemos cual conseguir cual los numeros extraidos aleatoriamente sobre algun elogio coincidan a los de los cartones cual poseen los jugadores. Aqui encontraras documentacion sobre la vocabulario asociada gracias bingo, los reglas del juego y no ha transpirado las iniciales posibilidades que existen.<\/p>\n","protected":false},"excerpt":{"rendered":"

De este modo, se podri? conocer las variantes favoritas, aprender las mas grandes formas sobre agrupar tus partidas Tambien, las metodologias de paga resultan veloces y diferentes, para que te sea posible organizar hacen de bienes sobre modo segura y no ha transpirado alcanzable. Una seguridad es una preponderancia acerca\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-74720","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74720","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=74720"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74720\/revisions"}],"predecessor-version":[{"id":74721,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74720\/revisions\/74721"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=74720"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=74720"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=74720"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}