社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Jquery

使用jquery根据主菜单的类名隐藏主菜单的<li>元素

Michal • 6 年前 • 1707 次点击  

在一个WordPress网站上,我在 header.php 要检查用户是否登录(不在WordPress管理中,而是单独的登录区域),如果不登录,我想隐藏一个特定的菜单项(使用 li 元素的类名和jquery):

<?php

if (isset($_COOKIE["username"])) {  

    // Do all relevant code for logged in users here

    }

else {
?>
<script type="text/javascript">

 $(document).ready(function() {        
    $('#menu-main-navigation-1 li.menu-item-123').hide();        


 });      

</script>
<?php
    // Do all relevant code for logged-out users here  

    }
?> 

这个 ul 元素的ID为 menu-main-navigation-1 以及 需要隐藏的是 menu-item menu-item-type-custom menu-item-object-custom menu-item-123

我都试过了 $(document).ready(function() 如果没有,但没有任何区别,菜单项仍然会出现。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39109
 
1707 次点击  
文章 [ 2 ]  |  最新文章 6 年前
Michael Rosario
Reply   •   1 楼
Michael Rosario    6 年前

另一种方法…您还可以使用CSS隐藏列表项-这可能更好。

<?php
  if (isset($_COOKIE["username"])) {

  } else {
?>

   <style>
      #menu-main-navigation-1 li.menu-item-123 { display: none !important; }
   </style>

<?php
    }
?> 

注意:如果他们禁用CSS,列表就会出现。原来的方法,如果你禁用javascript…同样的事情。

msg
Reply   •   2 楼
msg    6 年前

打电话 hide 不是个好主意。它只更改项的可见性,但它仍将存在于源中。如果你 绝对地 必须在javascript中完成,调用 remove ,但此方法仍然不适用于禁用它的用户。

但幸运的是,在生成HTML之前,您可以通过挂钩从WordPress菜单中删除元素:

 function filter_remove_menu_item_for_anons($menu_items, $args) {
    foreach($menu_items as $k => $item) {
      if ($item->ID == 123) {
        unset($menu_items[$k]);
      }
    }
    return $menu_items;
  }
  add_filter('wp_nav_menu_objects', 'filter_remove_menu_item_for_anons', 10, 2);

只需根据会话检查注册过滤器。

如果您有多个菜单并且需要更好的控制,可以使用 args 参数。

但是,如果用户知道URL,他仍然可以访问内容,您应该考虑其他 solution .