Функция 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.