Rumah > Soal Jawab > teks badan
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 researcher
必须是用户选择访问该菜单的选项之一,并且wpum_relationship_to_lib
bukan 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粉5786806752023-09-08 13:32:38
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粉7998853112023-09-08 13:31:29
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. –