模板部件中条件字符串中的自定义wp_Query不起作用:为什么?

时间:2021-07-14 作者:Gatto Nero

这有点混乱,我无法理解为什么我的方法不起作用,或者我的错误是什么。

我用的是template part 将自定义wp\\U查询包含到我的主题中。我希望在整个主题中有两种不同的行为,因此我在模板部分中使用一个条件语句来输出两个不同的循环。

在我的头版。php我使用get\\u template\\u part()调用模板部分,使用$args选项:

<?php get_template_part(\'template-parts/modules/moduli-offerta/offerta-figli\',\'lista\', array(\'tipologia\' => \'lista\') ); ?>
在我的模板部分,我有以下代码:

<?php if ( $args[\'tipologia\'] == \'lista\' ) : ?>
    ...
<?php elseif ( $args[\'tipologia\'] == \'descrizione\' ) : ?>
    ...
<?php else : ?>
    ...
<?php endif; ?>
这段代码有效:如果我在条件语句中放入任何文本或HTML5,它会根据“什么”正确显示输出;tipologia“;我选择收养。

但是如果我在if语句中放入一个自定义循环(通过wp\\u查询),则输出为空。

这就像wp\\u查询中的if语句在初始if语句中打断了某些内容。

你能帮我理解吗?提示:如果我不将自定义循环放入条件语句中,它就会工作。

以下是完整代码:

<?php if ( $args[\'tipologia\'] == \'lista\' ) : ?> 

<!-- First Loop Option -->

   <?php $cm_offerta_post_figli = new WP_Query( array( 
      \'post_type\' => \'cm_offerta\', 
      \'post_parent\' =>  get_the_ID(),
      \'order\' => \'ASC\',
      )
   ); ?>

   <?php if ( $cm_offerta_post_figli->have_posts() ) : ?>
      <ul class="list-group list-group-flush ms-0">
         <?php while ( $cm_offerta_post_figli->have_posts() ) : ?>
         <?php $cm_offerta_post_figli->the_post(); ?>
         <li class="list-group-item"><?php the_title(); ?></li>
         <?php endwhile; ?>
      </ul>
   <?php endif; ?>  

<!-- END of First Loop Option -->

<?php elseif ( $args[\'tipologia\'] == \'descrizione\' ) : ?>

<!-- Second Loop Option -->

   <?php if ( $cm_offerta_post_figli->have_posts() ) : ?>
         <div class="bg-light row row-cols-1 row-cols-md-2 mb-5 p-5">
            <?php while ( $cm_offerta_post_figli->have_posts() ) : ?>
            <?php $cm_offerta_post_figli->the_post(); ?>
            <div class="col">
              <div class="card bg-transparent border-0">
                <div class="card-body">
                   <h3 class="card-title"><?php the_title(); ?></h3>
                   <?php the_content(); ?>
                </div>
              </div>    
            </div>
            <?php endwhile; ?>
         </div>
   <?php endif; ?>

<!-- END of Second Loop Option -->

<?php else : ?>
    Errore
<?php endif; ?>

<?php wp_reset_query(); ?>

2 个回复
SO网友:Deepak Kumar

您已经在第一个条件内指定了查询结果。所以分配给这个变量的值"cm_offerta_post_figli" 在第二个elseif条件内无法访问。

请将下面的代码放在第一个条件的顶部。它会起作用的。

<?php $cm_offerta_post_figli = new WP_Query( array( 
  \'post_type\' => \'cm_offerta\', 
  \'post_parent\' =>  get_the_ID(),
  \'order\' => \'ASC\',
  )
); ?>
我已按如下方式修改了您的代码,也许这会有所帮助:

<?php $cm_offerta_post_figli = new WP_Query( array( 
  \'post_type\' => \'cm_offerta\', 
  \'post_parent\' =>  get_the_ID(),
  \'order\' => \'ASC\',
  )
); ?>

<?php if ( $args[\'tipologia\'] == \'lista\' ) : ?> 

<!-- First Loop Option -->

   <?php if ( $cm_offerta_post_figli->have_posts() ) : ?>
      <ul class="list-group list-group-flush ms-0">
         <?php while ( $cm_offerta_post_figli->have_posts() ) : ?>
         <?php $cm_offerta_post_figli->the_post(); ?>
         <li class="list-group-item"><?php the_title(); ?></li>
         <?php endwhile; ?>
      </ul>
   <?php endif; ?>  

<!-- END of First Loop Option -->

<?php elseif ( $args[\'tipologia\'] == \'descrizione\' ) : ?>

<!-- Second Loop Option -->

   <?php if ( $cm_offerta_post_figli->have_posts() ) : ?>
         <div class="bg-light row row-cols-1 row-cols-md-2 mb-5 p-5">
            <?php while ( $cm_offerta_post_figli->have_posts() ) : ?>
            <?php $cm_offerta_post_figli->the_post(); ?>
            <div class="col">
              <div class="card bg-transparent border-0">
                <div class="card-body">
                   <h3 class="card-title"><?php the_title(); ?></h3>
                   <?php the_content(); ?>
                </div>
              </div>    
            </div>
            <?php endwhile; ?>
         </div>
   <?php endif; ?>

<!-- END of Second Loop Option -->

<?php else : ?>
    Errore
<?php endif; ?>

<?php wp_reset_query(); ?>

SO网友:Deepak Kumar

首先,请检查下面的查询,要么它是结果。

<?php $cm_offerta_post_figli = new WP_Query( array( 
      \'post_type\' => \'cm_offerta\', 
      \'post_parent\' =>  get_the_ID(),
      \'order\' => \'ASC\',
      )
   ); ?>
如果没有,请只检查这一个。你一定会得到解决方案。