Функция WP_LIST_FILTER(): как работает, примеры использования

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

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *