我有标准的博客文章格式和图库格式。我已经从索引中排除了所有画廊帖子。php页面,因此只有标准帖子显示在那里。然而,画廊格式的帖子仍在分页计算中,分页页面上只有一个空白区域,其中会有画廊帖子格式。如何从分页中排除这些内容?
<?php echo paginate_links(); ?>
我试过了,但没用:
<?php
$args = array(
\'post_type\' => \'post\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => array(
\'post-format-gallery\'
) ,
\'operator\' => \'NOT IN\',
) ,
)
);
?>
<?php echo paginate_links($args); ?>
这是显示标准博客帖子的查询:
<?php if (have_posts() ): ?>
<?php while (have_posts() ): the_post(); ?>
<?php $format = get_post_format( $post_id ); ?>
<?php if($format != \'gallery\'): ?>
<div class="blog" style="width: 350px"><a href="<?php esc_url(the_permalink()); ?>" class="w-inline-block"><?php the_post_thumbnail(); ?></a>
<div class="gallery-info"><a href="<?php esc_url(the_permalink()); ?>" class="linkgallery"><?php the_title(); ?></a></div>
<?php $the_category = get_the_category(); ?>
<div class="gallery-info gallery-category"><?php foreach($the_category as $category): ?><?php echo $category->cat_name . \' \'; ?>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
最合适的回答,由SO网友:Alexander Holsgrove 整理而成
如果帖子的格式不正确,只需跳过循环中的帖子,就会有点混乱。你有几个选择。
首先,可以在主题中使用挂钩来执行过滤器functions.php
. 看看pre_get_posts, 允许您更改查询并删除这些库帖子。然后,在模板中,可以正常使用循环和分页。应用此挂钩时,可以对特定页面或模板进行检查。
第二种选择是打电话query_posts() 或创建新的WP_Query 覆盖主查询。您需要使用get_query_var( \'paged\')
要获取当前分页,例如:
<?php
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args = array(
\'paged\' => $paged,
\'post_type\' => \'post\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => array(
\'post-format-gallery\'
),
\'operator\' => \'NOT IN\',
)
)
);
$query = new WP_Query($args);
?>
<?php if ($query->have_posts()): ?>
<?php while ($query->have_posts()): ?>
<?php $query->the_post(); ?>
// Loop
<?php endwhile; ?>
<?php echo paginate_links(array(
\'total\' => $query->max_num_pages,
\'current\' => $paged
)); ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>
未测试的代码,但这应该让您开始。
SO网友:nmr
正如评论中提到的@SallyCJ,您可以通过过滤器更改查询pre_get_posts. 无需执行其他操作WP_Query
.
add_action(\'pre_get_posts\', \'se336587_exclude_gallery_format\');
function se336587_exclude_gallery_format( $query )
{
if ( $query->is_main_query() /* here is additional condition (see below) */ )
{
$query->query_vars[\'tax_query\'][] = [
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => [\'post-format-gallery\'],
\'operator\' => \'NOT IN\',
];
}
}
IF additional condition && is_home()
- 过滤器将应用于主页上&& is_category()
- 类别页面上的帖子将被过滤,&& (is_home() || is_category())
- 在上述两个地方