Cum să generezi un meniu care afișează pagini copil folosind wp_list_pages() cu noua funcționalitate de meniu în WordPress 3.0?

19 aug. 2010, 00:13:36
Vizualizări: 15.2K
Voturi: 10

Anterior, puteam încărca selectiv pagini copil pentru o pagină părinte selectată folosind logica precum:

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

Se pare că nu există o metodă nativă de a face acest lucru folosind noile funcționalități register_nav_menus()/wp_nav_menu(). Știe cineva cum aș putea implementa acest lucru în prezent?

Mai jos este o captură de ecran cu ceea ce încerc să realizez:

Captură de ecran meniu derulant cu pagini copil

12
Comentarii

Aceasta este o problemă dificilă, deoarece wp_nav_menu nu este legat de ierarhia paginilor (sau de pagini în general, de altfel). Nu știu suficient despre meniuri pentru a răspunde acum, dar aceasta este o întrebare foarte interesantă.

John P Bloch John P Bloch
19 aug. 2010 00:31:23

Nu înțeleg pe deplin întrebarea. Ce încerci să realizezi? Văd codul dar nu înțeleg contextul. Ai un site care face asta? O captură de ecran?

MikeSchinkel MikeSchinkel
19 aug. 2010 00:39:02

El dorește să adauge elementele copil ale elementelor de meniu de nivel superior condiționat (adică doar dacă acea structură arborescentă este activă) în noua API de navigare pentru meniu.

John P Bloch John P Bloch
19 aug. 2010 00:40:43

@John P. Bloch - Ce înseamnă "doar dacă structura arborescentă este activă"? Vorbim doar despre Pagini? Dar despre Articole, Categorii, Etichete, Postări Personalizate etc.? Vrea să facă asta pe partea de client prin jQuery sau pe server? Cred că aș prefera să nu fac presupuneri și aș dori să aud mai multe despre cazul de utilizare real.

MikeSchinkel MikeSchinkel
19 aug. 2010 00:45:38

@MikeSchinkel În acest caz particular, cred că poate vorbim doar despre pagini, dar nu contează; soluția va fi aceeași. Cred că ZaMoose vrea să fie făcut pe partea de server.

John P Bloch John P Bloch
19 aug. 2010 00:55:52

@MikeSchinkel John are dreptate. Vreau să încarc paginile copil (dacă există) pentru pagina părinte curentă și apoi să afișez o listă neordonată cu aceste copii. În esență, acest lucru permite crearea unui submeniu contextual pentru pagini.

ZaMoose ZaMoose
19 aug. 2010 01:19:33

@ZaMoose: Îmi pare rău că sunt atât de dens. Ce vrei să spui cu "încărcarea paginilor copil?" Înseamnă același lucru cu: "Vreau să afișez o listă neordonată de pagini copil dacă o pagină are pagini copil." Și unde vrei să le afișezi? Ca parte dintr-un meniu derulant sau altundeva pe pagină? Știu că pentru tine e perfect clar și evident și pentru John, dar eu nu înțeleg exact ce dorești.

MikeSchinkel MikeSchinkel
19 aug. 2010 01:41:38

@MikeSchinkel: Această imagine ar trebui să ilustreze ce urmăresc.

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

ZaMoose ZaMoose
19 aug. 2010 17:46:05

@ZaMoose - Perfect, mulțumesc (Frate, iubesc Skitch, nu-i așa? :) O să editez postarea ta pentru a include captura de ecran. Acestea fiind spuse, văd că @jessegavin ți-a răspuns dar nu funcționează cu BuddyPress? Hmm, asta nu era în întrebarea ta sau aș fi trecut peste pentru că nu sunt la curent cu BuddyPress încă.

MikeSchinkel MikeSchinkel
19 aug. 2010 19:25:27

@MikeSchinkel: Da, am separat partea cu BP într-o întrebare separată. O să marchez răspunsul lui @jessegavin ca fiind autoritativ.

ZaMoose ZaMoose
19 aug. 2010 19:35:11

Super. O să elimin "BuddyPress" pe care l-am adăugat în titlu.

MikeSchinkel MikeSchinkel
19 aug. 2010 20:26:51

...Și da, Skitch este o unealtă foarte utilă pentru adnotarea capturilor de ecran. zâmbet

ZaMoose ZaMoose
19 aug. 2010 21:07:19
Arată celelalte 7 comentarii
Toate răspunsurile la întrebare 4
1

Am creat un Widget numit Navigare Sub Pagină (destul de inteligent, știu) care funcționează pentru mine.

Dacă instalați acest widget, îl puteți trage pur și simplu într-una dintre zonele de widget-uri și BAM funcționează.

<?php
/*
Plugin Name: Navigare Sub Pagină
Plugin URI: http://codegavin.com/wordpress/sub-nav
Description: Afișează o listă de pagini copil pentru pagina curentă
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", __('Navigare Sub Pagină'), 'widget_pageSubNav');
}
add_action("plugins_loaded", "pageSubMenu_init");
?>

Sau dacă vreți doar părțile importante...

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

ACTUALIZARE

Am găsit un alt plugin care face practic același lucru (și poate chiar mai bine, nu știu). http://wordpress.org/extend/plugins/subpages-widget/

19 aug. 2010 01:00:28
Comentarii

Este FOARTE, foarte aproape de ceea ce am nevoie. Singura problemă este că nu funcționează corect când BuddyPress este activ.

ZaMoose ZaMoose
19 aug. 2010 17:38:33
0

ai putea folosi un hack CSS pentru a face acest lucru (2 metode pe care le-aș încerca)

1. aceasta este cea mai ușoară metodă la care mă pot gândi pentru a face ca CSS să afișeze elementele din subnavigare.

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

2. presupunând că tema ta suportă clase pentru body, ai putea crea un meniu de navigare pentru fiecare "subnavigație" și le-ai putea seta să se afișeze sub navigația principală - apoi editează fișierul tău de stiluri pentru a afișa doar div-urile subnavigației folosind ceva de genul:

.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 aug. 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-uri copil*/

.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 iul. 2017 13:06:52
1

Afișare PHP 1 Aceasta este afișarea PHP.

Afișare CSS 2 Aceasta este afișarea CSS.

11 iul. 2017 13:30:55
Comentarii

Postarea răspunsurilor ca capturi de ecran de cod este cea mai proastă metodă posibilă - te rog să editezi din nou răspunsul tău. Câteva cuvinte de explicație nu ar strica de asemenea.

Picard Picard
11 iul. 2017 14:15:58