┌────────────────────────────────┐ │ ░░░ ░░▓ ░▓▓ ███ ▓▓░ ▓░░ │ │ ~ M O O N ~ │ └────────────────────────────────┘
prd-web-01.centraldc.gr
LOCATION:
/var/www/html/adconect/wp-content/plugins/burger-menu-shortcode
☗ ROOT
↻ REFRESH
✎ EDIT FILE
EDITING: burger-menu-shortcode.php
<?php /** * Plugin Name: Custom Burger Widget Drawer (Pro Edition) * Description: Εμφανίζει ένα burger menu μέσω [burger_menu], ανοίγει widget area και διαχειρίζεται το mobile_ready class στο body. * Version: 1.2 */ if ( ! defined( 'ABSPATH' ) ) exit; class My_Burger_Widget_Plugin { private static $media_point = '768px'; public function __construct() { add_action( 'widgets_init', array( $this, 'register_burger_widget_area' ) ); add_shortcode( 'burger_menu', array( $this, 'burger_shortcode' ) ); add_action( 'wp_footer', array( $this, 'render_drawer_and_assets' ) ); } public function register_burger_widget_area() { register_sidebar( array( 'name' => 'Burger Menu Area', 'id' => 'burger-widget-area', 'before_widget' => '<div class="burger-widget-item">', 'after_widget' => '</div>', 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); } public function burger_shortcode( $atts ) { $a = shortcode_atts( array( 'media_point' => '768px' ), $atts ); self::$media_point = $a['media_point']; ob_start(); ?> <button id="burger-toggle" class="burger-button" aria-label="Menu" aria-expanded="false"> <span class="line"></span> <span class="line"></span> <span class="line"></span> </button> <?php return ob_get_clean(); } public function render_drawer_and_assets() { ?> <div id="burger-drawer" class="burger-drawer"> <div class="drawer-content"> <?php if ( is_active_sidebar( 'burger-widget-area' ) ) : ?> <?php dynamic_sidebar( 'burger-widget-area' ); ?> <?php endif; ?> </div> </div> <div class="drawer-overlay" id="drawer-overlay"></div> <style> /* 1. Burger Visibility: Εμφανίζεται ΜΟΝΟ όταν το body έχει την κλάση .mobile_ready */ .burger-button { display: none; } body.mobile_ready .burger-button { display: flex; flex-direction: column; justify-content: space-around; width: 30px; height: 25px; background: none; border: none; cursor: pointer; padding: 0; z-index: 10001; position: relative; } /* 2. Drawer & Overlay Στυλ */ .burger-drawer { position: fixed; top: 0; right: -7000px; /* width: 100%; max-width: 100%; */ height: 100%; background: #fff; z-index: 10000; transition: right 0.4s cubic-bezier(0.77,0.2,0.05,1.0); padding: 80px 20px 20px; box-shadow: -5px 0 15px rgba(0,0,0,0.1); overflow-y: auto; } .drawer-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); opacity: 0; visibility: hidden; transition: 0.3s; z-index: 9999; } .line { width: 100%; height: 3px; background-color: #333; transition: all 0.3s ease; border-radius: 2px; } /* 3. Έλεγχος Καταστάσεων μέσω Body Classes */ /* Όταν το μενού είναι ανοιχτό */ body.menu_open { overflow: hidden; } body.menu_open .burger-drawer { right: 0; } body.menu_open .drawer-overlay { opacity: 1; visibility: visible; } /* Animation για το "X" */ body.menu_open .burger-button .line:nth-child(1) { transform: translateY(8px) rotate(45deg); } body.menu_open .burger-button .line:nth-child(2) { opacity: 0; transform: translateX(-10px); } body.menu_open .burger-button .line:nth-child(3) { transform: translateY(-8px) rotate(-45deg); } /* Παράδειγμα για το κανονικό σου μενού: body.mobile_ready .main-navigation { display: none; } */ </style> <script> document.addEventListener('DOMContentLoaded', function() { const body = document.body; const btn = document.getElementById('burger-toggle'); const overlay = document.getElementById('drawer-overlay'); const mediaPoint = "<?php echo esc_js(self::$media_point); ?>"; // Media Query Watcher const mql = window.matchMedia(`(max-width: ${mediaPoint})`); function handleBreakpoint(e) { if (e.matches) { body.classList.add('mobile_ready'); } else { body.classList.remove('mobile_ready'); body.classList.remove('menu_open'); // Κλείνουμε το μενού αν μεγαλώσει η οθόνη btn.setAttribute('aria-expanded', 'false'); } } // Αρχικός έλεγχος και Listener για αλλαγές mql.addEventListener('change', handleBreakpoint); handleBreakpoint(mql); // Toggle Functionality if (btn) { btn.addEventListener('click', function(e) { e.preventDefault(); const isOpen = body.classList.toggle('menu_open'); this.setAttribute('aria-expanded', isOpen); }); } if (overlay) { overlay.addEventListener('click', function() { body.classList.remove('menu_open'); btn.setAttribute('aria-expanded', 'false'); }); } // Keyboard support document.addEventListener('keydown', function(e) { if (e.key === "Escape" && body.classList.contains('menu_open')) { body.classList.remove('menu_open'); btn.setAttribute('aria-expanded', 'false'); } }); }); </script> <?php } } new My_Burger_Widget_Plugin();
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 burger-menu-shortcode.php
PHP
6.6 KB
2026-05-19 09:38
EDIT