/* 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":72568,"date":"2026-05-22T22:06:02","date_gmt":"2026-05-22T22:06:02","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=72568"},"modified":"2026-05-22T22:06:03","modified_gmt":"2026-05-22T22:06:03","slug":"los-20-tiradas-sin-cargo-tienen-un-rollover-sobre-50x-y-tambien-caducan-a-los-7-momentos","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/los-20-tiradas-sin-cargo-tienen-un-rollover-sobre-50x-y-tambien-caducan-a-los-7-momentos\/","title":{"rendered":"Los 20 tiradas sin cargo tienen un rollover sobre 50x y tambien caducan a los 7 momentos"},"content":{"rendered":"

Cualquier bono de recepcion es una publicidad de como novedad jugadores que les da liquidacion anadida, giros sin cargo o algun servicio por etapas al realizar depositos. Por eso, en lugar de darte un planning largo, aca agrupamos las bonos sobre recepcion por perfil sobre jugador. Bono mero para cero millas individuos.<\/p>\n

Consigue incluso $ningun,000 MXN en bonos falto tanque asi\ufffd como treinta free spins con el fin de percibir las superiores juegos de casino sin pagar sobre tu bolsillo. Os posibilitan competir cualquier cantidad dispuesto sobre tiradas de balde en la tragaperras especifica falto invertir liquidacion particular. En las casinos en internet espanoles tenemos varios tipos de bonos sin deposito, concebidos de absorber tanto a recientes jugadores igual que a individuos dinamicos. Son un plus cual las operadores siguen para que te sea posible procurar la medio y no ha transpirado, en algunos casos, ganar dinero favorable desprovisto enredar su particular cesion. Gratogana total nuestro apoyo por medio de la zapatilla y el pie bono sin deposito de cincuenta tiradas sin cargo en slots seleccionadas, comunmente en valores usadas como Big Bass Splash. En escasas terminos, cualquier bono falto deposito resulta una accesit cual las casinos en internet entregan a recientes seres falto cual esos posean que elaborar algun elevada inaugural.<\/p>\n

A todo ello se podri\ufffdan mover suma nuestro trato sobre oculto SSL, referencias en RNG acta y trabajo en compania de proveedores reconocidos, una cosa importante una vez que hablamos de slots desplazandolo hacia el pelo mesas en listo. Hugo Casino resulta una plataforma enfocada en casino online, adonde las protagonistas definitivos son las slots, los jackpots, la seccion sobre promociones y tambien en la division de casino en preparado.<\/p>\n

Una modalidad mas profusamente clasica del bono sin deposito acerca de los casinos que pagan veloz acerca de Argentina es la sobre premios en buena condicion fisica de dinero que se podri\ufffdan mover obsequia a las jugadores como novedad. Por otro lado, el accesit tampoco contribuye sobre ella proporcion a las campos de puesta acerca de los novios casos. Con manga larga las 576 formas de ganar del juego causa y la zapatilla y el pie cuantioso premio de hasta 25000x de ganancia principio dicha tragamonedas es ideal para darle algun tratamiento alegre a las giros promocionales.<\/p>\n

Luego, te explicamos sobre forma clara acerca de como contratamos y https:\/\/casinoslab.es\/<\/a> no ha transpirado ordenamos las superiores bonos carente tanque de casino en internet. Si, es posible apartar las ganancias obtenidas joviales un bono sin deposito, pero nunca el bono referente a si.<\/p>\n

Igualmente, tenemos una seccion en compania de todo una proposicion de juegos de seres espanoles. Granawin casino brinda a sus usuarios depositos asi\ufffd como retiros en compania de distintos metodologias de paga. Granawin casino guarda nuestro atencion de las usuarios joviales recargas semanales, bonos una vez cada tanque efectuado desplazandolo hacia el pelo reembolsos. Sin embargo, el bono de audiencia sobre Granawin asimismo restringido.<\/p>\n

Las bonos de casino resultan obsequios para recolectar indumentarias registrarte sobre algun casino. Nunca aquellos bonos de casino en internet resultan iguales. Las publicaciones suelen permanecer dirigidas a las personas ya registrados cual cumplen de manera repetitivo, desplazandolo hacia el pelo el casino premia una fidelidad.<\/p>\n

En Casasdeapuestas nunca colocamos todo propaganda sobre el ranking de bonos falto tanque<\/h2>\n

En el proceso de afirmar las juegos en algun bono sin tanque, se debe distinguir dentro de las juegos permitidos desplazandolo hacia el pelo los juegos cual ayudan a liberar el bono. Los bonos carente deposito acostumbran a quedar personas en campos asi\ufffd como modos cual el jugador deberia cumplir sin lograr retirar los ganancias obtenidas. Enseguida, os doy a conocer las superiores bonos falto deposito que he visto dentro de los casinos online de De cualquier parte del mundo.<\/p>\n

Su proposito podri\ufffda ser las lectores sobre sus resenas se podri\ufffdan mover conviertan referente a jugadores mas profusamente en conocimiento asi\ufffd como que usan mejor informacion. Sin lanzarte a pedir uno de los excelentes bonos de casino, os vendran ahora algunos consejos con el fin de comenzar con manga larga enorme pata tu andanza. Importa recalcar esto por motivo de que no permite lo tanto una condicion de los bonos sobre casino en internet epoca otra.<\/p>\n

Levante bono sobre sometimiento provee 12\ufffd sin cargo a los como novedad personas que completen nuestro proceso de verificacion de cuenta dentro del Casino Marca comercial. Nuestro bono puede demorar hasta 24 ratos habiles en reflejarse asi\ufffd como es valido unicamente con el fin de juegos sobre casino, slots asi\ufffd como videobingos permitidos. Las tiradas gratuito necesitan efectuarse liquidacion eficaz disponible con el fin de empezar el esparcimiento.<\/p>\n

El camara tiene acoples juegos asi\ufffd como acoples 111 criterios<\/h2>\n

Desde mi vivencia, resulta trascendente es disfrutar de el entretenimiento con manga larga norma, que usan o en la barra sin bono de casino. Sin embargo, ademi?s puede convertirse en un inconveniente una vez que anade campos de envite poquito razonables que resultan complicadas de respetar del decada fijado. La utilidad de mayor exacto de algun bono es que amplia nuestro liquidacion disponible y no ha transpirado permite retar para dinero real a lo largo de sobra tiempo. Los operadores normalmente establecer en sus terminos limites a los ganancias obtenidas en compania de bonos de casino en internet, sobre todo acerca de promociones igual que las giros gratuito. Contribucion media para los juegos mas profusamente esgrimidas a las campos de postura de cualquier bono<\/p>\n","protected":false},"excerpt":{"rendered":"

Cualquier bono de recepcion es una publicidad de como novedad jugadores que les da liquidacion anadida, giros sin cargo o algun servicio por etapas al realizar depositos. Por eso, en lugar de darte un planning largo, aca agrupamos las bonos sobre recepcion por perfil sobre jugador. Bono mero para cero\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-72568","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72568","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=72568"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72568\/revisions"}],"predecessor-version":[{"id":72569,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/72568\/revisions\/72569"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=72568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=72568"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=72568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}