Dans ma barre de navigation principale wp, j'ai un élément de menu appelé « Recherche » que je souhaite afficher uniquement dans les chercheurs de WordPress.
Les chercheurs seront définis par un champ de métadonnées utilisateur appeléwpum_relationship_to_lib
, qui est un champ à sélection multiple qui comprend des options pour le chercheur, l'étudiant, l'employé, etc.
Il est important quechercheur
soit l'une des options que l'utilisateur choisit pour accéder à ce menu etresearcher
必须是用户选择访问该菜单的选项之一,并且wpum_relationship_to_lib
ne définisse pas de rôle WordPress.
Tous les menus sont des menus principaux. De plus, je dois masquer le menu jusqu'à ce que je me connecte. Voir mon code qui ne limite pas correctement le menu.
function restrict_menu_to_researchers($items, $args) { // 检查菜单是否分配给所需位置 if ($args->theme_location === 'primary') { // 检查用户是否已登录 if (is_user_logged_in()) { $user_id = get_current_user_id(); $relationship_values = get_user_meta($user_id, 'wpum_relationship_to_lib', true); // 检查用户是否为“researcher” if (is_array($relationship_values) && in_array('researcher', $relationship_values)) { // 允许研究人员访问菜单 return $items; } else { foreach ($items as $key => $item) { if ($item->title == 'Research') { // 隐藏非研究人员的“Research”菜单 unset($items[$key]); } } } } else { foreach ($items as $key => $item) { if ($item->title == 'Research') { // 隐藏未登录用户的“Research”菜单 unset($items[$key]); } } } } return $items; } add_filter('wp_nav_menu_objects', 'restrict_menu_to_researchers', 10, 2);
Le code fourni est généralement correct. Cependant, il y a un petit problème dans l'instruction conditionnelle lors de la vérification de la valeur de la relation utilisateur. J'ai mis à jour le code pour garantir que l'élément de menu "Recherche" n'apparaît que pour les utilisateurs qui ont sélectionné "chercheur" comme l'une de leurs valeurs de relation dans le champ méta wpum_relationship_to_lib. Il masque également le menu Recherche pour les utilisateurs non connectés. Je n'ai pas testé le code, donc tous les commentaires sont les bienvenus. Le code de #joshmoto est valide, mais dans la boucle foreach, la condition !in_array($menu_object->title, $relationship_array) vérifie si le titre de l'objet de menu n'est pas dans le tableau de relations. D'après ce que j'ai compris de la question, vous souhaitez vérifier si la valeur « chercheur » est dans le tableau relationnel. Par conséquent, vous devez mettre à jour la condition vers in_array('researcher', $relationship_array).
J'ai la réponse. Ce qui est intéressant, c'est qu'il est sensible à la casse. J'ai juste besoin d'utiliser le code suivant. Mais sur la plateforme de test, cela fonctionne sans cette ligne de code. Je ne savais même pas que cela pouvait être pour les lettres minuscules :
(is_array($relationship_values) && in_array('researcher', array_map('strtolower', $relationship_values))) { ...
Merci à tous pour votre aide et votre temps. –