- WordPress :6.7
- Statut : résolu
- Ce sujet contient 5 réponses, 2 participants et a été mis à jour pour la dernière fois par
Broussaille, le il y a 3 semaines et 2 jours.
-
AuteurMessages
-
18 mai 2025 à 11 h 41 min #2489051
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.
19 mai 2025 à 18 h 10 min #2489074Salut, 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.19 mai 2025 à 18 h 30 min #2489079Salut 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…
19 mai 2025 à 18 h 39 min #2489081Et 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 !
19 mai 2025 à 18 h 57 min #2489083Ah ! 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…
19 mai 2025 à 20 h 04 min #2489086Bon, 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… ?)
- Ma configuration WP actuelle :
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.