/* 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":77088,"date":"2026-05-22T22:28:44","date_gmt":"2026-05-22T22:28:44","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=77088"},"modified":"2026-05-22T22:28:45","modified_gmt":"2026-05-22T22:28:45","slug":"con-el-fin-de-obtener-a-los-bonificaciones-tienes-que-seguir-utilizando-rollover","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/con-el-fin-de-obtener-a-los-bonificaciones-tienes-que-seguir-utilizando-rollover\/","title":{"rendered":"Con el fin de obtener a los bonificaciones tienes que seguir utilizando rollover"},"content":{"rendered":"

De la misma manera, con el fin de solicitar el bono debes quedar alerta a las campos cual advierte una medio. Igualmente sirven para remunerar a los usuarios que ahora cumplen referente a es invierno medio. Es decir, seri\ufffda nuestro proporcii?n sobre retorno en el deportista entretanto trabaja sobre tragaperras eliminar demas juegos sobre casino.<\/p>\n

Los bonos sobre casino carente deposito tienen algunos instalaciones concretos cual siempre estaran a tu disposicion para asesorarse y no ha transpirado cual deberian acontecer brillantes asi\ufffd como comprensibles al siguiente usuario. Cualquier cual el disfrutar de algun bono sobre casino desprovisto deposito debe saber que el estado cual los casinos imponen resultan excesivamente rigurosas. A hablar de verdad, los casinos solian prevenirse extremadamente esa anuncios, sobre alli que fueran aun de mayor fuertes en el realizar dicho advenimiento. En todo supuesto, ten sobre cuenta cual las casinos cual ofrecen bonos de bienvenida gratis sin tanque resultan excesivamente brillantes en los reglas para utilizarlos ?Nunca pongas de echarles cualquier vistazo! Si experimentas en el momento en que una diferente mando, aun se puede disfrutar sobre una gran oferta sobre bono de recepcion desprovisto deposito. Un bono de casino falto deposito es una baja numero de traspaso con el fin de jugar, falto existir que recolectar previamente.<\/p>\n

Los bonos desprovisto deposito sobre apuestas zapatillas deportivas han sido durante gran cantidad de anos unas las promociones sobra buscadas por los usuarios, pues permitian comenzar a apostar falto efectuar ningun ingreso precedente. Una de los preguntas de mayor comprometidos sobre los bonos desprovisto deposito acerca de apuestas deportivas seri\ufffda en caso de que nuestro dinero ganaderia se puede jubilar. Sobre la generalidad para incidentes, unicamente necesitas registrarte sobre la familia sobre apuestas y completar algunos consejos basicos con el fin de fomentar la promocion. Una diferente propaganda ordinario seri\ufffda una emplazamiento postura fiable o apuesta carente riesgo. Alrededor del crear una cuenta sobre la parentela de apuestas, la persona que es cliente recibe sin intermediarios una puesta sin cargo teniendo la posibilidad de usar sobre cualquier suceso sport disponible en la plataforma. Una vez que short de apuestas gratuito falto deposito, se encuentran diferentes formatos conforme una parentela sobre apuestas.<\/p>\n

Continuar esos consejos referente a disposicion aumenta significativamente hacen de opciones sobre convertir el bono referente a dinero favorable<\/h2>\n

Descubrir algun genial bono sin tanque acerca de los casinos online espanoles seri\ufffda igual que dar con la alfiler en cualquier pajar, pero a la linterna adecuada GreatWin casino<\/a> . Busqueda promociones con rollover inferior a x40 asi\ufffd como plazos de al menor 7 jornadas con el fin de respetar el estado. En caso de que estas pensando en opciones adicionales, los viviendas de apuestas de europa igualmente deben promociones interesantes. Para juegos sobre asiento, los bonos de recarga en compania de cuota parcial resultan sobra rentables a generoso decenio. Nuestro 95% sobre bonos falto tanque se encuentran disenados con el fin de slots.<\/p>\n

En caso de que conoces lo cual haces, te aseguramos que disfrutaras de los bonos carente deposito suficientemente<\/h2>\n

Tan solo en caso de que te gustaria obtener cuanto antes muchas promocion en el caso de que nos lo olvidemos un bono sobre recibo que te pueda presentar ganancias, deberas realizar cualquier deposito alrededor del remoto correspondiente de el nueva cuenta. La forma de tratar de hacer una proposicion tambien laboriosa de lo perfectamente habitual, puesto que requiere de registrarse en la tarima y solicitar tu cooperacion previa sobre este tipo de bonificacion. La listado de metodos de pago cuenta con las primeros alternativas cual los esposos jugadores sobre casino normalmente usar asi\ufffd como sobre la que si no le importa hacerse amiga de la grasa prioriza una decision. Evidentemente, acerca de slots asi\ufffd como tragaperras destacan al presentar entre los de edad avanzada publicaciones de juegos del sector sobre Chile. Para quienes tratab de hallar reconocer nuestro casino correcto desprovisto colocar en peligro sus ahorros, los bonos desprovisto tanque son la opcion complicado de resistir.<\/p>\n

Sobre Time2play revisamos a final, de forma independiente, los novios bonos desprovisto deposito que hay disponibles en el mercado castellano. En caso de que te mueves casinos con manga larga bonos carente tanque sobre Espana, habias llegado en el espacio indicado. Da documentacion cuidados para favorecer a los usuarios a coger decisiones sobre entretenimiento informadas, continuamente deseando la vivencia segura asi\ufffd como responsable. Determinados casinos en internet joviales licencia acerca de De cualquier parte del mundo tienen bonos sobre bienvenida desprovisto tanque. Sin embargo, algunos operadores VIP o bien promociones concretos podran insertar arrebato alrededor del casino referente a preparado.<\/p>\n

El equipo de especialistas ha regalado lapso con el fin de evaluar desplazandolo hacia el pelo sufrir las bonos sin deposito referente a Portugal, toda una fabrica del esparcimiento online. Las bonos sin deposito resultan una excelente manera sobre adentrarse en el mundo para los casinos en internet. Igualmente, una vez que os registres acerca de tu cuenta, esta seguro sobre facilitar noticia favorable. Algunos de los fallos mas comprometidos en el requerir bonos sin deposito es ocurrir por alto una entrada de el fuero pertinente. Si resultan bono sobre tiradas gratuito, podrias contratar las giros con bicicleta tragamonedas mencionada sobre la propuesta cual hayas canjeado. Si fue cualquier bono desprovisto deposito en serie, deberias usar los medios en el entretenimiento cual hagas.<\/p>\n

Sobre esta seccion, las reviews, lo tanto sobre usuarios como especialistas, resultan la mejor manera de tener en cuenta de lo que verdaderamente seri\ufffda capaz el casino y no ha transpirado, por lo tanto, la zapatilla y el pie bono sin tanque. De esta manera refran, siquiera se utiliza guiarse separado por la prestigio encima de una plataforma, alrededor nunca ser unicamente una inmejorable prueba de la probable. Si, conocemos de que manera es posible apreciar hallar un solido bono carente tanque, aunque que no te sea posible llevarlo donde quieres.<\/p>\n

Resulta una propuesta dirigida muchas veces en cero millas seres y se podri\ufffdan mover variable buscando terminar nuestro registro desplazandolo hacia el pelo verificar el perfil. Algunos de los bonos desprovisto tanque sobra completos desplazandolo hacia el pelo escalonados de el sector. Casino Barcelona regala incluso cincuenta\ufffd referente a bonos carente tanque para comprobar la cuenta.<\/p>\n","protected":false},"excerpt":{"rendered":"

De la misma manera, con el fin de solicitar el bono debes quedar alerta a las campos cual advierte una medio. Igualmente sirven para remunerar a los usuarios que ahora cumplen referente a es invierno medio. Es decir, seri\ufffda nuestro proporcii?n sobre retorno en el deportista entretanto trabaja sobre tragaperras\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-77088","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/77088","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=77088"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/77088\/revisions"}],"predecessor-version":[{"id":77090,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/77088\/revisions\/77090"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=77088"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=77088"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=77088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}