WordPress: как отображать только записи из определенной категории?

Я довольно новичок в WordPress, но потратил около 50 с лишним часов на его изучение, пробуя разные вещи и тому подобное, и у меня есть ощущение, что теперь я довольно хорошо с этим справился.

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

Вот мой пример: http://dev.jannisgundermann.com/zoeikin/graphic-design/typographic-posters

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

Прямая ссылка публикации.

Идентификатор категории — «3», а название категории — «типографские постеры».

У меня есть собственный шаблон страницы для страницы с типографскими плакатами, который выглядит так:

<?php
/*
Template Name: Typographic Posters
*/
?>

<?php get_header(); ?>
<?php get_sidebar(); ?>

<?php if (in_category('3')): ?>
<div class="post">

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>


  <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
   <div class="post-description">
    <h2><?php the_title(); ?></h2>
    <?php the_content(); ?>
   </div>
   <?=get_image('flutter-image');?>
  </div>


    <?php endwhile; else: ?>
     <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>

</div>
<?php endif; ?>

<?php get_footer(); ?>

Однако, используя этот код, страница показывает только заголовок, боковую панель и ничего больше.

Если бы кто-то мог мне помочь, это действительно помогло бы мне справиться с этой фильтрацией категорий WordPress.

Спасибо за чтение,

Яннис


person Jannis    schedule 04.10.2009    source источник


Ответы (9)


in_category будет работать вне цикла только на одной странице. Я предлагаю использовать функцию query_posts для решения этой проблемы. Вы можете использовать query_posts('cat=3') или query_posts('category_name=typographic-posters'), чтобы получить сообщения, которые вы ищете.

После получения просто используйте обычный цикл WordPress для доступа к этим сообщениям.

person Karthik Viswanathan    schedule 04.10.2009
comment
Спасибо, это работает хорошо. Не могу поверить, что мне не удалось найти это самому :) Еще раз спасибо. - person Jannis; 04.10.2009

Самый простой способ — создать файл с именем category-3.php и использовать стандартный код из обычного файла index.php или category.php. Wordpress позаботится о получении сообщений только из категории с id=3 и ее дочерних категорий.

person Eimantas    schedule 04.10.2009

in_category будет работать вне цикла только на одной странице. Я предлагаю использовать функцию query_posts для решения этой проблемы. Вы можете использовать query_posts('cat=3') или query_posts('category_name=typographic-posters') для получения искомых сообщений.

После получения просто используйте обычный цикл WordPress для доступа к этим сообщениям.

Это сработало отлично, но убедитесь, что вы заходите в «Настройки»> «Чтение» и устанавливаете для страницы сообщений параметр «Выбрать», иначе он переопределит этот запрос и выгрузит туда все последние сообщения независимо от категории.

person Mike    schedule 18.11.2012

Просто добавьте перед циклом:

<?php query_posts="cat=3&showposts=5">

Это заставит цикл отображать 5 сообщений (showposts=5) из категории 3 (cat=3).

person Tomer Lichtash    schedule 04.10.2009

Я бы отнесся ко второму предложению Эймантаса. Иерархия шаблонов будет использовать category-3.php для отображения сообщений в этой категории. Обычно вы можете просто скопировать index.php или category.php темы в category-3.php и настроить этот шаблон для любой настройки, которая вам нужна. Кроме того, шаблон категории будет лучше поддерживать разбиение сообщений на страницы.

Но если вам нужно придерживаться страницы для отображения этих сообщений, см. также пример страницы сообщений

person Michael    schedule 04.10.2009
comment
это выглядит как хороший способ, хотя я не совсем уверен, хочу ли я, чтобы слаг страницы стал domain.com/category-3.php, или это что-то настраиваемое? - person Jannis; 08.10.2009

http://codex.wordpress.org/Template_Tags/query_posts

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

person Adam    schedule 05.10.2009
comment
спасибо за ссылку. копаться в кодексе немного больше наверняка. - person Jannis; 07.10.2009

Этот плагин также может помочь вам, если вы хотите иметь возможность изменять отображаемые категории без использования кода: http://wordpress.org/extend/plugins/advanced-category-excluder/

person Damien MATHIEU    schedule 05.10.2009
comment
выглядит как отличный плагин, обязательно попробую. Благодарность! - person Jannis; 07.10.2009

Я отфильтровал сообщение по идентификатору категории, используя метод ниже:

               query_posts('cat=1&showposts=3');
                if (have_posts()) : while (have_posts()) :

                // if(1) {
                    //echo the_category_ID();
                 the_post();
                /**
                 * The default post formatting from the post.php template file will be used.
                 * If you want to customize the post formatting for your homepage:
                 * 
                 *   - Create a new file: post-homepage.php
                 *   - Copy/Paste the content of post.php to post-homepage.php
                 *   - Edit and customize the post-homepage.php file for your needs.
                 * 
                 * Learn more about the get_template_part() function: http://codex.wordpress.org/Function_Reference/get_template_part
                 */

                $is_post_wrap++;
                    if($is_post_wrap == '1') {
                        ?><div class="post-wrap clearfix"><?php
                    }
                    get_template_part('post', 'homepage');

                    if($is_post_wrap == '3') {
                        $is_post_wrap = 0;
                        ?></div><?php
                    }



            endwhile;

            else :
                get_template_part('post', 'noresults');
            endif; 
person FAISAL    schedule 20.12.2013

спасибо, что поделились своей мыслью, это отличная мысль. Обычно вы можете просто скопировать index.php или category.php темы в category-3.php и настроить этот шаблон для любой настройки, которая вам нужна.

person Abacus    schedule 07.05.2012