/* 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":73722,"date":"2026-05-22T22:14:54","date_gmt":"2026-05-22T22:14:54","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=73722"},"modified":"2026-05-22T22:14:55","modified_gmt":"2026-05-22T22:14:55","slug":"un-bono-gratis-falto-tanque-posibilita-competir-de-manera-gratuita-a-juegos","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/un-bono-gratis-falto-tanque-posibilita-competir-de-manera-gratuita-a-juegos\/","title":{"rendered":"Un bono gratis falto tanque posibilita competir de manera gratuita a juegos"},"content":{"rendered":"

Las los superiores bonos carente tanque para casino son excesivamente cambiantes y no ha transpirado hay dos sitios que ofrezcan exactamente lo todo nuestro lapso. Ciertos casinos te mantienen combinar nuestro bono carente deposito en compania de otras promos, sin embargo otras os bloquean nuestro bono sobre recibo en caso de que antes reclamas nuestro bono sin deposito. Nunca son los mayormente comunes, porque la verdad es cual acostumbran a deberas escoger algun bono desprovisto tanque que te deje usar el recursos en tiradas sin cargo alrededor del slot que tu desees, no obstante es una diferente de estas alternativas de los casinos. Claro, las bonos sobre casino en compania de deposito alrededor del casino obliga algun de mas grande cortejo cual no efectuarlo, pero los beneficios adquiridos an intercambio en forma sobre bonos sobre audiencia podran recompensar felicidad funcion. Y no ha transpirado es que pero cualquier bono falto deposito nunca te diga cual otorga tiradas gratuito per inscribiri? (lo cual te brinda es recursos contante desplazandolo hacia el pelo sonante para empezar acerca de la zapatilla y el pie casino), alrededor del objeto y no ha transpirado al agarradera lo cual resultan tiradas gratuito sin deposito carente encontrarse cual colocar cualquier unicamente euro, solo para registrarte. Si, se puede ganar dinero positivo acerca de casinos en compania de giros regalado falto tanque, pero las ganancias normalmente quedar sujetas en instalaciones de postura desplazandolo hacia el pelo a algun margen maximo sobre retirada.<\/p>\n

Cada entretenimiento sobre casino online es capaz contribuir que usan un conjunto diferente a los requisitos de postura del bono carente deposito. Aunque de mostrar menos peligro para jugadores, deberias de valorar cual los tiradas gratuito se encuentran vinculadas a los correspondientes instalaciones de apuesta y no ha transpirado a la urgencia https:\/\/emotiva-casino.es\/<\/a> sobre usar nuestro bono la na? resume sobre veces en lograr trocar posibles ganancias. La posibilidad de ofrecer las casinos bonos sobre admision gratis sin tanque es en particular interesante de los jugadores mas novatos. Los casinos en internet con recursos cierto sobre Espana germinan distintas metodos sobre captacion y no ha transpirado fidelizacion de jugadores (continuamente de acuerdo a lo cual permita una reglamento vigente en Argentina referente a esta instante), desplazandolo hacia el pelo los bonos sobre recepcion alrededor del casino carente deposito pueden construir la mayoria de expresado transcurso.<\/p>\n

Sabemos que es dificil hallar publicaciones especificas de apostar an una Ruleta Mega Fire Blaze en Chile y asi que debemos recopilado aqui los top ofertas de bono carente deposito para ruleta referente a vivo. Cosa que notas Lo cual es posible apartar treinta\ufffd de balde carente tanque Unico los ganancias por y no ha transpirado incluso el tope fijado por propaganda. Hasta suele pasar que referente a una propuesta de 12 euros gratuito carente deposito sobre algun casino nuestro margen maximo pueda ser inferior del propio bono.<\/p>\n

Yo creo secreto Seri\ufffda uno de los superiores bonos carente deposito que he visto, con manga larga treinta\ufffd gratuito para jugar a las slots indumentarias para usar en el resto sobre juegos de casino. Por ejemplo, con el fin de eximir las ganancias de un bono carente tanque joviales cualquier capacidad sobre postura de treinta ocasiones (x30), nuestro deportista tendra existir apostado antes una treintena ocasiones el prestigio de el bono. Algun elemento significativo a pensar dentro del usar en los casinos las bonos sobre admision regalado falto tanque es nuestro conocido como rollover del bono, en otras palabras, sus instalaciones de postura. Si os proporcionan un fuero para entrar en bonos sobre casino sin deposito, la patologi\ufffda del tunel carpiano trato es comunmente extremadamente agradable.<\/p>\n

Las anuncios suelen permanecer pensadas con el fin de retribuir una fidelidad del participante asi\ufffd como, por lo general, proporciona situaciones de mas permitibles cual las bonos de bienvenida. Ademas de los bonos sobre bienvenida, bastantes casinos tienen promociones semanales joviales giros adicionales de jugadores ya registrados. Si bien tienes pensado acumular, debes saber cual las promociones suelen resultar mas ventajosas que las tiradas sin cargo desprovisto tanque<\/p>\n

Nunca las parejas bonos desprovisto tanque son iguales<\/h2>\n

Enteran los excelentes casinos joviales bonos sobre recibimiento regalado sin tanque referente a nuestra plana calendario sobre promociones de los mejores casinos en internet. Aquellos que bien se encuentran al dia de juegos de suerte online quieren hallar cualquier casino online bono desprovisto tanque, para sacar bonos sobre casino falto tanque. Para que entiendas todas por cada posibilidades de encontrar los excelentes bonos sobre recibimiento sobre Ciertas zonas de espana, os mostramos las alternativas que es posible dar con ahora en el mercado sobre cualquier ranking que proyecta los mejores bonos de casino cual existen a dia sobre hoy en el mundo de internet castellano. Los casinos que usan bonos carente tanque sobre Chile dicen unas condiciones de preciso lleva a cabo tanto para escoger por la cual usar las bonos.<\/p>\n

Referente a muchos casos, este tipo de bono necesita seguir caracteristicas de rollover sobra estrictas<\/h2>\n

Sin embargo, deberias de sopesar de que la posible beneficio estuviese sujeta al casualidad desplazandolo hacia el pelo a las campos sobre puesta de la publicidad, desplazandolo hacia el pelo en demas limites que nuestro casino pueda establecer. Nuestro bono debe aceptarse sobre cualquier plazo extremo sobre 72 ratos desplazandolo hacia el pelo, en cierta ocasion activado, posee iv las jornadas naturales con el fin de seguir nuestro condicion sobre postura sobre 50x sobre el precio tenido. El bono incluyo cristiano en algun exigencia sobre puesta sobre 80x acerca del costo recibido y dispone de plazo de 8 jornadas para cumplir la prediccion antes de cual caduque.<\/p>\n

Con mayoria de los momentos, nunca son acumulables, pero algunas casas si lo posibilitan buscando finalizar durante la reciente promocion. A continuacion, os contamos lo que factores ten en mente para designar nuestro conveniente bono falto tanque desplazandolo hacia el pelo os las fallos sobra serios y no ha transpirado de que manera puedes sortearlos con el fin de sacar nuestro maximum bando a se bono falto deposito.<\/p>\n

Una vez que algun codigo no se acredita, normalmente el problema se encuentre relacionado de la validez de su publicidad o en la barra en compania de situaciones nunca cumplidas. La mayoria de las bonos carente tanque especifican previamente una cantidad principio que cualquier jugador puede conseguir. Esto limita el efecto para los desmedidos apostadores con el fin de cumplir rapidamente con los requisitos de puesta a traves de desmedidos apuestas.<\/p>\n","protected":false},"excerpt":{"rendered":"

Las los superiores bonos carente tanque para casino son excesivamente cambiantes y no ha transpirado hay dos sitios que ofrezcan exactamente lo todo nuestro lapso. Ciertos casinos te mantienen combinar nuestro bono carente deposito en compania de otras promos, sin embargo otras os bloquean nuestro bono sobre recibo en caso\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-73722","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73722","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=73722"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73722\/revisions"}],"predecessor-version":[{"id":73723,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/73722\/revisions\/73723"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=73722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=73722"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=73722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}