Home / Admin / Shop Manager – Reseller Admin.js
Duplicate Snippet

Embed Snippet on Your Site

Shop Manager – Reseller Admin.js

Creates a reseller admin role that has more customisation options than a normal user

Code Preview
php
<?php
// ✅ Add required capabilities to shop_manager_-_reseller_admin
add_action('init', function () {
    $role = get_role('shop_manager_-_reseller_admin');
    if ($role) {
        $caps = [
            'manage_product_terms',
            'edit_roles',
        ];
        foreach ($caps as $cap) {
            if (!$role->has_cap($cap)) {
                $role->add_cap($cap);
            }
        }
    }
});
// ✅ Add Categories menu manually if WooCommerce skips it
add_action('admin_menu', function () {
    $user = wp_get_current_user();
    if (!in_array('shop_manager_-_reseller_admin', (array) $user->roles)) return;
    add_submenu_page(
        'edit.php?post_type=product',
        'Categories',
        'Categories',
        'manage_product_terms',
        'edit-tags.php?taxonomy=product_cat&post_type=product'
    );
}, 20);
// ✅ Admin menu cleanup
add_action('admin_menu', function () {
    $user = wp_get_current_user();
    if (!in_array('shop_manager_-_reseller_admin', (array) $user->roles)) return;
    global $menu, $submenu;
    $allowed_top = [
        'index.php',
        'woocommerce',
        'edit.php?post_type=product',
        'users.php',
        'woocommerce-marketing',
        'create-customer-role',
    ];
    foreach ($menu as $key => $item) {
        if ($item[2] === 'members') {
            remove_menu_page('members');
            continue;
        }
        if (!in_array($item[2], $allowed_top)) {
            remove_menu_page($item[2]);
        }
    }
    if (isset($submenu['woocommerce'])) {
        foreach ($submenu['woocommerce'] as $key => $item) {
            if ($item[2] !== 'edit.php?post_type=shop_order') {
                unset($submenu['woocommerce'][$key]);
            }
        }
    }
    if (isset($submenu['edit.php?post_type=product'])) {
        foreach ($submenu['edit.php?post_type=product'] as $key => $item) {
            $allowed_products = [
                'edit.php?post_type=product',
                'post-new.php?post_type=product',
                'edit-tags.php?taxonomy=product_cat&post_type=product'
            ];
            if (!in_array($item[2], $allowed_products)) {
                unset($submenu['edit.php?post_type=product'][$key]);
            }
        }
    }
    if (isset($submenu['woocommerce-marketing'])) {
        foreach ($submenu['woocommerce-marketing'] as $key => $item) {
            if ($item[2] !== 'edit.php?post_type=shop_coupon') {
                unset($submenu['woocommerce-marketing'][$key]);
            }
        }
    }
}, 999);
// ✅ Admin CSS & JavaScript to hide and control UI elements
add_action('admin_head', function () {
    $user = wp_get_current_user();
    if (!in_array('shop_manager_-_reseller_admin', (array) $user->roles)) return;
    echo '<style>
        /* WooCommerce customizations */
        body.post-type-shop_coupon .smart-coupon-settings-button,
        body.post-type-shop_coupon span.duplicate {
            display: none !important;
        }
        body.post-type-shop_order a.page-title-action,
        body.post-type-shop_order div#postcustom,
        body.post-type-shop_order div#wooccm-order-files,
        body.post-type-shop_order div#woocommerce-order-downloads {
            display: none !important;
        }
        /* Stack Cache purge */
        li#wp-admin-bar-stack-cache-purge-cache {
            display: none !important;
        }
        /* Hide "Add Existing User" on user-new.php */
        body.user-new-php h1#add-new-user,
        body.user-new-php h2#add-existing-user,
        body.user-new-php form#adduser,
        body.user-new-php h2#add-existing-user + p {
            display: none !important;
        }
        /* Hide banners */
        div#wt-iew-cta-banner {
            display: none !important;
        }
        /* Hide "Administrator" from user filter on All Users */
        body.users-php li.administrator {
            display: none !important;
        }
        /* ✅ Hide "Add New Role" button on Members > Roles page (if accessed directly) */
        body.members_page_members-roles a.page-title-action[href*="members-role-new"] {
            display: none !important;
        }
        /* ✅ Hide elements from Product Editor */
        body.post-type-product div#et_settings_meta_box,
        body.post-type-product div#woocommerce-product-images,
        body.post-type-product div#product_branddiv,
        body.post-type-product div#wds-wds-meta-box {
            display: none !important;
        }
    </style>';
    echo '<script>
        document.addEventListener("DOMContentLoaded", function () {
            // ✅ Disable order status changes to unpaid statuses
            const select = document.querySelector("p.form-field.wc-order-status select");
            if (select) {
                const disable = ["wc-pending", "wc-failed"];
                const current = select.value;
                select.querySelectorAll("option").forEach(opt => {
                    if (disable.includes(opt.value) && opt.value !== current) {
                        opt.disabled = true;
                        opt.style.color = "#ccc";
                    }
                });
            }
            // ✅ Hide specific roles from Members content permissions on product editor
            const hiddenRoles = ["administrator", "shop_manager", "shop_manager_-_reseller_admin", "shop_manager_-_view_only"];
            hiddenRoles.forEach(role => {
                document.querySelectorAll(`input[name="members_access_role[]"][value="${role}"]`).forEach(input => {
                    const wrapper = input.closest("label") || input.parentElement;
                    if (wrapper) wrapper.style.display = "none";
                });
            });
        });
    </script>';
});
// ✅ Admin bar cleanup (leave My Sites visible)
add_action('admin_bar_menu', function ($wp_admin_bar) {
    $user = wp_get_current_user();
    if (!in_array('shop_manager_-_reseller_admin', (array) $user->roles)) return;
    $wp_admin_bar->remove_node('comments');
    $wp_admin_bar->remove_node('new-content');
}, 999);

Comments

Add a Comment