我正在处理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我从中获取了片段。
答案 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();
});
将隐藏所有帖子,并仅显示所选类别中的帖子。我会留给你整理动画。