wp_filter_object_list() WP 3.0.0

Фільтрує масив об’єктів за вказаними параметрами ( 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-му параметрі поле (ключ).
1 раз – 0.000001 сек
(швидкість світла) | 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

Приклади

0

#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.0Uses 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();
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *