2013-06-19 92 views
0

我試圖根據我正在查看的頁面製作菜單項列表。例如,如果我在頁面歷史記錄中,我有一個包含歷史下的所有子類別和這些子類別中的帖子的菜單。菜單項也必須是可點擊的。Wordpress中菜單項的分層列表

所以基本上我想這樣的:

MAIN CAT = pagename 

SUB CAT1 
- post1 
- post2 

SUB CAT2 
- post1 
- post2 

這裏就是我砍死在一起至今:提前

<div id="menu"> 
<ul> 
    <?php 
    $page_title = wp_title(); 
    preg_replace("/[^a-z0-9 ]/i", "", $page_title); 
    strtolower($page_title); 

    $cat_id = get_cat_ID($page_title); 
    //get terms (e.g. categories or post tags), then display all posts in each retrieved term 
    $taxonomy = 'category';// e.g. post_tag, category 
    $param_type = 'category__in'; // e.g. tag__in, category__in 
    $term_args=array(
     'orderby' => 'name', 
     'order' => 'ASC', 
     'child_of' => '$cat_id' 
    ); 
    $terms = get_terms($taxonomy,$term_args); 
    if ($terms) { 
     foreach($terms as $term) { 
     $args=array(
      "$param_type" => array($term->term_id), 
      'post_type' => 'post', 
      'post_status' => 'publish', 
      'showposts' => -1, 
      'ignore_sticky_posts'=> 1 
     ); 
     $my_query = null; 
     $my_query = new WP_Query($args); 
     if($my_query->have_posts()) { 

      echo '<li><a href="' . get_category_link($term->term_id) . '" title="' . sprintf(__("View all posts in %s"), $term->name) . '" ' . '>' . $term->name. '</a> '; 

      while ($my_query->have_posts()) : $my_query->the_post(); ?> 
      <ul><li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li></ul> 
      <?php 
       endwhile; 
     } 
     } 
    } 
    wp_reset_query(); // Restore global post data stomped by the_post(). 
    ?> 
</ul> 

謝謝!

回答

0

我想出了自己!

<div id="menu"> 
<ul> 
<?php 
$page_title = strtolower(wp_title('', false, 'right')); 
$clean = str_replace('&#8217;', '', $page_title); 
$clean = preg_replace('/[^A-Za-z0-9\-]/', '', $clean); 
$category = get_category_by_slug($clean); 

if ($category != null) { 
global $cat_id; 
$cat_id = $category->term_id; 

//get terms (e.g. categories or post tags), 
//then display all posts in each retrieved term 
$taxonomy = 'category';// e.g. post_tag, category 
$param_type = 'category__in'; // e.g. tag__in, category__in 
$term_args=array(
    'orderby' => 'name', 
    'order' => 'ASC', 
    'child_of' => $cat_id 
); 
$terms = get_terms($taxonomy,$term_args); 
if ($terms) { 
    foreach($terms as $term) { 
    $args=array(
     "$param_type" => array($term->term_id), 
     'post_type' => 'post', 
     'post_status' => 'publish', 
     'showposts' => -1, 
     'ignore_sticky_posts'=> 1 
    ); 
    $my_query = null; 
    $my_query = new WP_Query($args); 
    if($my_query->have_posts()) { 

     echo '<li>'. $term->name. '</li>'; 

     while ($my_query->have_posts()) : $my_query->the_post(); ?> 
     <ul><li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li></ul> 
     <?php 
      endwhile; 
    } 
    } 
} 
wp_reset_query(); // Restore global post data stomped by the_post(). 
}//endif 
?> 
</ul> 
</div> 
1

我以前用過這個東西,希望它有幫助。

<?php 
    $current_id = $post->ID; 
    $args = array(
     'orderby' => 'name', 
     'order' => 'ASC', 
    ); 

    $nav_query = new WP_Query($args); 

?> 

<ul> 

<?php if ($nav_query -> have_posts()) : while ($nav_query->have_posts()) : $nav_query -> the_post(); ?> 

    <li class="clearfix"> 

     <?php $current_class = ($current_id == $post->ID) ? 'class="current"' : ''; ?> 
     <a <?php if ($current_class) echo $current_class; ?> href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 

    </li> 

<?php endwhile; ?> 

</ul> 

<?php endif; wp_reset_query(); ?> 
+0

嘿謝謝你的回答!但我自己想清楚了。看到答案。 –