从循环中排除 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»</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();
?>
暂时这解决了我的问题。
我正在尝试从循环中排除 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»</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();
?>
暂时这解决了我的问题。