I need some pro eyes please.
Over all, I’m adding one button/link to the MAIN NAV depending on the logged in role.
I have this “working” code:
if ( ! function_exists( 'add_extra_item_to_nav_menu' ) ){
function add_extra_item_to_nav_menu( $items, $args ) {
if (current_user_can('administrator') && is_user_logged_in() && $args->menu-5) {
$items .= '<li><a href="/product-category/public/SCHOOL_NAME/" class="navShopNow fungula">SHOP NOW ADMIN</a></li>';
}
//School ROLEABC
elseif (current_user_can('ROLEABC') && is_user_logged_in && $args->menu-5) {
$items .= '<li><a href="/product-category/public/SCHOOL_NAME/" class="navShopNow fungula">SHOP NOW ABC</a></li>';
}
//School ROLEXYZ
elseif (current_user_can('ROLEXYZ') && is_user_logged_in && $args->menu-5) {
$items .= '<li><a href="/product-category/public/SCHOOL_NAME/" class="navShopNow fungula">SHOP NOW XYZ</a></li>';
}
return $items;
}
add_filter( 'wp_nav_menu_items', 'add_extra_item_to_nav_menu', 150, 2 );
}
It seems to work (it does what it’s supposed to), but it is correct?
Is it a security issue?
Did I not close it properly?
SideNote: “sometimes” the button won’t load/show on the home page only;
e.i. “the button won’t appear”,
but it always works/appears on the rest of the site.
Thanks in advance, 🙂
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Something like this would be more efficient. This is basic PHP by the way, not WP specific.
function add_extra_item_to_nav_menu( $items, $args ) {
$roles = [
'administrator' => [ //Role - slug name
'SCHOOL_NAME-A', //url path - appended to the end
'ADMIN', // can be any name - appended to SHOP NOW button
],
'ROLEABC' => [
'SCHOOL_NAME-B',
'ABC',
],
'ROLEXYZ' => [
'SCHOOL_NAME-C',
'XYZ',
],
];
foreach ( $roles as $role => $menu ) {
if ( current_user_can( $role ) && is_user_logged_in() && $args->menu-5 ) {
$items .= '<li><a href="/product-category/public/' . $menu[0] . '/" class="navShopNow fungula">SHOP NOW ' . $menu[1] . '</a></li>';
break;
}
}
return $items;
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0