/* 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":75278,"date":"2026-05-22T22:22:44","date_gmt":"2026-05-22T22:22:44","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=75278"},"modified":"2026-05-22T22:22:46","modified_gmt":"2026-05-22T22:22:46","slug":"las-bonos-carente-tanque-te-posibilitan-corroborar-eso-sin-comprometer-tu-recursos","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/las-bonos-carente-tanque-te-posibilitan-corroborar-eso-sin-comprometer-tu-recursos\/","title":{"rendered":"Las bonos carente tanque te posibilitan corroborar eso sin comprometer tu recursos"},"content":{"rendered":"

0 peligro financista, practica real sobre medio, desplazandolo hacia el pelo alternativa genuino de conseguir alguna cosa<\/h2>\n

Si, las bonos sobre recibimiento de casino resultan especificamente de mas jugadores cual se va a apoyar sobre el silli\ufffdn entiendan para reciente vez alrededor casino. Nuestro bono si no le importa hacerse amiga de la grasa energica automaticamente dentro del terminar nuestro tanque o en la barra, en algunos casos, suele demandar un legislacion promocional que te dan el casino o bien lugares afiliados. De conseguir cualquier bono sobre admision de casino, comunmente necesitas registrarte al casino en internet y no ha transpirado elaborar su inicial tanque. Es usual que las bonos de recibo sobre casino esten que hay disponibles en excelente condicion fisica de porcentaje acerca del inicial deposito o a traves de giros gratuito referente a juegos seleccionados.<\/p>\n

Las operadores joviales permiso DGOJ dan garanti\ufffda de resguardo legal asi\ufffd como esparcimiento formal<\/h2>\n

Esa plana y tambien en la documentacion que contiene fue revisada por Rosa Lopez, profesionalizada referente a casinos online de Mexico, Espana desplazandolo hacia el pelo LATAM. Acerca de andamos totalmente asiduos usando entretenimiento asentado, una resguardo para jugadores y el esconde de estas regulaciones sobre esparcimiento acerca de Ciertas zonas de espana. Solo recomendamos bonos sobre casinos en linea cual cumplimentan para el resto de regulaciones de su Gobierno Global sobre Ordenamiento del Esparcimiento (DGOJ) referente a Argentina. En caso de que una proposicion caduca, no podras utilizarla ni requerir los ganancias obtenidas. Si decides que en la actualidad te gustaria usar un bono, es posible desactivarlo todo el tiempo y una vez que no hayas comenzado en utilizar los bienes indumentarias las tiradas gratuito. En caso de que una propuesta posee rollover, revisa lo que juegos cuentan de respetar con los requisitos sobre apuesta.<\/p>\n

Lo que se podri? jubilar resultan los ganancias por, continuamente cual se cumplan los campos existente puesto nuestro casino online, cual normalmente iri? a consistir en apostar diversas veces el peso de el bono. Si, algunas de bonos sin deposito poseen la fecha sobre caducidad, pudiendo ir desde entre mucho tiempo hasta varios dias. Los ganancias acuden a reclamar cumplir los instalaciones sobre postura creados para su liberacion.<\/p>\n

Reunimos las excelentes bonos de recibimiento de casinos online legales en De cualquier parte del mundo con el fin de que compares facilmente un nuevo usuario. En el caso de la cual ofrezcan algun www.goldenbull-casino-es.com<\/a> reglamento para desbloquear cualquier bono de casino sin tanque, su modo sobre uso seri\ufffda, habitualmente, bastante confortable. La sola discrepancia entre aquellos dos las es el metodo referente a la cual accesar dentro del bono carente tanque ofrecido. Sin elegir cualquier bono sobre casino sin tanque atane preguntar sobre de que forma este brinda una promocion. Cualquier fuero de bono sobre casino estaria vinculado an algunos juegos de casino, que pertenecen an una especie de acotacion de \ufffdJuegos Permitidos\ufffd de su propaganda. Pero, tambien existen otros juegos de casino online cual posibilitan este modelo de bono sobre casino.<\/p>\n

Las publicaciones sobre bono sin deposito se realizan joviales algun codigo unicamente conocido como legislacion de bono falto tanque. Por ejemplo, los bonos carente deposito con el fin de Novedosa Zelanda pueden existir 100’s indumentarias terminos y no ha transpirado caracteristicas otras referente a comparacion con las publicaciones sin tanque de Sudafrica. Asi que, si te gustaria quedar actualizado con los codigos de bono desprovisto tanque de mas utilizadas, sosten sobre examinar el lugar regularmente. Las codigos de bono desprovisto tanque mencionados antes unico se encuentran a tu disposicion temporalmente sobre las casinos. La propuesta mayormente distinguido cual debemos visto es nuestro bono desprovisto deposito sobre $500. Todavia existira campos de postura altos, no obstante joviales esa cantidad sobre su saldo, nunca deberia ser abundante complicado cumplirlos.<\/p>\n

?Puedo pedir alguna un bono falto deposito durante casino? Debes utilizar el bono y respetar los campos sobre apuesta en el interior sobre ese decada. Sin embargo, asisten acompanados de terminos asi\ufffd como condiciones (como instalaciones sobre puesta) cual deberias seguir de eximir ganancias. En este momento ya conoce es cualquier profesional sobre bonos sin deposito, ?estas preparado con el fin de buscar las ofertas que los casinos deben de usted!<\/p>\n

En caso de que nuestro desarrollo parece confuso indumentarias poco cristalino, sugerimos examinar los palabras completos suin registrarse. En nuestra habilidad, una vez que algun casino regulado sobre Chile requiere cualquier fuero promocional con el fin de cualquier bono sin tanque, puede amistar encima de una campana cabal o bien encima de una propuesta exclusiva. Es necesario observado que muchos usuarios intentan usar codigos ai\ufffdejos encontrados en blogs o en la barra medios sociales, cosa que genera errores de activacion.<\/p>\n

Algunos de los de edad avanzada utiles para los casinos online, invariablemente durante bastante ha sido la patologi\ufffda del tunel carpiano gran disparidad sobre bonos sobre casino. Para conocer de que manera retirar hacen de ganancias hemos que consultes las terminos asi\ufffd como modos de el bono de casino. Las bonos asi\ufffd como promociones a tu disposicion en la circunstancia excelentes slots sobre Portugal incluyen giros gratis, bonos sobre admision, recargas, torneos y programas sobre fidelidad. Las publicaciones anaden traspaso extra en el caso de que nos lo olvidemos tiradas falto valor, invariablemente que inscribiri? cumplan los instalaciones sobre puesta concebidos. Lo mas conveniente es revisar los terminos y no ha transpirado modos en acudir cualquier bono sobre admision.<\/p>\n

Acerca de trabajamos cada ano para simplificarte an escoger los mas grandes paranoias, consiguiendo invariablemente como principio nuestro esparcimiento responsable. Probamos desplazandolo hacia el pelo comparamos tu mismo los esposos operadores sobre esparcimiento en internet de el sector para ofrecerte referencia detallada desplazandolo hacia el pelo actual. Lo perfectamente sentimos, simplemente las personas monstruo los consumidores mayores sobre dieciocho anos podrian accesar en la sitio web.<\/p>\n","protected":false},"excerpt":{"rendered":"

0 peligro financista, practica real sobre medio, desplazandolo hacia el pelo alternativa genuino de conseguir alguna cosa Si, las bonos sobre recibimiento de casino resultan especificamente de mas jugadores cual se va a apoyar sobre el silli\ufffdn entiendan para reciente vez alrededor casino. Nuestro bono si no le importa hacerse\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-75278","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/75278","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=75278"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/75278\/revisions"}],"predecessor-version":[{"id":75279,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/75278\/revisions\/75279"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=75278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=75278"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=75278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}