在自定义菜单结构中获取菜单项的css类

时间:2016-06-06 作者:Jesse Winton

因此,我为菜单创建了自定义标记。菜单的功能是这样构建的。。。

<?php 
  $parent = array();
    if (($locations = get_nav_menu_locations()) && isset($locations[$menu_name])){
      $menu = wp_get_nav_menu_object($locations[$menu_name]);
      $menu_items = wp_get_nav_menu_items($menu->term_id);
      $parent_id = 0;

    foreach((array)$menu_items as $key => $menu_item){
      if($menu_item->menu_item_parent == 0) { 
        $parent_id = $menu_item->db_id;
        $title = $menu_item->title;
        $url = $menu_item->url;
        $target = $menu_item->target;
        $class = $menu_item->classes;
        array_push($parent, array("title" => $title, "url" => $url, "target" => $target, "class" => $class));
    }
    else if($menu_item->menu_item_parent == $parent_id){
      $title = $menu_item->title;
      $url = $menu_item->url;
      $target = $menu_item->target;
      $class = $menu_item->classes;
      array_push($parent[count($parent) - 1]["child"], array("title" => $title, "url" => $url, "target" => $target, "class" => $class));
    }
    else{}
    }
  }
实际的标记/输出是这样构建的。。。

  foreach ($parent as $key => $value){
    if(empty($value["child"])){
      echo "<a href=\'" . $value["url"] . "\' target=\'" . $value["target"] . "\' class=\'" . $value["class"] . "\'>" . $value["title"] . "</a>";
    }
    else
    {
    }
  }
但是,我需要能够访问代码中菜单项的自定义类。现在,使用$class = $menu_item->classes; 我得到一个类输出,但它很简单class="Array".

有人能帮我找出如何拆分类并将自定义类输出到我的标记中吗?

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

您得到的是一个数组,因此您需要implode() 他们-theWalker_Nav_Menu 有如下内容:

$class_names = esc_attr( implode( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item ) ) );
因此,您可以修改foreach,以类似的方式使其内爆

$class = esc_attr( implode( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $menu_item->classes ), $menu_item) ) );
我们仍然希望确保nav_menu_css_class 在从该挂钩进行修改时应用。