首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有高级自定义字段的Wordpress Rest API Google字段返回奇怪的字符串

带有高级自定义字段的Wordpress Rest API Google字段返回奇怪的字符串
EN

Stack Overflow用户
提问于 2015-09-18 12:52:39
回答 2查看 883关注 0票数 0

我想使用Wordpress后端和高级自定义字段以及json Wordpress API为移动应用程序提供数据服务。

对于此项目,客户端需要在映射自定义字段中选择一个位置。API应该返回一个json数组和一些其他数据以及Google字段中的数据。

API返回的对象的格式如下:

代码语言:javascript
复制
{
"0": [
    {
      "title": "Test 1",
      "evenement_afbeelding": "38",
      "kunstenaars": "Name One",
      "openingstijden": "9:00 - 18:30",
      "evenementbeschrijving": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ac pharetra tortor.",
      "evenement_lokatie": "a:3:{s:7:\"address\";s:40:\"Jansweg 50, 2011 KN Haarlem, Netherlands\";s:3:\"lat\";s:17:\"52.38513460768028\";s:3:\"lng\";s:17:\"4.638633728027344\";}",
      "biografie": "<strong>Lorem ipsum dolor sit amet</strong>\r\n\r\nConsectetur adipiscing elit. Nullam ac pharetra tortor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos."
    }
],
    "status": "ok"
}

奇怪的是,键"evenement_lokatie“( Google字段)上的值返回一个不能转换为数组的字符串。"evenement_lokatie“键上的值应该包含另一个数组,如下所示:

代码语言:javascript
复制
{
"0": [
    {
      "title": "Test 1",
      "evenement_afbeelding": "38",
      "kunstenaars": "Name One",
      "openingstijden": "9:00 - 18:30",
      "evenementbeschrijving": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ac pharetra tortor.",
      "evenement_lokatie": [
        {
          "Stad": "Haarlem",
          "lang": "32143241",
          "lat": "721321"
        }
  ],
      "biografie": "<strong>Lorem ipsum dolor sit amet</strong>\r\n\r\nConsectetur adipiscing elit. Nullam ac pharetra tortor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos."
    }
],
    "status": "ok"
}

这是PHP代码,应该在wordpress中格式化数据:

代码语言:javascript
复制
<?php


class json_api_events_controller{

    public function hello_world(){
        return array('message'=>'Hello World!');
    }

    public function get_events(){
        $array = array();


        $args = array('post_type'=>'evenementen', 'posts_per_page'=>-1, 'order_by'=>'title', 'order'=>'ASC');
        $loop = new WP_Query($args);

        $counter = 0;

        while ( $loop->have_posts() ) : $loop->the_post();

            $id = get_the_id();
            $custom = get_post_custom($id);

            // add the title
            $array[$id][$counter]['title'] = get_the_title();

            // add all the custom fields
            foreach($custom as $k => $v){

                // if key starts with '_' symbol, don't add to the array
                if(strpos($k, '_') !== 0) {

                    $array[$id][$counter][$k] = array_shift($v);

                }
            }

            $counter++;
        endwhile;


        return $array;
    }

}

还有奇怪的琴弦,比如“s:17:”和“s:40:”。有人能告诉我如何像我描述的那样将这样的字符串转换成数组吗?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-19 12:04:23

“怪异”值实际上是序列化的PHP --您可以在非序列化之前使用编码,编码来反序列化它,您应该没事。

Wordpress以这种方式序列化元数据,以便将任何对象保存为字符串。诀窍是在创建有效的JSON对象之前使用PHP反序列化来获得一个有效的PHP对象。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2019-07-10 22:41:43

我解决的方法是查询帖子,获取位置字段和数据,为lat和lng添加两个元字段。

查询:

代码语言:javascript
复制
  while( $query->have_posts() ) : $query->the_post();
    $id = get_the_ID();
    $location = get_field('location');
    $lat = $location['lat'];
    $lng = $location['lng'];
    if (! metadata_exists( 'post', $id, 'lat' ) ) {
      add_post_meta($id, 'lat', $lat, true);
    }
    if (! metadata_exists( 'post', $id, 'lng' ) ) {
      add_post_meta($id, 'lng', $lng, true);
    }

然后,由于我使用的是javascript,我读取的数据如下:

代码语言:javascript
复制
      $.each(data, function(i) {
        var lat = data[i]["details"]["lat"];
        var lng = data[i]["details"]["lng"];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32652536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档