php - 如何在php中的数组的父项下显示子项

标签 php arrays wordpress for-loop

我有一个这样的数组:

Array
(
    [0] => stdClass Object
        (
            [ID] => 1
            [menu_item_parent] => 0
            [title] => Home
            [url] => http://www.example.com/
        )

    [1] => stdClass Object
        (
            [ID] => 2
            [menu_item_parent] => 0
            [title] => Menu 2
            [url] => http://www.example.com/menu-2/
        )

    [2] => stdClass Object
        (
            [ID] => 3
            [menu_item_parent] => 2
            [title] => Sub Menu 1
            [url] => http://www.example.com/menu-2/sub-menu-1
            [target] => 
        )

    [3] => stdClass Object
        (
            [ID] => 4
            [menu_item_parent] => 0
            [title] => Menu 4
            [url] => http://www.example.com/menu-4/
            [target] => 

        )
)

现在您可以看到数组的第三项是第二个数组项的子项(请参阅列 menu_item_parent )。现在我的问题是如何使用此数组显示此父项及其子项。请帮助。

最佳答案

最后在@Matt.C 提供链接的帮助下解决了我的问题。感谢@Matt.C。这是解决方案:

首先将菜单项设为平面数组:

<?php
$menu_name = 'main_nav';
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
$menuitems = wp_get_nav_menu_items( $menu->term_id, array( 'order' => 'DESC' ) );
?>

然后迭代菜单项的数组:
<nav>
<ul class="main-nav">
    <?php
    $count = 0;
    $submenu = false;

    foreach( $menuitems as $item ):
        // get page id from using menu item object id
        $id = get_post_meta( $item->ID, '_menu_item_object_id', true );
        // set up a page object to retrieve page data
        $page = get_page( $id );
        $link = get_page_link( $id );

        // item does not have a parent so menu_item_parent equals 0 (false)
        if ( !$item->menu_item_parent ):

        // save this id for later comparison with sub-menu items
        $parent_id = $item->ID;
    ?>

写入第一个父项 <li>:
 <li class="item">
        <a href="<?php echo $link; ?>" class="title">
            <?php echo $page->post_title; ?>
        </a>
        <a href="<?php echo $link; ?>" class="desc">
            <?php echo $page->post_excerpt; ?>
        </a>
    <?php endif; ?>

检查此项目的父 ID 是否与存储的父 ID 匹配:
     <?php if ( $parent_id == $item->menu_item_parent ): ?>
Start sub-menu <ul> and set $submenu flag to true for later referance:

            <?php if ( !$submenu ): $submenu = true; ?>
            <ul class="sub-menu">
            <?php endif; ?>
Write the sub-menu item:

                <li class="item">
                    <a href="<?php echo $link; ?>" class="title"><?php echo $page->post_title; ?></a>
                    <a href="<?php echo $link; ?>" class="desc"><?php echo $page->post_excerpt; ?></a>

如果下一项没有相同的父 ID 并且我们声明了一个子菜单,则关闭子菜单 <ul>
<?php if ( $menuitems[ $count + 1 ]->menu_item_parent != $parent_id && $submenu ): ?>
        </ul>
        <?php $submenu = false; endif; ?>

<?php endif; ?>

同样,如果数组中的下一项没有相同的父 ID,则关闭 <li>
  <?php if ( $menuitems[ $count + 1 ]->menu_item_parent != $parent_id ): ?>
    </li>                           
    <?php $submenu = false; endif; ?>

<?php $count++; endforeach; ?>
  </ul>
</nav> 

关于php - 如何在php中的数组的父项下显示子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15361905/

相关文章:

PHP 重置 $POST 值并列出所有结果

php - 将数组元素移动到 PHP 中的新索引

arrays - Swift 中与 JavaScript 的 Array.some() 和 Array.every() 相对应的是什么?

WordPress主题名称在主题php文件中,这样做的目的是什么?

javascript - 仅在用户登录时加载页面

php - 我如何设计交替的 WordPress 帖子?

php - 如何测试数据库中是否存在行

php - 将注释放在可创建语句的中间

php - 授予 Laravel 5 中新角色的权限

arrays - 如何将 AD 计算机名称传递给数组?