Magento 2 WordPress 集成(FishPig 扩展)- 在 Magento 中添加菜单

Magento 2 WordPress Integration (FishPig Extension) - Add menu in Magento

我使用 fishPig Magento WordPress Integration for magento 2。在第一个版本中,在 magento 中添加菜单的功能已经建立。在第二个版本中,它是不完整的,开发人员向我指出了模型 Menu.php 以实现这一目标。需要一些帮助,以便指出正确的方向。有人遇到同样的问题吗?

分机:https://fishpig.co.uk/magento-2/wordpress-integration/

看看 Model/Menu.php。从那里开始,我必须构建它以便在前端获取 WP 菜单。不幸的是没有 Menu.php 块,我想首先我必须建立块,然后是 xml 和 phtml 模板

菜单并非不完整,只是您没有正确检查代码。

以下代码将加载菜单数组。该数组包含构建菜单所需的所有信息。然后,您可以递归循环数组以使用所需的 HTML 结构构建菜单。如果您要将此菜单添加到现有菜单,这将很有用,因为它允许您匹配现有菜单使用的 HTML 结构。

// This uses the object manager
// A better way would be to inject the MenuFactory in your constructor
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$menu = $objectManager->create('FishPig\WordPress\Model\MenuFactory')->create();

$menuId = 3;

if ($menu->load($menuId)->getId()) {
    echo sprintf('<pre>%s</pre>', print_r($menu->getMenuTreeArray(), true));
}
else {
    echo 'No menu exists in WordPress with an ID of ' . (int)$menuId;
}

如果你不关心使用什么HTML结构,你可以使用下面的块:

\FishPig\WordPress\Block\Sidebar\Widget\NavMenu

如果您查看此块的代码,您会看到它检查菜单 ID 的数据项 'nav_menu'。您可以通过 XML 进行设置(如果您通过 XML 创建块)或使用 PHP:

创建整个内容
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$menuBlock = $objectManager->create('FishPig\WordPress\Block\Sidebar\Widget\NavMenuFactory')->create();

$menuId = 3;

echo $menuBlock->setNavMenu($menuId)->toHtml();

尽管此解决方案不如原始解决方案好,因为它强制您使用特定的 HTML 结构。使用第一个解决方案会更好,因为这将允许您使用所需的任何 HTML 结构。您的主题可能已经有一个包含 CSS 规则和 JS 的菜单,因此您可以使用此方法以正确的 HTML 结构构建菜单。