1

特定のページのサブメニュー オプションのみを表示するメニューを作成したいと考えています。

たとえば、メニュー オプション DASHBOARD にサブメニュー MESSAGE BOARD と CALENDAR がある場合、MESSAGE BOARD と CALENDAR だけで別のメニューを作成できるようにしたいと考えています。

WordPress の [外観] > [メニュー] タブを使用してメニュー オプションを管理できるように、wp_list_pages 関数を使用せずにこれを行いたいと考えています。

ありがとう!

4

3 に答える 3

1

私の理解が正しければ、サブページに追加のメニュー項目が必要ですか?

IE このようなメニューがあります

ホーム 会社概要 ダッシュボード よくある質問 お問い合わせ

DASHBOARD には 2 つのサブページがあります -> BOARD CALENDAR

DASHBOARD ページにいるとき、BOARD および CALENDAR ページを次のように表示する必要があります。

ホーム 会社概要 ダッシュボード よくある質問 お問い合わせ 掲示板 カレンダー

このように functions.php に追加のメニューを追加できます

<?php if (function_exists('register_nav_menus'))
{
    register_nav_menus
    (
        array
        (
            'main_nav'=>'main menu', // your main menu
            'dash_nav'=>'dashboard menu', //your dashboard menu

        )
    );
}?>

そして、これを持つダッシュボードのページ テンプレートを作成します。

<?php wp_nav_menu(array('menu'=>'dashboard menu'));?>

編集:

header.php を編集して、次のようなものを追加できます。

<?php if (is_page_template('dashboard.php') :?>
    <link href="csspath" rel="stylesheet" type="text/css" />
<?php endif;?>

そうすれば、サブメニューをオーバーライドする別の css ファイルを追加できます。

于 2012-07-06T08:33:03.200 に答える
0

既存のワードプレス メニューから子メニュー項目だけを選択してサブメニューのみを表示したいというあなたと同様の欲求があったと思います。これは、functions.php を編集し、サブメニューをターゲットにして表示する独自の walker クラスを持つショートコードを追加することで実行できます。

「メニュー」ショートコードとカスタマイズされたメニュー ウォーカー クラスの PHP コード (すべて functions.php に含まれます):

    //register menu shortcode
    add_shortcode('menu', 'shortcode_menu');
    function shortcode_menu($args ) {
            //don't echo the ouput so we can return it
            $args['echo']=false;
            //in case menu isn't found display a message
            $args['fallback_cb']='shortcode_menu_fallback';
            //check if showing a submenu, if so make sure everything is setup to do so
            if (isset($args['show_submenu']) && !empty($args['show_submenu'])) {
                    if (!isset($args['depth'])) {
                            $args['depth']=1;
                    }
                    $args['walker']=new Sub_Menu_Walker_Nav_Menu();
            }
            $menu=wp_nav_menu( $args );
            return $menu;
    }
    //message to display if menu isn't found
    function shortcode_menu_fallback($args ) {return 'No menu selected.';}

    //special walker_nav_menu class to only display submenu
    //depth must be greater than 0
    //show_submenu specifies submenu to display
    class Sub_Menu_Walker_Nav_Menu extends Walker_Nav_Menu {
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {
      if ( !$element )
       return;

      $id_field = $this->db_fields['id'];

      $displaythiselement=$depth!=0;
      if ($displaythiselement) {
              //display this element
              if ( is_array( $args[0] ) )
               $args[0]['has_children'] = ! empty( $children_elements[$element->$id_field] );
              $cb_args = array_merge( array(&$output, $element, $depth), $args);
              call_user_func_array(array(&$this, 'start_el'), $cb_args);
      }

      $id = $element->$id_field;
      if ( is_array( $args[0] ) ){
            $show_submenu=$args[0]['show_submenu'];
      }else
            $show_submenu=$args[0]->show_submenu;

      // descend only when the depth is right and there are childrens for this element
      if ( ($max_depth == 0 || $max_depth >= $depth+1 ) && isset( $children_elements[$id]) && $element->title==$show_submenu) {

       foreach( $children_elements[ $id ] as $child ){

        if ( !isset($newlevel) ) {
         $newlevel = true;
         //start the child delimiter
         $cb_args = array_merge( array(&$output, $depth), $args);
         call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
        }
        $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
       }
       unset( $children_elements[ $id ] );
      }

      if ( isset($newlevel) && $newlevel ){
       //end the child delimiter
       $cb_args = array_merge( array(&$output, $depth), $args);
       call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
      }

      if ($displaythiselement) {
              //end this element
              $cb_args = array_merge( array(&$output, $element, $depth), $args);
              call_user_func_array(array(&$this, 'end_el'), $cb_args);
      }
     }
    }

「メイン」メニューから「About」というタイトルのサブメニューを表示します (大文字が重要です)。

[menu menu='Main' show_submenu='About']

完全な「メイン」メニューを表示します。

[menu menu='Main']

さらに読む/参照するには、このワードプレスの質問を参照してください。

于 2012-11-30T23:02:28.523 に答える