我想使用Wordpress后端和高级自定义字段以及json Wordpress API为移动应用程序提供数据服务。
对于此项目,客户端需要在映射自定义字段中选择一个位置。API应该返回一个json数组和一些其他数据以及Google字段中的数据。
API返回的对象的格式如下:
{
"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“键上的值应该包含另一个数组,如下所示:
{
"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中格式化数据:
<?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:”。有人能告诉我如何像我描述的那样将这样的字符串转换成数组吗?
提前感谢!
发布于 2016-01-19 12:04:23
“怪异”值实际上是序列化的PHP --您可以在非序列化之前使用编码,编码来反序列化它,您应该没事。
Wordpress以这种方式序列化元数据,以便将任何对象保存为字符串。诀窍是在创建有效的JSON对象之前使用PHP反序列化来获得一个有效的PHP对象。
希望这能有所帮助。
发布于 2019-07-10 22:41:43
我解决的方法是查询帖子,获取位置字段和数据,为lat和lng添加两个元字段。
查询:
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,我读取的数据如下:
$.each(data, function(i) {
var lat = data[i]["details"]["lat"];
var lng = data[i]["details"]["lng"];https://stackoverflow.com/questions/32652536
复制相似问题