Skip to content

Instantly share code, notes, and snippets.

@TanvirHasan19
Last active February 6, 2026 09:11
Show Gist options
  • Select an option

  • Save TanvirHasan19/7b00a1fb3b1ddd86e7234e658958349f to your computer and use it in GitHub Desktop.

Select an option

Save TanvirHasan19/7b00a1fb3b1ddd86e7234e658958349f to your computer and use it in GitHub Desktop.
Force dashboard menu order
/**
* 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