0

Not sure if this is the best approach - so happy to change - but I've set up a number of categories with child categories. Then on my landing page I list the parent categories - I'm using ACF to select the taxonomies I want -

        <ul>

        <?php foreach( $terms as $term ): ?>

        <h2><?php echo $term->name; ?></h2>
        <p><?php echo $term->description; ?></p>


        <a href="<?php echo get_term_link( $term ); ?>">View all '<?php echo $term->name; ?>' posts</a>

        <?php endforeach; ?>


        </ul>

        <?php endif; ?>

Each link above takes me to categories.php where I list the child categories:

        <?php 

                $term = get_queried_object();

                $children = get_terms( $term->taxonomy, array(
                    'parent'    => $term->term_id,
                    'hide_empty' => false
                ) );

                if ( $children ) { 

                foreach( $children as $subcat )
                {

                echo '<li><a href="' . esc_url(get_term_link($subcat, $subcat->taxonomy)) . '">' . $subcat->name . '</a></li>';
                }


                }


        ?>

Problem is the link attached to the child categories stays on the category.php page and not the child category post.

How do I direct the child category link to the actual post?

Heres how I though it should flow:

  1. Landing page (containing list of parent categories)
  2. Category.php (containing child categories)
  3. Child post

2 Answers 2

1

OK solved!

I have a post called "Cardio" with a child category name "Cardio".

I created a category-cardio.php (cardio is the child category) but the page doesn't display the post "cardio" same name as the category.

<?php
/**
 * Cardio category template
 *
 * @package clf
 */

get_header(member);

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

<h1>category-cardio.php</h1>

    <?php $args = array(
        'categroy_name' => 'cardio',    
    ) ?>

    <?php $the_query = new WP_Query( $args ); ?>

    <?php if ($the_query->have_posts()) : ?>

    <?php while ($the_query->have_posts()) : $the_query->the_post();

                echo the_content();

            endwhile;

        endif;
        ?>


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

<?php
get_sidebar();
get_footer();
0

It's normal behaviour. ctaegory.php is the template meant to display posts of a category (parent as well as child-categories), but you are using it to display child-categories only. Posts are not shown because there is no code to display posts.

You can get a list of posts by appending a WP loop to the category.php file.

// After your current code for displaying child categories
// Main loop
if( have_posts() ){
    while ( have_posts() ){
       the_post();
      //    Display post title, contents etc here

    }
 }

I hope this helps.

1
  • I've tried that and don't work. I've used category-slug approach and I can get a list of the posts within a category - but I just want the content(as there is only 1 post per category) and using the_content() on the category-slug.php isn't working either. I'm stumped!
    – Paul
    Commented Mar 15, 2019 at 6:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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