この新しいプラグインを見つけました
http://wpsmith.net/wordpress/creating-multiple-custom-menus-in-wordpress-3-1
ユーザーがログインしていない場合は、walkerクラスによって解析される前に、新しい3.1フック(wp_nav_menu_objects)を使用して特定のnav-menu-itemをnav-menu-item配列から削除します。プラグインは特定のCSSを使用します。削除する項目を決定するための識別子としての-class。
そのため、特定のメニュー項目の表示に関する高度な条件付きセットを使用するために、ナビゲーションメニュー項目の説明にショートコードを使用できないのではないかと考えていました(xページの表示、donなど)。ページyに表示しない、または特に便利な方法:ウォーカーによって配列が解析される前に、それらをnav_menu_item配列に挿入することによって、子ページ/カテゴリなどを自動的に含める
しかし追加
add_filter(‘wp_nav_menu_objects’, ‘do_shortcode’);
ページが正しく読み込まれません。空白ページエラーではありませんが、ナビゲーションメニューのコンテナーdivの直後にページのレンダリングが停止します。この目的のためにネイティブWPショートコード機能を使用する方法はありますか?それとも、nav-item-contentsを分析する関数内にカスタムショートコードパーサを作成する必要があるでしょうか?
アイデアをありがとう!
問題は、do_shortcode()
が最初のパラメータに文字列を期待しているのに対し、wp_nav_menu_objects
がメニューオブジェクトの配列を渡していることです。
あなたはdo_shortcode
にあなた自身のラッパー関数を書かなければならないでしょう、このような何か...
function my_nav_menu_objects_shortcode_mangler($items) {
foreach ($items as $item) {
$item->classes = explode(' ', do_shortcode(implode(' ', (array)$item->classes)));
}
return $items;
}
うまくいくかもしれません。 wp-includes/nav-menu-template.php
のソースを見てナビゲーションメニューオブジェクト($ item)の構造を調べてから、どのプロパティをどのように変更するのが最適か、またどのようにフォーマットし、どのようにそれを文字列に変換するのかあなたはそれの上にショートコードを走らせることができます、など)。
ただし、そのようなロジックを実装する他の手段は、ショートコード機能をハッキングするよりも優れている可能性があります。
また、そのモデルを使用すると、メニュー項目の1つのプロパティにショートコードを設定して別のプロパティの出力を変更することはできません。メニュー項目ラベルにショートコードを設定できずクラス。そのようには動作しません。
たとえば優先順位を11に変更するとどうなりますか。
add_filter(‘wp_nav_menu_objects’, ‘do_shortcode’, 11);
これがshortcodes.phpのthe_contentにフィルタが追加される方法です。参照してください: http://codex.wordpress.org/Function_Reference/do_shortcode