限制某些用户的菜单:根据特定字段的值进行筛选的方法
P粉563831052
P粉563831052 2023-09-07 15:58:31
0
2
355

在我的主要的wp导航栏中,我有一个名为'Research'的菜单项,我只想在WordPress中的研究人员中显示。

研究人员将由一个名为wpum_relationship_to_lib的用户元数据字段定义,它是一个包括研究人员、学生、员工等选项的多选字段。

重要的是researcher必须是用户选择访问该菜单的选项之一,并且wpum_relationship_to_lib不定义WordPress角色。

所有菜单都是主要菜单。此外,我需要在登录之前隐藏菜单。请参见我的代码,该代码未正确限制菜单。

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);

P粉563831052
P粉563831052

全部回复(2)
P粉578680675

提供的代码大部分是正确的。然而,在检查用户关系值时的条件语句中存在一个小问题。我更新了代码,确保只有在wpum_relationship_to_lib元字段中选择“researcher”作为其关系值之一的用户才会显示“Research”菜单项。它还会隐藏非登录用户的“Research”菜单。我没有测试过代码,所以欢迎任何评论。 #joshmoto的代码是有效的,但在foreach循环中,条件!in_array($menu_object->title, $relationship_array)检查菜单对象标题是否不在关系数组中。从问题中我所理解的,你想要检查值“researcher”是否在关系数组中。因此,你应该更新条件为in_array('researcher', $relationship_array)。

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, true)) {
        // 允许研究人员使用菜单
        return $items;
      } else {
        // 隐藏非研究人员的“Research”菜单
        foreach ($items as $key => $item) {
          if ($item->title === 'Research') {
            unset($items[$key]);
          }
        }
      }
    } else {
      // 隐藏非登录用户的“Research”菜单
      foreach ($items as $key => $item) {
        if ($item->title === 'Research') {
          unset($items[$key]);
        }
      }
    }
  }
  return $items;
}
add_filter('wp_nav_menu_objects', 'restrict_menu_to_researchers', 10, 2);
热门教程
더>
最新下载
더>
网站特效
网站源码
网站素材
프론트엔드 템플릿
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!