Не удается получить категории для показа

Я работаю над темой 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();
});

Который будет скрывать все сообщения и показывать только те, что в выбранной категории. Я оставлю это вам, чтобы разобраться с анимацией.

Другие вопросы по тегам