Прежде всего, вам нужно установить для свойства 'show_in_rest'
значение true
, а свойство 'supports
' должно включать 'custom-fields'
, когда вы регистрируете новый тип сообщения. Вам необходимо поддерживать «настраиваемые поля», если вы хотите включить мета-поля.
Обратите внимание, что для мета-полей, зарегистрированных в настраиваемых типах сообщений, тип сообщения должен иметь поддержку настраиваемых полей. В противном случае мета-поля не появятся в REST API. https://developer.wordpress.org/rest-api/exnding-the-rest-api/modifying-responses/
function cptui_register_my_cpts() {
/**
* Post Type: Experiences.
*/
$labels = array(
"name" => __( "Experiences", "twentynineteen" ),
"singular_name" => __( "Experience", "twentynineteen" ),
);
$args = array(
"label" => __( "Experiences", "twentynineteen" ),
"labels" => $labels,
"description" => "",
"public" => true,
"publicly_queryable" => true,
"show_ui" => true,
"delete_with_user" => false,
"show_in_rest" => true,
"rest_base" => "",
"rest_controller_class" => "WP_REST_Posts_Controller",
"has_archive" => false,
"show_in_menu" => true,
"show_in_nav_menus" => true,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => false,
"rewrite" => array( "slug" => "experience", "with_front" => true ),
"query_var" => true,
"supports" => array( "title", "editor", "thumbnail", "custom-fields" ),
);
register_post_type( "experience", $args );
}
add_action( 'init', 'cptui_register_my_cpts' );
Теперь вам нужно зарегистрировать мета-поля, используя register_meta()
.
add_action( 'rest_api_init', 'register_experience_meta_fields');
function register_experience_meta_fields(){
register_meta( 'post', 'location', array(
'type' => 'string',
'description' => 'event location',
'single' => true,
'show_in_rest' => true
));
register_meta( 'post', 'date', array(
'type' => 'string',
'description' => 'event location',
'single' => true,
'show_in_rest' => true
));
register_meta( 'post', 'event_url', array(
'type' => 'string',
'description' => 'event location',
'single' => true,
'show_in_rest' => true
));
}
Примечание: мета-поля должны быть уникальными. Префикс ваших полей в ACF, чтобы сделать его уникальным.
JSON не использует одинарные кавычки для переноса строки. Он использует двойные кавычки. Вы отправляете недействительный JSON.
Теперь, если вы хотите создать тип сообщения Опыт. Используйте линтер JSON для проверки вашего json. https://jsonlint.com/
Сделайте POST-запрос к http://paathsala-plugin.test/wp-json/wp/v2/experience, с полями
{
"title": "test",
"content": "testingfrompython",
"status": "draft",
"author": 1,
"meta": {
"location": "NYC",
"date": "never",
"event_url": "http: //google.com"
},
"featured_media": 1221
}
WordPress не позволяет создавать ресурсы напрямую. Вам необходимо подтвердить свой запрос REST. Я использую базовую аутентификацию для аутентификации WordPress REST API. Вам необходимо установить плагин. Возьмите его отсюда: https://github.com/WP-API/Basic-Auth
Я протестировал следующий код Python.
import base64
import json
import requests;
# Data to be send
data = {
"title": "test",
"content": "testingfrompython",
"status": "draft",
"author": 1,
"meta": {
"location": "NYC",
"date": "never",
"event_url": "http: //google.com"
},
"featured_media": 1221
}
# I am using basic auth plugin to for WP API authenticaiton
username = 'admin'
password = 'blood9807'
# Encode the username and password using base64
creds = base64.b64encode(username + ':' + password)
# Create headers to be send
headers = {
'Authorization': 'Basic ' + creds,
'Content-type': 'application/json',
'Accept': 'text/plain'
}
# Convert the python dictionary to JSON
data_json = json.dumps(data)
# Create a post
r = requests.post('http://paathsala-plugin.test/wp-json/wp/v2/experience', data = data_json, headers = headers )
print(r)
person
Sagar Bahadur Tamang
schedule
08.06.2019