Home › Forums › General Issues › Insert post WP Rest api with field text and image
Hello,
I try to insert a post with REST API who contain acf field text and image in one api call.
My image is an acf field.
I register my field like that:
register_rest_field( 'project', 'logo', array(
'get_callback' => 'get_field_logo',
'update_callback' => 'update_field_logo',
)
);
register_rest_field( 'project', 'headline', array(
'get_callback' => 'get_field_headline',
'update_callback' => 'update_field_headline',
)
);
I send my request via Postman
update_field_headline
is correctly call, but update_field_logo
is never call.
I try to debug wp-includes/rest-api/endpoints/class-wp-rest-controller.php
on line 421 is see:
// Don't run the update callbacks if the data wasn't passed in the request.
if ( ! isset( $request[ $field_name ] ) ) {
continue;
}
I think update_field_logo
is never call because “logo” is not set inside $_POST variable but inside $_FILES variable. So in line 421 the field is skipped.
If I modifiy the core file on line 421 like below everythings work well
if ( ! isset( $request[ $field_name ] ) && ! isset($_FILES[ $field_name ] ) {
continue;
}
But modify WordPress Core file is not a solution…
Any idea how can I allow files to be trigger on update_callback ?
I found a solution but i’m sure there is a better way.
I add an action on rest_insert_<post_type>
hook
add_action( 'rest_insert_project', 'prefix_update_files_field', 10 , 3 );
function update_files_field($post, $request, $true){
global $wp_rest_additional_fields;
$my_post_type = 'project';
$additional_fields = $wp_rest_additional_fields[$my_post_type];
foreach ( $additional_fields as $field_name => $field_options ) {
if ( ! $field_options['update_callback'] ) {
continue;
}
// Don't run the update callbacks if the data wasn't passed in the request.
if ( ! isset($_FILES[ $field_name ] ) ) {
continue;
}
$result = call_user_func( $field_options['update_callback'], $request[ $field_name ], $object, $field_name, $request, $my_post_type );
if ( is_wp_error( $result ) ) {
return $result;
}
}
}
Some error on my response, this is a correct code:
add_action( 'rest_insert_project', 'prefix_update_files_field', 10 , 3 );
function prefix_update_files_field($post, $request, $true){
global $wp_rest_additional_fields;
$my_post_type = 'project';
$additional_fields = $wp_rest_additional_fields[$my_post_type];
foreach ( $additional_fields as $field_name => $field_options ) {
if ( ! $field_options['update_callback'] ) {
continue;
}
// Don't run the update callbacks if the data wasn't passed in the request.
if ( ! isset($_FILES[ $field_name ] ) ) {
continue;
}
$result = call_user_func( $field_options['update_callback'], $_FILES[ $field_name ], $object, $field_name, $request, $my_post_type );
if ( is_wp_error( $result ) ) {
return $result;
}
}
}
The topic ‘Insert post WP Rest api with field text and image’ is closed to new replies.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.