Функция WP_LIST_FILTER()
Функция wp_list_filter()
позволяет отфильтровать список объектов, основываясь на заданных аргументах в формате "ключ => значение".
Как это работает?
С помощью этой функции вы можете получить из списка только те объекты, которые соответствуют указанным критериям. Здесь "ключ" — это название свойства объекта, а "значение" — это то, что вы ищете.
Важно помнить: если у объекта есть больше свойств, чем указано в аргументах, это не повлияет на включение объекта в результаты. Но если вы используете логический оператор 'AND', то пропущенные свойства будут исключать объект.
Если вы хотите получить конкретное поле из всех объектов, соответствующих критериям, используйте функцию wp_filter_object_list()
.
Использование
Синтаксис функции:
wp_list_filter( $input_list, $args, $operator );
Параметры
- $input_list (array, обязательный): Массив объектов, который нужно отфильтровать.
- $args (array): Массив аргументов в формате "ключ => значение", по которым будет производиться фильтрация. По умолчанию — пустой массив.
-
$operator (string): Логическая операция, которую нужно выполнить:
- 'AND' — все элементы массива должны соответствовать.
- 'OR' — только один элемент должен соответствовать.
- 'NOT' — не должно быть ни одного соответствия.
По умолчанию используется 'AND'.
Возвращаемое значение
Функция возвращает массив найденных значений.
Примеры
Пример 1: Проверка наличия объекта в массиве
Предположим, у нас есть массив объектов постов, и мы хотим проверить, есть ли пост с заголовком 'some_title':
global $posts;
$title = 'some_title';
$the_post = wp_list_filter( $posts, [ 'post_title' => $title ] );
$the_post = array_shift( $the_post );
// Если в массиве $posts есть пост с заголовком 'some_title',
// тогда array_shift( $the_post ) вернет этот объект.
if( $the_post ){
echo $the_post->post_title;
}
Пример 2: Демонстрация фильтрации объектов
У нас есть массив объектов, каждый из которых имеет поле count
. Мы хотим получить все объекты, значение поля count
которых не равно 0.
$objects_array = [
57 => (object) [
'parent' => 80,
'count' => 9,
],
58 => (object) [
'parent' => 80,
'count' => 0,
],
59 => (object) [
'parent' => 80,
'count' => 4,
],
];
$filtered_array = wp_list_filter( $objects_array, [ 'count' => true ] );
/*
$filtered_array = Array
(
[57] => stdClass Object
(
[parent] => 80
[count] => 9
)
[59] => stdClass Object
(
[parent] => 80
[count] => 4
)
)
*/
Пример 3: Без указания ключа
Используем массив строк и фильтруем по значению.
$arr = ['foo', 'bar', 'foo', 'bar'];
$list = wp_list_filter($arr, ['bar']);
/*
Array
(
[1] => bar
[3] => bar
)
*/
Изменения
- С версии 3.1.0: Функция была введена.
- С версии 4.7.0: Использует класс
WP_List_Util
. - С версии 5.9.0: Преобразована в обертку для
wp_filter_object_list()
.
Код функции
function wp_list_filter( $input_list, $args = array(), $operator = 'AND' ) {
return wp_filter_object_list( $input_list, $args, $operator );
}
Теперь вы знаете, как использовать функцию wp_list_filter()
, чтобы фильтровать массив объектов в WordPress!