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


10

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

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 (). Хтось знає, як я міг би це латкувати разом у цей момент?

Ось скріншот того, що я намагаюся досягти:

Скриншот меню дочірнього меню


Це важко, оскільки wp_nav_menu не стосується ієрархії сторінок (або взагалі сторінок). Я не знаю достатньо про меню, щоб зараз відповісти на це, але це дуже цікаве питання.
Джон П Блох

Я не повністю розумію питання. Що ви намагаєтеся досягти? Я бачу код, але у мене немає контексту. Ви маєте потрібний сайт? Скріншот?
MikeSchinkel

Він хоче умовно додавати елементи дочірніх елементів меню верхнього рівня (тобто лише в тому випадку, якщо структура дерева активна) у новому api меню наві.
Джон П Блох

@John P. Bloch - Що означає "лише якщо активна структура дерева" ? Ми говоримо лише про Сторінки? Що з публікаціями, категоріями, тегами, спеціальними повідомленнями тощо? Чи хоче він це робити на клієнті через jQuery або на сервері? Я думаю, я вважаю, що краще не припускати, і я хотів би почути більше про фактичну ситуацію використання
MikeSchinkel

@MikeSchinkel У цьому конкретному випадку я думаю, що ми можемо говорити лише на сторінках, але це все одно не має значення; рішення все одно буде тим самим. Я думаю, ZaMoose хоче, щоб це було зроблено на стороні сервера.
Джон П Блох

Відповіді:


9

Я створив віджет на ім’я Page Sub Navigation (розумний я знаю), який працює для мене.

Якщо ви встановите це, ви можете просто перетягнути віджет в одну зі своїх областей віджетів, і BAM він працює.

<?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/


Це ТАК, так близько до того, що мені потрібно. Єдина проблема полягає в тому, що вона погано поводиться, коли BuddyPress активний.
ZaMoose

2

ви можете зробити css-хак для цього (2 способи, які я б спробував)

1 це найпростіший спосіб, з якого я можу зробити, щоб CSS відображав елементи в субнавігації.

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

2 припускаючи, що ваша тема підтримує тіло класи, ви можете створити меню наві для кожного "sub nav" і встановити їх для відображення під основною навігацією - потім редагуйте таблицю стилів, щоб лише показати div di subnav, використовуючи щось подібне:

.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

введіть тут опис зображення 1 це дисплей php.

введіть тут опис зображення 2 це дисплей css.


Опублікувати відповіді як скріншоти коду - це найгірший можливий спосіб - будь ласка, змініть свою відповідь Кілька слів пояснень також не зашкодили б.
Пікард

0
<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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.