backend_extended_menu

Позволяет добавлять дополнительные разделы и ссылки в главное меню в новом интерфейсе (2.0).

Доступно начиная с версии 9.4.1.

Shop-Script

Входящие параметры (передаются по ссылке)

$params['menu'] array Массив с информацией о содержимом меню, в который можно добавить собственные элементы: пункты меню и секции для группировки пунктов меню. Ключи добавленных плагином секций и пунктов меню должны начинаться с идентификатора плагина, чтобы избежать конфликтов с другими плагинами.

Если вы хотите использовать раскрывающуюся секцию для группировки своих пунктов меню и предполагаете, что эта секция может использоваться также другими плагинами, то в идентификатор секции не нужно добавлять идентификатор плагина. Лучше сформировать идентификатор в общем виде, например, 'integrations', 'marketplaces', 'social' и т. д. Перед попыткой создания такой секции нужно проверять, не была ли она уже создана другим плагином, создатель которого руководствуется такими же соображениями. Вариант реализации показан в примере кода ниже.

Добавленные плагином подмассивы с пунктами и секциями меню должны содержать следующие элементы:
$params['menu'][id]['name'] string Локализованное название секции или пункта меню.
$params['menu'][id]['icon'] string HTML/SVG-код иконки для секции или пункта меню.
$params['menu'][id]['placement'] string Место размещения секции или пункта меню: 'body' (основная, верхняя часть меню), 'footer' (нижняя часть меню).
$params['menu'][id]['insert_before'] string Идентификатор стандартной секции меню, перед которой нужно разместить новый пункт или секцию. Если не указано, то применяется значение ключа insert_after либо, если оно не заполнено, новый пункт или секция добавляются в конце раздела меню, указанного в ключе placement.
$params['menu'][id]['insert_after'] string Идентификатор стандартной секции меню, после которой нужно разместить новый пункт или секцию. Используется, только если не указано значение в ключе 'insert_before'. Если не указано, то новый пункт или секция добавляются в конце раздела меню, указанного в ключе placement.
$params['menu'][id]['url'] string URL ссылки. Должен быть пустым, если заполнен элемент 'submenu' (в этом случае элемент меню является раскрывающимся разделом, а не ссылкой).
$params['menu'][id]['submenu'] array Список вложенных пунктов меню, если добавляемый элемент должен быть раскрывающейся секцией. Каждый элемент этого массива должен представлять собой подмассив со следующими ключами:
$params['menu'][id]['submenu'][]['name'] string Локализованный текст пункта меню.
$params['menu'][id]['submenu'][]['url'] string URL ссылки пункта меню.

Собственные пункты можно вставлять также в стандартные секции меню, добавляя новые элементы в массив 'submenu' этих секций.
… код плагина …

Результат работы плагина

Shop-Script

Пример кода плагина

PHP

public function backendExtendedMenu(&$params)
{
    $shop_backend_url = wa('shop')->getAppUrl(null, true);

    // Case 1: Add a simple 1st level menu item.
    $params['menu'][$this->id . '_item'] = [
        'name' => _wp("My plugin’s menu item"),
        'icon' => '<i class="fas fa-user"></i>',
        'url' => "{$shop_backend_url}{$this->id}/",
    ];

    // Case 2: Add 2nd level menu items grouped within a menu section.

    // Case 2.1: Create plugin’s own menu section with menu items.
    $params['menu'][$this->id . '_menu_section'] = [
        'name' => _wp("My menu section"),
        'icon' => '<i class="fas fa-user"></i>',
        'url' => '',
        'submenu' => [
            [
                'name' => _wp('Item 1'),
                'url' => "{$shop_backend_url}{$this->id}/one/",
            ],
            [
                'name' => _wp('Item 2'),
                'url' => "{$shop_backend_url}{$this->id}/two/",
            ],
        ],
    ];

    // Case 2.2: Add new items to a common section, which may already have been added by other plugins.
    // This way different plugins can add their menu items within one common section.

    // Example of a menu section ID,
    // which may be used to include menu items provided by different plugins
    // related to various 3rd party integrations.
    $menu_section_id = 'integrations';

    // Step 1: Create the common menu section if it does not exist,
    // i.e., has not yet been added by any other plugin.

    // If a menu section with the specified ID already exists
    // then this code will be ignored.
    shopMainMenu::createSection(
        $params['menu'],
        $menu_section_id,
        _wp("Integrations"),
        [
            // 'insert_before' adds the new section before the built-in "Storefront" section.
            // 'insert_after' will add it after the specified one.
            // Omitting this array item will simply add the new section at the end of the menu.
            'insert_before' => 'storefront',
            // 'body' means the main (top) menu part.
            // 'footer' will add the menu section in the footer (bottom) part.
            'placement' => 'body',
            'icon' => '<i class="fas fa-arrows-alt"></i>',
        ]
    );

    // Step 2: Add new items to the common menu section.
    shopMainMenu::createSubsection(
        $params['menu'],
        $menu_section_id,
        _wp("Item 1"),
        "{$shop_backend_url}{$this->id}/one/"
    );

    shopMainMenu::createSubsection(
        $params['menu'],
        $menu_section_id,
        _wp("Item 2"),
        "{$shop_backend_url}{$this->id}/two/"
    );
}