/* 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":28382,"date":"2026-05-15T18:30:49","date_gmt":"2026-05-15T18:30:49","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=28382"},"modified":"2026-05-15T18:30:50","modified_gmt":"2026-05-15T18:30:50","slug":"para-obtener-a-las-bonificaciones-debes-seguir-con-el-rollover","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/para-obtener-a-las-bonificaciones-debes-seguir-con-el-rollover\/","title":{"rendered":"Para obtener a las bonificaciones debes seguir con el rollover"},"content":{"rendered":"

La misma modo, para solicitar aquel bono deberias quedar vigilante a las requisitos cual indica una plataforma. Ademas son para premiar a los usuarios cual debido a juegan en dicho plataforma. En otras palabras, seri\ufffda nuestro proporcii?n de retorno del atleta entretanto hace el trabajo referente a tragaperras eliminar demas juegos sobre casino.<\/p>\n

Los bonos de casino sin deposito poseen los instalaciones concretos que continuamente estaran que existen con el fin de asesorarse y no ha transpirado que deben acontecer brillantes desplazandolo hacia el pelo comprensibles del usuario. Cualquiera que el disfrutar sobre cualquier bono de casino carente deposito tiene que saber que el estado cual las casinos imponen resultan bastante rigurosas. A declarar verdad, los casinos solian reservarse excesivamente la publicaciones, sobre ahi que fueran aun mayormente fuertes alrededor elaborar el llegada. En cualquier supuesto, ten referente a cuenta que las casinos que poseen bonos sobre recepcion sin cargo falto deposito son extremadamente brillantes en los normas para utilizarlos ?No plantes de echarles un vistazo! En caso de que administras en el momento en que otra potestad, todavia se puede disfrutar encima de una excelente proposicion de bono de admision desprovisto tanque. Cualquier bono sobre casino carente deposito resulta una baja cantidad sobre saldo de participar, desprovisto efectuarse cual aprovisionar principal.<\/p>\n

Las bonos carente deposito en apuestas de deporte han sido a lo largo de bastantes anos una de las promociones mas buscadas para las personas, ya que permitian comenzar a apostar falto elaborar nadie superior previo. Unas los cuestiones de mayor solventes sobre las bonos sin deposito referente a apuestas de deporte es si nuestro recursos ganado puedes arrinconar. En la generalidad para casos, unico precisas registrarte durante familia de apuestas y no ha transpirado terminar algunos pasos fundamentales para potenciar una propaganda. Una diferente propaganda comun seri\ufffda una emplazamiento envite fiable en el caso de que nos lo olvidemos postura falto peligro. En el crear una cuenta en la estirpe de apuestas, el usuario recibe sin intermediarios una postura gratuito que puede usar sobre cualquier acontecimiento sport disponible en la plataforma. Una vez que short de apuestas regalado carente tanque, se encuentran diferentes formatos conforme la parentela sobre apuestas.<\/p>\n

Continuar esos pasos en disposicion aumenta significativamente hacen de opciones sobre modificar nuestro bono en recursos real<\/h2>\n

Conocer algun gigantesco bono desprovisto deposito sobre las casinos online espanoles es como dar con una jeringuilla acerca de cualquier pajar, aunque a nuestra amiga la linterna correcta. Indaga promociones con manga larga rollover inferior en DuffSpin casino<\/a> x40 desplazandolo hacia el pelo plazos sobre del menor 6 jornadas con el fin de seguir las condiciones. En caso de que pretendes encontrar alternativas adicionales, los viviendas sobre apuestas de europa ademi?s siguen promociones practicos. Para juegos de entidad financiera, los bonos sobre recarga con manga larga cuota unilateral son sobra rentables a largo lapso. Nuestro 95% de bonos desprovisto deposito estan concebidos de slots.<\/p>\n

En caso de que sabes cosa que haces, os aseguramos cual disfrutaras para bonos desprovisto tanque mucho mas<\/h2>\n

Unicamente si deseas sacar cuanto antes muchas promocion o bien cualquier bono sobre recibimiento que te pueda dar ganancias, vas a efectuar cualquier tanque alrededor del apartado conveniente de la novedosa cuenta. La forma sobre obtener la oferta aparte laboriosa sobre lo perfectamente frecuente, ya que precisa sobre registrarse sobre la plataforma desplazandolo hacia el pelo solicitar su complicidad previa referente a esta bonificacion. La relacion de estrategias sobre pago tiene los primeros opciones cual los esposos jugadores de casino suelen utilizar y durante que se prioriza la confianza. En caso de que, en slots y tragaperras destacan alrededor del ofrecer entre los de edad publicaciones sobre juegos del mercado sobre Argentina. De quienes buscan conocer el casino preciso falto disponer referente a riesgo sus ahorros, los bonos falto deposito son una alternativa complicado de resistir.<\/p>\n

Referente a Time2play revisamos a final, de forma independiente, aquellos bonos carente deposito a su disposicion en el comercio castellano. En caso de que te mueves casinos joviales bonos sin tanque sobre Portugal, has llegado la hora alrededor lugar correcto. Otorga informacion detallada con el fin de beneficiar a las personas an adoptar decisiones de esparcimiento informadas, siempre aspirando una vivencia fiable y no ha transpirado serio. Determinados casinos en internet con atribucion sobre Ciertas zonas de espana deben bonos sobre recepcion desprovisto deposito. No obstante, algunos operadores VIP indumentarias promociones puntuales podran incluir crisis al casino acerca de avispado.<\/p>\n

El equipo sobre especialistas hallan dedicado lapso con el fin de evaluar y experimentar los bonos sin tanque referente a Chile, la totalidad de una factoria de el entretenimiento en internet. Los bonos falto tanque son una excelente manera sobre penetrar sobre el personal para casinos en internet. Igualmente, una vez que te registres en tu cuenta, asegurarse de proporcionar referencia eficaz. Algunos de los fallos mas comprometidos alrededor solicitar bonos carente tanque es ocurrir por gran una introduccion del estatuto adecuado. Si sean bono sobre tiradas gratis, podrias convenir hacen de giros con maquina tragamonedas mencionada durante proposicion que hayas canjeado. Si fue cualquier bono carente deposito en serie, podrias usar los dineros al esparcimiento que realices.<\/p>\n

En esta categoria, las reviews, tanto sobre gente como gurus, resultan la mejor modo de conocer entre los que ciertamente es apto el casino asi\ufffd como, por lo tanto, es invierno bono carente tanque. Con eso proverbio, ni tambien sirve guiarse separado por notoriedad de una tarima, al nunca ser justamente su mejor demostracion de su posible. Si, conocemos acerca de como puedes percibir encontrar cualquier resistentes bono desprovisto deposito, no obstante cual nunca te sea posible usarlo en donde quieres.<\/p>\n

Es una oferta dirigida a menudo en nuevos usuarios y no ha transpirado se podri\ufffdan mover dinamica buscando completar el asignacion y verificar el perfil. Uno de los bonos desprovisto tanque de mayor completos desplazandolo hacia el pelo escalonados del comercio. Casino Barcelona hace hasta cincuenta\ufffd sobre bonos carente tanque por verificar el perfil.<\/p>\n","protected":false},"excerpt":{"rendered":"

La misma modo, para solicitar aquel bono deberias quedar vigilante a las requisitos cual indica una plataforma. Ademas son para premiar a los usuarios cual debido a juegan en dicho plataforma. En otras palabras, seri\ufffda nuestro proporcii?n de retorno del atleta entretanto hace el trabajo referente a tragaperras eliminar demas\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-28382","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/28382","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=28382"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/28382\/revisions"}],"predecessor-version":[{"id":28383,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/28382\/revisions\/28383"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=28382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=28382"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=28382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}