Pass a variable to get_template_part

In category-about.php I have

<?php
/**
 * The template for displaying the posts in the About category
 *
 */
?>
<!-- category-about.php -->
<?php get_header(); ?>

<?php
  $args = array(
    'post_type' => 'post',
    'category_name' => 'about',
  ); ?>

  <?php
  // How to put this part in get_template_part ?
  $cat_name = $args['category_name'];
  $query = new WP_Query( $args );
  if($query->have_posts()) : ?>
    <section id="<?php echo $cat_name ?>-section">
    <h1 class="<?php echo $cat_name ?>-section-title">
      <strong><?php echo ucfirst($cat_name) ?> Section</strong>
    </h1><?php
    while($query->have_posts()) : $query->the_post(); ?>
      <strong><?php the_title(); ?></strong>
        <div <?php post_class() ?> >
          <?php the_content(); ?>
        </div> <?php
        endwhile; ?>
  </section> <?php
  endif;
  wp_reset_query();
  // end get_template_part ?>  

<?php get_footer(); ?>

How can I have the variables from category-about.php in the template file posts-loop.php?

Looking at this comment and this answer I have trouble putting it all together.

I would like to understand this better instead of using any of the helper functions provided in the answers. I understand that the correct way would be using set_query_var and get_query_var however I require a bit of assistance with that.

Instead of writing the core loop code for each category I like to just define the $args in the category template and then make use of that in the template file. Any help is much appreciated.

3 Answers
3

In category-about.php I have

<?php
/**
 * The template for displaying the posts in the About category
 *
 */
?>
<!-- category-about.php -->
<?php get_header(); ?>

<?php
  $args = array(
    'post_type' => 'post',
    'category_name' => 'about',
  ); ?>

  <?php  
    // important bit
    set_query_var( 'query_category', $args );

    get_template_part('template-parts/posts', 'loop');
   ?>   
<?php get_footer(); ?>

and in template file posts-loops.php I now have

<!-- posts-loop.php -->
    <?php
    // important bit
    $args = get_query_var('query_category');

    $cat_name = $args['category_name'];
    $query = new WP_Query( $args );
    if($query->have_posts()) : ?>
      <section id="<?php echo $cat_name ?>-section">
      <h1 class="<?php echo $cat_name ?>-section-title">
        <strong><?php echo ucfirst($cat_name) ?> Section</strong>
      </h1><?php
      while($query->have_posts()) : $query->the_post(); ?>
        <strong><?php the_title(); ?></strong>
          <div <?php post_class() ?> >
            <?php the_content(); ?>
          </div> <?php
          endwhile; ?>
    </section> <?php
    endif;
    wp_reset_query();

and it works.

Reference:

Passing variables to get_template_part() in WordPress


https://wordpress.stackexchange.com/a/176807/77054

Leave a Comment