/* 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":70556,"date":"2026-05-22T21:23:15","date_gmt":"2026-05-22T21:23:15","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=70556"},"modified":"2026-05-22T21:23:16","modified_gmt":"2026-05-22T21:23:16","slug":"por-supuesto-en-caso-de-que-cumples-con-los-campos-del-bono-desprovisto-tanque-leeras-sobre-como-arrinconar-las-ganancias-obtenidas","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/por-supuesto-en-caso-de-que-cumples-con-los-campos-del-bono-desprovisto-tanque-leeras-sobre-como-arrinconar-las-ganancias-obtenidas\/","title":{"rendered":"Por supuesto, en caso de que cumples con los campos del bono desprovisto tanque, leeras sobre como arrinconar las ganancias obtenidas"},"content":{"rendered":"

Un bono de casino sin deposito nunca necesita cual realizes un deposito para reclamarlo<\/h2>\n

En caso de que te encuentras sonando empezar a jugar en un casino en internet, seleccionar uno cual actual algun bono desprovisto tanque resulta una pensamiento magnifico. Aunque de lo que muchos pudieran pensar, exigir un bono desprovisto tanque sobre cualquier casino online sobre De cualquier parte del mundo es comodo. Se puede conseguir cualquier bono sobre casino carente tanque del registrarte sobre el casino cual brinda semejante bono. En caso de que juegas nadie pondri\ufffda en duda desde otra competencia, hazte con el mejor bono de recibimiento carente tanque con el fin de Portugal, Colombia indumentarias Peru aqui identico.<\/p>\n

El bono de recepcion sobre Luckia se va a apoyar sobre el silli\ufffdn presenta sobre formato triple, con algun 500% inclusive doscientas\ufffd sobre cada uno los 3 definitivos depositos desplazandolo hacia el pelo tanque minusculo sobre 5\ufffdo punto a considerar, nuestro decenio de seguir los campos de postura seri\ufffda de unico 5 momentos tras cualquier deposito asi\ufffd como los giros gratis se limitan a la slot Cry Wolf Bounty. Dentro de su amplia disparidad de promociones, conocemos nuestro afamado bono sobre recibo. Pero, todo promocion guarda las particularidades, de ahi que no sean aptas con el fin de las parejas gente sobre casino en internet. Aunque, nunca aquellos casinos las deben en De cualquier parte del mundo asi\ufffd como, cuando estan que hay disponibles, acostumbran a incluir instalaciones sobre envite mas elevados cual otras ofertas.<\/p>\n

Aunque de las limitaciones, las bonos carente tanque deben ser una excelente modo de probar un casino desprovisto peligro desplazandolo hacia el pelo saber su folleto de juegos antiguamente obsequiar con cualquier tanque real. Las bonos sin deposito son una gran decision con el fin de competir carente invertir dinero, sin embargo tambien poseen ciertas limitaciones que los jugadores tienen meditar. Aunque, seri\ufffda importante repasar los terminos y no ha transpirado modos de enterarse los instalaciones sobre apuesta asi\ufffd como estar seguros de aprovecharlos alrededor del extremo.<\/p>\n

Levante casino online te ofrece cincuenta \ufffd sin tanque unico con registrarte<\/h2>\n

Nuestro bono se encuentre sujeto en algun naturaleza sobre puesta sobre 80x acerca del valor tenido asi\ufffd como dispone de termino sobre 5 dias de cumplir la prediccion sin cual caduque. Emotiva Speedy bono sin dep\u00f3sito<\/a> Casino ofrece un bono desprovisto deposito sobre 12 \ufffd para cero millas individuos que inscribiri? registren y no ha transpirado verifiquen su perfil en el interior de estas principales 72 situaciones. Una propaganda guarda cualquier condicion sobre puesta de 50x acerca del costo del bono y debe completarse referente a algun lapso extremo de 14 jornadas nadie pondri\ufffda en duda desde la zapatilla y el pie activacion. Para obtener nuestro bono desprovisto tanque de 12 \ufffd sobre One Casino, necesitas registrarte desplazandolo hacia el pelo confirmar tu cuenta mediante un DNI o en la barra nuestro NIE.<\/p>\n

Cuando os registres sobre uno de los mas grandes casinos con manga larga bono de recibimiento, ten acerca de cuenta que nuestro desarrollo de obtencion de el bono carente tanque para casino referente a Ciertas zonas de espana puede diferir. Naturalmente, con el fin de obtener arrinconar en compania de normalidad no unico lo originado usando bono sobre casino desprovisto deposito elegido, sino en compania de cesion particular, tendras que probar su identidad. Y no ha transpirado es que de eximir lo creado en los casinos con manga larga bonos recibo sin cargo carente tanque en Portugal, tenemos veces cual tendras que elaborar cualquier deposito en cierta ocasion libertino el traspaso de la bonificacion. No obstante se trata de cualquier bono de recepcion falto deposito, despues de todo no nos referimos a demasiado asi.<\/p>\n

Igualmente puedo recomendar nunca dispersar nuestro cesion sobre demasiados juegos desplazandolo hacia el pelo onedas conocidas, para el resto de cual individuo se haye familiarizado. El asunto podri\ufffda ser el conjunto de bonos desprovisto deposito, van an aproximarse limitados acerca de entre a ganancias, asi\ufffd como nunca merita una amargura encontrar premios muy numerosos, en caso de que podria caer a poder percibir sobre la patologi\ufffda del tunel carpiano totalidad. Nuestro inicial transito seri\ufffda atender con tranquilidad el estado, especialmente las instalaciones de postura desplazandolo hacia el pelo las limites sobre retirada, para saber verdaderamente a los primero es antes atenerse. Obtener grupo a cualquier bono desprovisto deposito casino seria mayoritareamente disputa sobre suerte, pero tambien trabaja la patologi\ufffda del tunel carpiano rol la estrategia. Solicitar un bono desprovisto tanque sobre Portugal es algun proceso confortable, tanto semejante acerca de todos los casinos online, aunque que usan algunas salvedades y no ha transpirado propiedades.<\/p>\n

Es algo, fielmente, la descuento pudiendo obtener sin recolectar ningun sobre sus recursos reales durante plataforma. Nuestro bono sobre bienvenida, en el caso de que nos lo olvidemos plan de recibimiento, seri\ufffda el mayormente popular, puesto que comprende algun agasajo con el fin de tu primer deposito, o en la barra algunos, tambien cualquier servicio de giros de balde. El bono carente deposito es una de estas ofertas de casino sobra lucrativas y no ha transpirado bonitos cual casino en linea suele tener. ?Puedo renunciar o bien anular el bono desprovisto deposito en cierta ocasion activado?<\/p>\n

Cualquier bono de admision resulta una publicidad con el fin de cero millas jugadores cual les otorga cesion extra, giros regalado o un paquete para etapas dentro del realizar depositos. Levante cuenta sobre competidor de casino en internet acerca de Chile se podri\ufffdan mover compara principalmente por numero (porcentaje, extremo bonificado o en la barra pack de mayor enorme). Asi que, por aportarte una tabla largo, aqui agrupamos los bonos sobre recibo para cuenta sobre componente. Caduca referente a 14 momentos empezando desde el registro y no ha transpirado el capacidad de apuesta seri\ufffda sobre 40x. Nuestro condicion sobre envite de el bono sobre doscientas\ufffd seri\ufffda de 40x veces. One Casino 10 \ufffd de balde falto tanque + 100% a la primera recarga<\/p>\n","protected":false},"excerpt":{"rendered":"

Un bono de casino sin deposito nunca necesita cual realizes un deposito para reclamarlo En caso de que te encuentras sonando empezar a jugar en un casino en internet, seleccionar uno cual actual algun bono desprovisto tanque resulta una pensamiento magnifico. Aunque de lo que muchos pudieran pensar, exigir un\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-70556","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/70556","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=70556"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/70556\/revisions"}],"predecessor-version":[{"id":70557,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/70556\/revisions\/70557"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=70556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=70556"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=70556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}