从循环中排除帖子格式导致其他帖子无休止重复

时间:2015-12-09 22:20:53

标签: php html wordpress post-format

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

只有成功运作的帖子格式的页面:

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

?>

使用类似的代码,尝试排除帖子格式有效,但随后循环并重复所有其他帖子:

	<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>

1 个答案:

答案 0 :(得分:0)

解决了它。重复所有博客帖子的页面位于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();

?>

目前这解决了我的问题。