【问题标题】:deserialize wordpress custom field in json api plugin反序列化 json api 插件中的 wordpress 自定义字段
【发布时间】:2015-11-19 13:10:39
【问题描述】:

在我的 wordpress 主题中,有一个名为歌曲的自定义帖子类型,在该帖子类型中,有一个名为播放列表的自定义字段,其中包含歌曲信息,如艺术家姓名、下载链接、歌词等...

我的问题是这个自定义字段在我的网站的 json 版本中被序列化了 我不知道如何解决这个问题。

我使用json api plugin 进行文字新闻。

这是它在 json 中显示的示例

...
"custom_fields": {
    ...
    "playlist": [
      "a:1:{i:0;a:19:{s:5:\"title\";s:44:\"Hosein Tohi And Sami Beigi - Ba Man Miraghsi\";s:3:\"mp3\";s:134:\"http:\/\/dl.paradi3emusic.com\/Musics\/Aban%2094\/Persian\/Single\/Hosein%20Tohi%20And%20Sami%20Beigi%20-%20Ba%20Man%20Miraghsi%20-%20128.mp3\";s:7:\"radioip\";s:0:\"\";s:9:\"radioport\";s:0:\"\";s:11:\"buy_title_a\";s:14:\"\u06a9\u06cc\u0641\u06cc\u062a 320\";s:10:\"buy_icon_a\";s:14:\"cloud-download\";s:10:\"buy_link_a\";s:134:\"http:\/\/dl.paradi3emusic.com\/Musics\/Aban%2094\/Persian\/Single\/Hosein%20Tohi%20And%20Sami%20Beigi%20-%20Ba%20Man%20Miraghsi%20-%20320.mp3\";s:11:\"buy_title_b\";s:14:\"\u06a9\u06cc\u0641\u06cc\u062a 128\";s:10:\"buy_icon_b\";s:14:\"cloud-download\";s:10:\"buy_link_b\";s:134:\"http:\/\/dl.paradi3emusic.com\/Musics\/Aban%2094\/Persian\/Single\/Hosein%20Tohi%20And%20Sami%20Beigi%20-%20Ba%20Man%20Miraghsi%20-%20128.mp3\";s:11:\"buy_title_c\";s:0:\"\";s:10:\"buy_icon_c\";s:14:\"cloud-download\";s:10:\"buy_link_c\";s:0:\"\";s:11:\"buy_title_d\";s:0:\"\";s:10:\"buy_icon_d\";s:14:\"cloud-download\";s:10:\"buy_link_d\";s:0:\"\";s:10:\"buy_custom\";s:0:\"\";s:11:\"lyric_title\";s:0:\"\";s:5:\"lyric\";s:0:\"\";}}"
    ],
    ...
},
...

****编辑*****

我想要另一个包含这些序列化数据但未序列化的 json 数组的自定义字段 我也试过这个,但没有奏效。

add_post_meta($id, 'myplaylist1', $playlist);

【问题讨论】:

  • 我编辑了我的问题
  • 除非 json 插件提供了用于访问 post meta 的过滤器,否则您需要直接编辑插件 - 它们是一些 wordpress json 插件,您使用的是哪一个?
  • json api.the 问题不是 json 我只想创建另一个自定义字段并将播放列表数组放入其中但未序列化
  • 再次,它们是一些json api插件,请链接到正确的。此外,元字段存储在 MySQL 数据库中(与所有其他 wordpress 数据一样)。它们不是 MySQL 中的 array 字段类型,因此您不能简单地存储未序列化的数组(这就是主题作者首先使用序列化的原因)。主题将在访问数据时对数据进行反序列化 - json 插件也需要这样做。它可能为此提供过滤器。如果没有,您将需要编辑插件
  • 插件名称是“json api” 这是插件的链接wordpress.org/plugins/json-api 没错,谢谢你这样做

标签: php json wordpress


【解决方案1】:

您需要编写一个过滤器来反序列化内容,然后再由 json api 插件输出。

在输出 json 之前插件应用了一个过滤器,记录在这里:

https://en-gb.wordpress.org/plugins/json-api/other_notes/#5.-Extending-JSON-API

这很适合这项任务。

将以下内容添加到您的主题functions.php:

add_filter('json_api_encode', function($response){

    if (isset($response['posts'])) {
        foreach ($response['posts'] as $post) {
            deserialize_playlist($post);
        }
    } else if (isset($response['post'])) {
        deserialize_playlist($response['post']);
    }
    return $response;
});


function deserialize_playlist(&$post) {
    if(isset($post->custom_fields->playlist)){
        $playlists = $post->custom_fields->playlist;
        //custom fields appear to always be returned as an array
        foreach($playlists as &$playlist){
            $playlist = unserialize($playlist);
        }
        $post->custom_fields->playlist = $playlists;
    }
}

【讨论】:

  • 没问题,很高兴能帮到你
【解决方案2】:

您可以使用 wordpress 内置的 maybe_unserialize() 函数来反序列化序列化数据

https://codex.wordpress.org/Function_Reference/maybe_unserialize

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多