it-swarm.com.de

Bestimmten Menüpunkt aus wp_nav_menu basierend auf der ID anzeigen

Ich habe ein wp_nav_menu "Hauptmenü" wie das folgende:

  • Oberste Ebene (# Menüpunkt-1)
    • Unterelement
    • Unterelement
  • Oberste Ebene (# Menüpunkt-2)
    • Unterelement
  • Oberste Ebene (# Menüpunkt-3)
    • Unterpunkt A
    • Unterpunkt B
      • Unterpunkt a.1
    • Unterpunkt C

Dann möchte ich in meiner Vorlage in der Lage sein, wp_nav_menu-Hauptmenü-Unterelemente für beispielsweise die oberste Ebene mit der ID von Menüelement-3 zurückzugeben, wobei Menüelement-3 das aktuelle oberste Menüelement ist.

Also so etwas wie das: (aber das würde natürlich tatsächlich funktionieren)

wp_nav_menu( array('menu' => 'Main Menu' 'menu-item-id' => '3' ));

Und das würde zurückkehren:

  • Unterpunkt A
  • Unterpunkt B
    • Unterpunkt a.1
  • Unterpunkt C

Wenn es darauf ankommt, kann ich die Unterelemente als Seitenmenü-Interieur basierend darauf anzeigen, in welchem ​​Hauptmenüelementabschnitt Sie sich dynamisch befinden. Danke im Voraus!

Dies ist kein Duplikat von "http://wordpress.stackexchange.com/questions/2802/display-a-portion-branch-of-the-menu-tree-using-wp-nav-menu". Obwohl diese Seite mehrere ähnliche Antworten hat, funktioniert mit der aktuellen Version von WordPress keines wie erwartet. Das zeigt ein bestimmtes Untermenüelement und alle seine Kinder, ihre Kinder und so weiter (unbegrenzte Tiefe).

3
cchiera

Wenn ich richtig verstehe, was Sie wollen, können Sie dies mit CSS tun. Sie rufen wp_nav_menu normalerweise auf und lassen es alle Links generieren, aber dann verbergen Sie alle außer dem Untermenü der aktuellen Seite.

Ihr CSS würde ungefähr so ​​aussehen,

#sidebar ul.menu li
{
    display: none;
}

    #sidebar ul.menu li.current-page-parent,
    #sidebar ul.menu li.current-page-parent ul,
    #sidebar ul.menu li.current-page-parent ul.li
    {
        display: block;
    }

Update : Unter http://thataboycreative.com finden Sie ein Beispiel dafür, wo ich dies zuvor verwendet habe. Hier ist das relevante CSS aus diesem Beispiel:

ul.sub-menu
{
    display: none;
}

    #menu-main-navigation > li.current-menu-item ul.sub-menu,
    #menu-main-navigation > li.current-menu-ancestor ul.sub-menu
    {
        display: block;
    }
3
Ian Dunn

Ich habe ein Plugin dafür erstellt - stellen Sie sicher, dass Sie die ID als STRING und nicht als Integer übergeben. Bitte bewerten Sie mein Plugin - es ist mein erstes! :)

Hier herunterladen

3
Travis Hoglund

Eine andere Möglichkeit besteht darin, die Posts direkt abzurufen, anstatt wp_nav_menu zu verwenden. Dies basiert auf der tatsächlichen Seitenstruktur, nicht jedoch auf dem Menü.

functions.php:

function __construct()
{
    $this->currentPageID    = $this->getCurrentPageID();
    $this->sectionChildren    = $this->getSectionChildren();
}

function getCurrentPageID()
{
    $currentPage = $_SERVER['REQUEST_URI'];

    if($currentPage == '/')
        $currentPage = '/home';
    $currentPage = get_page_by_path($currentPage);

    if($currentPage)
        return $currentPage->ID;
    else
        return -1;
}

function getSectionID()
{
    global $wpdb;

    $currentSectionID = $wpdb->get_var("
        SELECT post_parent
        FROM ". $wpdb->posts ."
        WHERE ID = ". $this->currentPageID
    );

    if($currentSectionID == 0)
        return $this->currentPageID;
    else
        return $currentSectionID;
}

function getSectionChildren()
{
    global $wpdb;

    $children = $wpdb->get_results("
        SELECT ID, post_title
        FROM ". $wpdb->posts ."
        WHERE
            post_parent = ". $this->getSectionID() ." AND
            post_type = 'page' AND
            post_status = 'publish'
    ", ARRAY_A);

    return $children;
}

sidebar.php:

<ul id="sub-navigation">
    <?php foreach($dc->sectionChildren as $c) : ?>
        <li <?php if($dc->currentPageID == $c['ID']) echo 'class="active"'; ?>><a href="<?php echo get_permalink($c['ID']); ?>"><?php echo $c['post_title']; ?></a></li>
    <?php endforeach; ?>
</ul>
2
Ian Dunn