Exemplo n.º 1
0
/**
 * Recursive function to retrieve sub menu items.
 *
 * @since 3.0.0
 *
 * @param string $childof The Parent ID.
 * @param string $object_type The object type.
 * @param string $object The object name.
 * @return string $output sub menu items.
 */
function wp_get_nav_menu_sub_items($childof, $object_type, $object = null, $context = 'frontend')
{
    $args = array('child_of' => $childof, 'parent' => $childof, 'hide_empty' => false);
    switch ($object_type) {
        case 'post_type':
            $hierarchical_post_types = get_post_types(array('hierarchical' => true));
            if (in_array($object, $hierarchical_post_types)) {
                $args['post_type'] = $object;
                $sub_menu_items = get_pages($args);
            } else {
                $sub_menu_items = array();
            }
            break;
        case 'taxonomy':
            if (is_taxonomy_hierarchical($object)) {
                $sub_menu_items = get_terms($object, $args);
            } else {
                $sub_menu_items = array();
            }
            break;
        default:
            $sub_menu_items = array();
            break;
    }
    $output = '';
    $i = 1;
    if (!empty($sub_menu_items) && !is_wp_error($sub_menu_items)) {
        $output .= '<ul class="sub-menu menu-item-type-' . $object_type . '">';
        foreach ($sub_menu_items as $menu_item) {
            // Set up the menu item
            $menu_item = wp_setup_nav_menu_item($menu_item, $object_type, $object);
            $attributes = 'backend' == $context ? ' id="menu-item-' . $i . '" value="' . $i . '"' : '';
            $output .= '<li' . $attributes . '>';
            $output .= wp_get_nav_menu_item($menu_item, $object_type, $object);
            $output .= wp_get_nav_menu_sub_items($menu_item->ID, $object_type, $object);
            $output .= '</li>';
            ++$i;
        }
        $output .= '</ul>';
    }
    return $output;
}
Exemplo n.º 2
0
 /**
  * @see Walker::start_el()
  * @since 3.0.0
  *
  * @param string $output Passed by reference. Used to append additional content.
  * @param object $item Menu item data object.
  * @param int $depth Depth of menu item. Used for padding.
  * @param int $current_page Menu item ID.
  * @param object $args
  */
 function start_el(&$output, $item, $depth, $args)
 {
     $indent = $depth ? str_repeat("\t", $depth) : '';
     $classes = $value = '';
     if ('frontend' == $args->context) {
         global $wp_query;
         $classes = array('menu-item', 'menu-item-type-' . $item->type, $item->classes);
         if ('custom' != $item->object) {
             $classes[] = 'menu-item-object-' . $item->object;
         }
         if ($item->object_id == $wp_query->get_queried_object_id()) {
             $classes[] = 'current-menu-item';
         }
         // @todo add classes for parent/child relationships
         $classes = join(' ', apply_filters('nav_menu_css_class', array_filter($classes), $item));
         $classes = ' class="' . esc_attr($classes) . '"';
     } else {
         $value = ' value="' . $item->ID . '"';
     }
     $output .= $indent . '<li id="menu-item-' . $item->ID . '"' . $value . $classes . '>' . wp_get_nav_menu_item($item, $args->context, $args);
 }