Вывод на главной постов только из одной категории

Задача:
Сделать так, чтобы на главной странице публиковались только посты из определенной рубрики(категории).

Решение:
Вносим изменения в файл index.php темы.
Находим начало цикла (loop), и перед строчкой:

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

Добавляем:

<?php query_posts($query_string.'&cat=номер_категории'); ?>

Где номер_категории меняем на нужный номер категории, его можно посмотреть в админке в «Управление» — «Рубрики»

Про параметр query_posts:
http://codex.wordpress.org/Template_Tags/query_posts
Здесь можно найти еще несколько интересных примеров с query_posts, в том числе «как исключить одну категорию из цикла».

UPD 28.05.2007
Можно воспользоваться плагином Category Visibility

UPD 02.10.2007
Если возникли проблемы с навигацией (след. страница, предыдущая страница) при использовании query_posts, то эти ссылки будет полезными:
http://trampampam.ru/blog/wordpress/query_posts/

Навигация при query_posts

Еще плагин:
Advanced Category Excluder

К сожалению по окончанию сей не хитрой процедуры, доступной для чтения стала только та категория, которую указал в строке. Во все остальные не пускает даже:(

Значит намудрили что-то. Может шаблонов в папке Темы не хватает нужных.

У меня почему то получается, но при этом исчезает sidebar =(

Задача:
Сделать так, чтобы на главной странице публиковались только посты из определенной рубрики(категории).

Здравствуйте sonika!
А не подскажите как сделать так чтобы показывались посты из нескольких выбранных рубрик?

Насколько я знаю (ИМХО в общем :)), с этим проблема: т.е. можно показывать 1 категорию или исключить несколько.
Поэтому предлагаю вывернуться по другому:
несколько блоков на главной, в каждом блоке посты опред. категории (т.е. не общим списком). Сделать можно так:

Grouped by Category

UPD наврала кажется!

Show Several Categories by ID
Display posts from several specific category IDs:
query_posts('cat=2,6,17,38');

Попробуйте так

Благодарю, оказалось, что всё очень просто)))

подскажите, есть блогролл – в нем две категории, соответственно отображается сперва 1 категория потом за ней сразу вторая. как можно разбить их? сделать так – чтобы в верхнем углу отображался блогролл только содержащий 1 категорию, в нижнем углу – блог ролл только со 2 категорией

Что-то вы не по теме…

да чего уж не по теме? почти тоже – только не на главной а на всех страницах .

У меня вот что то не вышло.
Версия у меня Wp 2.3.1
и код в index.php выглядит так:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
а не как вы написали и я вот перед ним поставил что вы написали т.е. <?php query_posts(‘cat=номер_категории’); ?> номер категории у меня 8.
Полностью вотк ак выглядит:
<?php query_posts(‘cat=8’); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
И у меня вот что вышло теперь пост из это категории под номером 8 выскачил во всех категориях… как это исправить?

значит нет шаблона для категорий (category.php в папке Темы).
тогда так сделайте:
<?php
if (is_home()) {
query_posts(‘cat=8’);
}
?>

значит нет шаблона для категорий (category.php в папке Темы).
тогда так сделайте:
<?php
   if (is_home()) {
      query_posts('cat=8');
   }
?>

что то я не могу аткое найти:(
l/wp-content/themes/****-theme там нету файла category.php

туплю

Если нет category.php, тогда сделайте так, как я написала.
Чего не понятного? 🙂

А можно ли сделать чтобы на одной странице допустим в сайдбаре выводились новости из нескольких категории, и в центральной колонке новости из оставшихся категории? В чем разница технической реализации?

ProSaifer, разница в знаке. В одном месте "cat=1,2,3", в другом "cat=-1,-2,-3".

подскажите как сделать из этого вывод только ссылок с названием статьи?

убрать из шаблона категории
<?php the_content(); ?>

а как определить последнюю созданную категорию?

<?php
if (is_home()) {
query_posts(‘cat=8’);
}
?>

есть ли стандартная функция?
нужно для того чтобы на главной пудликовались только посты из последней созданной категории… что бы не менять постоянно 2 на 3, 3 на 4, а он брал автоматом последний id…
как такое сделать?

Надо думать, что у последней созданной категории самый большой ID. Значит надо получить все idы категорий (get_all_category_ids()) и выбрать максимальный.

Спасибо…
сделал так:
<?php
$cat_idss = get_all_category_ids();
$cat_max = $cat_idss[0];
foreach ( $cat_idss as $cat_id ) {
if ( $cat_id > $cat_max )
$cat_max = $cat_id;
}
if (is_home()) {
query_posts(‘cat=’.$cat_max);
}
?>

Помогите побороть проблему.
Несмотря на указание в index.php

<?php
$query='cat=3';
if ( is_home() ) {
    query_posts($query);
} ?>

Выводит стабильно 1 новость из категории 10(!). Записи в которую передаются через FeedWordPress.

Помогите решить проблему, пожалуйста, код wp-loop.php, через который выводятся посты:

    <?php if (have_posts()) : ?>


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

                <div class="post">
                        <h2><?php if (is_page() || is_single()) { the_title(); ?> <?php } else { ?> <a href="<?php the_permalink() ?>" rel="bookmark"
                        title="Permanent Link to <?php the_title(); ?>"><?php
                        the_title(); ?></a> <?php } ?></h2>

                        <div class="post-info">
                            <?php if(!is_page()) : ?>
                            <span class="setting user"><?php the_author() ?></span>
                            <span class="setting datetime"><?php the_time('d.m.Y'); ?></span>
                            <span class="setting filedlink"><?php the_category(', ') ?></span>
                              <?php comments_popup_link('Нет комментариев', '1 комментарий', '% Comments', 'setting commentslink'); ?>
                              </span>
                            <?php edit_post_link($link = 'Edit Post', $before = '<span class="setting editlink">', $after = '</span>'); ?>
                            <p><?php the_tags('Тэги: ', ', ') ?></p>
                            <?php endif; ?>



                        </div>

                    <div class="post-entry">

<?php  if ( is_page(2) ) {
    include('birthday/list.php');
}  ?>
<?php
$query='cat=3';
if ( is_home() ) {
    query_posts($query);
} ?>

                        <?php if(is_page() || is_single()) { ?>
                        <?php the_content('Continue Reading &raquo;'); ?>
                        <?php } else { ?>
                        <?php the_excerpt_reloaded(100, '<h3>,<h4>,<a>,<img><p>', 'content', TRUE, 'Continue Reading', FALSE, 2); ?>
                        <?php } ?>
                    </div>
                    <div class="post-meta">

                        <?php if(is_single()) : ?>
                            <p>You can follow any responses to this entry through the <?php comments_rss_link('RSS 2.0'); ?> feed.

                        <?php if (('open' == $post-> comment_status) && ('open' == $post->ping_status)) {
                            // Both Comments and Pings are open
                        ?>
                            You can <a href="#respond">leave a response</a>, or <a href="<?php trackback_url(); ?>" rel="trackback">trackback</a> from your own site.

                        <?php } elseif (!('open' == $post-> comment_status) && ('open' == $post->ping_status)) {
                            // Only Pings are Open
                        ?>
                            Responses are currently closed, but you can <a href="<?php trackback_url(); ?> " rel="trackback">trackback</a> from your own site.

                        <?php } elseif (('open' == $post-> comment_status) && !('open' == $post->ping_status)) {
                            // Comments are open, Pings are not
                        ?>
                            You can skip to the end and leave a response. Pinging is currently not allowed.

                        <?php } elseif (!('open' == $post-> comment_status) && !('open' == $post->ping_status)) {
                            // Neither Comments, nor Pings are open
                        ?>
                            Both comments and pings are currently closed.

                        <?php } ?>
                        </p>
                        <?php endif; ?>
                    </div>

                </div>

        <?php endwhile; ?>

    <?php else : ?>

                <div class="post">
                    <div class="post-entry">
                        <h2>Not Found</h2>
                        <p class="center">Sorry, but you are looking for something that isn't here.</p>
                    </div>
                </div>


    <?php endif; ?>

rolph, а из каких соображений Вы впихнули query_posts внутрь Цикла?

rolph, а из каких соображений Вы впихнули query_posts внутрь Цикла?

Спасибо! В следующий раз повнимательнее буду.

Интересно, а есть возможность Впихнуть конкретную категорию на конкретную страницу….

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

Можно полностью управлять выводом постов на заданные страницы и даже порядком расположения постов на странице.

Перед циклом вставляете 2 строчки.

<?php $name = wp_title(”,false); ?>

<?php if (have_posts()) : query_posts(array(‘category_name’=>$name, ‘orderby’=>title,’order’=>ASC )) ?>

После этого нужно создать категории с именами точно такими же как у страниц и когда пишете пост назначайте ему нужную категорию.

Посты окажутся точно на той странице где Вы и хотели.

Еще способ отображения на главной странице постов только избранной категории (или группы категорий).
Перед циклом пишем следующее:

<?php    if (is_front_page()){
        $cats = '&cat=3'; //выводим категорию с id=3. Можно указать список через запятую
} else {
        $cats = ''; //это нужно, чтобы работали ссылки на другие категории, которые отображаются не на главной, а по своим ссылкам
}
query_posts($query_string.$cats);
//дальше цикл - без особенностей и без изменений
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
Задача:
Сделать так, чтобы на главной странице публиковались только посты из определенной рубрики(категории).

Спасибо огромное! Всё получилось! Именно то, что хотел!

Anonymous
Отправить
Ответ на: