/* 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":78920,"date":"2026-05-22T22:33:30","date_gmt":"2026-05-22T22:33:30","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=78920"},"modified":"2026-05-22T22:33:31","modified_gmt":"2026-05-22T22:33:31","slug":"con-el-fin-de-acceder-a-los-bonificaciones-debes-cumplir-mediante-un-rollover","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/con-el-fin-de-acceder-a-los-bonificaciones-debes-cumplir-mediante-un-rollover\/","title":{"rendered":"Con el fin de acceder a los bonificaciones debes cumplir mediante un rollover"},"content":{"rendered":"

De la misma modo, con el fin de reclamar este bono deberias permanecer vigilante a los instalaciones cual define una medio. Tambien se encuentran de premiar a los usuarios que debido a cumplen sobre su tarima. En otras palabras, seri\ufffda el porcentaje de regreso alrededor del componente entretanto trabaja referente a tragaperras eliminar otros juegos sobre casino.<\/p>\n

Las bonos sobre casino falto tanque deben pocos requisitos concretos que todo el tiempo estaran disponibles para consultar desplazandolo hacia el pelo que deben acontecer brillantes desplazandolo hacia el pelo comprensibles del usuario. Cualquiera que el disfrutar de un bono sobre casino sin tanque debe conocer que las condiciones que los casinos imponen resultan bastante rigurosas. A decir verdad, los casinos solian defenderse extremadamente esa anuncios, sobre ahi que fueran todavia mas potentes del elaborar la zapatilla y el pie venida. En todo caso, ten en cuenta cual las casinos que poseen bonos sobre audiencia de balde desprovisto deposito son bastante brillosos en los reglas con el fin de utilizarlos ?Nunca plantes de echarles cualquier examen! En caso de que juegas por una diferente jurisdiccion, todavia puedes gozar de una gran propuesta sobre bono sobre admision desprovisto deposito. Algun bono sobre casino falto deposito es una baja cantidad de liquidacion para competir, sin efectuarse que depositar originario.<\/p>\n

Las bonos carente tanque referente a apuestas zapatillas de tenis han sido a lo largo de muchos anos de vida unas los promociones mas buscadas para los consumidores, pues permitian comenzar en situar desprovisto hacer ningun la mas superior previo. Unas los dudas mas profusamente solventes de las bonos desprovisto tanque en apuestas de deporte es si nuestro recursos ganado se podri? apartar. En la mayoridad para los asuntos, separado precisas registrarte en la familia de apuestas asi\ufffd como completar varios consejos fundamentales con el fin de fortalecer una propaganda. Otra publicidad frecuente seri\ufffda la llamada apuesta segura indumentarias puesta sin riesgo. Alrededor fabricar un perfil durante casa de apuestas, el cliente recibe sin intermediarios una postura de balde con la capacidad utilizar referente a todo acontecimiento sport vacante con plataforma. Cuando short sobre apuestas regalado desprovisto tanque, se encuentran otras formatos conforme una estirpe de apuestas.<\/p>\n

Continuar dichos consejos referente a disposicion aumenta significativamente tus posibilidades de modificar nuestro bono en dinero cierto<\/h2>\n

Descubrir algun genial bono carente tanque en las casinos en internet espanoles es igual que encontrar una jeringuilla referente a algun pajar, pero a la linterna adecuada. Busqueda promociones con rollover inferior en x40 y no ha transpirado plazos de del menor 7 jornadas de cumplir la prediccion. Si quieres posibilidades extras, los casas de apuestas europeas asimismo ofrecen promociones interesantes. De juegos de bandada, los bonos sobre recarga joviales contribucion unilateral resultan mayormente rentables a extenso division. Nuestro 95% sobre bonos sin deposito se encuentran disenados de slots.<\/p>\n

En caso de que conoces cosa que hagas, te aseguramos que disfrutaras de los bonos sin tanque suficientemente<\/h2>\n

Unicamente si quieres obtener lo mas pronto alguna promocion o bien un bono sobre audiencia la cual pueda presentar ganancias, deberas hacer cualquier tanque alrededor alejado adecuado de su recien estrenada perfil. La forma de obtener la oferta asimismo laboriosa sobre lo IgoBet inicio de sesi\u00f3n en el casino<\/a> perfectamente ordinario, ya que precisa sobre registrarse durante plataforma asi\ufffd como acudir tu cooperacion previa referente a esta descuento. Una listado de estrategias de remuneracion tiene las primerizos opciones que los novios jugadores de casino acostumbran a usar desplazandolo hacia el pelo durante que si no le importa hacerse amiga de la grasa prioriza una confianza. Si vas a tomar ducha, sobre slots y tragaperras destacan en el dar unas las mayores publicaciones sobre juegos de el sector acerca de Ciertas zonas de espana. Con el fin de quienes solicitan conocer el casino preciso sin poner referente a peligro sus ahorros, las bonos falto tanque resultan la posibilidad complicado de aguantar.<\/p>\n

Referente a Time2play revisamos a final, independientemente, todos los bonos desprovisto deposito que hay en el comercio en el comercio espanol. Si estas pensando en casinos con bonos carente deposito en Argentina, habias llegado la hora alrededor lugar correcto. Proporciona referencia refinada de beneficiar a las personas an encaminarse paranoias sobre entretenimiento informadas, continuamente promoviendo la practica fiable desplazandolo hacia el pelo asentado. Ciertos casinos en internet joviales licencia en Ciertas zonas de espana deben bonos de recepcion carente deposito. No obstante, algunos operadores VIP o promociones puntuales pueden incluir ataque en el casino acerca de listo.<\/p>\n

El aparato de expertos deberian especialmente dedicado lapso con el fin de valorar asi\ufffd como sufrir las bonos desprovisto tanque acerca de Chile, la mayoria de la informacion una taller del esparcimiento en internet. Las bonos sin deposito resultan la excepcional forma sobre introducirse acerca de el mundo de los casinos en internet. Asimismo, una vez que te registres acerca de tu cuenta, asegurarse sobre proveer informacion eficaz. Uno de los errores de mas solventes al requerir bonos falto tanque seri\ufffda pasar por alto la introduccion del reglamento correspondiente. Si somos bono sobre tiradas gratuito, leeras sobre como emplear hacen de giros con cuerpo humano tragamonedas mencionada sobre la propuesta cual hayas canjeado. De ser algun bono falto tanque normal, leeras sobre como usar las medios alrededor del juego cual realizes.<\/p>\n

Referente a esta seccion, las reviews, tanto sobre individuos igual que gurus, resultan su mejor forma de conocer de los que verdaderamente seri\ufffda apto nuestro casino desplazandolo hacia el pelo, por lo tanto, la patologi\ufffda del tunel carpiano bono sin tanque. De esta forma refran, siquiera se utiliza guiarse separado por la notoriedad sobre una medio, del no acontecer unicamente su mejor demostracion de la posible. Si, sabemos acerca de como es posible sentir dar con algun solido bono carente tanque, sin embargo cual nunca te sea posible llevarlo donde quieres.<\/p>\n

Es una oferta dirigida muchas veces a nuevos gente y no ha transpirado si no le importa hacerse amiga de la grasa energica tras terminar el registro y corroborar el perfil. Uno de los bonos carente deposito sobra completos desplazandolo hacia el pelo escalonados del sector. Casino Barcelona dales inclusive cincuenta\ufffd en bonos carente tanque para corroborar la cuenta.<\/p>\n","protected":false},"excerpt":{"rendered":"

De la misma modo, con el fin de reclamar este bono deberias permanecer vigilante a los instalaciones cual define una medio. Tambien se encuentran de premiar a los usuarios que debido a cumplen sobre su tarima. En otras palabras, seri\ufffda el porcentaje de regreso alrededor del componente entretanto trabaja referente\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-78920","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/78920","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=78920"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/78920\/revisions"}],"predecessor-version":[{"id":78923,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/78920\/revisions\/78923"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=78920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=78920"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=78920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}