Create a menu block with images in Drupal 8 & keep menu order On the 1st level pages from our main menu I would like to list all the 2nd level child page titles from that page and corresponding images from those children  pages' content fields. I would like them ordered the same as they are in the menu. I am using the path-auto pattern of [parent-url]/[page-title]. I'm open to any suggestions on how to do this.

I've looked into trying to create this with a view block or even a view REST feed but it appears I cannot get attributes from a menu in views in Drupal 8 to use to sort or filter the items. I tried to do this with a menu block but it appears I cannot add fields such as an image to show.
I finally had time to come back to this, so I'll answer my own question as I believe the following solves it. This code could for sure use some refactoring &amp; cleaning up. I'm very new to Drupal 8 &amp; I'm fairly new to Drupal in general. Feel free to suggest improvements.

&lt;?php
/**
 * @file
 * Displays children pages as a block
 */

namespace Drupal\child_pages_display\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Url;
use Drupal\Core\Path;
use Drupal\Core\Menu;
/**
 * Provides a 'Next Previous' block.
 *
 * @Block(
 *   id = "child_page_block",
 *   admin_label = @Translation("Child Page Block"),
 *   category = @Translation("Blocks")
 * )
 */
class ChildPageBlock extends BlockBase {
  public function build(){
    $menu_tree = \Drupal::menuTree();
    $menu_name = 'main';

    // Build the typical default set of menu tree parameters.
    $parameters = $menu_tree-&gt;getCurrentRouteMenuTreeParameters($menu_name);
    $expandedParents = $parameters-&gt;expandedParents;
    reset($expandedParents);
    $root = current($expandedParents);
    $parameters = new \Drupal\Core\Menu\MenuTreeParameters();
    $parameters-&gt;setRoot($root);
    $parameters-&gt;setMaxDepth(3);
    $parameters-&gt;setMinDepth(1);

    // Load the tree based on this set of parameters.
    $tree = $menu_tree-&gt;load($menu_name, $parameters);

    //Set Cache for block
    $cache['max-age'] = 3600;
    $cache['contexts'][] = 'url.path';
    $cache['tags'][] = $root;

    //Get node IDs from menu
    $nids = array();
    foreach($tree as $item){
      $nids[] = $item-&gt;link-&gt;getUrlObject()-&gt;getRouteParameters()['node'];
    }

    //Load nodes &amp; generate content from nodes
    $nodes = (!empty($nids)) ? entity_load_multiple('node', $nids) : array();
    if (!empty($nodes) &amp;&amp; is_array($nodes)){
      foreach($nodes as $key=&gt;$val) {
        $nodeContent = array(
          '#prefix' =&gt; '&lt;div class="block-child-page-menu"&gt;',
          '#suffix' =&gt; '&lt;/div&gt;'
        );
        $url = \Drupal::service('path.alias_manager')-&gt;getAliasByPath('/node/'.$key);

        //Get image thumbnail from content &amp; use specified image style
        if(null !== $val-&gt;get('field_thumbnail')-&gt;entity){
          $imgPath = ($val-&gt;get('field_thumbnail')-&gt;entity-&gt;uri-&gt;value);
          $imgCroppedPath = \Drupal\image\Entity\ImageStyle::load('basic_page_thumbnail')-&gt;buildUrl($imgPath);
          $img = ($imgPath != '') ? '&lt;img src="' . $imgCroppedPath . '" /&gt;' : '';
        }else{
          $img = "";
        }
        $nodeContent['#markup'] = '&lt;a href="'.$url.'"&gt;' .
            '&lt;h2&gt;' . $val-&gt;getTitle() . '&lt;/h2&gt;' .
            $img .
          '&lt;/a&gt;';
        $content[] = $nodeContent;
      }
    }else{
      //Menu has no nodes
      $content['#markup'] = '';
    }
    //Add cache &amp; css library to block
    $content['#cache'] = $cache;
    $content["#attached"] = array('library' =&gt; array('child_pages_display/child_pages_display_css'));
    return $content;
  }
}