从分页中排除某些帖子格式

时间:2019-04-29 作者:user10980228

我有标准的博客文章格式和图库格式。我已经从索引中排除了所有画廊帖子。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; ?>

2 个回复
最合适的回答,由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()) - 在上述两个地方

相关推荐

在Get_the_Posts_Pagination函数中编辑分页文本

我想在链接模板中编辑screen\\u reader\\u文本。php我可以在一个主题中这样做,这样它就不会在更新时被覆盖。看起来过滤器是最好的选择,但我找不到关于使用什么过滤器的文档。这是我想从链接模板更改的代码。php: if ( $GLOBALS[\'wp_query\']->max_num_pages > 1 ) { $args = wp_parse_args( $args, array( \'mid_size\' =&