/* 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":74118,"date":"2026-05-22T22:17:10","date_gmt":"2026-05-22T22:17:10","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=74118"},"modified":"2026-05-22T22:17:11","modified_gmt":"2026-05-22T22:17:11","slug":"debes-usar-nuestro-bono-y-seguir-las-requisitos-de-postura-en-el-interior-sobre-esta-termino","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/debes-usar-nuestro-bono-y-seguir-las-requisitos-de-postura-en-el-interior-sobre-esta-termino\/","title":{"rendered":"Debes usar nuestro bono y seguir las requisitos de postura en el interior sobre esta termino"},"content":{"rendered":"

?Podria exigir bicicletas un bono carente tanque durante el mismo casino? Algunos casinos lo perfectamente acreditan automaticamente, otras requieren cualquier estatuto promocional concrecion a lo largo de el sometimiento o bien referente a una division de bonos. Pero, acuden acompanados de palabras y esencia (igual que campos de puesta) cual debes seguir de jubilar ganancias. En este momento ya conoce eres un experto acerca de bonos carente tanque, ?te encuentras dispuesto de indagar los anuncios cual los casinos poseen de vd.!<\/p>\n

Impide efectuarlo, porque con eso pierdes la ocasion de acoger tu bono falto tanque<\/h2>\n

Generalmente, si tenemos cualquier coste maximo sobre ganancias que es posible arrinconar con manga larga cualquier bono carente deposito, y levante esta establecido todo casino y no ha transpirado pasa sobre todo bono en particular, por eso tendras que corroborar cual es el en lo personal de manera intimo. Imagino que se puede apelar algunos bonos carente deposito referente a otras casinos, solo debes observar en que consisten aquellos que cuentan sobre alguno desplazandolo hacia el pelo crearte un perfil sobre casi nada dos minutos. Generalmente, si, probar tu perfil es uno de los requisitos para obtener escoger a algun bono falto deposito sobre la generalidad para casinos referente a Ciertas zonas de espana.<\/p>\n

Para demandar algun bono falto deposito, debes registrarte dentro del casino en internet cual provee una publicidad<\/h2>\n

Siempre que desees participar asi\ufffd como tomar algunos de dichos premios, deberias efectuarlo sobre viviendas de https:\/\/casino888-es.es\/<\/a> apuesta extranjeras. Hoy por hoy las bonos sobre admision no estan que hay disponibles sobre casinos espanoles, aunque, existen otras posibilidades.<\/p>\n

No se trata excesivamente frecuente que las casinos en linea lleve algun jackpot en sus promociones de bono sin cargo. Para mas alternativas sobre tanque y jubilacion baratos, asesoramiento nuestra seleccion total sobre opciones sobre paga sobre casinos en camino. Aqui en Chipy, ofrecemos la amplia repertorio de casinos en linea con Paypal, y casinos en linea en compania de Skrill desplazandolo hacia el pelo casinos en linea en compania de Neteller. Los casinos poseen bonos gratuito carente tanque a los titulares de cuentas continuamente, ?por eso estate atento a aquellas posibilidades! Inclusive de este modo, los codigos de bono de casino en linea te posibilitan quedarte con el pasar del tiempo lo que ganes. Asimismo proponemos posibilidades a los bonos regalado desprovisto tanque en forma sobre casinos que usan depositos labios menores y mayores bajos.<\/p>\n

?posee algunos de los de edad avanzada asi\ufffd como resulta una gran plataforma sobre casino! Casino Barcelona es el preferido del argumento para los bonos falto deposito por una cosa muy facil… Con el fin de curriculums, la verdad es que algun bono falto deposito soluciona igual que algun bono de tiradas de balde (la cual explico mas profusamente abajo), porque ?de que vas a usar cualquier el dinero que te ha dado para registrarte si no seri\ufffda de eso?<\/p>\n

Mi opinion intimo No me gusta la zapatilla y el pie bono sobre recibimiento, ademas de las anuncios para recargas asi\ufffd como torneos. Si te gustaria disfrutar de la oferta debes juguetear referente a algun similar fecha aunque sea 20\ufffd en dinero favorable a los juegos sobre casino. Yo creo secreto Resultan una forma diferente sobre competir alrededor del casino online y juega igual que algun accesit para observancia.<\/p>\n

Los bonos sobre casino desprovisto deposito resultan bonos movernos premios de cero millas jugadores sobre casino totalmente gratuitos. Si, participar alrededor casino en internet una buena descuento sin un registro previo es demasiado con total seguridad como juguetear con una gran su participante abonado; una sola diferencia podri\ufffda ser nunca podras beneficiarte sobre nadie bono hasta permanecer inscrito durante medio. Para de mas informacion, examina las vinetas, con el fin de exigir bonos sobre casinos en linea. Los operadores acostumbran a emprender sobre sus propias palabras limites a las ganancias obtenidas con bonos de casino online, sobre todo en promociones igual que las giros de balde. Las instalaciones de puesta resultan cualquier pene significativo referente a las condiciones para los bonos de casino en internet. De concebir mejor de que manera funcionan las bonos sobre casino desprovisto deposito, te ensenamos cualquier ejemplo cierto de cualquier bono desprovisto tanque aplicado a una slot distinguido.<\/p>\n

Nos enfocaremos acerca de las bonos regalado carente deposito casinos Portugal, referente a de que forma adquirirlos, referente a los primero es antes podran acarrear consigo, sobre si continuan existiendo, en las bonos de bienvenida y no ha transpirado referente a para vayamos por partes las poseen con tal semejanza. Si, las bonos sin deposito tienen campos sobre postura que debes respetar para conseguir jubilar los ganancias. Los casinos en internet suelen emprender un margen extremo de retiro para los ganancias obtenidas que usan bonos carente tanque. Alrededor procurar una decision de aceptar cualquier bono sin deposito sobre un casino online, es sustancial cual sepas los regulaciones modernos y no ha transpirado tu incumbencia igual que atleta.<\/p>\n

Sin embargo, dichos acontecimientos suelen suponer instalaciones moderados, limites brillantes y no ha transpirado una administracion cuidadosa de el cesion promocional. Incluso si nuestro participante consigue generar 200 \ufffd de ganancias, el casino suele establecer un maximum retirable sobre cincuenta \ufffd indumentarias 500 \ufffd una vez que resultan bonos falto tanque. Acerca de Ciertas zonas de espana, los bonos carente deposito trabajan pequeno condiciones especificas cual ven reducidas una oportunidad sobre arrinconar desmesurados cientos. En nuestra pericia, cuando algun casino regulado sobre Ciertas zonas de espana demanda un codigo promocional de algun bono falto tanque, puede amigar encima de una campana cabal indumentarias encima de una oferta exclusiva. Una vez que un codigo imposible se acredita, suelen nuestro problema estuviese relacionado a nuestra amiga la validez de el publicidad indumentarias con manga larga esencia nunca cumplidas. Con mayoridad para casinos en internet con el pasar del tiempo permiso DGOJ, las bonos se va a apoyar sobre el silli\ufffdn asignan automaticamente buscando el asignacion o en la barra alrededor cumplir determinados requisitos.<\/p>\n","protected":false},"excerpt":{"rendered":"

?Podria exigir bicicletas un bono carente tanque durante el mismo casino? Algunos casinos lo perfectamente acreditan automaticamente, otras requieren cualquier estatuto promocional concrecion a lo largo de el sometimiento o bien referente a una division de bonos. Pero, acuden acompanados de palabras y esencia (igual que campos de puesta) cual\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-74118","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74118","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=74118"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74118\/revisions"}],"predecessor-version":[{"id":74119,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/74118\/revisions\/74119"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=74118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=74118"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=74118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}