gpt4 book ai didi

php - WordPress 菜单 : On click of parent menu item, 仅显示该链接的子导航子项

转载 作者:可可西里 更新时间:2023-11-01 00:39:21 27 4
gpt4 key购买 nike

我的 WordPress 导航功能出现问题。我有以下功能可以从管理员那里提取菜单项:

function cr_get_menu_items($menu_location)
{
$locations = get_nav_menu_locations();
$menu = get_term($locations[$menu_location], 'nav_menu');
return wp_get_nav_menu_items($menu->term_id);
}

在我的导航模板中,我使用此函数来仅拉入父项,如下所示:

  <?php $nav = cr_get_menu_items('navigation_menu') ?>
<?php foreach ($nav as $link):
if ($link->menu_item_parent == 0) : ?>
<a class="main-nav" href="<?= $link->url ?>"><?= $link->title ?></a>
<?php endif; endforeach; ?>

我试图制作一个子导航来显示这样的子项:

<?php $nav = cr_get_menu_items('navigation_menu') ?>
<?php foreach ($nav as $link):
if ($link->menu_item_parent !== 0) : ?>
<a href="<?= $link->url ?>"><?= $link->title ?></a>
<?php endif; endforeach; ?>

这会拉入所有子菜单项。我正在构建的导航应该工作的方式是:您单击父菜单项,子导航显示该父菜单的所有子菜单项。隐藏/显示功能都是 JS。

有没有办法改变我必须为特定父菜单项只拉入子项的功能?感谢您提供任何帮助/指导。

最佳答案

Is there a way to alter the function I have to pull in only children for a specific parent menu item?

为此目的,是的,有。

尝试以下函数(替换现有的cr_get_menu_items() 函数):

function cr_get_menu_items($menu_location, $parent = -1)
{
$locations = get_nav_menu_locations();
$menu = get_term($locations[$menu_location], 'nav_menu');
$items = wp_get_nav_menu_items($menu->term_id);

if ( is_numeric( $parent ) && $parent >= 0 ) {
$_id = (int) $parent;
foreach ( $items as $i => $item ) {
if ( $_id !== (int) $item->menu_item_parent ) {
unset( $items[ $i ] );
}
}
}

return $items;
}

使用示例:

$nav = cr_get_menu_items( 'navigation_menu' );    // Get all menu items.
$nav = cr_get_menu_items( 'navigation_menu', 0 ); // Get menu items whose parent ID is 0

更新

在我重新阅读你的问题后,这是你可能需要的函数:

// $items is the menu items array that you retrieved using `cr_get_menu_items()`,
// or other functions which return valid `nav_menu` items.
function cr_get_submenu_items( array $items, $parent ) {
$parent = (int) $parent;

$list = [];
foreach ( $items as $item ) {
if ( $parent === (int) $item->menu_item_parent ) {
$list[] = $item;
}
}

return $list;
}

更新#2

以下是您将/可以将 cr_get_menu_items()cr_get_submenu_items() 一起使用的方式:

<?php $nav = cr_get_menu_items('navigation_menu') ?>

<!-- Display parent items. -->
<?php $nav = cr_get_menu_items('navigation_menu') ?>
<?php foreach ($nav as $link):
if ($link->menu_item_parent == 0) : ?>
<a class="main-nav" href="<?= $link->url ?>"><?= $link->title ?></a>
<?php endif; endforeach; ?>

<!-- Display children items. (in its own wrapper `div`/`ul`/etc.) -->
<?php $_ids = []; ?>
<?php foreach ($nav as $link):
$parent = (int) $link->menu_item_parent;
if ( 0 !== $parent && ! in_array( $parent, $_ids ) ) : ?>
<!-- This `div` is just an example wrapper. -->
<div class="menu-<?= $parent ?>-subnav">
<?php foreach ( cr_get_submenu_items( $nav, $parent ) as $clink ): ?>
<a href="<?= $clink->url ?>"><?= $clink->title ?></a>
<?php endforeach; ?>
<?php $_ids[] = $link->menu_item_parent; ?>
</div>
<?php endif; endforeach; ?>

关于php - WordPress 菜单 : On click of parent menu item, 仅显示该链接的子导航子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50184421/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com