【问题标题】:How to Get Menu Items In Wordpress?如何在 Wordpress 中获取菜单项?
【发布时间】:2015-02-23 18:05:46
【问题描述】:

我想获取我的 wp 主菜单的项目。我尝试了一些代码,但它们都只返回空白页。我不知道我必须使用哪种方法,也不知道需要在我的页面中包含任何其他页面?

有没有什么方法可以直接从数据库中获取菜单项而不使用 wp 方法和函数?我现在无法理解 wp 的表结构。所以我不确切知道表之间的关系。

谢谢。

【问题讨论】:

  • 您的意思是在函数中将它们作为数组或字符串获取,或者能够为您的主题添加导航菜单支持?
  • 想要将它们作为数组或字符串获取。

标签: php wordpress menu


【解决方案1】:

你可以试试这个

$menu_name = 'sidebar-menu'; //menu slug
$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' ) );

echo "<pre>";
print_r($menuitems);
echo "</pre>";

你会得到你的菜单对象

参考:http://wiki.workassis.com/wordpress-get-menu-array/

【讨论】:

    【解决方案2】:

    如果您知道您的菜单位置 ID(通常在 functions.php 中由“register_nav_menus”声明),您可以使用这个 sn-p:

    // GET ALL MENU OBJECTS AT SPECIFIED LOCATION
    function yourprefix_get_menu_items($location_id){
        //$locations = get_registered_nav_menus();
        $menus = wp_get_nav_menus();
        $menu_locations = get_nav_menu_locations();
    
        if (isset($menu_locations[ $location_id ]) && $menu_locations[ $location_id ]!=0) {
            foreach ($menus as $menu) {
                if ($menu->term_id == $menu_locations[ $location_id ]) {
                    $menu_items = wp_get_nav_menu_items($menu);
                    break;
                }
            }
            return $menu_items;
        }
    }
    

    或来自 codex 的更短版本:

    function yourprefix_get_menu_items($menu_name){
        if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
            $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
            return wp_get_nav_menu_items($menu->term_id);
        }
    }
    

    然后像这样用这个数组做你想做的一切:

    $menu_items = yourprefix_get_menu_items('sidebar-menu'); // replace sidebar-menu by desired location
    
    if(isset($menu_items)){
            foreach ( (array) $menu_items as $key => $menu_item ) {
                ...some code...
            }
    }
    

    这里是有关所有 nav_menu 数据的链接,您可以通过 mysql 请求直接从数据库中选择这些数据: http://lasota.community.uaf.edu/2011/07/29/nav-menu-data-location-in-wordpress-3-2/

    【讨论】:

      【解决方案3】:
      <?php 
      $menu = 'menu-name/menu-id';
      $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 );
      $items = wp_get_nav_menu_items( $menu, $args ); 
      ?> 
      

      【讨论】:

        【解决方案4】:

        你可以这样做:

        add_action('wp_nav_menu_menuname_items', 'user_nav_menu_items');
        function user_nav_menu_items( $items ) {
            /* do something with $items (string) */
            return $items;
        }
        

        如果你想要它作为一个数组,只需在完成后将其炸开并内爆:

        add_action('wp_nav_menu_menuname_items', 'user_nav_menu_items');
        function user_nav_menu_items( $items ) {
            $items_r = explode("<li", $items);
            /* do something with $items_r (array) */
            $items_new = implode("<li", $items_r);
            return $items_new;
        }
        

        在这两种情况下,您都需要将 add_action 挂钩中的 menuname 替换为您尝试获取其项目的菜单名称。

        【讨论】:

          【解决方案5】:

          使用get_registered_nav_menus()函数

          <?php
          
          $menus = get_registered_nav_menus();
          
          foreach ( $menus as $location => $description ) {
          
              echo $location . ': ' . $description . '<br />';
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-13
            • 2015-09-24
            • 2020-06-21
            • 2017-06-08
            • 1970-01-01
            相关资源
            最近更新 更多