สร้างเมนูที่แสดงหน้าย่อยโดยใช้ wp_list_pages () ด้วยฟังก์ชั่นเมนูใหม่ใน WordPress 3.0 หรือไม่


10

ก่อนหน้านี้ฉันสามารถโหลดเพจย่อยสำหรับเพจระดับบนที่เลือกในปัจจุบันโดยใช้ตรรกะเช่น:

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

ดูเหมือนจะไม่มีวิธีดั้งเดิมในการทำสิ่งนี้โดยใช้ฟังก์ชันการทำงาน register_nav_menus () / wp_nav_menu () ใหม่ ไม่มีใครรู้ว่าฉันจะแก้ไขสิ่งนี้ด้วยกันในจุดนี้ได้อย่างไร

นี่คือภาพหน้าจอของสิ่งที่ฉันพยายามทำ:

วางภาพหน้าจอเมนูย่อย


สิ่งนี้ยากเนื่องจาก wp_nav_menu ไม่เกี่ยวข้องกับลำดับชั้นของหน้า (หรือหน้าทั้งหมดสำหรับเรื่องนั้น) ตอนนี้ฉันยังไม่รู้เกี่ยวกับเมนูเพียงพอที่จะตอบคำถามนี้ แต่นี่เป็นคำถามที่น่าสนใจมาก
John P Bloch

ฉันไม่เข้าใจคำถามอย่างเต็มที่ คุณพยายามทำอะไรให้สำเร็จ ฉันเห็นโค้ด แต่ไม่เข้าใจบริบท มีเว็บไซต์ที่ต้องการหรือไม่ ภาพหน้าจอ?
MikeSchinkel

เขาต้องการเพิ่มรายการย่อยของรายการเมนูระดับบนสุดอย่างมีเงื่อนไข (เช่นเฉพาะในกรณีที่โครงสร้างต้นไม้นั้นเปิดใช้งาน) ในเมนู nav ใหม่ API
John P Bloch

@John P. Bloch - "เฉพาะในกรณีที่โครงสร้างต้นไม้ใช้งานอยู่"หมายความว่าอะไร? เรากำลังพูดถึงหน้าเท่านั้น? สิ่งที่เกี่ยวกับโพสต์หมวดหมู่แท็กโพสต์ที่กำหนดเอง ฯลฯ ? เขาต้องการที่จะทำกับลูกค้าผ่านทาง jQuery หรือในเซิร์ฟเวอร์หรือไม่? ฉันเดาว่าฉันไม่คิดและอยากจะได้ยินมากขึ้นเกี่ยวกับกรณีการใช้งานจริง
MikeSchinkel

@MikeSchinkel ในกรณีนี้โดยเฉพาะฉันคิดว่าเราอาจพูดถึงหน้าเว็บเท่านั้น แต่นั่นไม่สำคัญเลย การแก้ปัญหาจะยังคงเหมือนเดิม ฉันคิดว่า ZaMoose ต้องการให้ฝั่งเซิร์ฟเวอร์สำเร็จ
John P Bloch

คำตอบ:


9

ฉันสร้าง Widget ชื่อการนำทางของเพจย่อย (ฉลาดฉันรู้) ที่ใช้งานได้สำหรับฉัน

หากคุณติดตั้งนี้คุณก็สามารถลากวิดเจ็ตไปหนึ่งในพื้นที่ของคุณและเครื่องมือBAMมันทำงาน

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

หรือถ้าคุณแค่อยากได้ชิ้นส่วนฉ่ำ ๆ ...

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

UPDATE

ฉันพบปลั๊กอินอื่นที่ทำงานคล้ายกัน (และอาจทำได้ดีกว่าฉันไม่รู้) http://wordpress.org/extend/plugins/subpages-widget/


นี่คือดังนั้นใกล้กับสิ่งที่ฉันต้องการ ปัญหาเดียวคือมันทำงานผิดปกติเมื่อ BuddyPress ทำงาน
ZaMoose

2

คุณสามารถแฮก CSS เพื่อทำสิ่งนี้ (2 วิธีที่ฉันจะลอง)

1 นี่คือวิธีที่ง่ายที่สุดที่ฉันสามารถทำได้ทำให้ css แสดงรายการใน subnavigation

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

2 สมมติว่าธีมของคุณรองรับคลาส body คุณสามารถสร้างเมนู nav สำหรับแต่ละ "sub nav" และตั้งค่าให้แสดงภายใต้การนำทางหลัก - จากนั้นแก้ไขสไตล์ชีทของคุณเพื่อแสดง subnav div โดยใช้ดังนี้:

.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

ป้อนคำอธิบายรูปภาพที่นี่ 1 นี่คือการแสดงผล php

ป้อนคำอธิบายรูปภาพที่นี่ 2 นี่คือการแสดง css


การโพสต์คำตอบเป็นภาพหน้าจอของรหัสเป็นวิธีที่แย่ที่สุด - โปรดส่งคำตอบของคุณใหม่ คำอธิบายไม่กี่คำก็ไม่เจ็บเช่นกัน
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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.