如何从整个循环中仅返回每个对象的一个实例

时间:2014-11-10 作者:BeTA iT

我在分类法归档模板中添加了一个过滤函数。

其目的是在提要栏中添加用于过滤的URL,我希望它返回一组ACF,如zipcode等。。。(本例中的postnr与zipcode相同)

第一个“问题”是,到目前为止,它只会返回请求的输出,但对于像这样的每篇文章只返回一次

7011特隆赫姆7048特隆赫姆7022特隆赫姆7011特隆赫姆7011特隆赫姆7048特隆赫姆7022特隆赫姆都很好,但我希望每个选项只返回一次。(对于额外的香料,我们可以像这样在每个后面进行计数:但不是Nesserry。

第二个问题是,它只考虑分页“边界”之间的循环中的立柱

我们如何在当前分类法中对所有帖子进行整理?

<?php if( have_posts()): the_post()  ?>
 <h3>Filter etter postnr:</h3>
 <ul>
  <?php while ( have_posts()): the_post();
        //global $post; 
        $postnr = \'\';?>
  <li>
   <a href="?postnr=<?php the_field("postnummer")?>"><?php the_field("postnummer");?>
  - <?php the_field("poststed"); ?></a>
   </li>
  <?php endwhile; ?>
 </ul>
<?php endif; ?>

1 个回复
SO网友:Howdy_McGee

在进入侧栏循环以启动唯一值之前,需要一个循环。您可以运行相同的循环两次rewind_posts() 在这两个循环之间(因此从索引0开始获得原始循环)。

在第一个循环中,循环并将所有值添加到一个数组中,使数组如下所示:

Array(
    [0] => \'7011 Trondheim\',
    [1] => \'7048 Trondheim\',
    [2] => \'7022 Trondheim\',
    [3] => \'7011 Trondheim\',
    [4] => \'7011 Trondheim\',
    [5] => \'7048 Trondheim\',
    [6] => \'7022 Trondheim\'
)
请注意,它将具有重复的值,这在这种情况下很好。接下来,让我们使用PHP函数计算我们的值array_count_values() 这将为我们提供以下结果:

Array
(
    [7011 Trondheim] => 3
    [7048 Trondheim] => 2
    [7022 Trondheim] => 2
)
现在我们有了一个唯一的数组,它也有重复数!

NOTE

我不熟悉ACF,但我想我们可以这样做,以实现我们正在尝试的目标-也未经测试:

<?php
    $addresses = array();
    if( have_posts() ) {
        while( have_posts() ){
            the_post();
            $city = get_field( \'poststed\' );
            $zip = get_field( \'postnummer\' );
            if( ! empty( $city ) && ! empty( $zip ) )
                $address[] = "{$zip} - {$city}";
        }
    }

    if( ! empty( $addresses ) ) {
        $uniqueAddresses = array_count_values( $addresses );
    }

    rewind_posts(); // Incase needed later.

if( ! empty( $uniqueAddresses ) ) : ?>

    <h3>Filter etter postnr:</h3>
    <ul>

<?php foreach( $uniqueAddresses as $address => $count ) : // Let\'s loop through our array 
        // Let\'s split our unique address back in to `poststed` and `postnummer`
        // $addressArr[0] => postnummer
        // $addressArr[1] => poststed
        $addressArr = explode( \' - \', $address );
?>

        <li><a href="?postnr=<?php echo $addressArr[0]; ?>"><?php echo "{$address}({$count})"; ?></a></li>

<?php endforeach; ?>

    </ul>

<?php endif; ?>

结束

相关推荐

CPT while loop not working

我无法从while循环中获得任何东西:<ul> <?php $query_args = array( \'post_type\' => \'Smart panels\', \'posts_per_page\' => 5, \'orderby\' => \'meta_value_num\', \'meta_key\' => \'post_v