Функция 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) и выбор конкретного поля делают её гибкой для широкого круга задач.