block_core_navigation_parse_blocks_from_menu_items() – Turns menu item data into a nested array of parsed blocks

You appear to be a bot. Output may be restricted

Description

Turns menu item data into a nested array of parsed blocks

Usage

$array = block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id );

Parameters

$menu_items
( array ) required – An array of menu items that represent an individual level of a menu.
$menu_items_by_parent_id
( array ) required – An array keyed by the id of the parent menu where each element is an array of menu items that belong to that parent.

Returns

array An array of parsed block data.

Source

File name: wordpress/wp-includes/blocks/navigation.php
Lines:

1 to 40 of 40
  function block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
    if ( empty( $menu_items ) ) {
      return array();
    }

    $blocks = array();

    foreach ( $menu_items as $menu_item ) {
      $class_name       = ! empty( $menu_item->classes ) ? implode( ' ', (array) $menu_item->classes ) : null;
      $id               = ( null !== $menu_item->object_id && 'custom' !== $menu_item->object ) ? $menu_item->object_id : null;
      $opens_in_new_tab = null !== $menu_item->target && '_blank' === $menu_item->target;
      $rel              = ( null !== $menu_item->xfn && '' !== $menu_item->xfn ) ? $menu_item->xfn : null;
      $kind             = null !== $menu_item->type ? str_replace( '_', '-', $menu_item->type ) : 'custom';

      $block = array(
        'blockName' => isset( $menu_items_by_parent_id[ $menu_item->ID ] ) ? 'core/navigation-submenu' : 'core/navigation-link',
        'attrs'     => array(
          'className'     => $class_name,
          'description'   => $menu_item->description,
          'id'            => $id,
          'kind'          => $kind,
          'label'         => $menu_item->title,
          'opensInNewTab' => $opens_in_new_tab,
          'rel'           => $rel,
          'title'         => $menu_item->attr_title,
          'type'          => $menu_item->object,
          'url'           => $menu_item->url,
        ),
      );

      $block['innerBlocks']  = isset( $menu_items_by_parent_id[ $menu_item->ID ] )
        ? block_core_navigation_parse_blocks_from_menu_items( $menu_items_by_parent_id[ $menu_item->ID ], $menu_items_by_parent_id )
        : array();
      $block['innerContent'] = array_map( 'serialize_block', $block['innerBlocks'] );

      $blocks[] = $block;
    }

    return $blocks;
  }
 

 View on GitHub View on Trac