2012-07-09 19 views
6

私はこのコードでメニュー項目を作った。 メニュー項目は表示されますが、ショートコード出力は表示されません。 追加できるものがあるか、これを行う別の方法がありますか? これが役立つことを期待して追加しました。ショートカットをワードプレスメニューに挿入する方法

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

をそれを置く動作しますブラケットが外されてしまうためです。しかし、プレースホルダは#profile_link#のように使用できます。

functions.phpに次のコードを入力すると、#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'); 

あなただけの$placeholders配列に'shortcode'を設定し、必要に応じて'atts''content'する必要があります。あなたのショートはこのようであれば

たとえば、:

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

あなたは更新されます:それは、リソース集約型の機能ではないですI don't use do_shortcode()ので

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

注意をこの場合の仕事のための適切なツールです。

+0

それは実際に働いていたうわー、長い長い時間を探している@Tim responce – xyz

+0

ちょうど私が探していた、ありがとう! – hotshots

+0

@ J.D。 - こんにちは、私はあなたのコードにこのショートコードを追加しようとしていますが、動作しません([ip:GB] 020 7267 5222 [/ ip])。あなたは私を助けてくれるのですか –

13

@Tim は、このコードは

あなたは上のメニューのURLに直接ショートコードを使用することはできませんのfunctions.phpファイルに

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

あなたはそのコードのいずれかのオプションの引数を追加することができます@Tim、私は基本的な1 –

+0

はありがとうあなたを与える私はあなたを歓迎:) – xyz

+0

に感謝ウサマこのため。多くのありがとうJ.D –

関連する問題