WordPress 3.0'da Yeni Menü İşlevi ile wp_list_pages () kullanarak Alt Sayfaları Gösteren bir Menü oluşturulsun mu?


10

Daha önce, şu anda seçili bir üst sayfa için alt sayfaları seçerek mantık kullanarak yükleyebildim:

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

Yeni register_nav_menus () / wp_nav_menu () işlevini kullanarak bunu yapmanın yerel bir yolu yok gibi görünüyor. Bunu bu noktada nasıl birleştirebileceğimi bilen var mı?

İşte elde etmeye çalıştığım şeyin bir ekran görüntüsü:

Açılır menü menüsü ekran görüntüsü


Wp_nav_menu sayfa hiyerarşisiyle (veya bu konudaki sayfalarla) ilgili olmadığından bu zor bir işlemdir. Menüler hakkında şimdi bunu cevaplayacak kadar bilgim yok, ama bu çok ilginç bir soru.
John P Bloch

Soruyu tam olarak anlamıyorum. Ne yapmaya çalışıyorsun? Kodu görüyorum ama bağlamı alamıyorum. İsteyen bir siteniz mi var? Ekran görüntüsü mü?
MikeSchinkel

Yeni gezinme menüsü api'sine üst düzey menü öğelerinin alt öğelerini koşullu olarak eklemek istiyor (yani yalnızca bu ağaç yapısı aktifse).
John P Bloch

@John P. Bloch - "Sadece ağaç yapısı aktifse" ne anlama geliyor? Sadece Sayfalar mı konuşuyoruz? Yayınlar, Kategoriler, Etiketler, Özel Mesajlar, vb. İstemcide jQuery üzerinden mi yoksa sunucuda mı yapmak istiyor? Sanırım varsaymayı tercih etmiyorum ve gerçek kullanım durumu hakkında daha fazla şey duymak istiyorum.
MikeSchinkel

@MikeSchinkel Bu özel durumda, sanırım sadece sayfalardan bahsediyor olabiliriz, ama bu zaten önemli değil; çözüm hala aynı olacak. Bence ZaMoose sunucu tarafında yapılmasını istiyor.
John P Bloch

Yanıtlar:


9

Benim için çalışan Page Sub Navigation (zeki olduğunu biliyorum) adlı bir Widget oluşturdum.

Bunu yüklerseniz, widget'ı widget alanlarınızdan birine sürükleyebilir ve BAM çalışır.

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

Ya da sadece sulu kısımları istiyorsanız ...

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

GÜNCELLEME

Aslında aynı şeyi yapan başka bir eklenti buldum (ve belki de daha iyisini yapar, bilmiyorum). http://wordpress.org/extend/plugins/subpages-widget/


Bu SO, ihtiyacım olana çok yakın. Tek sorun BuddyPress aktif olduğunda yanlış davranmasıdır.
ZaMoose

2

Bunu yapmak için bir css kesmek yapabilirsin (deneyeceğim 2 yol)

1 Bu düşünebilirsiniz en kolay yolu css subnavigation öğeleri görüntülemek yapmak.

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

Temanızın vücut sınıflarını desteklediğini varsayarak, her bir "sub nav" için bir gezinme menüsü oluşturabilir ve bunları ana gezinme bölmesinin altında görüntülenecek şekilde ayarlayabilirsiniz - daha sonra stil sayfanızı yalnızca böyle bir şeyi kullanarak subnav div'lerini göstermek üzere düzenleyebilirsiniz:

.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

resim açıklamasını buraya girin 1 Bu php ekranıdır.

resim açıklamasını buraya girin 2 Bu css ekran.


Yanıtları kod ekran görüntüsü olarak yayınlamak mümkün olan en kötü yoldur - lütfen yanıtınızı yeniden düzenleyin. Birkaç açıklama kelimesi de acıtmaz.
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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.