FlexCount.php
1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
namespace ACA\ACF\Value\Formatter;
use ACA\ACF\Column;
use ACA\ACF\Field;
use ACA\ACF\Value\Formatter;
class FlexCount extends Formatter {
public function __construct( Column $column, Field\Type\FlexibleContent $field ) {
parent::__construct( $column, $field );
}
public function format( $values, $id = null ) {
if ( ! $values ) {
return $this->column->get_empty_char();
}
if ( empty( $this->field->get_layouts() ) ) {
return $this->column->get_empty_char();
}
$layouts = [];
$labels = $this->get_layout_labels();
foreach ( $values as $field ) {
if ( ! isset( $layouts[ $field['acf_fc_layout'] ] ) ) {
$layouts[ $field['acf_fc_layout'] ] = [
'count' => 1,
'label' => isset( $labels[ $field['acf_fc_layout'] ] ) ? $labels[ $field['acf_fc_layout'] ] : $field['acf_fc_layout'],
];
} else {
$layouts[ $field['acf_fc_layout'] ]['count']++;
}
}
$result = array_map( function ( $l ) {
return ( $l['count'] > 1 )
? sprintf( '%s <span class="ac-rounded">%s</span>', $l['label'], $l['count'] )
: $l['label'];
}, $layouts );
return implode( '<br>', $result );
}
/**
* @return array
*/
private function get_layout_labels() {
$labels = [];
foreach ( $this->field->get_layouts() as $layout ) {
$labels[ $layout['name'] ] = $layout['label'];
}
return $labels;
}
}