Yoast\WP\SEO\Schema_Aggregator\Application
Properties_Merger::merge_properties
Merge properties from two schema entities with the same @id
Strategy:
- @type: Special handling - merge types into unified array
- @id: Skip (always the same)
- Arrays: Combine unique values
- Scalars: Prefer non-empty over empty
- Objects: Deep merge recursively
- Null vs value: Prefer non-null
Метод класса: Properties_Merger{}
Хуков нет.
Возвращает
Массив<Строку,. string|int|bool> Merged entity.
Использование
// private - только в коде основоного (родительского) класса $result = $this->merge_properties( $entity1, $entity2 ): array;
- $entity1(массив) (обязательный)
- .
- $entity2(массив) (обязательный)
- .
Код Properties_Merger::merge_properties() Properties Merger::merge properties Yoast 28.3
private function merge_properties( array $entity1, array $entity2 ): array {
$merged = $entity1;
foreach ( $entity2 as $key => $value ) {
if ( $key === '@id' ) {
continue;
}
// Special handling for @type - merge types (JSON-LD allows multiple types).
if ( $key === '@type' ) {
$merged['@type'] = $this->merge_types(
( $merged['@type'] ?? null ),
$value,
);
continue;
}
if ( ! isset( $merged[ $key ] ) || $merged[ $key ] === '' ) {
$merged[ $key ] = $value;
}
elseif ( \is_array( $merged[ $key ] ) && \is_array( $value ) ) {
// Both are arrays - check if associative (object) or indexed (list).
if ( $this->is_associative_array( $merged[ $key ] ) || $this->is_associative_array( $value ) ) {
// Deep merge objects.
$merged[ $key ] = $this->merge_properties( $merged[ $key ], $value );
}
else {
// Combine arrays and get unique values.
$merged[ $key ] = \array_values( \array_unique( \array_merge( $merged[ $key ], $value ), \SORT_REGULAR ) );
}
}
// Else: entity1's value is non-empty scalar, keep it (prefer first occurrence).
}
return $merged;
}