如何根据帖子类型对搜索结果进行分组,并且只有在帖子类型结果不为空的情况下?

时间:2021-08-25 作者:palekjram

我想将搜索结果分组到帖子类型。我可以通过使用foreach和我想要的post类型数组来实现这一点,但它也会显示没有任何结果的post类型。这是我从另一个线程获取的代码。

<?php 
    if( have_posts() ){
        $types = array(\'post\', \'videos\', \'graphics\', \'photos\');
        foreach( $types as $type ){?>
            <div class="card">
                <div class="card-header">
                    <h4><?=$type;?></h4>
                </div>
                
                <div class="card-body">
    <div class="type-<?=$type;?> row row-cols-1 row-cols-sm-1 row-cols-md-2 row-cols-lg-3 row-cols-xl-3">
        <?php
            while( have_posts() ){
                the_post();
                if( $type == get_post_type() ){
                    echo get_template_part(\'template-part/content\', $type);
                }
            }
            rewind_posts();
        ?>
            </div>
        </div>
    </div>

        <?php
        }
    }
?>
现在,它显示为:

Post

  1. 第1后
  2. 第2后
    1. Graphics

      Videos

        视频1
      1. 视频2
        1. Photos

          如果图形和照片类型没有任何显示,如何删除标题中的图形和照片?

1 个回复
最合适的回答,由SO网友:Pierre R 整理而成

唯一的方法是对它们进行计数或通过WP\\u查询(重新)请求它们。我想我更喜欢第一种解决方案,因为它不太复杂。

<?php if (have_posts()) : ?>
    <?php
    // We change the definition of the array to be able to store the count of each post_type
    $types = array(\'post\' => 0, \'videos\' => 0, \'graphics\' => 0, \'photos\' => 0);
    while (have_posts()) {
        the_post();
        // We check that only allowed post_type are counted
        if (array_key_exists(get_post_type(), $types)) {
            $types[get_post_type()]++;
        }
    }
    ?>
    <?php foreach ($types AS $type => $nb_of_type) : ?>
        <?php // We only show post_types that have at least one result  ?>
        <?php if ($nb_of_type > 0) : ?>
            <div class="card">
                <div class="card-header">
                    <h4><?= $type; ?></h4>
                </div>

                <div class="card-body">
                    <?php while (have_posts()) : the_post(); ?>
                        <?php if (get_post_type() === $type) : ?>
                            <?php get_template_part(\'template-part/content\', $type); ?>
                        <?php endif; ?>
                    <?php endwhile; ?>
                </div>
            </div>
        <?php endif; ?>
    <?php endforeach; ?>
<?php endif; ?>

相关推荐

在WordPress上使用ElasticSearch

我是个傻瓜,所以感谢你的耐心:-)我正在尝试使用ElasticSearch和使用ElasticPress插件的Wordpress安装。所有配置和生产中。到目前为止取得了惊人的成绩。我对所有ES的使用位置感到困惑。“默认情况下,它仅在搜索页上工作。如果要使用它处理任何其他页,或索引、循环、主页、存档、税务(WP\\U查询),则必须添加到查询中:”“ep\\U integrate”“=>true”有人能帮我用代码片段实现这个吗?谢谢