这是WP_Query的有效使用吗?

时间:2016-10-11 18:23:28

标签: php html wordpress custom-post-type advanced-custom-fields

我一直在Wordpress中使用高级自定义字段和自定义帖子类型UI插件来在单页主题上创建可编辑的部分。我想知道我所做的是否有效?如果你注意到,我已经打开并关闭了很多循环,因为我不希望HTML标记获得超出需要的输出。我只是想知道是否有更好的方法来做到这一点,或者如果我甚至可以不使用WP_Query而只使用常规的Wordpress循环呢?

<?php
  $args = array(
    'post_type' => array(
       'visibility_section',
       'credibility_section',
       'social_media',
       'donations_section',
       'crowdfunding_section'
      )
  );

  $query = new WP_Query( $args );
?>

<section class="row" id="visibility"><!-- Start visibility section -->
  <div class="container">
    <h4 class="text-xs-center m-b-3">Visibility</h4>
    <div class="col-md-6">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <?php the_field( 'visibility_left_column' ); ?>
      <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
    <div class="col-md-6">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <?php if( get_field( 'visibility_image' ) ): ?>
            <img class="visibility_image m-b-3 img-fluid" src="<?php the_field( 'visibility_image'); ?>" />
        <?php endif; ?>
      <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
    <div class="col-md-12 text-xs-center">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <?php the_field( 'visibility_bottom' ); ?>
      <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
  </div>
</section>

<section class="row" id="credibility"><!-- Start Credibility section -->
  <div class="container">
  <hr>
    <h4 class="text-xs-center m-b-3">Credibility</h4>
    <div class="col-sm-12">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <?php the_field( 'credibility_top' ); ?>
      <?php endwhile; endif; wp_reset_postdata(); ?>
      <div class="text-xs-center">
        <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
          <img src="<?php the_field( 'credibility_image' ); ?>" class="img-fluid m-x-auto"/>
        <?php endwhile; endif; wp_reset_postdata(); ?>
      </div>
    </div>
</section><!-- End Credibility section -->

<section class="row" id="social-media"><!-- Start Social Media Exposure section -->
  <div class="container">
  <hr>
    <h4 class="text-xs-center m-b-3">Social Media Exposure</h4>
    <div class="col-md-4">
    <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
      <?php the_field( 'social_left_column' ); ?>
    <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
    <div class="col-md-4">
      <div class="text-xs-center">
        <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <img src="<?php the_field( 'social_mid_image' ); ?>" class="img-fluid" />
        <?php endwhile; endif; wp_reset_postdata(); ?>
      </div>
    </div>
    <div class="col-md-4">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
      <?php the_field( 'social_right_column' ); ?>
      <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
  </div>
</section><!-- End Social Media Exposure section -->

<section class="row" id="donations"><!-- Start Donations Section-->
  <div class="container">
  <hr>
    <h4 class="text-xs-center m-b-3">Donations</h4>
    <div class="col-md-4">
      <div class="text-xs-center">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <img src="<?php the_field( 'donations_left_image' ); ?>" class="img-fluid" />
      <?php endwhile; endif; wp_reset_postdata(); ?>
      </div>
    </div>
    <div class="col-md-8">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
      <?php the_field( 'donations_right_column' ); ?>
      <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
  </div>
</section><!-- End Donations section -->

<section class="row" id="crowdfunding"><!-- Start Crowdfunding Section-->
  <div class="container">
  <hr>
    <h4 class="text-xs-center m-b-3">Crowdfunding</h4>
    <div class="col-md-7">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <?php the_field( 'crowd_left_column' ); ?>
      <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
    <div class="col-md-5">
      <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <img src="<?php the_field( 'crowd_right_image' ); ?>" class="img-fluid" />
      <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
  </div>
</section><!-- End Donations section -->

1 个答案:

答案 0 :(得分:1)

这样的事情会更有效率,做一个循环并在该循环中创建所有必需的变量。

<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
       <?php $x['visibility_left_column'] = get_field( 'visibility_left_column' ); ?>
       <?php $x['visibility_image']       = get_field( 'visibility_image' ); ?>
       <?php $x['visibility_bottom']      = get_field( 'visibility_bottom' ); ?>
       <?php // ... ?>
<?php endwhile; endif; wp_reset_postdata(); ?>

<section class="row" id="visibility"><!-- Start visibility section -->
  <div class="container">
    <h4 class="text-xs-center m-b-3">Visibility</h4>
    <div class="col-md-6">
      <?php echo $x['visibility_left_column']; ?>
    </div>
    <div class="col-md-6">
      <?php $x['visibility_image'] : ?>
            <img class="visibility_image m-b-3 img-fluid" src="<?php echo $x['visibility_image']; ?>" />
        <?php endif; ?>
    </div>
    <div class="col-md-12 text-xs-center">
      <?php echo $x['visibility_bottom']; ?>
    </div>
  </div>
</section>
<!-- ... -->

或者围绕所有html

包装一个循环
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
  <section class="row" id="visibility"><!-- Start visibility section -->
    <div class="container">
      <h4 class="text-xs-center m-b-3">Visibility</h4>
      <div class="col-md-6">
        <?php the_field( 'visibility_left_column' ); ?>
      </div>
      <div class="col-md-6">
        <?php if( get_field( 'visibility_image' ) ): ?>
            <img class="visibility_image m-b-3 img-fluid" src="<?php the_field( 'visibility_image'); ?>" />
        <?php endif; ?>
      </div>
      <div class="col-md-12 text-xs-center">
        <?php the_field( 'visibility_bottom' ); ?>
      </div>
    </div>
  </section>
  <!-- ... -->

<?php endwhile; endif; wp_reset_postdata(); ?>