web-dev-qa-db-ja.com

Get_template_partに変数を渡します

category-about.phpには

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

テンプレートファイルcategory-about.phpposts-loop.phpの変数を含めるにはどうすればよいですか。

見て このコメント そして /この答え 全部まとめるのが難しい。

答えで提供されているヘルパー関数を使用するのではなく、これをよりよく理解したいと思います。正しい方法はset_query_varget_query_varを使うことであると私は理解していますが、それには少し手助けが必要です。

各カテゴリのコアループコードを書く代わりに、カテゴリテンプレートで$argsを定義し、それをテンプレートファイルで使うのが好きです。任意の助けは大歓迎です。

1
lowtechsun

category-about.phpには

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

そしてテンプレートファイルposts-loops.phpで私は今持っています

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

そしてそれはうまくいきます。

参照:
http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/#comment-110459https://wordpress.stackexchange.com/a/176807/77054

3
lowtechsun

最初の方法

テンプレート部分が含まれるテンプレート:

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

含まれるテンプレート部分:

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


第二の方法:

テンプレート部分が含まれるテンプレート:

global $my_var;
$my_var= true;

含まれるテンプレート部分:

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


私はむしろ最初の方法で行きたいと思います。

0
Tahi Reu