Dynamically Add a Link in Customer Account Navigation in Magento 2

One of the common tasks in Magento 2 development is to add a link in customer account navigation. In each and every project developers come up with a task in which they need to add an additional link to the customer account area. Therefore, today I’m going to share a code snippet to add a link in customer account navigation.

To add a static link means the link will always display when the customer logged in, is just achieve by adding below XML file. However, to add a link dynamically in customer account navigation, you need to create an additional block file.

Add Link in Customer Account Navigation

Step 1: Create customer_account.xml file under your module app/code/Codextblog/Demo/view/frontend/layout directory. Add below code in the file.

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
        <referenceBlock name="customer_account_navigation">
            <block class="Codextblog\Demo\Block\View\Element\Html\Link\Current" name="customer-account-navigation-my-link" cacheable="false">
                    <argument name="path" xsi:type="string">demo</argument>
                    <argument name="label" xsi:type="string">My Link</argument>
                    <argument name="sortOrder" xsi:type="number">10</argument>

Step 2: Create Block file Current.php under your module app/code/Codextblog/Demo/Block/View/Element/Html/Link directory. Add below code in the file.

namespace Codextblog\Demo\Block\View\Element\Html\Link;

use Magento\Customer\Block\Account\SortLinkInterface;
use Magento\Customer\Model\Session as CustomerSession;
use Magento\Framework\App\DefaultPathInterface;
use Magento\Framework\View\Element\Template\Context;

 * Class Current
 * @package Codextblog\Demo\Block\View\Element\Html\Link
class Current extends \Magento\Framework\View\Element\Html\Link\Current implements SortLinkInterface
     * @var CustomerSession
    protected $_customerSession;

     * Current constructor.
     * @param Context $context
     * @param DefaultPathInterface $defaultPath
     * @param CustomerSession $CustomerSession
     * @param array $data
    public function __construct(
        Context $context,
        DefaultPathInterface $defaultPath,
        CustomerSession $CustomerSession,
        array $data = []
    ) {
        $this->_defaultPath = $defaultPath;
        $this->_customerSession = $CustomerSession;
        parent::__construct($context, $defaultPath);

    protected function _toHtml()
        if (conditon) {
            return parent::_toHtml();    
        } else {
            return null;

    public function getSortOrder()
        return $this->getData(self::SORT_ORDER);

Want to ask a question or leave a comment?

Leave a Comment


All the comments are goes into moderation before approval. Irrelevant comment with links directly goes to spam. Your email address will not be published.

Was this post helpful? Please support Us!

Follow us on twitter or Like us on facebook.


To Avoid Spam Downloads, We Want Your Email

We will send you download link right
away. Please submit form below.

Increase Your
Magento 2

Get Weekly Tutorial
to your Inbox
Subscribe Me
Subscribe Here