Mit wp_list_pages () ein Menü erstellen, das untergeordnete Seiten mit der neuen Menüfunktionalität in WordPress 3.0 anzeigt?


10

Zuvor konnte ich untergeordnete Seiten für eine aktuell ausgewählte übergeordnete Seite mithilfe folgender Logik selektiv laden:

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 {
}

Es scheint keine native Möglichkeit zu geben, dies mit der neuen Funktion register_nav_menus () / wp_nav_menu () zu tun. Weiß jemand, wie ich das an dieser Stelle zusammenfügen könnte?

Hier ist ein Screenshot von dem, was ich erreichen möchte:

Dropdown-Screenshot des untergeordneten Menüs


Dies ist schwierig, da sich wp_nav_menu nicht auf die Seitenhierarchie (oder überhaupt auf Seiten) bezieht. Ich weiß nicht genug über Menüs, um dies jetzt zu beantworten, aber dies ist eine sehr interessante Frage.
John P Bloch

Ich verstehe die Frage nicht ganz. Was versuchst du zu erreichen? Ich sehe den Code, aber ich verstehe den Kontext nicht. Hast du eine Seite, die will? Ein Screenshot?
MikeSchinkel

Er möchte untergeordnete Elemente von Menüelementen der obersten Ebene bedingt (dh nur, wenn diese Baumstruktur aktiv ist) in der neuen Navigationsmenü-API hinzufügen.
John P Bloch

@ John P. Bloch - Was bedeutet "nur wenn die Baumstruktur aktiv ist" ? Sprechen wir nur über Seiten? Was ist mit Posts, Kategorien, Tags, benutzerdefinierten Posts usw.? Möchte er es auf dem Client über jQuery oder auf dem Server tun? Ich denke, ich würde es lieber nicht annehmen und würde gerne mehr über den tatsächlichen Anwendungsfall erfahren.
MikeSchinkel

@ MikeSchinkel In diesem speziellen Fall denke ich, dass wir nur über Seiten sprechen, aber das spielt sowieso keine Rolle. Die Lösung bleibt unverändert. Ich denke, ZaMoose möchte, dass es serverseitig gemacht wird.
John P Bloch

Antworten:


9

Ich habe ein Widget namens Page Sub Navigation (klug, wie ich weiß) erstellt, das für mich funktioniert.

Wenn Sie dies installieren, können Sie das Widget einfach in einen Ihrer Widget-Bereiche ziehen und die BAM funktioniert.

<?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");
?>

Oder wenn Sie nur die saftigen Teile wollen ...

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" );
  }
}

AKTUALISIEREN

Ich habe ein anderes Plugin gefunden, das im Wesentlichen dasselbe tut (und es vielleicht besser macht, ich weiß es nicht). http://wordpress.org/extend/plugins/subpages-widget/


Das ist SO, so nah an dem, was ich brauche. Das einzige Problem ist, dass es sich schlecht verhält, wenn BuddyPress aktiv ist.
ZaMoose

2

Sie könnten einen CSS-Hack machen, um dies zu tun (2 Möglichkeiten, die ich versuchen würde)

1 Dies ist der einfachste Weg, den ich mir vorstellen kann, damit das CSS die Elemente in der Subnavigation anzeigt.

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

2 Unter der Annahme, dass Ihr Thema Körperklassen unterstützt, können Sie für jedes "Subnavigations" ein Navigationsmenü erstellen und festlegen, dass es unter der Hauptnavigation angezeigt wird. Bearbeiten Sie dann Ihr Stylesheet, um nur die Subnav-Divs anzuzeigen, die Folgendes verwenden:

.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

Geben Sie hier die Bildbeschreibung ein 1 Dies ist die PHP-Anzeige.

Geben Sie hier die Bildbeschreibung ein 2 Dies ist die CSS-Anzeige.


Das Posten von Antworten als Code-Screenshots ist der schlechteste Weg - bitte bearbeiten Sie Ihre Antwort erneut. Ein paar erklärende Worte würden auch nicht schaden.
Picard

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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.