Zobrazovanie položiek menu podľa používateľských rolí

Tento snippet umožňuje dynamické zobrazovanie položiek menu vo WordPress na základe používateľských rolí. Využíva Select2 pre moderný a užívateľsky prívetivý výber rolí. Po pridaní tohto kódu do súboru functions.php vašej témy môžete jednoducho nastaviť viditeľnosť jednotlivých položiek menu pre rôzne používateľské roly.

Snippet zahŕňa:

  • Načítanie Select2 knižnice pre lepší vzhľad a funkcionalitu multi-select polí.
  • Pridanie vlastných polí pre výber používateľských rolí pri položkách menu.
  • Uloženie vybraných rolí do meta údajov položiek menu.
  • Filtráciu položiek menu podľa aktuálnej používateľskej role používateľa.
  • Automatické prispôsobenie šírky multi-select polí na 100%.

Použitie:

  1. Pridajte celý kód do súboru functions.php vašej WordPress témy.
  2. V administrácii WordPressu pridajte alebo upravte položky menu a vyberte používateľské roly, pre ktoré majú byť jednotlivé položky viditeľné.

Tento snippet je ideálny pre webové stránky, ktoré potrebujú prispôsobiť navigáciu na základe rôznych používateľských rolí, a poskytuje elegantné riešenie s minimálnym úsilím.

Ak máte akékoľvek otázky alebo potrebujete ďalšie úpravy, neváhajte ma kontaktovať. Prajem vám veľa úspechov s vaším WordPress projektom!

PHP
// Pridať vlastné pole pre roly v položkách menu
function custom_enqueue_select2_assets() {
    wp_enqueue_style('select2-css', 'https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css');
    wp_enqueue_script('select2-js', 'https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js', array('jquery'), null, true);
}
add_action('admin_enqueue_scripts', 'custom_enqueue_select2_assets');

// Inicializácia Select2 pre multi-select pole
function custom_select2_init_script() {
    ?>

        jQuery(document).ready(function($) {
            $('#menu-to-edit .menu-item select[multiple]').select2().css('width', '100%');
        });

    roles;
    ?>
    <p class="field-roles description description-wide">
        <label for="edit-menu-item-roles-">
            <br>
            <select name="menu-item-roles[][]" id="edit-menu-item-roles-" multiple class="select2" style="width: 100%;">
                 $role) : ?>
                    <option value="" >




        </label>
    </p>
    <p class="field-exclude-roles description description-wide">
        <label for="edit-menu-item-exclude-roles-">
            <br>
            <select name="menu-item-exclude-roles[][]" id="edit-menu-item-exclude-roles-" multiple class="select2" style="width: 100%;">
                 $role) : ?>
                    <option value="" >




        </label>
    </p>
    roles;

    foreach ($items as $item) {
        $item_roles = get_post_meta($item->ID, '_menu_item_roles', true);
        $item_exclude_roles = get_post_meta($item->ID, '_menu_item_exclude_roles', true);

        if ((empty($item_roles) || array_intersect($user_roles, $item_roles)) &&
            (empty($item_exclude_roles) || !array_intersect($user_roles, $item_exclude_roles))) {
            $filtered[] = $item;
        }
    }

    return $filtered;
}
add_filter('wp_nav_menu_objects', 'custom_filter_nav_menu_items', 10, 2);

// Pridať vlastné CSS pre Select2
function custom_admin_styles() {
    echo '
        .select2-container {
            width: 100% !important;
        }
        .select2-selection {
            width: 100% !important;
        }
        .select2-container--default .select2-selection--multiple {
            min-height: 38px; /* Adjust this value as needed */
        }
    ';
}
add_action('admin_head', 'custom_admin_styles');