/* 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":62940,"date":"2026-05-21T14:22:47","date_gmt":"2026-05-21T14:22:47","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=62940"},"modified":"2026-05-21T14:22:48","modified_gmt":"2026-05-21T14:22:48","slug":"nuestro-esparcimiento-formal-es-una-detalle-fundamental-de-todo-plataforma-moderna","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/nuestro-esparcimiento-formal-es-una-detalle-fundamental-de-todo-plataforma-moderna\/","title":{"rendered":"Nuestro esparcimiento formal es una detalle fundamental de todo plataforma moderna"},"content":{"rendered":"

La version celular de BetOnRed estuviese orientada an algunos que desean retar empezando desde smartphone o en la barra pad. BetOnRed Casino suele presentar varios canales de trato, como chat en preparado, correo electronico asi\ufffd como la parte sobre asistencia en compania de explicaciones a dudas solventes. Tambien, sobre cualquier analisis de BetOnRed casino en internet, es conveniente revisar sin intermediarios en la medio empecemos por el principio autorizacion usada desplazandolo hacia el pelo bajo que entidad opera, especialmente con el fin de individuos sobre Portugal. Una medio define que usa tecnologi\ufffdas de oculto de defender una noticia personal desplazandolo hacia el pelo financiera para los gente, algo necesario para conservar la decision alrededor del entorno sobre juego.<\/p>\n

Colabora que usan sistemas digitales de el campo desplazandolo hacia el pelo promueve nuestro juego como juego (con total seguridad asi\ufffd como responsable)<\/h2>\n

Referente a contra an una interfaz del lugar sobre apuestas de deporte, lo tanto acerca de listo igual que https:\/\/divinefortunecasino-es.com\/<\/a> primeramente de el bando se encuentran disponibles, lo que resulta tranquilo de jugadores de los esposos niveles. La medio brinda a las personas espanoles forma segura asi\ufffd como obtenible sobre retar a los tragaperras, a las juegos sobre entidad financiera y a otros juegos sobre casino esgrimidas. El disfrutar de algun esparcimiento rapido con una disparidad de juegos, asequibles con manga larga solo pocos clics tanto desde el ordenador como empezando por es invierno iphone. Empezando por atractivos incentivos hasta una increible practica sobre juego, BetOnRed cumple las parejas campos con el fin de ofrecer algun pack rotundo. Para los que quieren algun casino en linea de primera categoria cual destaque referente a los novios detalles, BetOnRed es el proposito final.<\/p>\n

Excelente de quienes solicitan ocio segura y rentable, BetOnRed integra ciencia sobre destacamento para una pericia inmersiva sobre todo dispositivo. Sobresale por las promociones exclusivas, igual que bonos de recibimiento inclusive 450\ufffd + 250 giros regalado, y una rutina VIP cual galardon una fidelidad.<\/p>\n

Nuestro casino BetOnRed provee la variacii?n sobre estrategias sobre remuneracion aconsejables de satisfacer tus exigencias. El aspectos del casino referente a ofrecer retiros veloces, frecuentemente entre las 24 horas a traves de monederos electronicos o criptomonedas, incorpora la mascara anadida sobre sentimiento a dicho practica de esparcimiento. El Casino BetOnRed posee bicicletas 4,100 valores de juegos, archivos los excelentes tragamonedas como Book of Dead y Sweet Bonanza, junto mediante un emocionante esparcimiento de crash Aviator. Nuestro aparato sobre apoyo todo el tiempo permanece listo para beneficiar, brindando ayuda rapida desplazandolo hacia el pelo amistosa a traves de chat en vivo o correo electronico todo el tiempo que lo perfectamente precises. En compania de alguna iv,500 titulos de primera arquetipo de designar, incluidos tragamonedas modernas como Book of Dead, Sweet Bonanza y no ha transpirado Aviator, no te faltaran alternativas emocionantes. Con el pasar del tiempo cualquier gigantesco album de juegos mas sobre 4,100 precios, descubriras los superiores tragamonedas igual que Book of Dead desplazandolo hacia el pelo Sweet Bonanza, ?carente nombrar los juegos de crash – creen sobre instintos en el garbo Aviator pero en lo grande!<\/p>\n

Te recomendamos informarse directamente sobre tu cuenta las metodologias dinamicos conforme su localizacion<\/h2>\n

Las ofertas promocionales de BetOnRed Casino hacen el trabajo bien como incentivos con el fin de como novedad registros, pero seri\ufffda trascendente concebir que todos estos bonus casino no hablan dinero garantizado. Nuestro catalogo sobre juegos incluye empezando desde tragaperras en internet incluso mesas sobre casino sobre preparado, en compania de cotas populares en el campo. BetOnRed Casino resulta una plataforma sobre juegos de suerte cual deberian ganaderia visibilidad dentro de los consumidores espanoles cual demandan alternativas en el comercio del casino online. Con cualquier atencion al usuario y no ha transpirado nuestro enfoque en el entretenimiento responsable sobre cualquier escenario fiable, Betonred se va a apoyar sobre el silli\ufffdn se sale con proposicion sobre novedosas plataformas.<\/p>\n

Una division sobre casino en avispado cuenta con la gran disparidad de juegos en compania de crupieres reales en superior normal, transmitidos en el momento en que cultura tecnicos. Sobre la parte sobre blackjack, encontraras diferentes probabilidades Blackjack Multi Hand, Power Blackjack, ONE Blackjack, American Blackjack, Free Bet Blackjack y VIP Blackjack, entre otros. Para los jugadores cual se sienten a gusto con las juegos sobre entidad financiera tipicos, Betonred ofrece una amplia variedad de posibilidades. Ademi?s hay torneos Drops & Wins de juegos sobre tragamonedas asi\ufffd como mesas sobre juegos sobre casino sobre listo. El pack de recepcion es uno de los de mayor productivos del sector, con algun 500% de descuento inclusive 450 eurillos y 250 giros de balde en los tragamonedas mayormente utilizadas. Betonred ofrece la sencilla proposicion de bonos y promociones para las jugadores, utilizando fin de brindarles la experiencia sobre esparcimiento gratificante y no ha transpirado excitante.<\/p>\n

La maleabilidad acerca de las metodologias de remuneracion es crucial con el fin de la excelente vivencia de consumidor, desplazandolo hacia el pelo Bet On Emboscada lo entiende perfectamente. De la vivencia de mayor inmersiva, nuestro casino en preparado que usan crupieres reales acerca de juegos igual que Crazy Time o en la barra Power Blackjack es una alternativa increible. Los practicantes de estas tragaperras pueden disfrutar de valores clasicos desplazandolo hacia el pelo novedades constantes. Nadie pondri\ufffda en duda desde las tragaperras de mayor esgrimidas en compania de mecanicas como Megaways desplazandolo hacia el pelo Jackpots Progresivos, hasta una parte de casino en avispado la cual hara percibir como en caso de que estuvieras sobre Las Vegas.<\/p>\n","protected":false},"excerpt":{"rendered":"

La version celular de BetOnRed estuviese orientada an algunos que desean retar empezando desde smartphone o en la barra pad. BetOnRed Casino suele presentar varios canales de trato, como chat en preparado, correo electronico asi\ufffd como la parte sobre asistencia en compania de explicaciones a dudas solventes. Tambien, sobre cualquier\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-62940","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62940","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=62940"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62940\/revisions"}],"predecessor-version":[{"id":62941,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/62940\/revisions\/62941"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=62940"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=62940"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=62940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}