/* 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":1317,"date":"2026-06-02T09:55:20","date_gmt":"2026-06-02T09:55:20","guid":{"rendered":"http:\/\/klecet.edu.in\/alumni\/?p=1317"},"modified":"2026-03-10T09:50:15","modified_gmt":"2026-03-10T09:50:15","slug":"o-seu-guia-completo-para-casinos-online-em-6","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/o-seu-guia-completo-para-casinos-online-em-6\/","title":{"rendered":"O Seu Guia Completo para Casinos Online em Portugal"},"content":{"rendered":"
Content<\/p>\n
A promo\u00e7\u00e3o aplica-se ao primeiro dep\u00f3sito e o nosso c\u00f3digo promocional \u00e9 ABOLAMAX. A sua presen\u00e7a em Portugal \u00e9 marcada por um site completo e uma aplica\u00e7\u00e3o m\u00f3vel intuitiva. Assim, consegue concentrar a sua atividade numa s\u00f3 plataforma.<\/p>\n
Al\u00e9m disso, alguns sites d\u00e3o-te a oportunidade de ganhar dinheiro real ao jogar gratuitamente. A plataforma \u00e9 intuitiva e responsiva, tanto no desktop como no telem\u00f3vel, e os jogos s\u00e3o fornecidos por developers de confian\u00e7a. Os novos jogadores na Betclic podem aproveitar um b\u00f3nus de boas-vindas competitivo, muitas vezes com um b\u00f3nus sobre o primeiro dep\u00f3sito. A Betclic j\u00e1 \u00e9 uma marca de confian\u00e7a em Portugal, e o seu casino online est\u00e1 \u00e0 altura dessa reputa\u00e7\u00e3o. Existem tamb\u00e9m v\u00e1rios b\u00f3nus no PokerStars Casino, tanto para jogadores novos como para jogadores existentes, e por vezes podes encontrar promo\u00e7\u00f5es combinadas se tamb\u00e9m jogares poker.<\/p>\n
NovosCasinos.com.pt \u00e9 um portal de apostas online e de casino online em Portugal, e \u00e9 propriedade da GoodGaming. Testei as plataformas tanto em Android como em iOS e a experi\u00eancia foi boa em todas \u2013 sem lag, sem crashes, com acesso a todos os jogos dispon\u00edveis na vers\u00e3o desktop. A interface \u00e9 limpa e f\u00e1cil de navegar, o que torna o Spininio uma op\u00e7\u00e3o acess\u00edvel para quem n\u00e3o est\u00e1 habituado a casinos online complexos. O cat\u00e1logo de jogos cobre as categorias essenciais \u2013 slots, live casino e jogos de mesa \u2013 sem sobrar muito de extra. Ideal para jogadores que fazem dep\u00f3sitos de valor alto e querem combinar b\u00f3nus monet\u00e1rio com rodadas gr\u00e1tis em quantidade. Ideal para jogadores que fazem dep\u00f3sitos de valor m\u00e9dio a alto e querem um b\u00f3nus com teto generoso, combinado com uma boa oferta de live casino.<\/p>\n
Para levantar dinheiro num casino, tens sempre garantida a transfer\u00eancia banc\u00e1ria, ou outros m\u00e9todos dispon\u00edveis que variam consoante o operador. Se ainda te restam d\u00favidas, consulta aqui as principais quest\u00f5es e respostas relativas a pagamentos com Multibanco em casinos portugueses. Pagar com Multibanco num casino \u00e9 uma escolha adequada para todos os jogadores portugueses. Praticamente todos n\u00f3s usamos esta tecnologia com frequ\u00eancia, aqui agilizada pelos sistemas seguros dos sites de jogo nacionais. Aqui encontras quase 4.000 jogos de in\u00fameras categorias e dezenas de boas editoras de software.<\/p>\n
A maioria dos b\u00f3nus de casino em Portugal visam as slots online, ainda que alguns se estendam ao blackjack ou roleta online. Seguramente o mais distinto dos m\u00e9todos de pagamento presentes em casinos online, o paysafecard \u00e9 um cart\u00e3o pr\u00e9-pago para os utilizadores que procuram m\u00e1xima seguran\u00e7a e anonimato. Outra carteira eletr\u00f3nica que surge em casinos online portugueses \u00e9 a Neteller. O processo de registo \u00e9 frequentemente r\u00e1pido e simples em qualquer um dos casinos online licenciados que recomendamos. \u00c9 por isso que os casinos online que recomendamos em Portugal t\u00eam geralmente parcerias s\u00f3lidas com estes nomes, o que garante uma sess\u00e3o divertida e aleat\u00f3ria sempre que joga.<\/p>\n
Levamos nossas resenhas de casinos muito a s\u00e9rio, fornecendo aos nossos leitores informa\u00e7\u00f5es sobre casinos altamente cred\u00edveis e detalhadas, os famosos white label. Os reguladores verificam o cumprimento de todos os padr\u00f5es de seguran\u00e7a, bem como a imparcialidade e transpar\u00eancia de todos os jogos disponibilizados. Esperamos que este artigo ajude a perceber quais as melhores op\u00e7\u00f5es do mercado e, dentro destas, compreender os pontos fortes e fracos que cada uma oferece. A alternativa \\u00e9 visitar o site da entidade reguladora em Portugal, o Servi\\u00e7o de Regula\\u00e7\\u00e3o e Inspe\\u00e7\\u00e3o de Jogos, e verificar a validade de cada licen\\u00e7a em cada casino. Qualquer casino ilegal se pode recusar a pagar ganhos sem pr\u00e9-aviso a jogadores sediados em Portugal.<\/p>\n
Cada rodada vale at\u00e9 0,05\u20ac e o b\u00f3nus deve ser ativado em at\u00e9 24 horas ap\u00f3s atribui\u00e7\u00e3o. Os b\u00f3nus e spins s\u00e3o atribu\u00eddos at\u00e9 48h ap\u00f3s verifica\u00e7\u00e3o dos requisitos. Esta oferta inclui, ainda, uma aposta gr\u00e1tis para desportos de 1\u20ac.<\/p>\n
A plataforma oferece ainda campanhas di\u00e1rias e jogos variados, garantindo uma experi\u00eancia din\u00e2mica e cheia de ofertas promocionais. Entre os casinos online populares, destacam-se plataformas como a Betclic, Betano, BacanaPlay e Luckia. O sistema de "Entidade e Refer\u00eancia" \u00e9 omnipresente nos melhores casinos legais e permite carregar a conta em qualquer caixa autom\u00e1tica ou via homebanking. Para quem quer testar um novo casino em portugal online sem compromisso, o Versus oferece uma experi\u00eancia direta e sem ru\u00eddo.<\/p>\n
A Betway \u00e9 outra casa de apostas gigante que tamb\u00e9m tem casino online em Portugal. No casino Placard vai encontrar v\u00e1rios tipos de jogos, incluindo slots com jackpot e megaways, como Age of Gods King of Olympus Megaways. A Placard \u00e9 famosa pelas apostas desportivas, mas a marca tem tamb\u00e9m um casino online de alta qualidade. A marca Nossa Aposta tamb\u00e9m tem licen\u00e7a para operar apostas desportivas, mas pediu a suspens\u00e3o da atividade para se centrar na sua oferta de jogos de casino.<\/p>\n