无法获取要显示的类别

时间:2013-04-30 16:10:32

标签: php wordpress wordpress-theming

我正在处理TwentyTwelve主题,我通过在循环之前添加此代码段修改了索引文件

get_header(); ?>

<div id="primary" class="site-content">
    <div id="content" role="main" class="clearfix">
        <?php
             $terms = get_the_category();
             $count = count($terms);
             echo '<ul id="post-filter">';
                echo '<li><a href="#all" title="">All</a></li>';
                if ( $count > 0 ){

                    foreach ( $terms as $term ) {

                        $termname = strtolower($term->name);
                        $termname = str_replace(' ', '-', $termname);
                        echo '<li><a href="#'.$termname.'" title="" rel="'.$termname.'">'.$term->name.'</a></li>';
                    }
             }
             echo "</ul>";
        ?>
        <div id="mwrapper">

    <?php query_posts('cat=-6,-7'); ?>
    <?php if ( have_posts() ) : ?>

        <?php /* Start the Loop */ ?>
        <?php while ( have_posts() ) : the_post(); ?>
            <div class="box">....

我正在尝试创建一个过滤器来过滤博客帖子。就像演示here一样。目前我有五个类别:代理笔记,设计笔记,精选,幽默,未分类。并且每个类别至少有一个帖子,但它似乎只是在设计笔记中提取。

我也尝试将get_the_category();更改为wp_list_categories();,但最终显示了所有类别。

Source我从中获取了片段。

2 个答案:

答案 0 :(得分:2)

get_the_category()获取当前帖子的类别/信息,而不是完整WP安装中的类别列表。

我认为您正在寻找的是get_categories()功能(此处有关于该代码的更多信息:http://codex.wordpress.org/Function_Reference/get_categories

<?php
     $categories=get_categories( array( 'order' => 'ASC', 'orderby' => 'name' ) );
     $count = count($terms);
     [...]

答案 1 :(得分:0)

首先,您希望获得所有类别。 get_the_category()不会这样做。你可能想要get_categories()。

$terms = get_categories();
$count = count($terms);
echo '<ul id="post-filter">';
  echo '<li><a href="#all" title="">All</a></li>';
  if ( $count > 0 ) {
    foreach ( $terms as $term ) {
      echo '<li><a href="#" data-slug="'.$term->slug.'">'.$term->name.'</a></li>';
    }
  }
echo "</ul>";

我还做了一些修改:删除了hash和rel属性。我们可以使用数据属性,它们更具语义性。

下一部分取决于你的帖子HTML,但我假设他们有一个post类和他们所在的类别。如果他们这样做,你可以用jQuery做这样的事情:

$('a', '#post-filter').on('click', function(e) {
  e.preventDefault();

  $('.post').hide().filter('.' + $(this).attr('data-slug')).show();
});

将隐藏所有帖子,并仅显示所选类别中的帖子。我会留给你整理动画。