Je reçois le méta-champ personnalisé avec une API restante, mais je ne peux ni créer ni mettre à jour.
Je ne suis pas un programmeur, j'ai essayé différentes solutions trouvées sur différents sites mais cela ne fonctionne pas. J'ai utilisé postman, la nouvelle création de post est ok mais les méta-champs personnalisés ne sont pas créés.
Exemple:
add_action( 'rest_api_init', 'create_api_posts_meta_field' );
function create_api_posts_meta_field() {
// register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
register_rest_field( 'job_listing', 'post-meta-fields', array(
'get_callback' => 'get_post_meta_for_api',
'update_callback' => 'update_post_meta_for_api',
'schema' => null,
)
);
}
function get_post_meta_for_api( $object, $meta_value ) {
//get the id of the post object array
$post_id = $object['id'];
$meta = get_post_meta( $post_id );
if ( isset( $meta['_date-start' ] ) && isset( $meta['_date-start' ][0] ) ) {
//return the post meta
return $meta['_date-start' ][0];
} else {
update_post_meta( $meta, '_date-start', $meta_value ,true );
}
// meta not found
return false;
}
J'ai résolu:
function job_listings_to_api( $args, $post_type ) {
if ( 'job_listing' === $post_type ) {
$args['show_in_rest'] = true;
}
return $args;
}
add_filter( 'register_post_type_args', 'job_listings_to_api', 10, 2 );
add_action( 'rest_api_init', 'create_api_posts_meta_field' );
function create_api_posts_meta_field() {
register_rest_field( 'job_listing', '_date-start', array(
'get_callback' => 'get_post_meta_for_api',
'update_callback' => 'update_post_meta_for_api',
)
);
}
function get_post_meta_for_api( $object, $field_name, $request ) {
$post_id = $object['id'];
$meta = get_post_meta( $post_id );
if ( isset( $meta['_date-start' ] ) && isset( $meta['_date-start' ][0]
) ) {
//return the post meta
return $meta['_date-start' ][0];
}
return false;
}
function update_post_meta_for_api( $value, $object, $field_name ) {
if ( ! $value ) {
return;
}
return update_post_meta( $object->ID, $field_name, $value );
}