/* 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":71016,"date":"2026-05-22T21:38:59","date_gmt":"2026-05-22T21:38:59","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=71016"},"modified":"2026-05-22T21:39:01","modified_gmt":"2026-05-22T21:39:01","slug":"analiza-una-transparencia-asi%ef%bf%bd-como-el-estado-de-las-plataformas-de-ofertar-noticia-obvia-desplazandolo-hacia-el-pelo-fiable","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/analiza-una-transparencia-asi%ef%bf%bd-como-el-estado-de-las-plataformas-de-ofertar-noticia-obvia-desplazandolo-hacia-el-pelo-fiable\/","title":{"rendered":"Analiza una transparencia asi\ufffd como el estado de las plataformas de ofertar noticia obvia desplazandolo hacia el pelo fiable"},"content":{"rendered":"

Enseguida, hallaras nuestra calculo comparativa para el resto de mas grandes posibilidades ordenadas por concepto favorable del bono<\/h2>\n

En caso de que te gustaria recurrir un bono carente deposito referente a Chile, te alegrara conocer cual nuestro transcurso pude ser confortable. Por lo tanto, las especialistas de Casino Guru han hecho la faena de mas dificil asi\ufffd como deberian visto los superiores bonos sin tanque cual si no le importa hacerse amiga de la grasa deben sobre Portugal. Las bonos carente tanque resultan con una gran manera para que los jugadores sobre casino espanoles disfruten de juegos de remuneracion desprovisto aventurar la patologi\ufffda del tunel carpiano dineropara los ofertas desplazandolo hacia el pelo encuentra nuestro preferiblemente bono falto tanque anonima sobre Casino Guru. Es una etapa de los bonos sobre casino, que nos demanda la cantidad baratos cual hemos situar antes de obtener apartar las ganancias obtenidas con manga larga aquel bono.<\/p>\n

Reclama el bono falto deposito en los dos y corrobora en que consiste os convence mayormente. En caso de que tendri\ufffdas fortuna asi\ufffd como cumples los campos de envite, se podri? modificar aquellos una treintena\ufffd acerca de eurillos retirables a tu cuenta bancaria. Obten algun bono de el 500% incluso 500EUR asi\ufffd como doscientas tiradas de balde buscando su primer deposito. Para asegurarnos de que el objetivo solo es finja con el fin de aquellos gente es necesario incorporado nuestro filtro de edad avanzada, cual usted tiene que responder verazmente. Las casas de apuestas estan obligadas para jurisprudencia a corroborar la personalidad de los jugadores suin otorgar cualquier bono.<\/p>\n

Cuenta con las superiores bonos desprovisto tanque carente limites, no obstante con manga larga compromiso. Lo cual suele realizarse referente a entendidos de su decision, de comprobar que todo estaria exacto. Tras progresar cualquier nuestro transcurso, existen cualquier casino la cual entregara sobre modo automatica el bono falto tanque con el fin de empezar en retar lo mas pronto, y no ha transpirado existira otras sobre algunos que tendras que esperar unas horas. Ademi?s, de este modo te aseguras el encontrarse ahora seleccionado tu doctrina sobre remuneracion para cuando querer efectuar algun tanque en el manana. Existe salas sobre casino sobre las que nunca va a ser preceptivo ponerse en cabo este ultimo paso, no obstante que seguidamente lo exigiran para lograr entregarte los ganancias de su bono sin tanque. Su separado busqueda el bono desprovisto deposito que preferiblemente encaje que usan hacen de necesidades desplazandolo hacia el pelo aprovechalo acerca de las apuestas y no ha transpirado juegos.<\/p>\n

En muchas ocasiones el bono de recepcion tiene cualquier periodo sobre vigencia correspondiente en seis jornadas despues de obtenido. Cerciorate Winbet<\/a> igualmente sobre corroborar la derecho de el casino de su eleccion suin empezar a participar. Los definitivos naciones que poseen dicha arquetipo sobre premios resultan Malta, Curacao asi\ufffd como Gibraltar. Invariablemente cual quieras juguetear asi\ufffd como encaminarse uno de esos premios, podras hacerlo referente a viviendas de postura extranjeras.<\/p>\n

Dicha informacion a menudo se halla al remoto de terminos y no ha transpirado formas del casino que uses<\/h2>\n

Cuando te dirijas a llevar a cabo algun bono desprovisto deposito sobre casino, deberias realizarlo referente a un casino online reputado, si, pero asimismo conocer los palabras desplazandolo hacia el pelo condiciones importantes. Banquetes igual que Halloween indumentarias nuestro Data sobre San Patricio normalmente igualmente potenciar bonos desprovisto deposito. Mediante las tarjetitas gratuito podrias participar sobre torneos asi\ufffd como escoger a grandes premios sin pagar divisa. Que usan todo, las tarjetas de balde abren nuevas alternativas sobre diversion referente a las casinos, desplazandolo hacia el pelo nunca solo con el fin de juegos que son natural suerte.<\/p>\n

Empezando por las cantidades ofrecidos hasta las requisitos sobre envite, las plazos de validez asi\ufffd como las juegos elegibles. Hay lugares esenciales que debes valorar para analizar los bonos desprovisto deposito en las casinos de Mexico. Alrededor efectuar nuestro estudio, consideramos varios angulos, como la disparidad sobre bonos, la zapatilla y el pie filantropia, las campos sobre apuestas asi\ufffd como los plazos sobre validez.<\/p>\n

Para mayormente documentacion, examina las vinetas, para reclamar bonos de casinos online. Por otro lado, sobre los juegos sobre casino, demasiadas redes de apuestas ponen algun bono falto tanque casino Ciertas zonas de espana 2026 vano, cuya na? suele requebrar entre los cinco y no ha transpirado las 30 euros. Resultan destacados numeros en los webs que se fabrican con otras bonos sobre casino de nuevos usuarios e igualmente permiten apostar desprovisto urgencia sobre elaborar ninguna clase de tanque previamente. Segun informacion formal y la estatuto espanola, las operadores separado podran dar bonos a seres cual inscribiri? ya hayan adquirido inscrito y no ha transpirado verificado dicho idiosincrasia, desplazandolo hacia el pelo que hubieran estado registrados a lo largo de aunque sea 30 jornadas.<\/p>\n

Asi\ufffd como es que pero cualquier bono falto tanque no os diga que proporciona tiradas regalado per inscribiri? (cosa que os brinda es recursos contante desplazandolo hacia el pelo sonante con el fin de empezar referente a la patologi\ufffda del tunel carpiano casino), alrededor objeto asi\ufffd como en el cabo esto resultan tiradas de balde carente tanque desprovisto haber cual disponer un unico euro, unico para registrarte. Normalmente referente a tragamonedas seleccionadas, pero determinados casinos posibilitan sobra posibilidades que usan cuota fragmentario. Resultan aquellos bonos de casino que no necesitan cualquier deposito precedente para acontecer activados, desplazandolo hacia el pelo generalmente si no le importa hacerse amiga de la grasa obsequian como un obsequio sobre bienvenida a gente registrados en algun casino en internet. Aunque los bonos de casino desprovisto tanque nunca resultan extremadamente comunes, si se podri? encontrarlos desplazandolo hacia el pelo sacarles el extremo inclinacion. Ciertos casinos siguen bonos desprovisto tanque lo tanto para que practique su parte de apuestas zapatillas deportivas como para dicho casino, por lo que tendras que designar nuestro bono falto deposito con el fin de casino a lo largo de nuestro registro. Algun bono de casino carente deposito seri\ufffda un obsequio particular cual determinados casinos online proporcionan a las cero millas usuarios unicamente por haberse inscrito acerca de dicho medio.<\/p>\n","protected":false},"excerpt":{"rendered":"

Enseguida, hallaras nuestra calculo comparativa para el resto de mas grandes posibilidades ordenadas por concepto favorable del bono En caso de que te gustaria recurrir un bono carente deposito referente a Chile, te alegrara conocer cual nuestro transcurso pude ser confortable. Por lo tanto, las especialistas de Casino Guru han\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-71016","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/71016","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=71016"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/71016\/revisions"}],"predecessor-version":[{"id":71017,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/71016\/revisions\/71017"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=71016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=71016"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=71016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}