我正在使用Python通过WordPress API更新WordPress的geo_latitude和geo_longitude。帖子是自定义帖子类型。我有followed the current WordPress documentation,但是REST API documentation对于访问post-field-meta值没有什么特别的要求,尽管它确实包含有关访问“ meta”字段的信息(这有所不同)。
一个search for post-field-meta in the REST API Handbook returns nothing。在其他论坛上,有很多关于通过API使用帖子元数据的文章,其中最引人注目的是this one,但这是从2015年开始的。我找不到最新的官方文章。我已使用该文章中发布的方法,在我的functions.php中,在API中提供了post-field-meta值:
<?php
add_action( 'rest_api_init', 'create_api_posts_meta_field' );
function create_api_posts_meta_field() {
register_rest_field( 'my-custom-post-type', 'post-meta-fields', array(
'get_callback' => 'get_post_meta_for_api',
'schema' => null,
)
);
}
function get_post_meta_for_api( $object ) {
//get the id of the post object array
$post_id = $object['id'];
//return the post meta
return get_post_meta( $post_id );
}
?>
这使post-meta-fields可以通过API读取,因此,如果我使用:
headers = { 'Content-Type': 'application/json',
'Authorization': 'Basic MY_KEY',
'Username': '',
'Password':'MY_Password'}
然后
r = requests.get('https://www.example.com/wp-json/wp/v2/my-custom-post-type/MY_POSTID', headers=headers).json()
响应为(例如):
{'_links': {'about': ...
...
'post-meta-fields': {'_edit_last': ['2'],
'_edit_lock': ['1541702960:2'],
'_yoast_wpseo_content_score': ['30'],
'_yoast_wpseo_primary_category': [''],
'geo_address': ['881 7th Ave, New York, NY 10019, USA'],
'geo_date': ['2018-11-30 11:00:00'],
'geo_latitude': ['40.7651253'],
'geo_longitude': ['-73.9799271']},
...
'type': 'my-custom-post-type'}
但是,如果我尝试使用以下方式更新位置:
data = { ...
'post-meta-fields': {'original_link': 'testlink',
'html_title': 'test title',
'geo_address' : ['278 W 50th St., New York, NY 10019'], # arbitrary
'geo_latitude': ['42.7651253'], # arbitrary
'geo_longitude': ['-71.9799271']}, # arbitrary
}
}
GET响应完全相同。
这有可能做到吗,您怎么做?有文档吗?