在 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 metaCodex

【讨论】:

是的,你是对的!我最初选择了错误的想法,认为它会返回数组,就像在我的值数组中一样,但它正在重新计算元数据字段的数组。更改为 true 以返回值,然后将其存储为带有“maybe_unserialize($wp_user_film_prefs_val);”的数组谢谢大佬! 很难将数组视为单个值 这确实是一个糟糕的api设计,谢谢你的回答!

以上是关于在 Wordpress 用户元数据库中存储 PHP 数组的主要内容,如果未能解决你的问题,请参考以下文章

php 一个WordPress自定义短代码,用于显示wp_usermeta表中的一段用户元数据。依赖Ultimate Member插件

使 WordPress 用户元数据可用于 Rest-API

php 在WordPress中添加自定义元框

php 在WordPress中添加自定义元框

Wordpress 用户和用户元 - 将一个表中的多行连接到另一个表中的一行

php WordPress:返回图像的元数据