【问题标题】:How to get a single specific item from wordpress menu如何从 wordpress 菜单中获取单个特定项目
【发布时间】:2021-10-15 02:56:26
【问题描述】:

如何从 wordpress 菜单中获取特定项目? wp_nav_menu 函数返回所有项目,例如我想获取列表中的第二个链接。

功能:

// HTML5 Blank navigation
function html5blank_nav()
{
    wp_nav_menu(
    array(
        'theme_location'  => 'header-menu',
        'menu'            => '',
        'container'       => '',
        'container_class' => 'menu-{menu slug}-container',
        'container_id'    => '',
        'menu_class'      => '',
        'menu_id'         => '',
        'echo'            => true,
        'fallback_cb'     => 'wp_page_menu',
        'before'          => '',
        'after'           => '',
        'link_before'     => '',
        'link_after'      => '',
        'items_wrap'      => '<ul class="ul-menu"> %3$s </ul>',
        'depth'           => 0,
        'walker'          => ''
        )
    );
}

输出:

 <ul class="ul-menu">
    <li><a href="#">menu item 1</a></li>
    <li><a href="#">menu item 2</a></li>
    <li><a href="#">menu item 3</a></li>
 </ul>

期望的输出:

<li><a href="#">menu item 2</a></li>

请注意:这必须是服务器端解决方案,我不希望通过 CSS 或 JavaScript 来定位菜单项。

提前致谢!

【问题讨论】:

  • 我记得你需要用你自己的自定义walker扩展Walker_Nav_Menu类,然后你可以操作每个项目(我猜是提取一个)见here

标签: php html wordpress


【解决方案1】:

请改用wp_get_nav_menu_items($menu, $args)

我相信你的情况

$args = array(
    'order'                  => 'ASC',
    'orderby'                => 'menu_order',
    'post_type'              => 'nav_menu_item',
    'post_status'            => 'publish',
    'output'                 => ARRAY_A,
    'output_key'             => 'menu_order',
    'nopaging'               => true,
    'update_post_term_cache' => false );

wp_get_nav_menu_items('header-menu', $args);

应该返回一个菜单列表对象数组。您可以使用第二个并将内容放入列表项中,或者任何您想对它做的事情。

https://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items

【讨论】:

  • 感谢这有帮助,但不是我想要的……理想情况下,我想创建一个函数来输出请求的项目,比如 get_menu_item(2); 它将输出 &lt;li&gt;&lt;a href="#"&gt;menu item 2&lt;/a&gt;&lt;/li&gt; 我只是不能似乎想出了实现它的逻辑
  • $items = wp_get_nav_menu_items('header-menu', $args);echo( '&lt;li&gt;&lt;a href="#"&gt;' . $items[1]["post_title"] . '&lt;/a&gt;&lt;/li&gt;);这样的东西呢
【解决方案2】:

逻辑中没有什么新东西,但我将之前的解决方案放入了一个返回输出的函数中。这使代码更易于阅读。您必须将菜单项数组作为参数放入函数中。

$menu_items = wp_get_nav_menu_item( 'header-menu', $args );

echo get_menu_item( 2, $menu_items );

function get_menu_item( $item_number, $items ) {
  
   $output = '<li><a href="#">' . $items[ $item_number ][ "post_title" ] . '</a></li>';
   
   return $output;

}

【讨论】:

    【解决方案3】:

    这是查看数据的一种方式:

    function nav_menu_example($items){
      foreach($items as $item){
        if ($item->post_title == '<your-nav-menu-item-name>') {
          // Do something with it...
          var_dump($item->post_title);
        }
      }
      return $items;
    }
    add_filter('wp_nav_menu_objects', 'nav_menu_example');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 2011-02-21
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      相关资源
      最近更新 更多