Esta es la solución más completa que te podemos dar, sin embargo mírala pausadamente y valora si se adapta a tu trabajo.
Solución:
En primer lugar, debe configurar el 'show_in_rest'
propiedad a true
y ‘supports
‘propiedad debe incluir 'custom-fields'
cuando registra un nuevo tipo de publicación. Debe admitir ‘campos personalizados’ si desea incluir los metacampos.
Tenga en cuenta que para los metacampos registrados en tipos de publicaciones personalizadas, el tipo de publicación debe ser compatible con campos personalizados. De lo contrario, los metacampos no aparecerán en la API REST. https://developer.wordpress.org/rest-api/extending-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' );
Ahora, debe registrar los metacampos usando el 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
));
Nota: Los metacampos deben ser únicos. Prefije sus campos en ACF para que sea único.
JSON no usa comillas simples para ajustar un string. Utiliza comillas dobles. Estás enviando un JSON no válido.
Ahora, si quieres crear un tipo de publicación de experiencia. Utilice un linter JSON para validar su json. https://jsonlint.com/
Realice una solicitud POST a http: //paathsala-plugin.test/wp-json/wp/v2/experience, con los campos
"title": "test",
"content": "testingfrompython",
"status": "draft",
"author": 1,
"meta":
"location": "NYC",
"date": "never",
"event_url": "http: //google.com"
,
"featured_media": 1221
WordPress no le permite crear recursos directamente. Necesita autenticar su solicitud REST. Estoy usando la autenticación básica para autenticar la API REST de WordPress. Necesitas instalar un complemento. Cógelo desde aquí: https://github.com/WP-API/Basic-Auth
He probado el siguiente código de 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)
Comentarios y puntuaciones
Si te gusta la informática, puedes dejar una reseña acerca de qué le añadirías a esta noticia.