remove li class & id for menu items and pages list

后端 未结 8 1383
青春惊慌失措
青春惊慌失措 2021-01-30 23:24

Example of WordPress default CSS class output:

  • &l
  • 相关标签:
    8条回答
    • 2021-01-30 23:52

      You should be able to remove them by hooking into a couple of filters and returning empty arrays or strings rather than new classes or ids:

      add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
      add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
      add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
      function my_css_attributes_filter($var) {
        return is_array($var) ? array() : '';
      }
      

      If you wanted to keep particular classes you could do something like this:

      function my_css_attributes_filter($var) {
        return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
      }
      
      0 讨论(0)
    • 2021-01-30 23:57

      Here is a fix that I've come up with. It removes all the id's and classes from the wp_nav_menu, but allows you to come up with your own "approved" list of classes and/or id's. It also changes the lengthy "current-menu-item" to "active". If you prefer to keep the the default WordPress CSS styles, just delete that section of the code. For the sake of keeping this post minimal, here are the links to the pastebin with the code:
      http://pastebin.com/W16cxDfY - for your functions.php file
      http://pastebin.com/CGx4aprf - for your template, wherever the menu goes

      0 讨论(0)
    • 2021-01-30 23:59

      this is an addition on top of Richard answer.

      in case you want to change the current-menu-item class to something else.

              add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
              add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
              function my_css_attributes_filter($var) {
                  if(is_array($var)){
                      $varci= array_intersect($var, array('current-menu-item'));
                      $cmeni = array('current-menu-item');
                      $selava   = array('selectedmenu');
                      $selavaend = array();
                      $selavaend = str_replace($cmeni, $selava, $varci);
                  }
                  else{
                      $selavaend= '';
                  }
              return $selavaend;
              }
      
      0 讨论(0)
    • 2021-01-31 00:00

      Best way to remove li is: Tested and Verified

                 <?php
                  $menuParameters = array(
                    'theme_location'  => 'header-menu-top', 
                    'container'       => false,
                    'echo'            => false,
                    'items_wrap'      => '%3$s',
                    'depth'           => 0,
                  );
                  echo strip_tags(wp_nav_menu( $menuParameters ), '<a>' );
                  ?>
      
      0 讨论(0)
    • 2021-01-31 00:02

      My solution:

      $defaults = array(
          'theme_location'  => '',
          'menu'            => '',
          'container'       => '',
          'container_class' => '',
          'container_id'    => '',
          'menu_class'      => '',
          'menu_id'         => '',
          'echo'            => false, // param important
          'fallback_cb'     => 'wp_page_menu',
          'before'          => '',
          'after'           => '',
          'link_before'     => '',
          'link_after'      => '',
          'items_wrap'      => '',
          'depth'           => -1,
          'walker'          => ''
      );
      
      ob_start();
      echo preg_replace( '#<li[^>]+>#', '<li>', wp_nav_menu( $defaults ) );
      $mainNav = ob_get_clean();
      
      // In the page :
      echo $mainNav;
      
      0 讨论(0)
    • 2021-01-31 00:03

      simply add_filter('nav_menu_item_id', '__return_false'); for menu item id

      0 讨论(0)
    提交回复
    热议问题