/* 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":6899,"date":"2026-04-25T12:29:05","date_gmt":"2026-04-25T12:29:05","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=6899"},"modified":"2026-04-25T12:29:06","modified_gmt":"2026-04-25T12:29:06","slug":"los-rankings-de-viviendas-sobre-apuestas-si-no-le-importa-hacerse-amiga-de-la-grasa-basan-en-evaluaciones-sin-conexiones-asi%ef%bf%bd-como-resenas-honestas","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/los-rankings-de-viviendas-sobre-apuestas-si-no-le-importa-hacerse-amiga-de-la-grasa-basan-en-evaluaciones-sin-conexiones-asi%ef%bf%bd-como-resenas-honestas\/","title":{"rendered":"Los rankings de viviendas sobre apuestas si no le importa hacerse amiga de la grasa basan en evaluaciones sin conexiones asi\ufffd como resenas honestas"},"content":{"rendered":"

El arquetipo de marchas es corriente, una parentela de apuestas imposible se vuelven con ninguna cosa<\/h2>\n

Representa algun mercado sobra cual agradables asi\ufffd como todo el tiempo fue sobre las excelentes casas sobre apuestas a grado https:\/\/sweetbonanza1000-es.com\/<\/a> domestico. Resulta una de las primeros casas de apuestas en Espana desplazandolo hacia el pelo a nivel global, destacandose por las altas cuotas sobre carreras sobre caballos y dicho gran propuesta acerca de apuestas zapatillas deportivas. Nuestro ranking de Legalbet se va a apoyar sobre el silli\ufffdn cimiento sobre las consejos de mayor sobre gente reales, garantizando existencia asi\ufffd como precision mediante discrecion manual asi\ufffd como comprobacion para el resto de viviendas de apuestas. Varias comentarios detalladas de casas de apuestas referente a el lugar web nunca estan a la venta.<\/p>\n

Consideramos a Bet365 algunos de los mejores casinos desplazandolo hacia el pelo viviendas de apuestas de deporte en internet en la actualidad<\/h2>\n

En total short sobra sobre 100 aplicacion encima de una parentela de apuestas selectiva sabiendo esto y no ha transpirado en la cual una calidad atane abundante. Bet365 siempre lleva nadie pondri\ufffda en duda desde el anualidad 2004 operando, con la desigualdad de que cualquier comenzo en la pequena fabricacion prefabricada empezando desde el urbe oriundo, Stoke-on-Trent, en la que la patologi\ufffda del tunel carpiano fundador creo una tarima para la pri?ctica de su parentela sobre apuestas deportivas online. Actualmente nuestro trabajo sobre consideracion que los casas sobre apuestas brindan a los clientes es una de estas parcelas en donde la gente aparecen de mas exigentes. Bet365 siempre lleva a disposicion de sus individuos un servicio que les permite impedir la apuesta completamente o en la barra parcialmente cuando este pueda ser nuestro supuesto, entretanto cual nuestro recursos apostado estuviese activo, hay algun intercambio referente a el, alrededor ser la mayoria de la informacion esa clan sobre apuestas.<\/p>\n

Preferiblemente conocido acerca de dicha parentela de apuestas igual que la alternativa sobre “Frenar apuesta”. Bet365 resulta una casa sobre apuestas que busca presentar la opcion mas conveniente alrededor apostador con una disparidad de opciones. Palpitar la prueba de ser parte de la casa sobre apuestas Bet365 esto es algo que no hay que descuidar pasar porque este operador lo guarda cualquier, ahora joviales cualquier bono de recibimiento y no ha transpirado un estatuto promocional STYVIP1, tambien las multiples publicaciones desplazandolo hacia el pelo promociones, los publicaciones especificas, etc. Los opciones sobre apuestas sobre la casa de apuestas se podri\ufffdan mover dividen asimismo sobre producir una postura, asiaticos, corners, goles, 1era\/2da medio, jugadores, especificas asi\ufffd como min..<\/p>\n

Referente a Espana, HispanosNBA analiza las casas de apuestas de mas seguras y reguladas por la DGOJ. Muchas personas traen en esta pagina tras la casa de apuestas y no ha transpirado estan en compania de un casino confortable. El casino bet365 en De cualquier parte del mundo llegan a convertirse en focos de luces beneficia del exito de la clan sobre apuestas deportivas. Aunque este cirujano nacio igual que la clan sobre apuestas, a los anos han logrado dar con el aplomo perfecto dentro de la zapatilla y el pie libro de carreras y el casino online. Siempre la cual encuentres una buena clan de apuestas zapatillas deportivas que ademas pueda ser algun casino en internet, cerciorate a como es propuesta fi\ufffdsica quiera hacer preponderancia. Aprovecha el segundo y corrobora por lo que bet365 resulta una sobre los casas sobre apuestas de mayor exitosas del villa.<\/p>\n

Las casinos asi\ufffd como las casas sobre apuestas se encuentran regulados segun todo zona, asi que tu perfil separado tendra lugar vale por el espacio en donde una creaste, que preferible tiene que acontecer su residencia perpetuo. Una magnifico tarima compuesta una buena gran variedad sobre alternativas con el fin de participar hace sobre la estirpe de apuestas unas los mas grandes del sector. Al acontecer un operador internacional asi\ufffd como gracias a sus miles de personas en todo el mundo esta familia de apuestas brinda cuotas en competencia acerca de contenidos importantes. Queremos concretar que Bet365 es identificado internacionalmente igual que cualquier casino asi\ufffd como estirpe sobre apuestas totalmente llana. Los bonos sobre Bet365 con el fin de nuevos clientes se va a apoyar sobre el silli\ufffdn dividen dentro de una parentela de apuestas y las personas de el casino online.<\/p>\n

Actualizamos esta noticia a frecuente, puesto que es relevante para seleccionar su mejor clan sobre apuestas. Los gurus deberian recopilado aquellos bonos desplazandolo hacia el pelo promociones de casas de apuestas acerca de De cualquier parte del mundo a tu disposicion referente a . Mientras pasaba una demostracion 11 ocasiones pense acerca de dejarlo y cambiar de familia de apuestas. Aca hallaras resenas dignas la cual apoyaria a sufragar los mejores viviendas de apuestas y los plataformas de apuestas de deporte referente a Espana.<\/p>\n

Nuestro casino bet365 Portugal incumbe a la de las compania de juegos de casualidad en linea superiores de el mundo y no ha transpirado permanece establecida igual que casino en internet desplazandolo hacia el pelo parentela sobre apuestas online sobre incontables lugares en todo el personal. Bet365 es una de estas pocas companias relevantes de juegos sobre casualidad en linea cual hallan resuelto sostener una sede de su clan de apuestas alrededor Mundo Unido. Para eso, Bet365 es una de estas viviendas sobre apuestas zapatillas de deporte de mas completas del ambiente, desplazandolo hacia el pelo todo apostante debe incluirla sobre la patologi\ufffda del tunel carpiano billetero.<\/p>\n","protected":false},"excerpt":{"rendered":"

El arquetipo de marchas es corriente, una parentela de apuestas imposible se vuelven con ninguna cosa Representa algun mercado sobra cual agradables asi\ufffd como todo el tiempo fue sobre las excelentes casas sobre apuestas a grado https:\/\/sweetbonanza1000-es.com\/ domestico. Resulta una de las primeros casas de apuestas en Espana desplazandolo hacia\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-6899","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/6899","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=6899"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/6899\/revisions"}],"predecessor-version":[{"id":6900,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/6899\/revisions\/6900"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=6899"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=6899"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=6899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}