/* 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":74206,"date":"2026-05-22T22:17:40","date_gmt":"2026-05-22T22:17:40","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=74206"},"modified":"2026-05-22T22:17:42","modified_gmt":"2026-05-22T22:17:42","slug":"levante-valor-normalmente-si-no-le-importa-hacerse-amiga-de-la-grasa-situa-entre-12%ef%bf%bd-y-10%ef%bf%bd-sin-embargo-puede-cambiar-conforme-el-camara","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/levante-valor-normalmente-si-no-le-importa-hacerse-amiga-de-la-grasa-situa-entre-12%ef%bf%bd-y-10%ef%bf%bd-sin-embargo-puede-cambiar-conforme-el-camara\/","title":{"rendered":"Levante valor normalmente si no le importa hacerse amiga de la grasa situa entre 12\ufffd y 10\ufffd, sin embargo puede cambiar conforme el camara"},"content":{"rendered":"

Los tragaperras normalmente narrar dentro del 100% al siguiente naturaleza sobre envite de el bono, entretanto que otros juegos podrian realizarlo separado parcialmente en el caso de que nos lo olvidemos nunca contabilizar no. Con mayoridad sobre promociones, las giros unico podran enviarse referente a una tragaperras especi\ufffdfica en el caso de que nos lo olvidemos sobre una baja coleccion sobre juegos elegidos por el casino, igual que los mas grandes ruletas acerca de preparado.<\/p>\n

De momento, entre las mas grandes operadores en Latinoamerica no se encuentran quienes hacen el trabajo bien con manga larga Fambet Casino<\/a> leyes sobre bonos desprovisto deposito. Ya en caso de que despues de probar las bonos desprovisto alta, deseas aspirar para superiores bonos, no te se podri? perder los bonos con el pasar del tiempo deposito. Los bonos carente tanque nos podran suministrar por registrarnos nadie pondri\ufffda en duda desde cinco, 12, 15, 15 y incluso 500 Euros. El bankroll o en la barra exigencia sobre postura carente deposito suele acontecer de minusculo x20, que puede llegar inclusive x100.<\/p>\n

Referente a las siguientes secciones os doy a conocer y no ha transpirado analizo los ventajas asi\ufffd como desventajas sobre ambas las anuncios de los superiores bonos sobre casino en internet con el fin de facilitarte a sufragar el mas profusamente indicado con el fin de vd.. Los casinos joviales bonos sobre recibimiento seran para mas potenciales para los jugadores espanoles, ya que posibilitan obtener prerrogativas en el realizar el inicial tanque. Habitualmente, unico se puede elegir una rebaja de registro, igual que acerca de LeoVegas, en donde eliges entre el bono de casino indumentarias casino en presto.<\/p>\n

Las giros gratuitos normalmente efectuarse una vigencia sisa, normalmente sobre 6 a treinta jornadas. Ademas de dicho bono sobre audiencia, que debido a incluye 11 tiradas, Platincasino ofrece 50 giros regalado sobre Jumanji por repasar tu perfil. La zapatilla y el pie bono sobre admision provee 88 tiradas gratuitas en mas de 300 tragaperras, inclui\ufffddo Megaways y no ha transpirado botes, desprovisto necesidad de guardar casi nada numero y no ha transpirado con algun rollover muy asumible de x20. Son ciertos las discernimiento acerca de quienes te deberias aclarar con el fin de maximizar un bono sobre bienvenida carente deposito.<\/p>\n

Separado la va an alcanzar utilizar con slot sobre Hot Spin Retrigger, con un plus sobre 0,08\ufffd una vez cada tiro, y no ha transpirado durante cualquier division maximo sobre 24 situaciones. Aquellos premios de las slots contribuyen referente a cualquier 100% durante liberacion de el bono asi\ufffd como el resto de juegos (ruleta y no ha transpirado blackjack) desplazandolo hacia el pelo de casino referente a vivo (ruleta sobre listo) lo hacen en un 11%. Seri\ufffda necesario registrarse desplazandolo hacia el pelo probar el perfil con el fin de coger este bono sobre 88 tiradas de balde a los slots. Nunca, todo el tiempo hemos respetar con los campos de postura del plazo adecuado. Algun bono de casino es una publicidad la cual ofrece saldo anadida, giros regalado eliminar otras prerrogativas al registrarte, almacenar o colaborar sobre ciertas tareas. Esto es sin duda trascendente lo tanto de el programa juego formal por la cual la defensa de hacen de medios y no ha transpirado puntos personales.<\/p>\n

Consulta la relacion actualizada de los mejores bonos que usan tiradas gratuitas<\/h2>\n

Es algun bono de bienvenida sin deposito que los viviendas sobre apuestas y no ha transpirado Casinos en linea ofrecen de aportarte sobre alta en muchas propaganda sobre tirada. Para terminar, nuestro Casino Betsson ademas hallaras un bono desprovisto deposito sobre hasta 15 eurillos, siendo obligado retar incluso 10 veces la cuantia del bono, desplazandolo hacia el pelo con manga larga un reintegro maximo de hasta 100 euros. El tanque minusculo tiene que ser de 11 euros, pero en estos acontecimientos sera necesario participar incluso 30 ocasiones una na? del deposito. En la misma camino, nuestro Casino Genial Madrid en el caso de que nos lo olvidemos la plana de 888casino te ofrece igualmente cualquier bono sobre 15 euros desprovisto deposito para jugar acerca de las juegos de casino, sin embargo las instalaciones gastan por jugar inclusive 25 veces la importancia de el apuesta. Los operadores inscribiri? reservan el recto de culminar, convertir o descontinuar una propaganda, las palabras y las requisitos de su publicidad referente a cuestion, sin embargo resulta una ejercicio comun cual los Casinos Online ofrezcan 30 euros regalado falto tanque sobre Portugal. Ten acerca de cuenta los consejos al momento requerir tus bonos de casino, desplazandolo hacia el pelo un monton de en relacion acalculos sobre impuestos, con el fin de obtener aprovecharlos alrededor extremo.<\/p>\n

Mientras tanto, es posible a como es medio te pida documentos adicionales con el fin de estar seguros<\/h2>\n

Como mediante un resto sobre bonos de casino, las codigos sobre bono las encuentras con pagina principal indumentarias sobre la pagina de bonus. Ciertos bonos falto deposito os piden cual incluyas cualquier ley particular o bien que utilices un cupon con el fin de desbloquearlos. En la moda de esparcimiento sin cargo, siquiera siquiera debes generar un perfil o ser usuario sobre una plataforma.<\/p>\n

Debido a esta razon, para impedir fortalecer cualquier bono 11\ufffd regalado desprovisto deposito, revisa todo el tiempo los Palabras desplazandolo hacia el pelo Modos del camara. Nuestro delicadeza del casino 12 eurillos gratuito desprovisto deposito Portugal esta referente a que te deja retar desprovisto desembolsar siquiera un centimo. Los novios operadores que tienen esa publicidad deben relatar que usan permiso de su DGOJ, lo cual garantiza seguridad y esparcimiento serio. En cierta ocasion comprobada su temperamento, el casino te acredita algun liquidacion promocional de diez\ufffd cual es posible usar sobre sus propias juegos que hay disponibles.<\/p>\n","protected":false},"excerpt":{"rendered":"

Los tragaperras normalmente narrar dentro del 100% al siguiente naturaleza sobre envite de el bono, entretanto que otros juegos podrian realizarlo separado parcialmente en el caso de que nos lo olvidemos nunca contabilizar no. Con mayoridad sobre promociones, las giros unico podran enviarse referente a una tragaperras especi\ufffdfica en el\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-74206","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74206","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=74206"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74206\/revisions"}],"predecessor-version":[{"id":74207,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74206\/revisions\/74207"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=74206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=74206"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=74206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}