当我们使用WordPress进行开发时,很大一部分工作都是与数组处理相关的。 WordPress本身也内置了一些非常方便的数组处理函数,今天给大家列出来wordpress wp_list_pages函数,方便大家以后写代码的时候查询。
wp_parse_args
wp_parse_args($args, $defaults=[])
将用户定义的参数 ($args) 合并到默认参数 ($defaults)。 用户定义的参数可以是数组或对象,甚至支持链接地址查询类型字符串(例如:“id=5&status=draft”)。
$args = wp_parse_args($args, [
'post_type' => 'post',
'posts_per_page' => 5,
'cat' => 1
]);
还可以使用该函数将链接地址查询类型的字符串转换为数组:
$args = wp_parse_args('post_type=post&posts_per_page=5&cat=1');
// 输出 Array ( [type] => post [posts_per_page] => 5 [cat] => 1 )
wp_parse_list
wp_parse_list( $list )
将逗号或空格分隔的标量转换为数组。
wp_parse_list('1 2,3 abc');
// 输出 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => abc )
wp_parse_id_列表
wp_parse_id_list($list)
将多个ID组成一个数组,或者以逗号或空格分隔的ID列表,并转换为不重复的纯数字ID数组。
wp_parse_id_list(array( 1, 13, '11', 13 ))
或者
wp_parse_id_list('1, 13 11, 13')
这两个输出:
// Array ( [0] => 1 [1] => 13 [2] => 11 )
wp_parse_slug_list
wp_parse_slug_list($list)
将多个字符串的数组或以逗号或空格分隔的字符串列表转换为具有别名 (slug) 的数组(对数组的每个元素调用 sanitize_title 处理)。
用法与wp_parse_id_list类似,这里不再赘述。
wp_array_slice_assoc
wp_array_slice_assoc( $array, $keys )
根据给定的键值列表从关联数组中获取相关子数组。 这很容易理解:
$array = array(
1 => 'Item 1',
2 => 'Item 2',
3 => 'Item 3',
4 => 'Item 4',
5 => 'Item 5',
);
wp_array_slice_assoc($array, array(1,3,5));
将返回:
Array
(
[1] => Item 1
[3] => Item 3
[5] => Item 5
)
wp_is_numeric_array
wp_is_numeric_array( $data )
判断一个数组是否是数字索引数组非常简单,所以我不会给出任何例子。
wp_列表过滤器
wp_list_filter($list, $args = array(), $operator = 'AND')
根据一组 key=>value 参数过滤一组对象(或数组)列表。 例如,以下是WordPress查询多个post_type,并过滤掉页面类型的日志列表结果:
$pages = wp_list_filter( $wp_query->posts, array('post_type' => 'page'));
还有第三个元素$openrator,它的默认值是AND,有两个参数OR和NOT,表示$args参数中有多个key=>value时的比较方法,AND表示全部相等wordpress wp_list_pages函数, OR 仅要求一组值相等,而不是仅要求所有值不相等。
当然,我们也可以使用PHP原生函数array_filter来实现同样的功能。
wp_list_pluck
wp_list_pluck( $list, $field, $index_key = null )
从对象(或数组)列表中的每个元素中删除一个字段以形成一个新数组。 最后一个参数是新数组的元素键,使用原列表元素的$index_key值,例如下面的数组:
$foods = array(
array(
'id' => 4,
'name' => 'Banana',
'color' => 'Yellow',
),
array(
'id' => '5',
'name' => 'Apple',
'color' => 'Red',
),
array(
'id' => 2,
'name' => 'Lettuce',
'color' => 'Green',
),
array(
'id' => '7',
'name' => 'Apple',
'color' => 'Red',
)
);
我们采用“name”列的值来形成一个新数组:
$food_names = wp_list_pluck( $foods, 'name' );
将返回:
Array
(
[0] => Banana
[1] => Apple
[2] => Lettuce
[3] => Apple
)
如果我们想使用原始列表中每个元素的id作为键
$food_names = wp_list_pluck( $foods, 'name', 'id' );
将得到:
Array
(
[4] => Banana
[5] => Apple
[2] => Lettuce
[7] => Apple
)
从PHP 5.5开始,PHP的array_column函数也可以实现同样的功能。
wp_filter_object_list
wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false )
该函数首先操作wp_filter_list,然后如果$field参数值不为空,则执行wp_list_pluck操作,但它没有wp_list_pluck的$index_key参数。
wp_列表_排序
wp_list_sort($list, $orderby = array(), $order = 'ASC', $preserve_keys = false)
根据 orderby 的参数对对象(或数组)列表进行排序。 最后一个参数 $preserve_keys 用于保留原始密钥。
例如,我们可以将文章列表按照发布时间降序排序:
$sorted_posts = wp_list_sort( $posts, 'post_date', 'DESC' );
按时间降序排序,然后按标题升序排序:
$sorted_posts = wp_list_sort($posts, array(
'post_date' => 'DESC',
'post_title' => 'ASC',
));
地图深度
map_deep( $value, $callback )
将函数映射到数组或对象的所有不可迭代元素,有点类似于 array_walk_recursive() 函数,但 map_deep 还支持对象:
例如,要对数组或对象的所有元素进行 URL 编码:
map_deep( $value, 'urlencode' )
所以WordPress基于map_deep创建了几个深度映射回调函数:
当然,我们也可以基于执行深度映射操作的函数来创建函数。
关于WordPress的内置功能,目前为止我已经收集了这么多。 如果你发现什么好的功能,可以留言告诉我。
最后,如果您在使用WPJAM Basic时遇到任何问题或者有任何功能需求,请给我留言。
点击卡片关注“WordPress Jam”
每天分享WordPress使用技巧