That's not the filter to use, instead use the wp_nav_menu_objects
filter documented at: https://developer.wordpress.org/reference/hooks/wp_nav_menu_objects/
The docs contain a helpful code example provided by a contributor at the bottom, which I've modified slightly:
function wpse_unset_menu_items( $menu_objects, $args ) {
// remove this if you want it on all menus not just a specific menu aka primary_menu:
if ( 'primary_menu' !== $args->theme_location ) {
return $menu_objects;
}
// if the user is logged in, don't do anything.
if ( is_user_logged_in() ) {
return $menu_objects;
}
// these is the list of things to hide.
$items_to_hide = array(
'Cart',
'Wishlist',
);
foreach ( $menu_objects as $key => $menu_object ) {
if ( ! in_array( $menu_object->title, $items_to_hide ) ) {
continue;
}
unset( $menu_objects[ $key ] );
}
return $menu_objects;
}
add_filter( 'wp_nav_menu_objects', 'wpse_unset_menu_items', 10, 2 );
Modifying this to check something other than the title or to check for Jessica
should be straightfoward
Magic Numbers
Avoid hardcoding post IDs such as 666
! If the page gets deleted by accident it'll reappear in the menu as the ID will change when its recreated. It also means the code can only be used on 1 site, and even a migration to another host could break it!