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:
- Pridajte celý kód do súboru
functions.php
vašej WordPress témy. - 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');