在 Wordpress 用户元数据库中存储 PHP 数组
Posted
技术标签:
【中文标题】在 Wordpress 用户元数据库中存储 PHP 数组【英文标题】:Storing PHP Arrays in Wordpress User Meta Database 【发布时间】:2011-12-06 12:12:12 【问题描述】:这对于 php 专家来说应该很容易。我无法通过 update_user_meta 函数在 Wordpress 中存储和拉取数组。
所以我有一个这样构建的关联数组:
数组 ( [film_genres] => 数组 ( [行动] => 50 [喜剧] => 50 [犯罪] => 50 [纪录片] => 50 [戏剧] => 50 [家庭] => 50 [恐怖] => 50 [浪漫] => 50 [科幻] => 50 [惊悚片] => 50 ) [电影类型] => 数组 ( [大片] => 0 [独立] => 0 ) [film_eras] => 数组 ( [1920s_1940s] => 0 [1950s_1960s] => 0 [1970s_1980s] => 0 [1990s_2000s] => 0 [post_2010] => 0 [pre_1920s] => 0 ) [上次更新] => 2011-10-12 21:21:28 )
但是当我通过以下方式更新用户元表中的这些数据时:
update_user_meta($user_id, $meta_key, $meta_value, $prev_value)
数据被正确地放入数据库,但是当我调用数据并将新数组打印到屏幕时,它在数组中有一个嵌套的数组键 [0],如下所示:
大批 ( [0] => 数组 ( [film_genres] => 数组 ( [行动] => 50 [喜剧] => 50 [犯罪] => 50 [纪录片] => 50 [戏剧] => 50 [家庭] => 50 [恐怖] => 50 [浪漫] => 50 [科幻] => 50 [惊悚片] => 50 ) [电影类型] => 数组 ( [大片] => 0 [独立] => 0 ) [film_eras] => 数组 ( [1920s_1940s] => 0 [1950s_1960s] => 0 [1970s_1980s] => 0 [1990s_2000s] => 0 [post_2010] => 0 [pre_1920s] => 0 ) [上次更新] => 2011-10-12 21:21:28 ) )我怎样才能让它像我的第一个数组一样存储数组?我正在通过 WP 命令拉取元值数组:
$wp_user_film_prefs_arr = get_user_meta( $wp_user_id, $wp_user_film_prefs_key_label, false );
我做错了什么吗?提前谢谢!!!
【问题讨论】:
【参考方案1】:您是否将serialize()
视为一个str 并将此str 存储到您的db 中,而unserialize()
从db 获取后将str 存储到数组中?
【讨论】:
WordPress 在幕后为您进行序列化。 @harkra 有正确的答案。【参考方案2】:您需要将最后一个参数从false
设置为true
:
$wp_user_film_prefs_arr = get_user_meta( $wp_user_id, $wp_user_film_prefs_key_label, true );
第三个参数是$single
:
(boolean)(可选)如果为真则返回元数据字段的值,如果为假则返回一个数组。
默认值:假
这在您看来可能会适得其反,但元数据字段可以包含多个值。在您的情况下,您不需要那个,而是单个值。单个值是您的数组。
另请参阅:get user meta
Codex
【讨论】:
是的,你是对的!我最初选择了错误的想法,认为它会返回数组,就像在我的值数组中一样,但它正在重新计算元数据字段的数组。更改为 true 以返回值,然后将其存储为带有“maybe_unserialize($wp_user_film_prefs_val);”的数组谢谢大佬! 很难将数组视为单个值 这确实是一个糟糕的api设计,谢谢你的回答!以上是关于在 Wordpress 用户元数据库中存储 PHP 数组的主要内容,如果未能解决你的问题,请参考以下文章
php 一个WordPress自定义短代码,用于显示wp_usermeta表中的一段用户元数据。依赖Ultimate Member插件