Hasilkan Menu yang Menampilkan Halaman Anak menggunakan wp_list_pages () dengan Fungsi Menu Baru di WordPress 3.0?

10

Sebelumnya, saya dapat memuat halaman anak secara selektif untuk halaman induk yang saat ini dipilih menggunakan logika seperti:

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

Tampaknya tidak ada cara asli untuk melakukan ini menggunakan fungsionalitas register_nav_menus () / wp_nav_menu () yang baru. Adakah yang tahu bagaimana saya bisa menambal ini bersama pada saat ini?

Berikut screenshot dari apa yang saya coba capai:

Tangkapan layar screenshot menu Anak

ZaMoose
sumber
Ini sulit, karena wp_nav_menu tidak berhubungan dengan hierarki halaman (atau halaman sama sekali, dalam hal ini). Saya tidak cukup tahu tentang menu untuk menjawab ini sekarang, tetapi ini adalah pertanyaan yang sangat menarik.
John P Bloch
Saya tidak sepenuhnya mengerti pertanyaan itu. Apa yang ingin Anda capai? Saya melihat kode tetapi saya tidak mengerti konteksnya. Punya situs yang diinginkan? Tangkapan layar?
MikeSchinkel
Dia ingin menambahkan item anak dari item menu tingkat atas secara kondisional (yaitu hanya jika struktur pohon itu aktif) di api menu nav baru.
John P Bloch
@ John P. Bloch - Apa artinya "hanya jika struktur pohon aktif" ? Apakah kita hanya berbicara Halaman? Bagaimana dengan Posting, Kategori, Tag, Posting Kustom, dll? Apakah dia ingin melakukannya pada klien melalui jQuery atau di server? Saya kira saya lebih suka tidak berasumsi dan saya ingin mendengar lebih banyak tentang kasus penggunaan yang sebenarnya.
MikeSchinkel
@MikeSchinkel Dalam kasus khusus ini, saya pikir kita mungkin hanya berbicara halaman, tapi itu tidak masalah; solusinya akan tetap sama. Saya pikir ZaMoose ingin itu dilakukan di sisi server.
John P Bloch

Jawaban:

9

Saya membuat Widget bernama Page Sub Navigation (pintar saya tahu) yang berfungsi untuk saya.

Jika Anda menginstal ini, Anda bisa menarik widget ke salah satu area widget Anda dan BAM berfungsi.

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

Atau jika Anda hanya ingin bagian yang berair ...

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

MEMPERBARUI

Saya menemukan plugin lain yang pada dasarnya melakukan hal yang sama (dan mungkin lebih baik, saya tidak tahu). http://wordpress.org/extend/plugins/subpages-widget/

jessegavin
sumber
Ini SO, sangat dekat dengan yang saya butuhkan. Satu-satunya masalah adalah bahwa ia berperilaku buruk ketika BuddyPress aktif.
ZaMoose
2

Anda bisa melakukan css hack untuk melakukan ini (2 cara yang akan saya coba)

1 ini adalah cara termudah yang dapat saya pikirkan untuk membuat css menampilkan item dalam subnavigation.

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

2 dengan asumsi bahwa tema Anda mendukung kelas tubuh, Anda dapat membuat menu nav untuk setiap "sub nav", dan mengaturnya untuk ditampilkan di bawah navigasi utama - lalu edit stylesheet Anda untuk hanya menampilkan div subnav menggunakan sesuatu seperti ini:

.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;}
rfair404
sumber
0

masukkan deskripsi gambar di sini 1 ini adalah tampilan php.

masukkan deskripsi gambar di sini 2 ini adalah tampilan css.

maulik
sumber
Memposting jawaban sebagai tangkapan layar kode adalah cara terburuk yang mungkin - silakan edit kembali jawaban Anda. Beberapa kata penjelasan juga tidak ada salahnya.
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;
}
maulik
sumber