โพสต์หมวดหมู่เป็นรายการเมนูย่อย

ค้นหาเรื่องนี้มาระยะหนึ่งแล้วไม่ประสบความสำเร็จ ทั้งหมดที่ฉันสามารถหาได้คือวิธีแก้ปัญหาที่เกี่ยวข้องกับการใช้คุณสมบัติ Walker ของ wp_nav_menu ซึ่งฉันไม่คิดว่าเป็นแนวทางที่ถูกต้อง ฉันต้องการสร้างเมนูที่มีโครงสร้างดังต่อไปนี้:

  • ลิงค์ที่เป็นหมวดหมู่

    • X numbers of submenu items which are posts belonging to the parent
      category

และอื่นๆ...

ฉันจำเป็นต้องเรียกใช้การวนซ้ำสำหรับแต่ละรายการเมนูด้วยตนเองเพื่อดึงโพสต์หรือไม่


person Staffan Estberg    schedule 07.01.2012    source แหล่งที่มา


คำตอบ (2)


ลองสิ่งนี้ในfunctions.phpของคุณ:

add_filter('wp_nav_menu_items', 'add_productions', 10, 2);
function add_productions($items, $args) {
  $cat = '28'; // define category
  $productions = array();
  $productions = get_posts("cat=$cat");
  if ($productions[0] != '') {
      $items .= '<li><a href="/th#">Productions</a><ul class="sub-menu">';
      foreach ( $productions as $production ) {
        $permalink = get_permalink( $production->ID );
        $items .= '<li><a href="/th'.$permalink.'">'.$production->post_title.'</a></li>';
      }
      $items .= '</ul>';
  }
  return $items;
}
person user1502677    schedule 05.07.2012

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

ตัวอย่างส่วนใหญ่บนเว็บแสดงวิธีเพิ่มรายการไว้ที่ส่วนท้ายของเมนู ซึ่งจะช่วยให้คุณเพิ่มเมนูใหม่ได้ทุกที่ในเมนู

นี่คือโค้ดสำหรับวางเมนูใหม่หลังเมนู "หน้าแรก" ของฉัน:

add_filter('wp_nav_menu_items', 'add_gallery', 10, 2);
function add_gallery($items, $args) {
  $cat = '1'; // define category
  $pattern = 'Home</a></li>';
  $productions = array();
  $productions = get_posts("cat=$cat");
  $temp_items = '';
  if ($productions[0] != '') {
      $temp_items .= '<li><a href="/th#">Galleries</a><ul class="sub-menu">';
      foreach ( $productions as $production ) {
        $permalink = get_permalink( $production->ID );
        $temp_items .= '<li><a href="/th'.$permalink.'">'.$production->post_title.'</a></li>';
      }
      $temp_items .= '</ul>';
  } 
  $replacement = $pattern .$temp_items;
  $temp_menu = str_replace($pattern, $replacement, $items);
  return $temp_menu;
}

หวังว่านี่จะช่วยคนอื่นได้ ...

person Jason Allen    schedule 01.03.2013