/* 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":62522,"date":"2026-05-21T14:08:25","date_gmt":"2026-05-21T14:08:25","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=62522"},"modified":"2026-05-21T14:08:26","modified_gmt":"2026-05-21T14:08:26","slug":"os-responderemos-tan-breve-como-podamos-con-todo-una-noticia-que-precisas","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/os-responderemos-tan-breve-como-podamos-con-todo-una-noticia-que-precisas\/","title":{"rendered":"Os responderemos tan breve como podamos con todo una noticia que precisas"},"content":{"rendered":"

Pero no se Book of the Fallen bono<\/a> encuentran disponibles en Argentina, resultan bonos cual si no le importa hacerse amiga de la grasa entregan en cierta ocasion contrastada la informacion del competidor asi\ufffd como anteriores 20 dias igual que minusculo. Las bonos falto tanque resultan una extraordinario eleccion con el fin de conocer algun casino nuevo falto urgencia sobre exponer tu dinero.<\/p>\n

Impide realizarlo, por motivo de que siendo asi\ufffd pierdes la ocasion de percibir su bono carente deposito<\/h2>\n

En caso de que te encuentras de acuerdo para el resto de caracteristicas desplazandolo hacia el pelo las instalaciones y no ha transpirado deseas cual vas a obtener cumplirlos, participar en compania de cualquier bono carente deposito es practicamente como apostar con manga larga dinero 500% sin cargo. La oferta sobre juegos para apostar de bonos carente deposito es gran, con las maquinas tragaperras como primeramente senuelo.<\/p>\n

Las ganancias generadas con las tiradas gratuitas llegan a convertirse en focos de luces acreditan como bono asi\ufffd como se encuentran sujetas a un requisito de puesta sobre 45 veces. Hasta el momento, solo debemos visto bonos desprovisto deposito que hay en el comercio con el fin de algunos que realizan el natalicio. De convertirlos sobre dinero conveniente, nuestro participante deberia seguir en compania de requisitos de puesta especializados, apostando distintas veces la importancia de el bono sobre juegos seleccionados. En caso de que prefieres de mayor tiempo, Platin Casino provee diez giros regalado desplazandolo hacia el pelo algun plazo de 20 las jornadas con el fin de respetar los instalaciones de envite, una ganancia norma de 25\ufffd. La eleccion mas atrayente es 888Casino, cual provee 88 giros regalado carente deposito y tambien en la alternativa de utilizarlos en 300 juegos.<\/p>\n

Las bonos sin deposito referente a Portugal tratan la magnifico oportunidad con el fin de quienes requieren disfrutar sobre juegos de casino desprovisto invertir la zapatilla y el pie dinero. Los bonos desprovisto deposito posibilitan a las jugadores gozar para juegos de casino carente necesidad de realizar cualquier tanque inaugural. Quienes ya estan al dia con los juegos sobre chiripa en linea desean hallar cualquier casino en internet bono desprovisto tanque, para obtener bonos sobre casino sin tanque. Cual el casino posee una variedad sobre metodos sobre remuneracion importa; short de que se va a apoyar sobre el silli\ufffdn presente acierto, confort, celeridad y no ha transpirado decision. En caso de que recibes cualquier bono sin deposito de 10\ufffd en compania de algun requisito de puesta sobre x40, quiere decir cual debes realizar apuestas para concepto sobre 400 \ufffd con el fin de alcanzar jubilar nuestro precio del bono y los ganancias obtenidas con el pasar del tiempo el novio. Revisa los instalaciones de apuesta, los impedimentos de juegos desplazandolo hacia el pelo de villa asi\ufffd como otras normas relevantes especificadas referente a las condiciones.<\/p>\n

Por eso desde Gambing Ciertas zonas de espana recomendamos asentir desplazandolo hacia el pelo demandar los bonos sin deposito<\/h2>\n

Igualmente, varios casinos pueden pedirte que lleves a cabo algun deposito tras tener jugado joviales su bono carente tanque desplazandolo hacia el pelo negarte nuestro reintegro incluso que lo hayas realizado. La totalidad de los bonos falto deposito poseen un margen de margen y unico podras apartar la na?. En caso de que deseas sobra referencia, igualmente se podri? escuchar el resena de el casino, que hallaras del lienzo de informacion del bono elegido. Pero, para impedir designar uno, no pases por alto preguntar una puntuacion sobre Reputacion que he asignado alrededor del casino en internet que provee el bono falto deposito. Luego debes examinar un planning sobre bonos sin deposito cenida en las preferencias. Varios de estos filtros, es posible establecer el peso de el bono cual realizes, las instalaciones de puesta o el reintegro maximum.<\/p>\n

Aprende las mejores bonos sin tanque sobre casinos online sobre Chile acerca de 2026. Cualquier programa arribista cuyo objetivo es realizar el trabajo de los companias sobra que se encargan del universo del iGaming y no ha transpirado ofrecerles nuestro examen cual merecen. La tarima desarrollada para mostrar la tarea cual portamos en agarradera de elaborar verdad la taller de el juego online mayormente sencilla y segura.<\/p>\n

Se podri? confirmar en caso de que nuestro casino que elijas posee la decision sobre bonos sobre recibimiento sin registrarte. Actualmente los bonos de audiencia nunca se encuentran que hay disponibles acerca de casinos espanoles, aunque, tenemos diferentes alternativas. Los casinos establecen sobre sus propias terminos asi\ufffd como condiciones,un ai\ufffdadido maximum de apuesta permitida de el colecta para los bonos sin cargo carente tanque.<\/p>\n

Los tragaperras generalmente son los juegos favoritos para los casinos, con el fin de que usted aprovechemos los bonos desprovisto depositoo debemos encontrado, una oferta sobre bonos falto deposito cual nos tienen las casinos espanoles es inimaginable. De apartar nuestro dinero conseguido que usan algun bono falto deposito en casinos sobre Espana, nos toco respetar en compania de algunos instalaciones. Este tipo de noticia a menudo se halla alrededor del alejado de terminos y no ha transpirado caracteristicas de el casino cual emplees. Para conseguir disfrutar de tus bonos falto preocupaciones, deberias revisar el escalon sobre vigencia cual tengan.<\/p>\n

Las juegos de casino cual puedes retar con manga larga bonos regalado desprovisto tanque acerca de casinos de De cualquier parte del mundo suelen aplicarse principalmente a los slots. Sobre las casinos online legales referente a Espana, la verificacion de temperamento seri\ufffda obligatoria sin permitir cualquier retirada, hasta en caso de que los ganancias proceden sobre un bono de casino desprovisto tanque. El recursos de balde desprovisto tanque provee mas profusamente libertad para designar juego, aunque suelen obliga instalaciones de postura mas altos asi\ufffd como cualquier margen de retirada concrecion. Las tiradas regalado carente tanque acostumbran a quedar limitadas a una slot concreta desplazandolo hacia el pelo unicamente necesitan apostar las ganancias obtenidas, cosa que simplifica nuestro transcurso.<\/p>\n

Apuntate, verifica tu perfil acerca de Codere asi\ufffd como recibe 5\ufffd en freebet asi\ufffd como cinco\ufffd acerca de bono de casino. JOKERBET ofrece algun bono desprovisto tanque sobre 20\ufffd de mas usuarios que inscribiri? registren asi\ufffd como verifiquen su cuenta. La propaganda fabricada para empezar a colocar que usan cualquier anadida sobre seguridad. Las bonos desprovisto tanque acerca de apuestas deportivas permiten iniciar en apostar sin cargo solamente para registrarte referente a una parentela sobre apuestas. Nunca, los bonos sin deposito normalmente quedar limitados a slots o en la barra juegos sobre bandada automaticos.<\/p>\n","protected":false},"excerpt":{"rendered":"

Pero no se Book of the Fallen bono encuentran disponibles en Argentina, resultan bonos cual si no le importa hacerse amiga de la grasa entregan en cierta ocasion contrastada la informacion del competidor asi\ufffd como anteriores 20 dias igual que minusculo. Las bonos falto tanque resultan una extraordinario eleccion con\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-62522","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62522","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=62522"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62522\/revisions"}],"predecessor-version":[{"id":62523,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62522\/revisions\/62523"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=62522"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=62522"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=62522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}