/* 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":1931,"date":"2026-03-18T12:11:50","date_gmt":"2026-03-18T12:11:50","guid":{"rendered":"http:\/\/klecet.edu.in\/alumni\/?p=1931"},"modified":"2026-04-20T13:24:45","modified_gmt":"2026-04-20T13:24:45","slug":"acheter-kamagra-sur-un-site-fiable-guide-complet-3","status":"publish","type":"post","link":"https:\/\/klecet.edu.in\/alumni\/acheter-kamagra-sur-un-site-fiable-guide-complet-3\/","title":{"rendered":"Acheter Kamagra sur un site fiable : Guide complet pour patients"},"content":{"rendered":"
\"acheter<\/a><\/div>\n

Bienvenue sur cette revue d\u00e9taill\u00e9e concernant l\u2019achat de Kamagra en ligne en toute s\u00e9curit\u00e9. Je suis le Dr. Jean-Luc Martin, m\u00e9decin sp\u00e9cialis\u00e9 en sant\u00e9 sexuelle, et je souhaite partager avec vous des conseils pr\u00e9cieux pour choisir une pharmacie en ligne fiable, abordable, et efficace. Acheter des m\u00e9dicaments comme Kamagra peut sembler complexe, surtout face aux nombreuses offres du march\u00e9. C\u2019est pourquoi il est essentiel de conna\u00eetre les crit\u00e8res pour rep\u00e9rer un site de confiance, comparer les prix, et comprendre les diff\u00e9rentes options disponibles. Dans cet article, vous d\u00e9couvrirez tout ce qu\u2019il faut savoir pour faire un achat \u00e9clair\u00e9, s\u00e9curis\u00e9, et avantageux.<\/p>\n

Introduction : Pourquoi choisir une pharmacie en ligne fiable ?<\/h2>\n

Le march\u00e9 des m\u00e9dicaments en ligne est en pleine expansion, offrant une commodit\u00e9 in\u00e9gal\u00e9e pour les patients recherchant des solutions pour la dysfonction \u00e9rectile ou autres troubles. Kamagra, un m\u00e9dicament utilis\u00e9 principalement pour traiter la dysfonction \u00e9rectile, est souvent recherch\u00e9 via Internet en raison de prix plus abordables et d\u2019une discr\u00e9tion assur\u00e9e. Toutefois, cette facilit\u00e9 d\u2019acc\u00e8s s\u2019accompagne aussi d\u2019un risque de fraude ou de produits contrefaits ou de mauvaise qualit\u00e9. Il est donc crucial de bien choisir sa pharmacie en ligne. Opter pour un site fiable permet de garantir la s\u00e9curit\u00e9, la qualit\u00e9 du m\u00e9dicament, et le respect de votre sant\u00e9. <\/p>\n

Comparer les pharmacies en ligne : crit\u00e8res essentiels<\/h2>\n

Pour \u00e9valuer si une pharmacie en ligne est fiable, plusieurs crit\u00e8res sont \u00e0 prendre en compte :<\/p>\n

    \n
  • Licences et agr\u00e9ments :<\/strong> Assurez-vous que la pharmacie poss\u00e8de toutes les approbations l\u00e9gales.<\/li>\n
  • Transparence :<\/strong> Informations claires sur le site, adresse physique, contact, et modalit\u00e9s de paiement.<\/li>\n
  • Garanties de qualit\u00e9 :<\/strong> Produits d\u00e9livr\u00e9s par des laboratoires r\u00e9put\u00e9s, avec des certificats de conformit\u00e9.<\/li>\n
  • Avis clients :<\/strong> V\u00e9rifier les t\u00e9moignages et les \u00e9valuations d\u2019autres utilisateurs.<\/li>\n
  • Prix :<\/strong> Comparer les co\u00fbts pour rep\u00e9rer des prix raisonnables mais pas trop bas pour \u00e9viter la contrefa\u00e7on.<\/li>\n
  • S\u00e9curit\u00e9 de paiement :<\/strong> Sites qui utilisent des protocoles s\u00e9curis\u00e9s ( HTTPS ).<\/li>\n
  • Disponibilit\u00e9 de conseils :<\/strong> Service client accessible, FAQ, ou assistance par chat.<\/li>\n<\/ul>\n

    Les diff\u00e9rentes pharmacies en ligne : une s\u00e9lection fiable<\/h2>\n

    Voici un tableau comparatif des pharmacies en ligne r\u00e9put\u00e9es pour leur fiabilit\u00e9 dans la vente de Kamagra :<\/p>\n\n\n\n\n\n\n
    Pharmacie<\/th>\nPrix Kamagra (per dose)<\/th>\nFormes et Dosages<\/th>\nLivraison<\/th>\nCommentaires<\/th>\n<\/tr>\n
    PharmaSecure<\/td>\n\u20ac1.20 – \u20ac1.50<\/td>\n50 mg, 100 mg, 20 mg<\/td>\n3-7 jours ouvr\u00e9s<\/td>\nTr\u00e8s fiable, avis positifs, certification Europ\u00e9enne<\/td>\n<\/tr>\n
    OnlinePharma<\/td>\n\u20ac1.10 – \u20ac1.45<\/td>\n50 mg, 100 mg<\/td>\n4-8 jours ouvr\u00e9s<\/td>\nPrix comp\u00e9titifs, service client r\u00e9actif<\/td>\n<\/tr>\n
    SafeMedic<\/td>\n\u20ac1.30 – \u20ac1.60<\/td>\n100 mg, 20 mg<\/td>\n5-10 jours ouvr\u00e9s<\/td>\nGarantie de qualit\u00e9, livraison discr\u00e8te<\/td>\n<\/tr>\n
    MedExpress<\/td>\n\u20ac1.25 – \u20ac1.55<\/td>\n50 mg, 100 mg<\/td>\n3-6 jours ouvr\u00e9s<\/td>\nCatalogue vaste, bon rapport qualit\u00e9-prix<\/td>\n<\/tr>\n<\/table>\n

    Prix moyens et comparatif des dosages<\/h3>\n\n\n\n\n
    Dosage<\/th>\nPrix moyen pour 10 comprim\u00e9s<\/th>\nPrix moyen pour 30 comprim\u00e9s<\/th>\n<\/tr>\n
    50 mg<\/td>\n\u20ac12 – \u20ac15<\/td>\n\u20ac36 – \u20ac45<\/td>\n<\/tr>\n
    100 mg<\/td>\n\u20ac13 – \u20ac16<\/td>\n\u20ac39 – \u20ac48<\/td>\n<\/tr>\n<\/table>\n

    Les diff\u00e9rentes formes et dosages de Kamagra<\/h2>\n

    Kamagra est disponible principalement sous forme de comprim\u00e9s, mais aussi en gel ou m\u00eame en p\u00e2te dans certains sites. Voici un aper\u00e7u des formes et dosages courants :<\/p>\n

    Comprim\u00e9s<\/h3>\n