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-му параметрі поле (ключ).
(швидкість світла) | 50000 разів – 0.95 сек
(дуже швидко) |
PHP 7.1.11, WP 4.9.8
Хуків немає.
Повертає
Массив
. масив об’єктів чи масив полів. Якщо не вдалося отримати дані, порожній масив: 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 6.0.2
function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) { if ( ! is_array( $list ) ) { return array(); } $util = new WP_List_Util( $list ); $util->filter($args, $operator); if ($field) { $util->pluck($field); } return $util->get_output(); }