有没有办法运行这两个循环而不重复代码?

时间:2014-01-28 18:44:37

标签: php wordpress

我有一个WordPress主题,我有一个情况,在主循环模板(index.php)我需要有时运行自定义循环。所以它看起来像这样:

$the_qry = new WP_Query( array( 'post_type' => 'post', 'offset' => 4, 'orderby' => 'date', 'order' => 'DESC',  'post_status' => 'publish', 'paged' => $paged ) );

if ( $the_qry->have_posts() ) : while ( $the_qry->have_posts() ) : $the_qry->the_post();

但在其他情况下我需要它来运行正常的

if (have_posts()) : while (have_posts()) : the_post();

我尝试将它们包装在这样的IF中:

    if ( $special_situation == true ) {
         if ( $the_qry->have_posts() ) : while ( $the_qry->have_posts() ) : $the_qry->the_post();
    } else {
         if (have_posts()) : while (have_posts()) : the_post(); 
    }
    // output each post code
    endwhile; endif;

但当然它没有用,因为在IF语句中没有关闭while,所以它不会那样工作。我能想到的唯一解决方案是:

if ( $special_situation == true ) {
         if ( $the_qry->have_posts() ) : while ( $the_qry->have_posts() ) : $the_qry->the_post();
         // output each post code
         endwhile; endif;
    } else {
         if (have_posts()) : while (have_posts()) : the_post(); 
         // output each post code
         endwhile; endif;
    }

但对我来说这似乎很愚蠢,因为// output each post code没有改变,所以我复制了很多代码。

有没有办法简化这一切?

谢谢!

1 个答案:

答案 0 :(得分:0)

global $wp_query;
if($special_situation == true){
    $the_qry = new WP_Query( array( 'post_type' => 'post', 'offset' => 4, 'orderby' => 'date', 'order' => 'DESC',  'post_status' => 'publish', 'paged' => $paged ) );
}
else{
    $the_qry = $wp_query; //Sets $the_qry to default query
}
if ( $the_qry->have_posts() ) : while ( $the_qry->have_posts() ) : $the_qry->the_post();
    // output each post code
endwhile; endif;