我对Adrian Z. 的回答进行了改进。
这取决于这些类。我曾经composer
将它们加载到代码中。
在结束时functions.php
,我放置了:
/**
* @property \Onimla\SemanticUI\Menu $menu
* @property \Onimla\SemanticUI\Container $container
* @property array $items
* @property WP_Post $wp_menu_items
*/
class Semantic_UI_Menu
{
/**
* Sub menus
* @var array
*/
public $sub = array();
/**
* @see https://stackoverflow.com/a/25242681/437459
* @param string $menu_name
*/
public function __construct($menu_name, $horizontal = true)
{
require_once substr(__DIR__, 0, strrpos(__DIR__, DIRECTORY_SEPARATOR)) . DIRECTORY_SEPARATOR . 'vendor/autoload.php';
$locations = get_nav_menu_locations();
if ($locations && isset($locations[$menu_name])) {
$menu_object = wp_get_nav_menu_object($locations[$menu_name]);
$menu_items = wp_get_nav_menu_items($menu_object->term_id);
$this->wp_menu_items = array_combine(array_column(json_decode(json_encode($menu_items), true), 'ID'), $menu_items);
$this->items = array();
foreach (new ArrayIterator($this->wp_menu_items) as $menu_item) {
/* @var $menu_item WP_Post */
$is_home = $menu_item->post_name == 'home' and $menu_item->post_title = 'Home';
/* Instâncias =============================================================== */
$item = new \Onimla\SemanticUI\Menu\Item($menu_item->title, $menu_item->url, $menu_item->attr_title);
/* Atributos ================================================================ */
if (strlen($menu_item->target) > 0) {
$item->target($menu_item->target);
}
if ($menu_item->url == get_permalink()) {
$item->setActive();
}
/* Árvore =================================================================== */
$this->home_item($menu_item, $item);
/* Exibição ================================================================= */
$this->submenu($menu_item, $item, $horizontal);
}
/* Instâncias =============================================================== */
$this->container = new \Onimla\SemanticUI\Container($this->items);
$this->menu = new \Onimla\SemanticUI\Menu;
/* Atributos ================================================================ */
#$this->menu->pointing();
$this->menu->large();
/* Árvore =================================================================== */
$this->menu->container = $this->container;
} else {
$this->menu = new \Onimla\SemanticUI\Message\Error\WithWarningSign("Menu \"{$menu_name}\" não encontrado.");
}
}
public function __toString()
{
return "{$this->menu}";
}
/**
* @param WP_Post $menu_item
* @param \Onimla\SemanticUI\Menu\Item $sui_item
*/
protected function home_item($menu_item, &$sui_item)
{
if ($menu_item->url == esc_url(home_url('/'))) {
$sui_item->text($menu_item->title == 'Home' ? __('Home', 'josb2017') : $menu_item->title);
$sui_item->prepend(new \Onimla\SemanticUI\Icon\Home);
if (is_home()) {
$sui_item->setActive();
}
}
}
/**
*
* @param WP_Post $menu_item
* @param \Onimla\SemanticUI\Menu\Item $sui_item
* @return \Onimla\SemanticUI\Content\Item|\Onimla\SemanticUI\Menu\Item\Dropdown
*/
protected function submenu($menu_item, &$sui_item, $horizontal = true)
{
$parent_id = (int) $menu_item->menu_item_parent;
if ($parent_id == '0') {
$this->items[$menu_item->ID] = $sui_item;
return $sui_item;
}
if (key_exists($parent_id, $this->sub)) {
$this->sub[$parent_id]->append($sui_item);
return $this->sub[$parent_id];
} else {
unset($this->items[$parent_id]);
/* @var $parent WP_Post */
$parent = $this->wp_menu_items[$parent_id];
/* Instâncias =============================================================== */
$dropdown = new \Onimla\SemanticUI\Menu\Item\Dropdown($parent->title);
$group = new \Onimla\SemanticUI\Menu\Item\Group();
/* Atributos ================================================================ */
if (strlen($parent->attr_title) > 0) {
$dropdown->title($parent->attr_title);
}
/* Árvore =================================================================== */
$dropdown->append($sui_item);
$group->setHeader($parent->title);
$group->append($sui_item);
/* Exibição ================================================================= */
$result = $horizontal ? $dropdown : $group;
$this->items[$parent_id] = $result;
$this->sub[$parent_id] = $result;
unset($this->items[$menu_item->ID]);
return $result;
}
return false;
}
}
/**
* @param string $menu_name
*/
function wp_get_nav_sui_menu($menu_name, $horizontal = true)
{
$sui_menu = new Semantic_UI_Menu($menu_name, $horizontal);
return $sui_menu->menu;
}
function wp_nav_sui_menu($menu_name, $horizontal = true)
{
echo wp_get_nav_sui_menu($menu_name, $horizontal);
}
该代码使用两个级别进行了测试。我没有时间编写更多关卡。
此外,您必须运行 JavaScript 才能激活下拉菜单:
$('.ui.dropdown.item').dropdown({on: 'hover'});