wp_filter_object_list()
Фильтрует массив объектов по указанным параметрам (key=>value) и получает объекты из переданного массива, которые подходят под указанные критерии.
Различия между: wp_list_filter() и wp_filter_object_list()
- wp_list_filter( $list, $args, $operator ) — фильтрует переданный массив и возвращает его элементы как есть (полностью), например если в значении был объект, то вернется весь объект.
- wp_filter_object_list( $list, $args, $operator, $field ) — работает точно также. Но если указать 4-й параметр $field, то после фильтрации массива, сработает функция wp_list_pluck() и из значений отфильтрованного массива будет взято только указанное в 4-м параметре поле (ключ).
Хуков нет.
Возвращает
Массив
. массив объектов или массив полей. Если не удалось получить данные, то пустой массив: array().
Использование
wp_filter_object_list( $list, $args, $operator, $field );
- $list(массив) (обязательный)
- Массив объектов, который с которым будем работать.
- $args(массив)
- Параметры по которым нужно выбирать объекты. Указываем в массиве key => val.
По умолчанию: array() - $operator(строка)
Указывает как обрабатывать указанные в $args параметры. Может быть:
AND
- объекты у которых есть все указанные параметры.OR
- объекты у которых есть любой из указанных параметров.NOT
- объекты у которых нет указанных параметров.
По умолчанию: and
- $field(строка)
- Поле объекта которое нужно выводить, вместо вывода всего объекта.
По умолчанию: false
Примеры
#1 Выбор объектов по указанным параметрам
Предположим мы сделали выборку постов и у нас есть массив объектов постов $posts. Который содержит вот такие объекты:
Array ( [0] => WP_Post Object ( [ID] => 2773 [post_author] => 1 [post_date] => 2013-06-12 21:09:57 [post_date_gmt] => 2013-06-12 21:09:57 [post_content] => контент статьи [post_title] => Огромный текст для примера работы скрипта "содержание" [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => post_name_ogromniy_text [to_ping] => [pinged] => [post_modified] => 2013-07-30 21:40:25 [post_modified_gmt] => 2013-07-30 21:40:25 [post_content_filtered] => [post_parent] => 0 [guid] => http://example.com/?p=2773 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 ) [1] => WP_Post Object ( ... ) )
Нам нужно из этого массива получить ID постов у которых автор=1 и комментарии открыты (comment_status=open). Воспользуемся wp_filter_object_list():
$args = array('post_author'=>'1', 'comment_status'=>'open'); $filtered_posts = wp_filter_object_list( $posts, $args, 'or', 'ID' );
$filtered_posts будет содержать:
Array ( [0] => 19 [1] => 23 [2] => 34 [3] => 45 [4] => 56 [5] => 67 [6] => 78 )
Параметр "or" говорит функции, чтобы выбирались посты с post_author=1 или comment_status=open. Если указать "and", то будут выбираться посты post_author=1 и comment_status=open.
'ID' означает, что надо вернуть массив со значениями поля ID объекта. Если не указать этот параметр, то будет возвращен весь объект, а не конкретное его поле.
Список изменений
С версии 3.0.0 | Введена. |
С версии 4.7.0 | Uses WP_List_Util class. |
Код wp_filter_object_list() wp filter object list WP 6.5.2
function wp_filter_object_list( $input_list, $args = array(), $operator = 'and', $field = false ) { if ( ! is_array( $input_list ) ) { return array(); } $util = new WP_List_Util( $input_list ); $util->filter( $args, $operator ); if ( $field ) { $util->pluck( $field ); } return $util->get_output(); }