2

I get the custom meta field with rest api but not able to create or update.

I'm not a programmer, I tried different solutions found on various sites but it does not work any . I used postman, the new post creatation is ok but custom meta fields not created.

Example:

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

I Resolved:

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.