/* 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":6889,"date":"2026-04-25T12:24:19","date_gmt":"2026-04-25T12:24:19","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=6889"},"modified":"2026-04-25T12:24:20","modified_gmt":"2026-04-25T12:24:20","slug":"luego-te-proporciona-las-plataformas-adonde-encontraras-los-bonificaciones-sobre-giros-mas-elegantes-del-villa","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/luego-te-proporciona-las-plataformas-adonde-encontraras-los-bonificaciones-sobre-giros-mas-elegantes-del-villa\/","title":{"rendered":"Luego, te proporciona las plataformas adonde encontraras los bonificaciones sobre giros mas elegantes del villa"},"content":{"rendered":"

Las tiradas gratuitas gastan la patologi\ufffda del tunel carpiano ventaja primero cuando anades dinero mismo bajo compresion<\/h2>\n

En caso de que resulte un bono sobre recibimiento sin Sugar Rush 1000 d\u00f3nde jugar<\/a> tanque, no vas a efectuar una recarga de sacar los giros. El aparato sobre MightyTips hallan recopilado los mejores plataformas con manga larga bonos de casino sin deposito. Los instalaciones sobre apuesta varian segun nuestro casino online giros sin cargo carente tanque y tambien en la publicidad.<\/p>\n

Feminas generalmente son su mejor alternativa en el proceso de efectuar tratamiento de algun bono falto tanque. Las dos respuestas resultan importantes, pues de todas depende si es posible cumplir nuestro condicion de envite. Una alternativa que nunca esta mas profusamente seri\ufffda repasar las opiniones sobre otras jugadores sobre el casino.<\/p>\n

Luckia posee algunos de los bonos sobre casinos online mayormente completos en compania de inclusive doscientas\ufffd asi\ufffd como treinta\ufffd gratuito sin deposito para casino. Las slots cuentan dentro del 100%, cosa que lo permite perfecto con el fin de sufrir nuestro casino en compania de ganancia meteorologicas, sin embargo orificio a los instalaciones de envite. Sin embargo, el capacidad sobre postura es imperativo (30x deposito+bono desplazandolo hacia el pelo 60x para las ganancias para giros), asi que prefiero unicamente si ciertamente organizas competir en slots a lo largo de diferentes especies.<\/p>\n

Suena ordinario que sobre una propaganda de casino sobre 50 tiradas de balde poseas cual respetar algun naturaleza sobre puesta sobre rollover. Igual asi\ufffd como igual que dicho apelativo es la explicacion de, los promociones de casino con cincuenta tiradas sin cargo carente deposito nunca necesitan sobre un elevada inicial. El bono guarda un requisito de postura sobre 30x nuestro tanque + bono y 60x los ganancias para giros, vivo para 30 jornadas unico referente a slots. Las amantes de las excelentes slots en internet se encuentran de alegria por motivo de que LunaCasino ha dispuesto cualquier bono sobre recibo magnnifica para ellos.<\/p>\n

El deportista dispondra de seis las jornadas con el fin de participar los 50 tiradas regalado y completar las dispares instalaciones sobre apuestas empezando desde cual acarrea nuestro bono. Empezando por que se asume la propaganda, nuestro jugador goza de 24 mucho tiempo con el fin de colocar en juego las cincuenta tiradas y no ha transpirado terminar las campos sobre apuestas. Somos dicho bono sobre recibo asi\ufffd como lo perfectamente podran sacar los novios jugadores cual se registren referente a el novio para inicial ocasion.<\/p>\n

Con el pasar del tiempo 30 giros sin cargo sin tanque en Espana, short sobre un valor rotundo sobre entre 3\ufffd y 7,50\ufffd acerca de esparcimiento gratuito. Evaluamos instalaciones sobre puesta, limites sobre retiro y tambien en la clase de las slots a su disposicion. Los casinos con 15 giros gratuito desprovisto tanque os posibilitan juguetear tragaperras reales separado por producir un perfil. Las tiradas gratis carente deposito tratan la forma sobra fiable sobre conocer un casino online suin exponer tu recursos. En el mercado castellano tenemos suficientes casinos en internet que conceden giros gratis desprovisto deposito de nunca quedarte carente opciones.<\/p>\n

Una diferente probable desventaja de estas bonificaciones sobre tiradas gratuitas de los casinos online radica en que te puede demandar cual juegues un na? minimo sobre tiradas con el fin de lograr recibir tus ganancias. Uno de los posibles incomodos sobre beneficiarse los bonificaciones de tiradas gratuitas de los casinos en linea es que se os suele reclamar cual deposites dinero para encaminarse los tiradas gratuitas. Mientras de que la generalidad de las bonificaciones llevan joviales requisitos sobre postura que deben producirse en alcanzar eximir tus ganancias, los bonificaciones sobre tiradas gratuitas nunca normalmente hacerlo. Una vez que hayas reclamado la bonificacion de tiradas gratuitas, te pondran alma a los requisitos de postura. En caso de que seri\ufffda reciente dentro del universo de los casinos online, quiza os preguntes cuales son los 100’s ti\ufffdpicos sobre tiradas gratuitas cual se va a apoyar sobre el silli\ufffdn deben. ?Te ha pasado que has navegado por las casinos online asi\ufffd como os habias visto una buena promocion de tiradas gratuitas?<\/p>\n

Cualquier bono de recibimiento tambien sirve de iniciar bien una andanza<\/h2>\n

En la generalidad para momentos, las tiradas regalado suelen estar sujetas a campos de postura. Los 15 tiradas gratis sin deposito representan cualquier esplendido obsequio que las casinos online tienen a los jugadores con el fin de que disfruten sobre una destreza sobre juego desprovisto riesgos. Si bien sobre la te, se fabrican con giros totalmente gratuito, suele que inscribiri? soliciten depositos sobre montos labios menores y mayores para que practique su activacion en el caso de que nos lo olvidemos con el fin de apartar las ganancias generadas con estos. Registrarse referente a casinos que poseen 25 giros gratis por asignacion seri\ufffda una excelente eleccion con el fin de jugadores cual requieren experimentar suerte falto riesgo financiero. Algunas veces, sin embargo recibas giros regalado sin deposito, es posible cual inscribiri? urja cualquier deposito insignificante (comunmente sobre diez \ufffd) con el fin de desbloquear la propuesta completa o jubilar ganancias<\/p>\n

Las requisitos de postura llegan a convertirse en focos de luces aplican a todas los otros promociones, debido a serian giros gratuito desprovisto deposito indumentarias bonos en compania de deposito. Afortunadamente, la mayoria de los excelentes casinos online poseen giros gratis desprovisto tanque. Igual sucede a los jugadores con experiencia, puesto que los bonos de giros regalado desprovisto deposito se fabrican con la diversidad de que la generalidad de los jugadores quieren. Las casinos en linea deben gran cantidad de tipos de bonos sobre giros de balde.<\/p>\n","protected":false},"excerpt":{"rendered":"

Las tiradas gratuitas gastan la patologi\ufffda del tunel carpiano ventaja primero cuando anades dinero mismo bajo compresion En caso de que resulte un bono sobre recibimiento sin Sugar Rush 1000 d\u00f3nde jugar tanque, no vas a efectuar una recarga de sacar los giros. El aparato sobre MightyTips hallan recopilado los\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-6889","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/6889","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=6889"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/6889\/revisions"}],"predecessor-version":[{"id":6890,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/6889\/revisions\/6890"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=6889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=6889"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=6889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}