Last active
February 6, 2026 09:11
-
-
Save TanvirHasan19/7b00a1fb3b1ddd86e7234e658958349f to your computer and use it in GitHub Desktop.
Force dashboard menu order
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * WC Vendors: Force dashboard menu order (includes "My Custom Page"). | |
| * Add to child theme functions.php or a snippets plugin. | |
| */ | |
| add_action( 'wp_footer', function () { ?> | |
| <style> | |
| @media screen and (min-width: 1071px) { | |
| ul.wcv-dashboard-menu.horizontal.black.primary { | |
| margin-left: 20px; | |
| } | |
| } | |
| </style> | |
| <script> | |
| (function () { | |
| function reorderWcvMenu() { | |
| var nav = document.getElementById("wcv-navigation"); | |
| if (!nav) return false; | |
| var primaryMenu = nav.querySelector("ul.wcv-dashboard-menu.primary"); | |
| if (!primaryMenu) return false; | |
| // Collect ALL items (including dividers) | |
| var allLis = Array.prototype.slice.call(primaryMenu.children); | |
| if (!allLis.length) return false; | |
| function getHref(li) { | |
| var a = li.querySelector("a.wcv-dashboard-nav-item-link"); | |
| return a ? (a.getAttribute("href") || "") : ""; | |
| } | |
| function getLabel(li) { | |
| var el = li.querySelector(".wcv-dashboard-nav-item-label"); | |
| return el ? (el.textContent || "").trim() : ""; | |
| } | |
| function setLabel(li, text) { | |
| var el = li.querySelector(".wcv-dashboard-nav-item-label"); | |
| if (el) el.textContent = text; | |
| } | |
| // Normalize label: "View store" -> "My Store" | |
| allLis.forEach(function(li){ | |
| if (getLabel(li).toLowerCase() === "view store") { | |
| setLabel(li, "My Store"); | |
| } | |
| }); | |
| // Bucket items by URL patterns (more reliable than text) | |
| var bucket = { | |
| dashboard: null, | |
| products: null, | |
| orders: null, | |
| settings: null, | |
| reports: null, | |
| coupons: null, | |
| instructions: null, | |
| myaccount: null, | |
| mystore: null, | |
| tickets: null, | |
| faqs: null, | |
| terms: null, | |
| custompage: null, | |
| logout: null, | |
| divider: null | |
| }; | |
| var leftovers = []; | |
| allLis.forEach(function (li) { | |
| // Keep divider for later placement | |
| if (li.classList.contains("wcv-dashboard-menu-divider")) { | |
| bucket.divider = li; | |
| return; | |
| } | |
| var href = getHref(li).toLowerCase(); | |
| if (href.indexOf("/vendor_dashboard/") !== -1 && href.match(/\/vendor_dashboard\/?$/)) bucket.dashboard = li; | |
| else if (href.indexOf("/vendor_dashboard/product") !== -1) bucket.products = li; | |
| else if (href.indexOf("/vendor_dashboard/order") !== -1) bucket.orders = li; | |
| else if (href.indexOf("/vendor_dashboard/settings") !== -1) bucket.settings = li; | |
| else if (href.indexOf("/vendor_dashboard/reports") !== -1) bucket.reports = li; | |
| else if (href.indexOf("/vendor_dashboard/shop_coupon") !== -1) bucket.coupons = li; | |
| else if (href.indexOf("/vendor_dashboard/custom-page") !== -1) bucket.custompage = li; | |
| else if (href.indexOf("/instructions/") !== -1) bucket.instructions = li; | |
| else if (href.indexOf("/my-account/") !== -1 && href.indexOf("/my-account/my-tickets/") === -1) bucket.myaccount = li; | |
| else if (href.indexOf("/vendors/") !== -1) bucket.mystore = li; | |
| else if (href.indexOf("/my-account/my-tickets/") !== -1) bucket.tickets = li; | |
| else if (href.indexOf("/faqs") !== -1) bucket.faqs = li; | |
| else if (href.indexOf("/seller-terms") !== -1 || href.indexOf("/terms") !== -1) bucket.terms = li; | |
| else if (href.indexOf("action=logout") !== -1) bucket.logout = li; | |
| else leftovers.push(li); | |
| }); | |
| // Your requested order (Custom Page placed at the end, before Logout) | |
| var ordered = [ | |
| bucket.dashboard, | |
| bucket.products, | |
| bucket.orders, | |
| bucket.settings, | |
| bucket.reports, | |
| bucket.coupons, | |
| bucket.instructions, | |
| bucket.myaccount, | |
| bucket.mystore, | |
| bucket.tickets, | |
| bucket.faqs, | |
| bucket.terms, | |
| bucket.custompage, | |
| bucket.divider, | |
| bucket.logout | |
| ].filter(Boolean); | |
| // Add any unknown items after the main order | |
| leftovers.forEach(function(li){ ordered.push(li); }); | |
| // Rebuild menu from scratch so nothing stays at the beginning | |
| var frag = document.createDocumentFragment(); | |
| ordered.forEach(function(li){ frag.appendChild(li); }); | |
| primaryMenu.innerHTML = ""; | |
| primaryMenu.appendChild(frag); | |
| return true; | |
| } | |
| // Run now, and also retry for late renders | |
| if (reorderWcvMenu()) return; | |
| var tries = 0; | |
| var timer = setInterval(function () { | |
| tries++; | |
| if (reorderWcvMenu() || tries >= 40) clearInterval(timer); | |
| }, 250); | |
| })(); | |
| </script> | |
| <?php }, 99999 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment