/* 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":14142,"date":"2026-05-08T12:12:13","date_gmt":"2026-05-08T12:12:13","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=14142"},"modified":"2026-05-08T12:12:14","modified_gmt":"2026-05-08T12:12:14","slug":"best-casino-bonus-and-you-can-welcome-also-offers-to-have-uk-players-april-2026","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/best-casino-bonus-and-you-can-welcome-also-offers-to-have-uk-players-april-2026\/","title":{"rendered":"Best casino bonus and you can welcome also offers to have Uk players April 2026"},"content":{"rendered":"

The https:\/\/tonybet-app.nl\/<\/a> biggest online progressive jackpot winnings has mainly are from the new WowPot and you can Mega Moolah series of slot game. As the jackpot is won, it resets so you can a good seeds worth and you can starts expanding again. They generally feature an easy settings and are played around the about three or five reels, that have easy image and you can sentimental sound effects.<\/p>\n

While most promotions give perks such as online casino bonuses and you can free spins, freebies unlock the door to some serious VIP treatment. For those who\u2019re also seriously interested in to play type of game, it would be a shame to determine too late you to your bonus doesn\u2019t protection him or her, so be sure to read the fine print before you sign up. There is no hard and fast code for how online casinos lay winnings caps to the type of bonuses, so be sure to check out the fine print prior to settling on your bonus of choice. For those who\u2019re also unable to settle on a casino give, or if you\u2019re also wondering which one is best for you, your feel, and your popular game, look lower than.<\/p>\n

To make sure you have made the most out of a plus, find also offers that have low wagering criteria \u2013 ideally 35x or lower than. It\u2019s important to know what you\u2019re also joining, the new criteria to have fulfilling the advantage and you can whether or not there are one restrictions to the winnings. Casino bonuses is bonuses available with real money casinos to attract the new players and maintain existing players happy. Enter the password WIN100 to love an extra one hundred bonus spins to the Winomania\u2019s best game \u2013 Cleopatra, Gold rush, Crazy Eagle and you can Scratch Queen. On the score-wade, you could take a good welcome bonus, and that just requires a good \u00a3ten minimum deposit, so it is a great choice for these on a budget. The new players can enjoy up to \u00a3three hundred as well as 60 free spins on their first deposit.<\/p>\n

You can also play with most other game in this Ladbrokes\u2019 mammoth gambling catalogue, even if table game don\u2019t count. Its welcome bonus is a bit shorter voluminous than just very at the \u00a330, however, you to\u2019s a good three hundred% welcome bonus you to\u2019s so easy so you can redeem, you\u2019re also going to attract more of it at the end of wagering than just much larger bonuses! The new Every day Picks game will give you the opportunity to win free spins and you can bonus bucks. Betfair is a bit white to the online casino bonus Uk sales next, even if next free spins will be won to the every day free-to-play pinball game.<\/p>\n

Probably one of the most widely available online casino sign up bonuses, such promotions fits a percentage of your deposit up to a good certain amount. This allows me to do a regular research lay that we can then use to accurately compare sites. So that our reviews is relevant to the average player, i works out of a list of has i look at on each site. One of our most important work is score and you can reviewing potential the new casino sites for our subscribers. Based on its breakdown, it\u2019s easy to think you should always allege an online casino welcome bonus.<\/p>\n

This is where your bankroll is given a top-up at the certain times, or when before online casino bonuses have been used up. However, perhaps the best roulette sites (live or RNG) may have harder wagering laws to have online casino bonuses than the its slot promotions. Just remember to check the new wagering criteria and read the small print before deciding to the best online casino bonuses to you.<\/p>\n

But not, the new 50x wagering would be very hard to do, especially if you\u2019re also novice. You will then have to bet the new deposit to the one game of your choice so you can unlock the new spins. Our experts highly recommend BetUK Casino\u2019s welcome spins to all players, beginners or knowledgeable. Later, you will have to buy the 30 free spins option and you can stake the new deposit so you can qualify. At the Betfred Casino, you can buy two hundred free spins to play picked game if the you\u2019re also a novice. That it campaign is an excellent option for ports fans in search out of no wagering spins to have a minimum deposit out of just \u00a3ten.<\/p>\n

But not, all the bonus (just about every bonus, perhaps) comes with a long list of fine print you to limit the way to use the bonus \u2013 and that game you could play, how long you have got to use it if you can withdraw it. A casino bonus is a reward or coupon you to online casino sites give to have doing the new player account. I take the measure of all the related advice we can find when we list our best casino bonus picks. We know how very important security features is after you play with real money. Mode such restrictions not only helps prevent overspending and also guarantees you continue control of your gameplay. Even if you\u2019re also just playing with a no deposit bonus, it\u2019s necessary to introduce your gambling restrictions from the beginning.<\/p>\n

It sports a slippery, progressive web design that have thousands of slot game to play, all the from your favourite developers! While we do generally like to see much more options, the new available options are good. Players can enjoy every day free game and the list of high gambling headings. Bar Casino is currently giving a good welcome campaign and several casino tournaments to have profiles to love. Bar Casino is known to give some best promotions to store users\u2019 gameplay interesting, that’s how it with ease protected a place on this list. That have a wide variety means that players with all type of preferences have to have a nice online casino feel.<\/p>\n

In our look at, the new ten Uk online casino sites listed above portray the very best that the industry has to offer. As the a consumer, you have protections and you can rights which might be monitored by the Gambling Commission, and help so that people visiting registered casino sites is to play to the a level playground. It very well doesn\u2019t make sense to play at the an online casino if it doesn\u2019t has a good casino games and we are happy to say that our list of casino sites provide the best casino games up to. We are already reviewing multiple casino welcome also offers and will be doing a top ten list. Sky Bet Casino and you can Sky Vegas take the best spot on our list of best casino sites. As well as, if the something looks a bit shifty, you won\u2019t see it here, no matter how tempting its online casino bonuses may sound.<\/p>\n

Very Uk casino sites give bonuses and you can free spins to attract the new players. An online casino is a website or mobile app where you can play game such as ports, blackjack and you can roulette for real currency. All the MrQ bonuses come that have PayPal, as well as a private give out of one hundred free spins and no wagering criteria to the winnings. A promise out of no wagering criteria ever to the all the promotions, as well as an advanced welcome bonus giving the new players 80 free spins.<\/p>\n

Be sure to sign up a reputable, fair site for the best online casino bonus. All you need is the online casino bonus password \u201cMAGIC\u201d when depositing for the first time so you can allege it. Per month, the new casino bonus section brings up the new perks on how to allege, focusing on some parts, as well as live broker promotions, cashback, and you can reload bonuses. As a result at the no additional prices to you, we may earn a commission if you make a profitable deposit to the any of the platforms listed below. No, certain casino sign up bonuses give fifty free spins if not one hundred free spins and no wagering.<\/p>\n

Merge that it that have world-basic protection, 24\/7 customer service and you can a strong welcome give, Betvictor is a superb options if you are looking to have a good the new bookmaker. They also have a great choice out of Every day Jackpots and you can Virtuals and that very stand out so you can us and are all the easy to find that have a slippery interface and you can amicable design. Its online casino is particularly popular such as the game such as Eye out of Horus, Trillionaire Megaways, Age of Gods etc.<\/p>\n","protected":false},"excerpt":{"rendered":"

The https:\/\/tonybet-app.nl\/ biggest online progressive jackpot winnings has mainly are from the new WowPot and you can Mega Moolah series of slot game. As the jackpot is won, it resets so you can a good seeds worth and you can starts expanding again. They generally feature an easy settings and\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-14142","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/14142","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=14142"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/14142\/revisions"}],"predecessor-version":[{"id":14143,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/14142\/revisions\/14143"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=14142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=14142"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=14142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}