从循环中排除 post 格式导致无限重复其他 posts

Excluding a post format from loop causing endless repeat of other posts

我正在尝试从循环中排除 POST 格式(图库)。我能够使用类似的 tax_query 成功地仅显示 post 格式而没有其他 posts 但是当我尝试使用 tax_query 排除 post 格式时'operator' => 'NOT IN' 它确实排除了 post 格式,但随后它无休止地重复并循环所有其他 post 格式。我不确定我在这里做错了什么。我只希望每个 post 显示一次,而不是 post-format-gallery.

只有 post 格式的页面成功运行:

<?php

get_header(); ?>

<div class="site-content clearfix">

 <?php if (is_active_sidebar('sidebar1')) : ?>

  <div class="main-column">

 <?php endif; ?>

  <?php if (have_posts()) :
   while (have_posts()) : the_post(); ?>
   
    <article class="page">
     <h2><?php the_title(); ?></h2>

     <?php $args = array(
         'post_type'=> 'post',
         'post_status' => 'publish',
         'order' => 'ASC',
         'tax_query' => array(
             array(
                 'taxonomy' => 'post_format',
                 'field' => 'slug',
                 'terms' => array( 'post-format-gallery' )
             )
         )
     );

     $galleryPosts = new WP_Query ( $args );

     if ($galleryPosts->have_posts()) :
     while ($galleryPosts->have_posts()) : $galleryPosts->the_post(); ?>

     <div class="page portfolio">
      <?php the_post_thumbnail(); ?>
      <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
      <?php the_excerpt(); ?>
     </div>
    
     <?php endwhile;

      else :
     
     endif; 
     wp_reset_postdata();

     ?>

    </article>

  <?php endwhile;

   else :
    echo '<p>No content found</p>';
   endif; ?>

 <?php if (is_active_sidebar('sidebar1')) : ?>

  </div>

 <?php endif; ?>


 <?php get_sidebar(); ?>

</div>


<?php get_footer();

?>

使用类似的代码,尝试排除 post 格式有效,但随后无休止地循环并重复所有其他 posts:

 <article class="post">

  <?php $args = array(
      'post_type'=> 'post',
      'post_status' => 'publish',
      'order' => 'DESC',
      'tax_query' => array(
          array(
              'taxonomy' => 'post_format',
              'field' => 'slug',
              'terms' => array( 'post-format-gallery' ),
              'operator' => 'NOT IN',
          )
      )
  );

  $noGalleryPosts = new WP_Query ( $args );

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

  ?>

  <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
  <p class="post-info"><?php the_time('F jS, Y'); ?> 
  | by 
  <a href="<?php echo get_author_posts_url(get_the_author_meta('ID')); ?>"><?php the_author(); ?></a> 
  | Posted in
  <?php 
  $categories = get_the_category();
  $separator = ", ";
  $output = '';

  if ($categories){

   foreach ($categories as $category) {
    $output .= '<a href="' . get_category_link($category->term_id) . '">' . $category->cat_name . '</a>' . $separator;
   }

   echo trim($output, $separator); 
  }
  ?></p>
  
   <?php if (!is_single() ) { ?>

      <P>
      <?php echo get_the_excerpt(); ?> 
      <a href="<?php the_permalink(); ?>">Read more&raquo;</a>
      </p>


    <?php } elseif (is_single() ) {
     the_post_thumbnail('banner-image');   
     the_content();

   } else {

    the_content();   

   } ?>

  <?php endwhile;

    else :
     
   endif; 
   wp_reset_postdata();

   ?>



 </article>

解决了。重复所有博客文章的页面位于 content.php 上,index.php 链接到该页面。我在内容所在的索引上有一个循环,所以它试图一遍又一遍地 运行 它。

解决方案:从 index.php 中删除循环并保持 content.php 不变。

编辑:我的这个原始解决方案导致了各种其他问题,所以我只是将 index.php 文件更改为以下内容,并从 content.php

中取出循环
    <?php

get_header(); ?>

<div class="site-content clearfix">

    <?php if (is_active_sidebar('sidebar1')) : ?>

        <div class="main-column">

    <?php endif; ?>



            <?php if (have_posts()) :

                $args = array(
                  'tax_query' => array(
                    array(
                      'taxonomy' => 'post_format',
                      'field' => 'slug',
                      'terms' => 'post-format-gallery',
                      'operator' => 'NOT IN'
                    )
                  )
                );
                query_posts( $args );


            while (have_posts()) : the_post();

            get_template_part('content', get_post_format());

            endwhile;

            else :
                echo '<p>No content found</p>';

            endif; ?>


    <?php if (is_active_sidebar('sidebar1')) : ?>

        </div>

    <?php endif; ?>


    <?php get_sidebar(); ?>

</div>



<?php get_footer();

?>

暂时这解决了我的问题。