仅在当前类别下显示wordpress帖子

时间:2015-02-19 10:07:47

标签: wordpress categories

我正在尝试为网站构建导航,而我正在努力解决这个问题。我正在尝试制作一个折叠式导航,首先只显示类别,点击后,它们会链接到类别,并仅显示当前类别的帖子。

我走到这一步:

<?php
        // get all the categories from the database
        $cats = get_categories(); 

            // loop through the categries
            foreach ($cats as $cat) {
                // setup the cateogory ID
                $cat_id= $cat->term_id;
                // Make a header for the cateogry
                echo '<h2><a href="./?cat='.$cat->term_id.'">'.$cat->name.'</h2>';
                // create a custom wordpress query
query_posts("cat=$cat_id");

      // start the wordpress loop!
if (have_posts()) : while (have_posts()) : the_post();     ?>
                    <?php // create our link now that the post is setup ?>
                    <a href="<?php the_permalink();?>"><?php the_title(); ?></a><br>


                <?php endwhile; ?> <?php endif; // done our wordpress loop. Will start again for each category ?>         
            <?php } // done the foreach statement ?>

这个问题是:当我填写查询以便它只接受当前的cat时,它会在我的两个类别上显示当前的cat帖子。 这实际上是我想要的导航:

  • 平面设计
  • 其他项目

点击图形设计时:

  • 平面设计

    • 项目1
    • 项目2
  • 其他项目

点击其他项目时:

  • 平面设计
  • 其他项目
    • 项目1
    • 项目2
基本上是这样的: - 从“索引”页面单击某个类别时,只应展开该类别 - 单击其他类别时,当前类别会更改,因此之前的类别会折叠,而另一个类别会展开。

和奖励:是否有可能,当在一个帖子上,扩展另一个级别的信息?例如,每个帖子有一些自定义字段。像这样:

  • 平面设计
  • 其他项目
    • 项目1
      • 自定义字段1
      • 自定义字段2
      • ...
    • 项目2

非常感谢

2 个答案:

答案 0 :(得分:0)

试试此代码

<?php $article_categories = get_categories(array(
                                        'child_of' => get_category_by_slug('graphic design')->term_id
                                ));

        $talentChildren = get_categories(array('child_of' => get_category_by_slug('Project 1')->term_id));
     ?>


        <div id="content" class="narrowcolumn" role="main">

        <?php if (have_posts()) : ?>

            <div class="post-list">


                    <?php foreach($talentChildren as $talent): ?>
                        <?php
                        $talentSubChildren = new WP_Query();
                        $talentSubChildren->query(array('category_name' => $talent->slug));
                        ?>
                            <h2><?php echo $talent->name; ?></h2>
                            <ul>
                            <?php while ($talentSubChildren->have_posts()) : $talentSubChildren->the_post(); ?>
                                <li>
                                    <?php talent_thumbnail(); ?>
                                    <h4>
                                        <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
                                    </h4>
                                    <p><?php the_excerpt(); ?></p>
                                    <a href="<?php the_permalink() ?>">read on &raquo;</a>

                                </li>
                            <?php endwhile; ?>
                            </ul>
                    <?php endforeach; ?>


                    <?php if($wp_query->max_num_pages!=1):?>
                    <div class="pagination">
                        <?php previous_posts_link('&laquo; prev') ?>
                        <span class="current"><?php echo $wp_query->query['paged']; ?></span>
                        of <span class="total"><?php echo $wp_query->max_num_pages; ?></span>
                        <?php next_posts_link('next &raquo;') ?>
                    </div><!-- .pagination -->
                    <?php endif; ?>

            </div>

        <?php else : ?>

            <h2 class="center">Not Found</h2>
            <p class="center">Sorry, but you are looking for something that isn't here.</p>
            <?php get_search_form(); ?>

        <?php endif; ?>

        </div>

答案 1 :(得分:0)

我已经进一步了,但我现在需要一些帮助。

<?php
    // get all the categories from the database
    $cats = get_categories(); 

        // loop through the categries
        foreach ($cats as $cat) {
            // setup the cateogory ID
            $cat_id= $cat->term_id;
            // Make a header for the cateogry
            echo '<h2><a href="./?cat='.$cat->term_id.'">'.$cat->name.'</h2>';
            // create a custom wordpress query
query_posts("cat=$cat_id"); ?>
   <?php if (in_category($cat_id)) { ?>
<?php  if (have_posts()) : while (have_posts()) : the_post();     ?>
                <?php // create our link now that the post is setup ?>
                <a href="<?php the_permalink();?>"><?php the_title(); ?></a><br> 
          <?php endwhile; ?> <?php endif; // done our wordpress loop. Will start again for each category ?>
    <?php } else { ?>
<?php } ?>
  <?php } // done the foreach statement ?>

所以现在这样做了:它列出了每个类别的帖子,如果在当前类别中,则它不会显示任何内容。

现在我仍然需要:我想在循环中添加额外的东西如果我在一个页面上。我有这段代码:

<?php wp_reset_query(); ?>
<?php if (is_single('84')) {  ?>
Yes
<?php } else { ?>
no
<?php } ?>

但这意味着我必须在循环中断一个查询。并且is_single在循环内不起作用/没有重置查询。

我想用上面的代码看起来像这样:

  • 平面设计
    • 项目1(例如id = 84)
    • 项目2(例如id = 101)
      • 没有

感谢