Не удается получить категории для показа
Я работаю над темой 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();
но это в конечном итоге показывает все категории.
Источник, от которого я получаю фрагмент.
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);
[...]
Прежде всего, вы хотите получить все категории. 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();
});
Который будет скрывать все сообщения и показывать только те, что в выбранной категории. Я оставлю это вам, чтобы разобраться с анимацией.