web-dev-qa-db-fra.com

Comment mettre à jour les champs de méta personnalisés avec api de repos?

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;
}
1
user1147636

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 );
}
0
user1147636