2012-07-09 56 views
6

我用這段代碼做了一個菜單項。 菜單項出現,但短碼輸出不存在。 有什麼我可以添加或不同的方法,將做到這一點。 我也加入了希望這可能有所幫助。如何在wordpress菜單中插入短代碼

add_filter('wp_nav_items', 'do_shortcode', 7); 

或者也許有人知道這是不可能的,可以告訴我。

/* Nav Menu */ 
function add_profile_link_to_nav(){ 
if (is_user_logged_in()) { ?> 

<ul> 
    <li class="menu-item"id="one"> <a href="http://example.com/members/">All Members</a> 
    <ul class="sub-menu"> 
     <li class="menu-item"><?php echo custom_execute_shortcode(); ?> </li> 
    </ul> 
</li> 
</ul> <!--end menu---> 
<?php } 
} 
add_action("wp_nav_items","add_profile_link_to_nav"); 

function custom_execute_shortcode() { 
$myfunction= '[my shortcode"]'; 
$myfunction_parsed = do_shortcode($myfunction); 
return $myfunction_parsed; 
} 

感謝

回答

6

您不能直接在菜單URL上使用簡碼菜單頁面,因爲括號被刪除。但是你可以使用像這樣的佔位符:#profile_link#

使用functions.php中的以下代碼,您可以創建一個自定義菜單項,其URL爲#profile_link#,它將用您的簡碼替換它。

/** 
* Filters all menu item URLs for a #placeholder#. 
* 
* @param WP_Post[] $menu_items All of the nave menu items, sorted for display. 
* 
* @return WP_Post[] The menu items with any placeholders properly filled in. 
*/ 
function my_dynamic_menu_items($menu_items) { 

    // A list of placeholders to replace. 
    // You can add more placeholders to the list as needed. 
    $placeholders = array(
     '#profile_link#' => array(
      'shortcode' => 'my_shortcode', 
      'atts' => array(), // Shortcode attributes. 
      'content' => '', // Content for the shortcode. 
     ), 
    ); 

    foreach ($menu_items as $menu_item) { 

     if (isset($placeholders[ $menu_item->url ])) { 

      global $shortcode_tags; 

      $placeholder = $placeholders[ $menu_item->url ]; 

      if (isset($shortcode_tags[ $placeholder['shortcode'] ])) { 

       $menu_item->url = call_user_func( 
        $shortcode_tags[ $placeholder['shortcode'] ] 
        , $placeholder['atts'] 
        , $placeholder['content'] 
        , $placeholder['shortcode'] 
       ); 
      } 
     } 
    } 

    return $menu_items; 
} 
add_filter('wp_nav_menu_objects', 'my_dynamic_menu_items'); 

你只需要設置'shortcode'$placeholders陣列,以及可選'atts''content'

例如,如果你的簡碼是這樣的:

[example id="5" other="test"]Shortcode content[/example] 

您將更新:

'#placeholder#' => array(
    'shortcode' => 'example'; 
    'atts' => array('id' => '5', 'other' => 'test'); 
    'content' => 'Shortcode content'; 
), 

請注意,我don't use do_shortcode(),因爲它是一個資源密集型功能,而不是在這種情況下工作的正確工具。

+0

哇實際工作,一直在尋找一個很長很長的時間爲了這。很多謝謝J.D – xyz 2013-11-08 04:11:20

+0

正是我在找的,謝謝! – hotshots 2014-09-05 15:41:26

+0

@ J.D。 - 嗨,我試圖將這個簡碼添加到您的代碼中,但它不會工作([ip:GB] 020 7267 5222 [/ ip])。你可以幫助我 – 2015-07-07 15:07:59

13

@Tim 此代碼將工作

把它放在functions.php文件

add_filter('wp_nav_menu_items', 'do_shortcode'); 
+0

@Tim您可以添加任何可選args作爲代碼,我只給你基本的一個 – 2013-07-13 11:20:19

+0

謝謝烏薩馬·本我很欣賞的性反應 – xyz 2014-02-12 13:52:13

+0

@Tim歡迎您:) – 2014-02-19 05:01:48

相關問題