2012-02-24 53 views
0

我創建以下簡碼功能如何包裝WordPress的簡碼在一個div

function servicesmenu() { 
    return wp_nav_menu(array('theme_location' => 'services_nav', 'menu_id' => 'servicesmenu')); 
} 
add_shortcode('servicesMenu', 'servicesmenu'); 

上調用菜單上的特定位置上面的代碼是工作的罰款。但是當我試圖來包裝它不是包裝一個DIV短碼,由簡碼生成的菜單之前DIV ID =「services_rightarea」未來

<div id="services_rightarea"> 
    <!-- other content here --> 
    [servicesMenu] 
</div> 

任何解決方案,請

回答

0

的問題是,wp_nav_menu回聲默認。你需要在變量中捕獲這個回聲並返回它。這可以用output buffering來完成:

function servicesmenu() { 

    // Start output buffering 
    ob_start(); 

    // The echo of this call is caught in the buffer 
    wp_nav_menu(array('menu_id' => 'servicesmenu'); 

    // Capture contents of buffer in a variable 
    $menu = ob_get_contents(); 

    // End buffering 
    ob_end_clean(); 

    // Return your menu and bask in the warming glow of working code 
    return $menu; 
} 
add_shortcode('servicesMenu', 'servicesmenu'); 

編輯:我剛纔注意到您還使用了theme_location財產。這將嘗試將wp_nav_menu呼叫的結果插入servicesmenu菜單,該菜單已使用register_nav_menu()註冊。

取出theme_location參數,輸出緩衝將按預期工作。

+0

感謝您的回覆,它解決了我的問題:) 如果刪除theme_location propery,它正在拾取另一個導航菜單,但輸出工作正常,您提供的代碼與theme_location中添加了它。 – 2012-02-24 16:47:25

+0

@alok我不明白什麼時候有theme_location,而不是你爲什麼使用簡碼 – 2012-02-25 05:24:22

+0

@PeachLabs我需要使用導航作爲頁面內容的列表。我不能直接在那裏使用PHP代碼。 – 2012-02-25 11:12:29