Mengehadkan menu kepada pengguna tertentu: cara untuk menapis berdasarkan nilai medan tertentu
P粉563831052
P粉563831052 2023-09-07 15:58:31
0
2
434

Dalam navbar wp utama saya, saya mempunyai item menu yang dipanggil 'Penyelidikan' yang saya hanya mahu muncul dalam penyelidik di WordPress.

Penyelidik akan ditakrifkan oleh medan metadata pengguna yang dipanggil wpum_relationship_to_lib, iaitu medan berbilang pilihan yang merangkumi pilihan untuk penyelidik, pelajar, pekerja, dsb.

Adalah penting bahawa penyelidik mestilah salah satu pilihan yang pengguna pilih untuk mengakses menu ini dan researcher必须是用户选择访问该菜单的选项之一,并且wpum_relationship_to_libbukan menentukan peranan WordPress.

Semua menu adalah menu utama. Juga, saya perlu menyembunyikan menu sehingga saya log masuk. Lihat kod saya yang tidak mengehadkan menu dengan betul.

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

membalas semua(2)
P粉578680675

Kod yang diberikan kebanyakannya betul. Walau bagaimanapun, terdapat masalah kecil dalam pernyataan bersyarat apabila menyemak nilai perhubungan pengguna. Saya mengemas kini kod untuk memastikan item menu "Penyelidikan" hanya muncul untuk pengguna yang telah memilih "penyelidik" sebagai salah satu nilai perhubungan mereka dalam medan meta wpum_relationship_to_lib. Ia juga menyembunyikan menu Penyelidikan untuk pengguna yang tidak log masuk. Saya belum menguji kod itu, jadi sebarang komen dialu-alukan. Kod #joshmoto adalah sah, tetapi dalam gelung foreach, syarat !in_array($menu_object->title, $relationship_array) menyemak sama ada tajuk objek menu tiada dalam tatasusunan hubungan. Daripada apa yang saya faham daripada soalan, anda ingin menyemak sama ada nilai "penyelidik" berada dalam tatasusunan hubungan. Oleh itu, anda harus mengemas kini syarat kepada 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);
P粉799885311

Saya dapat jawapannya. Perkara yang menarik ialah ia sensitif huruf besar-besaran. Saya hanya perlu menggunakan kod berikut. Tetapi pada platform ujian, ia berfungsi tanpa baris kod ini. Saya tidak tahu ini mungkin untuk huruf kecil:

(is_array($relationship_values) && in_array('researcher', array_map('strtolower', $relationship_values))) { ...

Terima kasih semua atas bantuan dan masa anda. –

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!