Php 反序列化json api插件中的wordpress自定义字段

Php 反序列化json api插件中的wordpress自定义字段,php,json,wordpress,Php,Json,Wordpress,在我的wordpress主题中有一个名为songs的自定义帖子类型,在该帖子类型中有一个名为playlist的自定义字段,其中包含艺术家姓名、下载链接、歌曲歌词等歌曲信息 我的问题是这个自定义字段在我网站的json版本中被序列化 我不知道如何解决这个问题 我用wordpress 下面是一个它在json中显示的示例 ... "custom_fields": { ... "playlist": [ "a:1:{i:0;a:19:{s:5:\"title\";s:44:\"

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

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

我用wordpress

下面是一个它在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 api插件输出内容之前,您需要编写一个过滤器来反序列化内容

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

这将适用于这项任务

将以下内容添加到主题
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;
    }
}

您可以使用wordpress内置函数取消序列化数据


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