Функция wp_list_filter() в WordPress применяется для фильтрации массива объектов или массивов на основе определенных критериев в виде пары ключ => значение. Эта функция позволяет быстро отфильтровать объекты, которые соответствуют заданным параметрам, и возвращает массив с найденными значениями.
wp_list_filter( array $input_list, array $args = array(), string $operator = ‘AND’ ): array
Основные параметры функции
- $input_list (array) — Обязательный параметр, содержащий массив объектов или массивов для фильтрации.
- $args (array) — Опциональный параметр, представляющий массив с критериями фильтрации в формате
ключ => значение. - $operator (string) — Опциональный параметр, указывающий, как обрабатывать условия фильтрации:
'AND'— Объект будет включен в результат только, если совпадают все условия.'OR'— Объект включается, если соответствует хотя бы одному условию.'NOT'— Объект включается, если не соответствует ни одному из условий.
Возвращаемое значение
Возвращает отфильтрованный массив объектов или массивов, соответствующих заданным критериям.
Пример 1: Фильтрация по одному параметру
Допустим, у нас есть массив животных, и нам нужно найти всех млекопитающих:
$animals = [
[ 'name' => 'крокодил', 'fly' => false, 'class' => 'рептилия' ],
[ 'name' => 'собака', 'fly' => false, 'class' => 'млекопитающее' ],
[ 'name' => 'орел', 'fly' => true, 'class' => 'птица' ],
[ 'name' => 'летучая мышь', 'fly' => true, 'class' => 'млекопитающее' ],
];
$mammals = wp_list_filter( $animals, [ 'class' => 'млекопитающее' ] );
Результат:
Array(
[1] => Array(
'name' => 'собака',
'fly' => false,
'class' => 'млекопитающее'
),
[3] => Array(
'name' => 'летучая мышь',
'fly' => true,
'class' => 'млекопитающее'
)
)
Пример 2: Фильтрация с использованием оператора «AND»
Предположим, нам нужны только те млекопитающие, которые могут летать:
$flying_mammals = wp_list_filter( $animals, [ 'class' => 'млекопитающее', 'fly' => true ] );
Результат:
Array(
[3] => Array(
'name' => 'летучая мышь',
'fly' => true,
'class' => 'млекопитающее'
)
)
Пример 3: Фильтрация с оператором «OR»
Теперь мы хотим найти всех животных, которые являются млекопитающими или умеют летать:
$mammals_or_fliers = wp_list_filter( $animals, [ 'class' => 'млекопитающее', 'fly' => true ], 'OR' );
Результат:
Array(
[1] => Array(
'name' => 'собака',
'fly' => false,
'class' => 'млекопитающее'
),
[2] => Array(
'name' => 'орел',
'fly' => true,
'class' => 'птица'
),
[3] => Array(
'name' => 'летучая мышь',
'fly' => true,
'class' => 'млекопитающее'
)
)
Пример 4: Работа с массивом объектов
Пример с массивом объектов постов, где требуется найти все объекты, у которых поле post_status имеет значение publish:
global $posts;
$published_posts = wp_list_filter( $posts, [ 'post_status' => 'publish' ] );
Этот код вернет массив всех опубликованных постов.
Отличия между wp_list_filter() и wp_filter_object_list()
- wp_list_filter() — возвращает объекты или массивы полностью, соответствующие условиям фильтрации.
- wp_filter_object_list() — выполняет аналогичную функцию, но позволяет указать четвертый параметр
$field, чтобы после фильтрации возвращались только определенные поля (например, заголовок поста).
Заключение
Функция wp_list_filter() — это мощный инструмент WordPress для фильтрации массивов объектов или массивов по заданным параметрам. Она гибко поддерживает различные операторы (AND, OR, NOT), что позволяет точно управлять выборкой данных. В отличие от wp_filter_object_list(), функция wp_list_filter() возвращает полные объекты или массивы, сохраняя исходные ключи, что делает ее удобной для сложных операций фильтрации и обработки данных в WordPress.