1

我正在处理 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">....

我正在尝试创建一个过滤器来过滤博客文章。喜欢这里的演示。目前我有五个类别:机构说明、设计说明、精选、幽默、未分类。每个类别至少有一篇文章,但似乎只包含设计说明。

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

来源我正在从中获取片段。

4

2 回答 2

2

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

我认为您正在寻找的是get_categories()功能(更多信息请参见 codex:http ://codex.wordpress.org/Function_Reference/get_categories )

<?php
     $categories=get_categories( array( 'order' => 'ASC', 'orderby' => 'name' ) );
     $count = count($terms);
     [...]
于 2013-04-30T16:22:55.700 回答
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();
});

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

于 2013-04-30T16:25:00.113 回答