Veröffentlicht am: 15.04.2024 | Letztes Update am: 15.04.24 | Lesezeit: 5 Minute/n
Das HNP Warenkorb Leeren Button Plugin für WooCommerce und WordPress erzeugt einen Button auf der Warenkorb-Seite, welcher bei Betätigung den kompletten Warenkorb leert und zudem die Session und Cookies resetet.
Download:
<?php /** Plugin Name: HNP Clear WooCommerce Cart & Session Description: Ein Plugin zum Leeren des WooCommerce Warenkorbs und Löschen von Sessions und Cookies. Version: 1.2 Author: HNP C.R. Author URI: https://homepage-nach-preis.de/ License: GPLv3 License URI: https://www.gnu.org/licenses/gpl-3.0.html */ // Exit, wenn der Direktzugriff verhindert ist if (!defined('ABSPATH')) { exit; } function hnp_cwc_enqueue_scripts() { if (is_cart() && get_option('hnp_cwc_enable', 'no') == 'yes' && get_option('hnp_cwc_hook_enable', 'no') == 'yes') { $nonce = wp_create_nonce('hnp_cwc_nonce'); $script = " var ajaxurl = '" . admin_url('admin-ajax.php') . "'; var nonce = '" . $nonce . "'; document.addEventListener('DOMContentLoaded', function() { var clearCartButton = document.getElementById('clear-cart'); clearCartButton.addEventListener('click', function() { // Clear cart var xhr = new XMLHttpRequest(); xhr.open('POST', ajaxurl, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.setRequestHeader('X-WP-Nonce', nonce); xhr.onload = function() { if (this.status >= 200 && this.status < 400) { console.log('Cart Cleared', this.responseText); // Clear sessions and cookies var xhr2 = new XMLHttpRequest(); xhr2.open('POST', ajaxurl, true); xhr2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr2.setRequestHeader('X-WP-Nonce', nonce); xhr2.onload = function() { if (this.status >= 200 && this.status < 400) { console.log('Sessions and Cookies Cleared', this.responseText); // Reload the page after clearing cart and sessions/cookies location.reload(); } else { console.error('Error clearing sessions and cookies', this); } }; xhr2.onerror = function() { console.error('Error clearing sessions and cookies', this); }; xhr2.send('action=hnp_clear_sessions_cookies&nonce=' + nonce); } else { console.error('Error clearing cart', this); } }; xhr.onerror = function() { console.error('Error clearing cart', this); }; xhr.send('action=hnp_clear_cart_session&nonce=' + nonce); }); }); "; wp_add_inline_script('jquery', $script); } } add_action('wp_enqueue_scripts', 'hnp_cwc_enqueue_scripts'); // Register shortcode function hnp_cwc_button_shortcode() { ob_start(); ?> <button id="clear-cart">Warenkorb leeren</button> <?php return ob_get_clean(); } add_shortcode('hnp_cwc_button', 'hnp_cwc_button_shortcode'); // Hook to display the button on cart page function hnp_cwc_display_button() { if (get_option('hnp_cwc_hook_enable', 'no') == 'yes') { echo do_shortcode('[hnp_cwc_button]'); } } add_action('woocommerce_cart_actions', 'hnp_cwc_display_button'); // AJAX handler to clear cart function hnp_cwc_clear_cart() { check_ajax_referer('hnp_cwc_nonce', 'nonce'); try { WC()->cart->empty_cart(); echo 'Cart Cleared'; } catch (Exception $e) { echo 'Error clearing cart: ' . $e->getMessage(); } die(); } add_action('wp_ajax_hnp_clear_cart_session', 'hnp_cwc_clear_cart'); add_action('wp_ajax_nopriv_hnp_clear_cart_session', 'hnp_cwc_clear_cart');
// AJAX handler to clear sessions and cookies function hnp_cwc_clear_sessions_cookies() { check_ajax_referer('hnp_cwc_nonce', 'nonce'); try { // Reset WooCommerce session WC()->session->set_customer_session_cookie(false); WC()->session->set_session_cookie(false); WC()->session->reset_session(); // Unset all cookies foreach ($_COOKIE as $cookie_key => $cookie_value) { unset($_COOKIE[$cookie_key]); setcookie($cookie_key, '', time() - 3600, '/', $_SERVER['HTTP_HOST']); setcookie($cookie_key, '', time() - 3600, '/', '.' . $_SERVER['HTTP_HOST']); } echo 'Sessions and Cookies Cleared'; } catch (Exception $e) { echo 'Error clearing sessions and cookies: ' . $e->getMessage(); } die(); } add_action('wp_ajax_hnp_clear_sessions_cookies', 'hnp_cwc_clear_sessions_cookies'); add_action('wp_ajax_nopriv_hnp_clear_sessions_cookies', 'hnp_cwc_clear_sessions_cookies'); // Admin settings function hnp_cwc_admin_menu() { add_menu_page( 'HNP Clear WooCommerce Cart Settings', 'HNP Clear WooCommerce Cart', 'manage_options', 'hnp_cwc_settings', 'hnp_cwc_settings_page', plugin_dir_url(__FILE__) . 'img/hnp-favi.png' ); } add_action('admin_menu', 'hnp_cwc_admin_menu'); function hnp_cwc_settings_page() { if (!current_user_can('manage_options')) { return; } if ($_SERVER['REQUEST_METHOD'] === 'POST' && check_admin_referer('hnp_cwc_nonce', 'hnp_cwc_nonce_field')) { if (isset($_POST['hnp_cwc_enable'])) { update_option('hnp_cwc_enable', $_POST['hnp_cwc_enable']); } else { update_option('hnp_cwc_enable', 'no'); } if (isset($_POST['hnp_cwc_hook_enable'])) { update_option('hnp_cwc_hook_enable', $_POST['hnp_cwc_hook_enable']); } else { update_option('hnp_cwc_hook_enable', 'no'); } } $enabled = get_option('hnp_cwc_enable', 'no'); $hook_enabled = get_option('hnp_cwc_hook_enable', 'no'); $nonce = wp_create_nonce('hnp_cwc_nonce'); ?> <div class="wrap"> <h2>HNP Clear WooCommerce Cart Settings</h2> <form method="post" action=""> <?php wp_nonce_field('hnp_cwc_nonce', 'hnp_cwc_nonce_field'); ?> <table class="form-table"> <tr> <th scope="row">Allgemeine Funktion aktivieren</th> <td> <input type="checkbox" name="hnp_cwc_enable" value="yes" <?php checked('yes', $enabled); ?> /> </td> </tr> <tr> <th scope="row">Hook für Warenkorb aktivieren</th> <td> <input type="checkbox" name="hnp_cwc_hook_enable" value="yes" <?php checked('yes', $hook_enabled); ?> /> </td> </tr> <tr>Shortcode um den Button manuell einzubinden: [hnp_cwc_button]</tr> </table> <?php submit_button(); ?> </form> </div> <?php }
↩ Zurück zur Blogübersicht