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 адреса не оприлюднюватиметься. Обов’язкові поля позначені *