Utilizzo di wp_get_nav_menu_items() per elencare pagine figlie di pagine figlie

27 set 2012, 21:42:40
Visualizzazioni: 15.6K
Voti: 5

Sto lavorando con un tema basato su Genesis e vorrei creare una struttura di menu con Pagine/Pagine figlie. Questa parte riesco a farla con l'aiuto di un codice prodotto da Bill Erickson.

In sostanza, quello che sto cercando di fare è creare un menu sopra il contenuto nelle pagine che hanno pagine figlie. Poi, nella sidebar sinistra, vorrei avere una navigazione per le pagine figlie che a loro volta hanno pagine figlie. Ho preparato un esempio qui: sandbox.digisavvy.com

Ecco il codice con cui sto lavorando:

<?php

/**
 * Menu Sezione
 * Mostra le sottopagine della sezione corrente
 *
 * @author Bill Erickson
 * @link http://www.billerickson.net/custom-secondary-menu
 */
function be_section_menu() {

    // Funziona solo sulle pagine
    if( !is_page() )
        return;

    // Se è una pagina di primo livello, usa l'ID corrente; altrimenti usa l'antenato più alto
    global $post;
    $section_id = empty( $post->ancestors ) ? $post->ID : end( $post->ancestors );

    // Ottieni tutte le posizioni dei menu
    $locations = get_nav_menu_locations();
    // Trova quale menu è nella posizione 'primary'
    $menu = wp_get_nav_menu_object( $locations[ 'primary' ] );
    // Recupera tutte le voci di menu con genitore la sezione corrente
    // Questo prende le sottopagine, assumendo che la sezione corrente sia una pagina di primo livello
    $menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'post_parent' => $section_id ) );
    // Se ci sono voci di menu, costruisci il menu
    if( !empty( $menu_items ) ) {
        echo '<ul class="section-submenu">';
        $first = true;
        foreach( $menu_items as $menu_item ) {
            $classes = 'page-item';
            // Aggiunge una classe al primo elemento per stilarlo diversamente
            if( $first )
                $classes .= ' first-menu-item';
            $first = false;
            // Evidenzia la voce di menu corrente
            if( get_the_ID() == $menu_item->object_id )
                $classes .= ' current_page_item';
            echo '<li class="' . $classes . '"><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
        }
        echo '</ul>';
    }

}
add_action( 'genesis_before_loop', 'be_section_menu' );

La parte successiva che vorrei realizzare è creare un sistema di menu con Pagine Figlie/Figlie di Pagine Figlie. È qui che mi sono bloccato. Questo codice qui sotto è stato suggerito come modifica, ma non fa esattamente quello che voglio. Aggiunge semplicemente le figlie delle figlie alla navigazione.

global $post;
$level = count( $post->ancestors );
// Costruisce il menu terziario solo se la pagina corrente è almeno al terzo livello
if( 1 > $level )
    return;
$section_id = $post->ancestors[$level - 2];
3
Commenti

Ciao Alex, per favore usa i pulsanti WYSIWYG quando scrivi una domanda. Puoi ancora modificarla utilizzando il link "modifica" in basso a sinistra della domanda.

kaiser kaiser
28 set 2012 02:10:28

@kaiser grazie per le indicazioni. =) La formattazione della mia domanda è migliorata ora? Ovviamente sono un principiante qui, ma vorrei contribuire facendo le cose "nel modo giusto".

Alex V. Alex V.
28 set 2012 07:44:29

Assolutamente sì! Grazie :) Apprezziamo molto quando le domande delle persone sono facili da leggere.

kaiser kaiser
28 set 2012 15:40:32
Tutte le risposte alla domanda 2
0

Beh, temo di non essere mai riuscito a risolvere il codice per questo. Quello che ho trovato è una coppia di plugin che realizzano ciò che sto cercando di fare. Elencare le pagine dello stesso livello della pagina corrente (sottopagina/figlia/nipote) e poi poter escludere determinate pagine dall'elenco.

Potrei valutare di combinare questi due.

1 ott 2012 20:33:09
0

Ho appena scritto questo: https://gist.github.com/vwasteels/874f7d08726076bdc580

Recupererà i dati in modo ricorsivo e genererà un array con i figli incorporati in ogni elemento. Funzionerà con menu di qualsiasi profondità.

15 gen 2016 17:16:52