0

OK I'm a bit hopeless at this, but I'm trying to get my news page (template theme) to display content from one category only (ID 1) but I cant seem to get it to work. Instead of just displaying posts from category 1 it displays posts from all category's.

I've got the working code below, how do I amend this to show a certain category? I've tried using WP_Query but I can't have been doing it right.

Many thanks in advance for your time.

    <div id="primary" class="content-area"> 
    <main id="main" class="site-main" role="main">

    <?php
    if ( have_posts() ) :

        if ( is_home() && ! is_front_page() ) : ?>
            <header>
                <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
            </header>

        <?php
        endif;

        /* Start the Loop */
        while ( have_posts() ) : the_post();

            /*
             * Include the Post-Format-specific template for the content.
             * If you want to override this in a child theme, then include a file
             * called content-___.php (where ___ is the Post Format name) and that will be used instead.
             */
            get_template_part( 'template-parts/content', get_post_format() );

        endwhile;

        the_posts_pagination();

    else :

        get_template_part( 'template-parts/content', 'none' );

    endif; ?>

    </main><!-- #main -->
</div><!-- #primary -->
1

If this is a custom template you would need to use WP-Query to filter out posts for just one category:

<?php
$args = array(
'cat' => '12' // Insert category ID here
);

$query = new WP_Query( $args ); ?>

So your code should read something like this:

<div id="primary" class="content-area"> 
<main id="main" class="site-main" role="main">

<?php
$args = array(
'cat' => '12' // Insert category ID here
);

$query = new WP_Query( $args ); ?>

<?php if ( $query->have_posts() ) : //loop for custom query ?>

 <header>
<h1 class="page-title screen-reader-text"><?php single_post_title(); ?> </h1>   
 </header>

    /* Start the Loop */
   <?php while ( $query->have_posts() ) : $query->the_post(); ?>

        <?php
        /*
         * Include the Post-Format-specific template for the content.
         * If you want to override this in a child theme, then include a file
         * called content-___.php (where ___ is the Post Format name) and that will be used instead.
         */
        get_template_part( 'template-parts/content', get_post_format() );

    endwhile;

    the_posts_pagination();

else :

    get_template_part( 'template-parts/content', 'none' );

endif; ?>

</main><!-- #main -->

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.