Display content from a specific category

I’m trying to get my news page to display content from one category only (number 3) but I cant seem to get it to work. Instead of just displaying posts from category 3 it displays posts from all category’s.

Here is my code:

<?php get_header(); ?>

            <div class="content news_page">

                       <h1>Latest News</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="https://wordpress.stackexchange.com/questions/145125/<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a>

                                    <a href="https://wordpress.stackexchange.com/questions/145125/<?php the_permalink() ?>"><h5><?php the_title(); ?></h5></a>
                                    <?php the_excerpt(); ?>
                                    <p style="text-align:center;"><a href="https://wordpress.stackexchange.com/questions/145125/<?php the_permalink() ?>" class="readmore_news">Read more</a></p>
<br>
<div class="clear"></div>
                                       </div>
                                    </div>

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


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

            </div><!--end of content-->



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

<?php get_footer(); ?>

5 Answers
5

The argument isn’t category, it is cat. Your query fails because you are using an argument that doesn’t exist.

$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();
    // your loop
  }
}

Notice that I have converted your query_posts() into a new WP_Query object. Do not use query_posts(), ever. Even the Codex states so.

Note: This function isn’t meant to be used by plugins or themes. As
explained later, there are better, more performant options to alter
the main query. query_posts() is overly simplistic and problematic way
to modify main query of a page by replacing it with new instance of
the query. It is inefficient (re-runs SQL queries) and will outright
fail in some circumstances (especially often when dealing with posts
pagination). Any modern WP code should use more reliable methods, like
making use of pre_get_posts hook, for this purpose.

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

Also note that I removed unnecessary PHP opening and closing tags and formatted the code for better readability. That alternative control structure syntax is a formula for failure, in my experience.

Leave a Comment