zamoose
  • 0
Эксперт

Создать меню, отображающее дочерние страницы, с помощью wp_list_pages() с новыми функциями меню в WordPress 3.0?

  • 0

Раньше я мог выборочно загружать дочерние страницы для выбранной в данный момент родительской страницы, используя такую ​​логику:

if(  $post->post_parent ) {
  $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
} else {
  $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
}

if ($children) { ?>
   <ul id="subnav">
     <?php echo $children; ?>
   </ul>
<?php 
} else {
}

Кажется, нет собственного способа сделать это с помощью новой функциональности register_nav_menus()/wp_nav_menu(). Кто-нибудь знает, как я могу исправить это вместе в этот момент?

Вот скриншот того, чего я пытаюсь достичь:

Скриншот выпадающего дочернего меню

Share
  1. Это сложно, так как wp_nav_menu не имеет отношения к иерархии страниц (или вообще к страницам, если уж на то пошло). Я недостаточно знаю о меню, чтобы ответить на него сейчас, но это очень интересный вопрос.

    • 0
  2. Я создал виджет под названием Page Sub Navigation (умный, я знаю), который у меня работает.

    Если вы установите это, вы можете просто перетащить виджет в одну из ваших областей виджетов, и БАМ он заработает.

    <?php
    /*
    Plugin Name: Page Sub Navigation
    Plugin URI: http://codegavin.com/wordpress/sub-nav
    Description: Displays a list of child pages for the current page
    Author: Jesse Gavin
    Version: 1
    Author URI: http://codegavin.com
    */
    
    function createPageSubMenu()
    {
      if (is_page()) {
        global $wp_query;
    
        if( empty($wp_query->post->post_parent) ) {
          $parent = $wp_query->post->ID;
        } else {
          $parent = $wp_query->post->post_parent;
        }
    
        $title = get_the_title($parent);
    
        if(wp_list_pages("title_li=&child_of=$parent&echo=0" )) {
          echo "<div id='submenu'>";
          echo "<h3><span>$title</span></h3>";
          echo "<ul>";
          wp_list_pages("title_li=&child_of=$parent&echo=1" );
          echo "</ul>";
          echo "</div>";
        }
      }
    }
    
    
    function widget_pageSubNav($args) {
      extract($args);
      echo $before_widget;
      createPageSubMenu();
      echo $after_widget;
    }
    
    function pageSubMenu_init()
    {
      wp_register_sidebar_widget("cg-sidebar-widget", __('Page Sub Navigation'), 'widget_pageSubNav');
    }
    add_action("plugins_loaded", "pageSubMenu_init");
    ?>
    

    Или, если вы просто хотите сочные части…

    if (is_page()) {
      global $wp_query;
    
      if( empty($wp_query->post->post_parent) ) {
        $parent = $wp_query->post->ID;
      } else {
        $parent = $wp_query->post->post_parent;
      }
    
      if(wp_list_pages("title_li=&child_of=$parent&echo=0" )) {
        wp_list_pages("title_li=&child_of=$parent&echo=1" );
      }
    }
    

    ОБНОВИТЬ

    Я нашел другой плагин, который делает то же самое (а может быть, и лучше, я не знаю). http://wordpress.org/extend/plugins/subpages-widget/

    • 0
  3. вы можете сделать CSS-хак, чтобы сделать это (2 способа, которые я бы попробовал)

    1 это самый простой способ заставить css отображать элементы в поднавигации.

    .current-menu-ancestor ul {display:inline;}
    .current-menu-parent ul (display:inline;}
    

    2, предполагая, что ваша тема поддерживает классы тела, вы можете создать навигационное меню для каждой «вспомогательной навигации» и настроить их для отображения под основной навигацией, а затем отредактировать свою таблицу стилей, чтобы отображать только элементы вспомогательной навигации, используя что-то вроде этого:

    .child-menu-about, .child-menu-leadership {display:none;}
    body.page-id-YOUR_ABOUT_PAGE_ID .child-menu-about {display:inline;}
    body.category-YOUR-CATEGORY-SLUG  .child-menu-leadership {display:inline;}
    
    • 0
  4. введите описание изображения здесь1 это отображение php.

    введите описание изображения здесь2 это отображение css.

    • 0
  5. <nav class="site-nav children-link">
                    <?php       
    
                        if(  $post->post_parent ) 
                        {
                          $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
                        } 
                        else 
                        {
                          $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
                        }
    
                        if ($children) { ?>
                           <ul>
    
                                <?php echo $children; ?>
    
                           </ul>
    
                        <?php 
                            } else {
                            }
                    ?>
            </nav>
    

    CSS

    /*children-links links*/
    
    .children-link 
    {       
    
            background-color: #1a5957;
            color:#FFF;
            font-size: 100%;
    
    }
    
    .children-link li
    {
        margin: 10px;   
    
    
    }
    
    .children-link ul li a:link,
    .children-link ul li a:visited 
    {
            padding: 15px 17px;
            text-decoration: none;
            border: 1px solid #1a5957;
    
    }
    .children-link ul li a:hover 
    {
            background-color: #1a5957;
            color:#FFF;
            font-weight: bold;
    
    }
    .children-link .current_page_item a:link,
    .children-link .current_page_item a:visited
    {
    
        background-color: #1a5957;
        color: #FFF;
        cursor: default;
    }
    
    • 0

Оставить ответ

You must login to add an answer.