Функция wp_filter_object_list()
в WordPress используется для фильтрации массива объектов на основе набора переданных параметров (ключей и значений). Это полезный инструмент, если вам нужно получить только те объекты, которые соответствуют определённым критериям. В отличие от похожей функции wp_list_filter()
, wp_filter_object_list()
может извлекать конкретное поле из каждого объекта, что делает её более гибкой.
wp_filter_object_list( array $input_list, array $args = array(), string $operator = ‘and’, bool|string $field = false ): array
Параметры
$input_list
Тип:array
Обязательный параметр.
Массив объектов для фильтрации.$args
Тип:array
Необязательный параметр, по умолчаниюarray()
Массив параметровключ => значение
, по которым объекты будут отфильтрованы.$operator
Тип:string
Необязательный параметр, по умолчанию'and'
Логическая операция для фильтрации:'and'
— объект должен соответствовать всем условиям;'or'
— объект должен соответствовать хотя бы одному условию;'not'
— объект не должен соответствовать ни одному из условий.
$field
Тип:bool|string
Необязательный параметр, по умолчаниюfalse
Указывает, какое конкретное поле объектов нужно вернуть вместо целого объекта. Если установленоfalse
, возвращается весь объект.
Возвращаемое значение
array
Возвращает массив объектов или значений выбранного поля, соответствующих критериям. Если объекты не соответствуют условиям, возвращается пустой массив.
Пример 1: Фильтрация объектов по нескольким параметрам
Допустим, у нас есть массив объектов постов $posts
, и мы хотим получить только те посты, у которых автор с ID 1
и статус комментариев open
.
$posts = array(
(object) array(
'ID' => 101,
'post_author' => 1,
'post_status' => 'publish',
'comment_status' => 'open',
),
(object) array(
'ID' => 102,
'post_author' => 2,
'post_status' => 'draft',
'comment_status' => 'closed',
),
(object) array(
'ID' => 103,
'post_author' => 1,
'post_status' => 'publish',
'comment_status' => 'closed',
),
);
$args = array(
'post_author' => 1,
'comment_status' => 'open',
);
$filtered_posts = wp_filter_object_list( $posts, $args, 'and' );
// Результат:
// Array
// (
// [0] => (object) array(
// 'ID' => 101,
// 'post_author' => 1,
// 'post_status' => 'publish',
// 'comment_status' => 'open',
// )
// )
Пример 2: Извлечение только поля ID
Здесь мы используем параметр $field
, чтобы получить только идентификаторы (ID) отфильтрованных постов, а не целые объекты.
$args = array(
'post_author' => 1,
'comment_status' => 'open',
);
$filtered_ids = wp_filter_object_list( $posts, $args, 'and', 'ID' );
// Результат:
// Array
// (
// [0] => 101
// )
Пример 3: Использование оператора OR
для фильтрации
В этом примере фильтр вернёт все посты, у которых автор с ID 1
или комментарии открыты.
$args = array(
'post_author' => 1,
'comment_status' => 'open',
);
$filtered_posts = wp_filter_object_list( $posts, $args, 'or' );
// Результат:
// Array
// (
// [0] => (object) array(
// 'ID' => 101,
// 'post_author' => 1,
// 'post_status' => 'publish',
// 'comment_status' => 'open',
// ),
// [1] => (object) array(
// 'ID' => 103,
// 'post_author' => 1,
// 'post_status' => 'publish',
// 'comment_status' => 'closed',
// )
// )
Пример 4: Исключение объектов с оператором NOT
Фильтруем все посты, кроме тех, у которых автор с ID 2
.
$args = array(
'post_author' => 2,
);
$filtered_posts = wp_filter_object_list( $posts, $args, 'not' );
// Результат:
// Array
// (
// [0] => (object) array(
// 'ID' => 101,
// 'post_author' => 1,
// 'post_status' => 'publish',
// 'comment_status' => 'open',
// ),
// [1] => (object) array(
// 'ID' => 103,
// 'post_author' => 1,
// 'post_status' => 'publish',
// 'comment_status' => 'closed',
// )
// )
Заключение
Функция wp_filter_object_list()
— мощный инструмент для фильтрации массивов объектов в WordPress. Возможность использования различных операторов (AND, OR, NOT) и выбор конкретного поля делают её гибкой для широкого круга задач.