2010
03.30

WordPress 3.0 Menus

在的 WordPress 3.0 alpha 在 Appearance 裡面多了一個選項叫做 Menus. 這個選項已經出現好一陣子了,不過剛剛才心血來潮去看看是怎麼回事…

以往 WordPress 如果要做選單,通常是用

 <?php wp_list_pages( $args ); ?> 

搭配 ul li 然後再用 CSS 去控制呈現方式。不過現在 WordPress 3.0 以後, Page 終於可以專心當 Page 了, Page 的 Title 也不用再兼任選單名稱的角色,至於產生選單的事情就交給 Menus 吧!

Menus 的選項可以是 Page, Category, 或是 Custom Link,而且在後台可以產生多個 Menu 不怕不夠用。

WordPress Menus

註冊方法:在你的 theme (例如 header.php) 裡面加入

add_theme_support( 'nav-menus' );

這部份的程式碼如果想看詳細的判斷方法,可以從 /wp-admin/nav-menus.php 這邊往回 trace 。

呼叫方法:直接在 template 加入 (這個方法確定可以適用於 WP SVN Trunk 的 revision 13871 ) 。

實做方式:

<?
    wp_nav_menu( $args );
    $args = array( 'menu' => '',
            'container' => 'div',
            'container_class' => '',
            'menu_class' => 'menu',
            'echo' => true,
            'fallback_cb' => 'wp_page_menu',
            'before' => '',
            'after' => '',
            'link_before' => '',
            'link_after' => '',
            'depth' => 0,
            'walker' => '' );
?>

舉例而言,下面程式碼可以取回名為 roga-test 的這個 Menu (後台可以自訂 Menu 名稱),並且將 css 的 class 指定為 roga-menu

wp_nav_menu(array( 'menu' => 'roga-test', 'menu_class' => 'roga-menu'));

另外,我在 trace code 發現註解和實際接到的參數很多都不一樣(參考下圖),當然,實際可以用的參數還是以 WP Codex 那邊公佈的為主。
有時候寫程式不能太相信文件...

3 comments so far

Add Your Comment
  1. WP3对CMS功能有不少增强,就是感觉越来越臃肿了。不知道会不会有很多人转向更专注博客本身的Typecho等轻量级程序。

  2. 注册代码添加在functions.php中,使用如下行:
    // This theme uses wp_nav_menu() in one location.
    register_nav_menus( array(‘primary’=> __( ‘Primary Navigation’, ‘twentyten’),) );
    通常使用add_theme_support( ‘nav-menus’);会不正常。

    另外还要在header.php中查找
    wp_list_pages(‘sort_column=menu_order&depth=3&title_li=& exclude=’);行,替换为
    wp_nav_menu( ‘id=navbar’);

    偶是这么干滴,很完美~~ :D

    • Cool, thanks for sharing.

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>