Generare un menu che visualizzi le pagine figlie utilizzando wp_list_pages() con la nuova funzionalità dei menu in WordPress 3.0?

19 ago 2010, 00:13:36
Visualizzazioni: 15.2K
Voti: 10

In precedenza, riuscivo a caricare selettivamente le pagine figlie per una pagina genitore selezionata utilizzando una logica come:

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

Sembra non esserci un modo nativo per fare questo utilizzando le nuove funzionalità register_nav_menus()/wp_nav_menu(). Qualcuno sa come potrei risolvere questo problema?

Ecco uno screenshot di quello che sto cercando di ottenere:

Screenshot menu a discesa pagine figlie

12
Commenti

È complicato, poiché wp_nav_menu non è correlato alla gerarchia delle pagine (o alle pagine stesse, del resto). Non conosco abbastanza i menu per rispondere ora, ma questa è una domanda molto interessante.

John P Bloch John P Bloch
19 ago 2010 00:31:23

Non capisco appieno la domanda. Cosa stai cercando di ottenere? Vedo il codice ma non capisco il contesto. Hai un sito che fa quello? Uno screenshot?

MikeSchinkel MikeSchinkel
19 ago 2010 00:39:02

Vuole aggiungere elementi figlio degli elementi di menu di primo livello in modo condizionale (cioè solo se quella struttura ad albero è attiva) nella nuova api del menu di navigazione.

John P Bloch John P Bloch
19 ago 2010 00:40:43

@John P. Bloch - Cosa significa "solo se la struttura ad albero è attiva"? Stiamo parlando solo di Pagine? E riguardo agli Articoli, Categorie, Tag, Post Personalizzati, ecc.? Vuole farlo sul client via jQuery o sul server? Credo che preferirei non fare supposizioni e vorrei saperne di più sul caso d'uso reale.

MikeSchinkel MikeSchinkel
19 ago 2010 00:45:38

@MikeSchinkel In questo caso particolare, penso che potremmo parlare solo di pagine, ma non ha comunque importanza; la soluzione sarà comunque la stessa. Credo che ZaMoose voglia che venga fatto lato server.

John P Bloch John P Bloch
19 ago 2010 00:55:52

@MikeSchinkel John ha ragione. Voglio caricare le pagine figlie (se esistono) per la pagina genitore corrente e poi visualizzare un elenco non ordinato di tali elementi figli. In sostanza questo permette di avere un sottomenu contestuale per le pagine.

ZaMoose ZaMoose
19 ago 2010 01:19:33

@ZaMoose: Scusa se sono così tardo. Cosa intendi con "caricare le pagine figlie?" Vuol dire la stessa cosa di "Voglio generare una lista non ordinata di pagine figlie se una pagina ne ha." E dove vuoi generarle? Come parte di un menu a tendina o da qualche altra parte nella pagina? So che per te è perfettamente chiaro e evidentemente anche per John, ma mi sfugge esattamente cosa desideri.

MikeSchinkel MikeSchinkel
19 ago 2010 01:41:38

@MikeSchinkel: Questa immagine dovrebbe illustrare quello che sto cercando di ottenere.

http://skitch.com/zamoose/d12rt/about-us-delta-sigma-theta-sorority-inc-south-jersey-alumnae-chapter

ZaMoose ZaMoose
19 ago 2010 17:46:05

@ZaMoose - Perfetto, grazie (Amico, adoro Skitch, e tu? :) Modificherò il tuo post per includere lo screenshot. Detto questo, vedo che @jessegavin ti ha risposto ma non funziona con BuddyPress? Mmm, questo non era nella tua domanda o avrei lasciato passare perché non sono ancora aggiornato su BuddyPress.

MikeSchinkel MikeSchinkel
19 ago 2010 19:25:27

@MikeSchinkel: Sì, ho separato la parte BP in una domanda a parte. Marcherò la risposta di @jessegavin come autorevole.

ZaMoose ZaMoose
19 ago 2010 19:35:11

Ottimo. Rimuoverò il "BuddyPress" che ho aggiunto dal titolo.

MikeSchinkel MikeSchinkel
19 ago 2010 20:26:51

...E sì, Skitch è davvero utile per annotare screenshot. sorriso

ZaMoose ZaMoose
19 ago 2010 21:07:19
Mostra i restanti 7 commenti
Tutte le risposte alla domanda 4
1

Ho creato un Widget chiamato Navigazione Secondaria Pagine (originale, lo so) che funziona per me.

Se lo installi, puoi semplicemente trascinare il widget in una delle tue aree widget e BAM funziona.

<?php
/*
Plugin Name: Navigazione Secondaria Pagine
Plugin URI: http://codegavin.com/wordpress/sub-nav
Description: Mostra un elenco di pagine figlie per la pagina corrente
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", __('Navigazione Secondaria Pagine'), 'widget_pageSubNav');
}
add_action("plugins_loaded", "pageSubMenu_init");
?>

Oppure se vuoi solo le parti succose...

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

AGGIORNAMENTO

Ho trovato un altro plugin che fa essenzialmente la stessa cosa (e forse lo fa meglio, non so). http://wordpress.org/extend/plugins/subpages-widget/

19 ago 2010 01:00:28
Commenti

Questo è DAVVERO, davvero vicino a ciò di cui ho bisogno. L'unico problema è che si comporta male quando BuddyPress è attivo.

ZaMoose ZaMoose
19 ago 2010 17:38:33
0

potresti usare un trucco CSS per fare questo (2 modi che proverei)

1 questo è il modo più semplice che mi viene in mente per far visualizzare gli elementi nella sotto-navigazione con CSS.

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

2 assumendo che il tuo tema supporti le classi del body, potresti creare un menu di navigazione per ogni "sotto-menu", e posizionarli sotto la navigazione principale - poi modificare il tuo foglio di stile per mostrare solo i div dei sotto-menu usando qualcosa del genere:

.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;}
19 ago 2010 23:21:52
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

/*Link delle pagine figlie*/

.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;
}
11 lug 2017 13:06:52
1

Visualizzazione PHP 1 questa è la visualizzazione PHP.

Visualizzazione CSS 2 questa è la visualizzazione CSS.

11 lug 2017 13:30:55
Commenti

Pubblicare le risposte come screenshot di codice è il modo peggiore possibile - per favore modifica la tua risposta. Anche qualche parola di spiegazione non sarebbe male.

Picard Picard
11 lug 2017 14:15:58