[Résolu] Clear Recent Products Button for ct-widget (Créer un compte)

  • WordPress :6.7
  • Statut : résolu
6 sujets de 1 à 6 (sur un total de 6)
  • Auteur
    Messages
  • #2489051
    Broussaille
    Participant
    Chevalier WordPress
    363 contributions

    Bonjour,

    • Ma configuration WP actuelle :
      – Version de WordPress : 6.8.1
      – Version de PHP / MySQL : 8.2.28 / 10.6.22
      – Thème utilisé : Blocksy Child (slug : blocksy-child)
      – Thème parent : Blocksy (slug : blocksy)
      – Thème URI : https://creativethemes.com/blocksy/
      – Extensions activées : 3D FlipBook : Dflip Lite (2.3.65), Advanced Editor Tools (5.9.2), Blocksy Companion (2.0.98), Boxtal Connect (1.3.4), Dracula Dark Mode (1.2.7), everwpvisitcounter (1.2.3), FooBox Image Lightbox (2.7.34), Forminator (1.43.1), Imagify (2.2.5), Infosite (6), Kadence WooCommerce Email Designer (1.5.16), Media Library Organizer (1.6.5), Post Type Switcher (3.3.1), Redis Object Cache (2.5.4), SecuPress Pro — WordPress Security (2.3.11), SEOKEY PRO (2.0.2), WooCommerce (9.8.5), WooCommerce.com Update Manager (1.0.3), WooCommerce PayPal Payments (3.0.5), WooCommerce Stripe Gateway (9.5.1), WP Mail SMTP (4.4.0), WP Rocket (3.18.3)
      – Adresse du site : https://broussaillestore.fr
      – Hébergeur : o2switch

    Problème(s) rencontré(s) :

    J’ai « installé » un mu-plugin pour ajouter un bouton « Vider la liste » sur le widget « Derniers articles consultés ». Le mu-plugin fonctionnait bien depuis plusieurs mois, mais aujourd’hui je constate que ce n’es plus le cas. Auriez-vous une explication. Le code est le suivant :

    <?php
    /**
    * Plugin Name: Clear Recent Products Button for ct-widget
    * Description: Ajoute un bouton pour vider la liste des produits récemment consultés dans les widgets "ct-widget woocommerce widget_recently_viewed_products".
    * Version: 1.2
    * Author: Votre Nom
    */

    // Ajouter le bouton en bas des widgets ayant la classe "ct-widget woocommerce widget_recently_viewed_products"
    add_action('wp_footer', function () {
    ?>
    <script>
    document.addEventListener("DOMContentLoaded", function() {
    const widgets = document.querySelectorAll(".ct-widget.woocommerce.widget_recently_viewed_products");
    widgets.forEach(widget => {
    if (!widget.querySelector(".clear-recent-products-btn")) {
    const button = document.createElement("button");
    button.id = "clear-recent-products-btn";
    button.textContent = "Vider la liste";
    button.className = "clear-recent-products-btn";
    button.style = "cursor: pointer; display: block; margin: 10px auto;";
    widget.appendChild(button);

    button.addEventListener("click", function() {
    fetch("<?php echo admin_url('admin-ajax.php'); ?>", {
    method: "POST",
    headers: {
    "Content-Type": "application/x-www-form-urlencoded",
    },
    body: new URLSearchParams({
    action: "clear_recent_products",
    nonce: "<?php echo wp_create_nonce('clear_recent_products_nonce'); ?>"
    })
    })
    .then(response => response.json())
    .then(data => {
    if (data.success) {
    // Mettre à jour le DOM (masquer ou supprimer la liste des produits récents)
    const recentProductsWidget = widget.querySelector('.recent-products-list'); // Assurez-vous que la classe correspond
    if (recentProductsWidget) {
    recentProductsWidget.innerHTML = '<p>Liste vidée.</p>';
    } else {
    widget.innerHTML = '<p>Liste vidée.</p>';
    }
    }
    })
    .catch(error => {
    console.error("Erreur lors de la suppression des produits récents", error);
    });
    });
    }
    });
    });
    </script>
    <?php
    });

    // Ajouter un handler pour le vidage des produits récents
    add_action('wp_ajax_clear_recent_products', 'handle_clear_recent_products');
    add_action('wp_ajax_nopriv_clear_recent_products', 'handle_clear_recent_products');

    /**
    * Handler pour nettoyer la liste des produits récents.
    */
    function handle_clear_recent_products() {
    check_ajax_referer('clear_recent_products_nonce', 'nonce');

    if (isset($_COOKIE['woocommerce_recently_viewed'])) {
    unset($_COOKIE['woocommerce_recently_viewed']);
    setcookie('woocommerce_recently_viewed', '', time() - HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);

    // Répondre avec un succès
    wp_send_json_success('Les produits récents ont été supprimés.');
    } else {
    wp_send_json_error('Aucun produit récent trouvé.');
    }
    }
    ?>

    La classe du widget est bonne : « ct-widget woocommerce widget_recently_viewed_products », mais son ID est « woocommerce_recently_viewed_products-3 ». Pour ce que j’y comprend la fonction devrait fonctionner (sic !) sur la classe, mais …

    Ou est-ce que le problème est ailleurs ?

    Merci.

     

    #2489074
    momofr@free.fr
    Modérateur
    Maître WordPress
    7766 contributions

    Salut, je viens de tester ton snippet PHP avec le thème Blocksy gratuit et c’est fonctionnel chez moi.

    Fichiers joints :
    Vous devez être connecté pour voir les fichiers joints.
    #2489079
    Broussaille
    Participant
    Chevalier WordPress
    363 contributions

    Salut momo. Merci de ta réponse. C’est donc certainement un problème avec mon thème enfant (j’ai déjà eu le cas), ou peut-être un problème de css.

    Je vais y regarder de plus près…

    #2489081
    Broussaille
    Participant
    Chevalier WordPress
    363 contributions

    Et sinon, tu l’as testé sur quel navigateur ? Parce que je sais que Firefox bug parfois, mais je viens de tester sur Safari et là c’est « pire » le widget n’apparait pas du tout !

    #2489083
    Broussaille
    Participant
    Chevalier WordPress
    363 contributions

    Ah ! J’ai trouvé c’est SecuPress qui bloque ! Le comble c’est qu’il bloque aussi es mu-plugin. Je vais voir avec le support… Il doit y avoir un réglage à faire…

    #2489086
    Broussaille
    Participant
    Chevalier WordPress
    363 contributions

    Bon, comme souvent c’est une bête erreur. Dans le module « Extensions et thèmes », lorsque l’on active le bloc « Interdire toute action sur les extensions…. », il faut bien penser à cocher aussi « Je confirme que j’ai X extensions…. » sur ce site.

    Du coup, je me demande s’il ne faudrait pas changer le titre du topic, pour qu’il soit plus parlant et que la « solution » soit accessible à tous… (genre : Problème de désactivation des mu-plugin… ?)

6 sujets de 1 à 6 (sur un total de 6)
  • Vous devez être connecté pour répondre à ce sujet.