Отображение записей только из определенной категории на пользовательской странице?

21 мая 2014 г., 18:13:56
Просмотры: 90.1K
Голосов: 4

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

Вот мой код:

<?php get_header(); ?>

            <div class="content news_page">

                       <h1>Последние новости</h1>     

                       <?php $args = array(
                            'post_type' => 'post' ,
                            'orderby' => 'date' ,
                            'order' => 'DESC' ,
                            'posts_per_page' => 6,
                            'category'         => '3',
                            'paged' => get_query_var('paged'),
                            'post_parent' => $parent
                       ); ?>
                       <?php query_posts($args); ?>




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

                                <div class="large-4 medium-4 small-12 columns">
                                    <div class="latest_news_cont">
                                    <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a>

                                    <a href="<?php the_permalink() ?>"><h5><?php the_title(); ?></h5></a>
                                    <?php the_excerpt(); ?>
                                    <p style="text-align:center;"><a href="<?php the_permalink() ?>" class="readmore_news">Читать далее</a></p>
<br>
<div class="clear"></div>
                                       </div>
                                    </div>

                            <?php endwhile; ?>
                        <?php endif; ?>


<div class="clear"></div>

            </div><!-- конец content -->



<div class="clear"></div>

<?php get_footer(); ?>
4
Комментарии

Конкретно что не работает? И, пожалуйста, не используйте query_posts.

s_ha_dum s_ha_dum
21 мая 2014 г. 18:22:58

Привет, вместо отображения постов из определенной категории, показываются посты из всех категорий

user3615681 user3615681
21 мая 2014 г. 18:27:55

Ваша страница новостей установлена как страница записей в Настройках чтения?

Brad Dalton Brad Dalton
21 мая 2014 г. 18:52:28

https://wordpress.stackexchange.com/a/290909/133699

Muhammad Bilal Muhammad Bilal
28 мар. 2018 г. 17:42:58
Все ответы на вопрос 5
0

Получить первые пять записей из определенной категории

<?php
        // запрос
        $the_query = new WP_Query(array(
            'category_name' => 'название_категории',
            'post_status' => 'publish',
            'posts_per_page' => 5,
        ));
        ?>

        <?php if ($the_query->have_posts()) : ?>
            <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
                <?php the_category(); ?>
                <?php the_title(); ?>
                <?php the_excerpt(); ?>
                <?php the_post_thumbnail(); ?>
                <?php the_content(); ?>

            <?php endwhile; ?>
            <?php wp_reset_postdata(); ?>

        <?php else : ?>
            <p><?php __('Новостей нет'); ?></p>
        <?php endif; ?>
12 янв. 2018 г. 14:26:03
0

Аргумент называется не category, а cat. Ваш запрос не работает, потому что вы используете несуществующий аргумент.

$args = array(
  'post_type' => 'post' ,
  'orderby' => 'date' ,
  'order' => 'DESC' ,
  'posts_per_page' => 6,
  'cat'         => '3',
  'paged' => get_query_var('paged'),
  'post_parent' => $parent
); 
$q = new WP_Query($args);
if ( $q->have_posts() ) { 
  while ( $q->have_posts() ) {
    $q->the_post();
    // ваш цикл
  }
}

Обратите внимание, что я заменил ваш query_posts() на новый объект WP_Query. Никогда не используйте query_posts(). Об этом прямо говорится в Codex.

Примечание: Эта функция не предназначена для использования в плагинах или темах. Как объяснено далее, существуют более эффективные способы изменения основного запроса. query_posts() — это слишком упрощенный и проблемный способ изменить основной запрос страницы, заменяя его новым экземпляром запроса. Это неэффективно (повторно выполняет SQL-запросы) и в некоторых случаях полностью не работает (особенно часто при работе с пагинацией постов). Любой современный код WordPress должен использовать более надежные методы, такие как использование хука pre_get_posts.

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

Также обратите внимание, что я удалил ненужные открывающие и закрывающие теги PHP и отформатировал код для лучшей читаемости. Этот альтернативный синтаксис управляющих структур, по моему опыту, ведет к ошибкам.

21 мая 2014 г. 18:42:56
1

Лично я бы сделал так.

Вместо:

'category' => '3',

Замените на это:

'category_name' => 'my-category-slug'

Естественно, найдите название slug вашей категории и замените 'my-category-slug'.

Как упомянул @s-ha-dum, лучше не использовать этот метод, а вместо него использовать метод WP_Query. Вы можете ознакомиться с ним в WordPress Codex здесь: http://codex.wordpress.org/Class_Reference/WP_Query#Parameters

21 мая 2014 г. 18:47:15
Комментарии

Спасибо. Это помогло мне понять, что в свойстве "category_name" нужно передавать "slug" вместо названия категории (включая пробелы). Благодарю!

Fernando Torres Fernando Torres
31 мая 2021 г. 19:19:52
0

Добавьте этот код в файл функций:

function wpsites_display_one_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( 'cat', '3' );
    }
}
add_action( 'pre_get_posts', 'wpsites_display_one_category' );

Измените условный тег is_home() на условный тег, соответствующий вашей странице новостей или циклу страницы записей, если это необходимо. То, что вы установили в Настройки > Чтение.

21 мая 2014 г. 18:52:00
0

Вам следует изменить

'category'         => '3',

на в вашем коде.

'cat' => '3',
13 нояб. 2018 г. 13:01:47