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!

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

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

        if ((empty($item_roles) || array_intersect($user_roles, $item_roles)) &amp;&amp; 
            (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');

				
			
Autor: Ladislav Dubravský
Cena: Zadarmo
Dátum publikácie: 20 júna, 2024

Potrebujete kód na mieru?

Neváhajte ma kontaktovať. Som tu pre vás, aby som odpovedal na vaše otázky a začal spolupracovať na vašom projekte.