Использование JQuery для скрытия элемента <li>главного меню на основе имени его класса - PullRequest
0 голосов
/ 14 сентября 2018

На веб-сайте 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 равен menu-main-navigation-1 и класс li, который необходимо скрытьmenu-item menu-item-type-custom menu-item-object-custom menu-item-123

Я пробовал как с $(document).ready(function(), так и без него, но это не имело никакого значения, пункт меню по-прежнему отображается.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Звонить hide не очень хорошая идея.Это только изменяет видимость элемента, но все равно будет присутствовать в источнике.Если вам абсолютно необходимо сделать это в javascript, позвоните remove, но этот метод по-прежнему не учитывает тех пользователей, у которых он отключен.

Но, к счастью, вы можете удалить элементыиз меню WordPress путем перехвата перед генерацией HTML:

 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, он все равно сможет получить доступ к содержимому, и вам следует рассмотреть другое решение .

0 голосов
/ 15 сентября 2018

Другой подход ... вы также можете использовать CSS, чтобы скрыть элемент списка - что, вероятно, лучше.

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

  } else {
?>

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

<?php
    }
?> 

Примечание: если они отключат CSS, появится список.Оригинальный подход, если отключить JavaScript ... тоже самое.

...