/* 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":14370,"date":"2026-05-08T16:07:14","date_gmt":"2026-05-08T16:07:14","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=14370"},"modified":"2026-05-08T16:07:15","modified_gmt":"2026-05-08T16:07:15","slug":"para-ayudarte-a-elegir-desglosare-las-excelentes-bonos-sobre-casino-que-existen","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/para-ayudarte-a-elegir-desglosare-las-excelentes-bonos-sobre-casino-que-existen\/","title":{"rendered":"Para ayudarte a elegir, desglosare las excelentes bonos sobre casino que existen"},"content":{"rendered":"

Las bonos falto tanque son algun arquetipo de promociones cual permiten jugar joviales recursos regalado desprovisto necesidad de efectuar algun deposito sobre dinero real durante el registro. Nadie pondri\ufffda en duda desde publicaciones con bonos de casino inclusive recompensas VIP, entender al completo prototipo seri\ufffda estrategico de incrementar las posibilidades sobre conseguir asi\ufffd como gozar de estas mejores promociones de casino para hacen de gustos y partida. Referente a Platincasino encontraras cualquier bono sobre recibo por tanque cual combina recursos (nuestro doscientos% extra de su primer tanque inclusive doscientos\ufffd) asi\ufffd como 11 giros gratis acerca de Big Bass Bonanza. Este tipo de propaganda vale de juguetear en aquellos valores sobre Luckia, incluidas los tragaperras y las excelentes ruletas sobre vivo.<\/p>\n

Las bonos desprovisto deposito estan tipos a instalaciones sobre puesta, limites de retirada y otras esencia cual podran impedir conseguir beneficios reales. En oriente ranking analizamos los superiores bonos carente tanque que hay disponibles sobre Ciertas zonas de espana, comparando promociones asi\ufffd como instalaciones sobre envite. Las bonos sin deposito solian efectuarse varios terminos y situaciones con el fin de cual pudieran acontecer recibidos para la gente que avidamente los buscaban para la totalidad de las plataformas sobre casinos y no ha transpirado casas de apuestas www. Ahora, ademi?s hay que aseverar que, por lo general, los campos de arrinconar las ganancias solian ser excesivamente altos, es por ello que el cliente debia registrarse, inclusive elaborar un deposito minimo y no ha transpirado empezar en retar con es invierno dinero con el fin de conseguir obtener el rendimiento generado gracias bono carente tanque. Nos enfocaremos en las bonos regalado falto tanque casinos Espana, acerca de de que forma pagarlos, en vayamos por partes podran originar consigo, sobre si continuan existiendo, sobre los bonos de bienvenida y no ha transpirado referente a por los primero es antes las deben en compania de demasiada uniformidad. En caso de que las encuentras, contacta con la plataforma de sacar la informacion imprescindible.<\/p>\n

Descubre las excelentes casinos con bonos de admision regalado desprovisto tanque referente a la plana almanaque de promociones de los superiores casinos online. Activar cualquier bono falto deposito sobre cualquier casino en internet es una gran modo de apostar falto enredar tu dinero en cualquiera sobre las mas grandes casinos sobre Espana. En otros asuntos, igualmente puede ser un bono sobre tiradas de balde falto deposito u otra clase de promociones.<\/p>\n

Podria ser la tragamonedas cual cuenta con cinco carretes y ambos filas para diez lineas sobre pago. Oriente titulo resultan una tragamonedas con manga larga 5 carretes desplazandolo hacia el pelo cinco Cazeus<\/a> filas de 15 lineas sobre remuneracion. Levante titulo cuenta con una eleccion de tragamonedas sobre cinco carretas y la misma na? sobre filas para una treintena lineas sobre remuneracion que usan comparten ellas mismas utilidades especificas. Enseguida podras ver un planning de las excelentes tragaperras online de Espana cual cuentan con giros de balde o en la barra simbolos que multiplican las ganancias, sabemos que nunca son como las tragaperras desprovisto deposito, no obstante son preferiblemente que nada, sigue formandote con que debido a te explicamos como funcionan.<\/p>\n

Nunca, las bonos falto tanque normalmente permanecer limitados a slots en el caso de que nos lo olvidemos juegos de banco automaticos<\/h2>\n

Por eso, en caso de que deseas estar al tanto con los codigos de bono sin tanque de mas esgrimidas, sosten de visitar nuestro lugar regularmente. Los codigos sobre bono carente tanque mencionados antes separado se encuentran a tu disposicion temporalmente sobre los casinos. La propuesta de mas aristocrata cual hemos visto es nuestro bono sin tanque sobre $500. Todavia existira instalaciones de apuesta altos, pero con manga larga la cantidad en su traspaso, nunca tiene que acontecer bastante dificil cumplirlos.<\/p>\n

Suscribete an el periodico para recibir referencia sobre bonos sin deposito, torneos gratuitos, novedosas tragamonedas asi\ufffd como bastante. Casino.guru seri\ufffda cualquier lugar sobre documentacion independientemente sobre casinos en internet y no ha transpirado juegos sobre casino en internet. Acerca de las casinos en internet legales acerca de De cualquier parte del mundo, una demostracion sobre temperamento seri\ufffda necesaria suin autorizar todo retirada, incluso si los ganancias proceden sobre un bono sobre casino falto deposito.<\/p>\n

Puedes aspirar para los plataformas sobra correcta cual acepten jugadores de dicho localizacion asi\ufffd como le ofrezcan posibilidades bancarias convenientes. Si tienes consentimiento legal de emplazar, registra un perfil sobre la tarima asi\ufffd como reclama nuestro bonus falto deposito casino en internet. Mientras nuestro tronco de el casino online en compania de bono falto deposito acerca de si tiempo no seri\ufffda valedero, sobre la mayoridad para los incidentes para regalitos sin deposito, las ganancias cual adquisiciones dentro del apostar este regalo ni resultan canjeables. Una vez que aceptas una propaganda, todo promocion, se podri\ufffdan mover aplican varios instalaciones sobre puesta.<\/p>\n

Si esti?s a punto de alternativas adicionales, las casas de apuestas de europa ademas siguen promociones atractivos<\/h2>\n

Los bonos sin tanque nunca os realizaran millonario, pero permiten gozar para juegos, conocer nuestro casino y no ha transpirado, que usan algo de fortuna, conseguir determinada dinero falto emplear. Nuestro exigencia sobre envite (wagering) explica cuantas ocasiones debes competir el valor de el bono en conseguir jubilar ganancias. Los casinos poseen algun numero acotado sobre tiradas gratis sobre la tragamonedas resume. Las plataformas listadas fueron revisadas para el equipo.<\/p>\n

Sobre esta pequena historia, os explicamos las diferentes tipos de bonos de casino mas comunes, acerca de como hacen el trabajo bien y cuando conviene beneficiarse todos. Pero, ?realmente conoces en que consiste el conveniente bono de casino en secreto? Si en alguna ocasion habias entrado a cualquier casino online, con total seguridad os han espectro cualquier placa brillante ofreciendo un bono llamativo. Prioriza operadores en compania de atribucion espanola, requisitos sobre puesta razonables (x30 o bien menos) y no ha transpirado plazos de liberacion alcanzables. Las bonos desprovisto tanque resultan su mejor manera sobre sufrir un casino desprovisto compromiso, pero no todo el mundo se fabrican con las mismas condiciones.<\/p>\n","protected":false},"excerpt":{"rendered":"

Las bonos falto tanque son algun arquetipo de promociones cual permiten jugar joviales recursos regalado desprovisto necesidad de efectuar algun deposito sobre dinero real durante el registro. Nadie pondri\ufffda en duda desde publicaciones con bonos de casino inclusive recompensas VIP, entender al completo prototipo seri\ufffda estrategico de incrementar las posibilidades\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-14370","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/14370","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=14370"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/14370\/revisions"}],"predecessor-version":[{"id":14371,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/14370\/revisions\/14371"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=14370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=14370"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=14370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}