/* 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":152534,"date":"2026-06-15T00:10:21","date_gmt":"2026-06-15T00:10:21","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=152534"},"modified":"2026-06-15T00:10:21","modified_gmt":"2026-06-15T00:10:21","slug":"specjalne-darmowe-spiny-dla-graczy-z-polski-w-slottyway-casino","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/specjalne-darmowe-spiny-dla-graczy-z-polski-w-slottyway-casino\/","title":{"rendered":"Specjalne Darmowe Spiny dla Graczy z Polski w Slottyway Casino"},"content":{"rendered":"
\n\"10<\/p>\n

Darmowe spiny to marzenie wielu graczy. Ten rodzaj bonusu zapewnia szans\u0119 na wygran\u0105, nie korzystaj\u0105c przy tym do w\u0142asnego portfela. Slottyway Casino, kt\u00f3re zyskuje w Polsce coraz wi\u0119ksze grono fan\u00f3w, ma specjaln\u0105 propozycj\u0119. Przygotowa\u0142o ekskluzywn\u0105 ofert\u0119 darmowych spin\u00f3w adresowan\u0105 tylko do graczy z naszego kraju. W tym artykule om\u00f3wimy, na czym dok\u0142adnie polega ta promocja. Sprawdzimy jej warunki i opisali\u015bmy, jak w og\u00f3le funkcjonuj\u0105 bonusy w kasynach online. Dowiesz si\u0119, jak otrzyma\u0107 i u\u017cy\u0107 darmowe spiny, na co patrze\u0107 w regulaminie oraz co zyska\u0107, graj\u0105c w\u0142a\u015bnie na tej platformie. To praktyczny przewodnik dla ka\u017cdego, kto chce dobrze rozpocz\u0105\u0107 i uzyska\u0107 z darmowych obrot\u00f3w wszystko, co mo\u017cliwe.<\/p>\n

Czym s\u0105 darmowe spiny i sk\u0105d ich tak znane?<\/h2>\n

Darmowe spiny to zwyczajnie bonus w ramach okre\u015blonej liczby obrot\u00f3w na wybranym automacie. Nie uiszczasz op\u0142aty za nie ze swojego depozytu. Wygrane z tych obrot\u00f3w trafiaj\u0105 zwykle na specjalne saldo bonusowe, kt\u00f3re trzeba p\u00f3\u017aniej zakr\u0119ci\u0107, spe\u0142niaj\u0105c tzw. wym\u00f3g obrotu (WR). Gracze je uwielbiaj\u0105, bo od razu zapewniaj\u0105 dost\u0119p do rozgrywki i odczucie darmowej szansy. To te\u017c znakomity spos\u00f3b, \u017ceby przetestowa\u0107 nowego slotta bez ryzyka. Dla pocz\u0105tkuj\u0105cych to delikatne wprowadzenie do \u015bwiata gier. Dla sta\u0142ych bywalc\u00f3w \u2013 kolejna okazja, by co\u015b wygra\u0107 przy minimalnym koszcie. W przeciwie\u0144stwie do standardowych bonus\u00f3w od depozytu, free spiny cz\u0119sto otrzymujesz zupe\u0142nie za darmo, ju\u017c za samo za\u0142o\u017cenie konta. Dlatego interesuj\u0105 te\u017c osoby graj\u0105ce tylko od czasu do czasu.<\/p>\n

R\u00f3\u017cne rodzaje darmowych spin\u00f3w<\/h3>\n

Warto wiedzie\u0107, \u017ce darmowe spiny to zr\u00f3\u017cnicowana kategoria. Kasyna oferuj\u0105 ich r\u00f3\u017cne wersje, w stosunku do strategii promocyjnej. Kluczowa r\u00f3\u017cnica polega mi\u0119dzy spinami za sam\u0105 rejestracj\u0119 a tymi, kt\u00f3re s\u0105 sk\u0142adow\u0105 pakietu powitalnego lub cyklicznej akcji. Ka\u017cdy typ opiera si\u0119 na innymi zasadami, a to ma bezpo\u015bredni wp\u0142yw na twoje realne szanse na wyp\u0142at\u0119. Gdy pojmiesz te r\u00f3\u017cnice, b\u0119dziesz w stanie wybiera\u0107 oferty, kt\u00f3re faktycznie pasuj\u0105 do twojego stylu gry i twoich cel\u00f3w.<\/p>\n

Spiny bez depozytu vs. spiny z depozytem<\/h4>\n

Darmowe spiny bez depozytu to kwintesencja “darmowej” gry. Dostajesz je za samo utworzenie konta lub potwierdzenie numeru telefonu. Dla kasyna to spos\u00f3b marketingowe, wi\u0119c przewa\u017cnie jest ich mniej, wym\u00f3g obrotu mo\u017ce by\u0107 wy\u017cszy, a na wygran\u0105 na\u0142o\u017cony jest limit. Z kolei darmowe spiny z depozytem s\u0105 uzupe\u0142nieniem do Twojej wp\u0142aty. Na przyk\u0142ad, w pakiecie powitalnym “100% + 100 FS”. Tutaj liczba spin\u00f3w bywa wi\u0119ksza, a warunki wyp\u0142aty cz\u0119sto lepsze, bo ju\u017c wp\u0142aci\u0142e\u015b w\u0142asne pieni\u0105dze. Oferta Slottyway dla polskich graczy mo\u017ce zawiera\u0107 w sobie kt\u00f3ry\u015b z tych wariant\u00f3w lub nawet oba.<\/p>\n

Osobliwo\u015bci oferty Slottyway Casino dla tutejszych graczy<\/h2>\n

Slottyway Casino, wychodz\u0105c naprzeciw polskim graczom, opracowa\u0142o promocje z my\u015bl\u0105 o lokalnych zwyczajach i przepisach. Specjalne darmowe spiny s\u0105 tworzone w\u0142a\u015bnie dla odbiorc\u00f3w z Polski. W praktyce mo\u017ce to oznacza\u0107 z mo\u017cliwo\u015bci\u0105 omini\u0119cia wpisywania kodu promocyjnego, automatyczn\u0105 aktywacj\u0119 po rejestracji lub dodatkowe konkursy w social mediach. Platforma wsp\u00f3\u0142dzia\u0142a z producentami gier popularnymi w Polsce, co zwi\u0119ksza atrakcyjno\u015b\u0107 kompletnego bonusu. Ponadto, obs\u0142uga klienta porozumiewa si\u0119 po polsku, a transakcje jeste\u015b w stanie przeprowadza\u0107 w z\u0142ot\u00f3wkach, bez niepotrzebnych przelicznik\u00f3w walut. Tego rodzaju ca\u0142o\u015bciowe podej\u015bcie sprawia, \u017ce korzystanie z promocji jest dla polskiego u\u017cytkownika proste i przejrzyste.<\/p>\n

Nie zapominaj, \u017ce kasyno mo\u017ce na bie\u017c\u0105co aktualizowa\u0107 parametry oferty, \u0142\u0105cz\u0105c j\u0105 ze \u015bwi\u0119tami, du\u017cymi wydarzeniami sportowymi lub premierami nowych slot\u00f3w. Z tego powodu tak wa\u017cne jest, by zagl\u0105da\u0107 do zak\u0142adki “Promocje” na stronie lub zapisa\u0107 si\u0119 do newslettera. Ekskluzywno\u015b\u0107 dla Polski zauwa\u017cy\u0107 mo\u017cna te\u017c cz\u0119sto w doborze gier, na kt\u00f3re mo\u017cna spo\u017cytkowa\u0107 darmowe spiny. Slottyway mo\u017ce wybiera\u0107 tytu\u0142y wybitnie cenione przez polskich graczy lub te od krajowych studi\u00f3w. W ten spos\u00f3b kasyno troszczy si\u0119, by jego promocja by\u0142a naprawd\u0119 celna.<\/p>\n

Jak uruchomi\u0107 i otrzyma\u0107 darmowe spiny w Slottyway?<\/h2>\n

Odebranie darmowych spin\u00f3w w Slottyway Casino zosta\u0142a stworzona tak, by by\u0142a prosta. Wszystko zaczyna si\u0119 od utworzenia konta. Trzeba poda\u0107 prawdziwe dane, zbie\u017cne z legitymacj\u0105. To niezb\u0119dny krok dla p\u00f3\u017aniejszej weryfikacji i potencjalnych wyp\u0142at. P\u00f3\u017aniej, w odniesieniu do oferty, lub wpisujesz kod promocyjny w odpowiednim polu, albo po prostu realizujesz pierwszej wp\u0142aty, je\u015bli spiny s\u0105 elementem bonusu powitalnego. Spiny bez depozytu cz\u0119sto w\u0142\u0105czaj\u0105 si\u0119 same, gdy zatwierdzisz adres e-mail lub numer telefonu.<\/p>\n