Magento 2 – Get data from a custom field in shipping and display in Admin > Sales > Order and Email

I created a module that displays custom fields in shipping at checkout and saves the data in the database in the both the quote and sales order table and I can confirm the data is there. I am trying to get the data to show in the admin when the orders are viewed and in the confirmation email that goes out. I have it so the template displays the echoed text in the admin order view but not the data from the database. Nothing shows currently in the email but I want to fix viewing the data in the order first.

To break it down, I have the data in the two tables in the DB and need to display it on the orders in the admin. I have the fields in extension_attributes.xml

The fields get saved to the DB here in Plugin > Quote > SaveToQuote.php:

  class SaveToQuote {    /**     * @var QuoteRepository     */    protected $  quoteRepository;     /**     * SaveToQuote constructor.     * @param QuoteRepository $  quoteRepository     */    public function __construct(        QuoteRepository $  quoteRepository    ) {        $  this->quoteRepository = $  quoteRepository;    }     /**     * @param \Magento\Checkout\Model\ShippingInformationManagement $  subject     * @param $  cartId     * @param \Magento\Checkout\Api\Data\ShippingInformationInterface $  addressInformation     */    public function beforeSaveAddressInformation(        \Magento\Checkout\Model\ShippingInformationManagement $  subject,        $  cartId,        \Magento\Checkout\Api\Data\ShippingInformationInterface $  addressInformation    ) {        if(!$  extAttributes = $  addressInformation->getExtensionAttributes())            return;         $  quote = $  this->quoteRepository->getActive($  cartId);         $  quote->setInputRoomShippingField($  extAttributes->getInputRoomShippingField());        $  quote->setInputFloorShippingField($  extAttributes->getInputFloorShippingField());        $  quote->setDateCustomShippingField($  extAttributes->getDateCustomShippingField());        $  quote->setSelectCustomShippingField($  extAttributes->getSelectCustomShippingField());    } } 

But here is what I have come up with to view the data in the order in the admin so far with no luck.

First – view>adminhtml>layout>sales_order_view.xml

<page xmlns:xsi="" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body>     <referenceBlock name="order_info">         <block class="xxx\xxx\Block\Adminhtml\Order\View\OrderView" name="sales_order_view_custom" template="xxx_xxx::shipping_info.phtml" />     </referenceBlock> </body> 

Next in view>adminhtml>templates>shipping_info.phtml

<strong><?php echo __('Room Number') ?></strong> <span class="room"><?=$  block->getInputRoomShippingField(); ?></span> <strong><?php echo __('Floor Number') ?></strong> <span class="floor"><?=$  block->getInputFloorShippingField(); ?></span> <strong><?php echo __('Address') ?></strong> <span class="address"><?=$  block->getSelectCustomShippingField(); ?></span 

I can see the echoed text above in the admin > order view but not the values called by $ block.

Next – Block>Adminhtml>Order>View>OrderView.php

namespace xxx\xxx\Block\Adminhtml\Order\View;  class OrderView extends \Magento\Backend\Block\Template {  } 

I think I need the above so I can call $ block

Next – Observer>ShippingDataToAdminObserver.php

namespace xxx\xxx\Observer; use Magento\Framework\Event\Observer as EventObserver; use Magento\Framework\Event\ObserverInterface;  class ShippingDataToAdminObserver implements ObserverInterface {      /**      * @var \Magento\Framework\ObjectManagerInterface      */     protected $  _block;      /**      * @param \Magento\Framework\View\Element\Template $  block      */     public function __construct(         \Magento\Framework\View\Element\Template $  block     )     {         $  this->_block = $  block;     }      /**      * @param EventObserver $  observer      */      public function execute(EventObserver $  observer)     {         if($  observer->getElementName() == 'order_shipping_view')         {             $  orderShippingViewBlock = $  observer->getLayout()->getBlock($  observer->getElementName());             $  order = $  orderShippingViewBlock->getOrder();             $  RoomDeliveryBlock = $  this->_block;             $  RoomDeliveryBlock->setTemplate('xxx_xxx::shipping_info.phtml');             $  html = $  observer->getTransport()->getOutput() . $  RoomDeliveryBlock->toHtml();             $  observer->getTransport()->setOutput($  html);         }     } } 

Used the above to get data to display in admin > sales > order and uses OrderView.php above. I see the text but not the data.

Like I said, I am trying to get the data in the database (which is present) to show on the orders in the admin and eventually emails.

I don’t know if this is too confusing to get help or not. Any thoughts are greatly appreciated.