web-dev-qa-db-fra.com

Passer une variable à get_template_part

Dans category-about.php j'ai

<?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(); ?>

Comment puis-je avoir les variables de category-about.php dans le fichier modèle posts-loop.php?

En regardant ce commentaire et cette réponse J'ai du mal à tout mettre en place.

J'aimerais mieux comprendre ceci au lieu d'utiliser l'une des fonctions d'aide fournies dans les réponses. Je comprends que la bonne façon serait d'utiliser set_query_var et get_query_var mais j'ai besoin d'un peu d'aide pour cela.

Au lieu d'écrire le code de boucle de base pour chaque catégorie, j'aime bien définir le $args dans le modèle de catégorie, puis l'utiliser dans le fichier de modèle. Toute aide est très appréciée.

1
lowtechsun

Dans category-about.php j'ai

<?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(); ?>

et dans le fichier modèle posts-loops.php j'ai maintenant

<!-- 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();

et il fonctionne.

Référence:
http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/#comment-110459https://wordpress.stackexchange.com/a/176807/77054

3
lowtechsun

Première façon :

Modèle dans lequel la partie modèle est incluse:

$value_to_sent = true;
set_query_var( 'my_var', $value_to_sent );

Partie de modèle incluse:

$get_my_var = get_query_var('my_var');
if ($get_my_var == true) {
...
}


Deuxième voie:

Modèle dans lequel la partie modèle est incluse:

global $my_var;
$my_var= true;

Partie de modèle incluse:

global $my_var;
if ($my_var == true) {
...
}


Je préférerais utiliser le premier moyen.

0
Tahi Reu