Fixed. May be this will help someone looking for the same.
I wrote my own function in controllers/core.php:
public function ux_publish_post() {
global $wpdb;
global $json_api;
$json = file_get_contents('php://input');
$request_data = json_decode($json);
global $user_ID;
$new_post = array(
'post_title' => $request_data->post_title,
'post_content' => $request_data->post_content,
'post_status' => 'publish',
'post_date' => date( 'Y-m-d H:i:s' ),
'post_author' => $user_ID,
'post_type' => 'post',
'post_category' => array(0)
);
$post_id = wp_insert_post( $new_post );
$postId = $post_id;//$_REQUEST['postId'];
$image = $request_data->post_image_attachment;
$directory = "/".date(Y)."/".date(m)."/";
$wp_upload_dir = wp_upload_dir();
$data = base64_decode($image);
$filename = "IMG_".time().".png";
$fileurl = "../wp-content/uploads".$directory.$filename;
$filetype = wp_check_filetype( basename( $fileurl), null );
$upload_dir = wp_upload_dir();
$upload_path = str_replace( '/', DIRECTORY_SEPARATOR, $upload_dir['path'] ) . DIRECTORY_SEPARATOR;
// upload
$image_upload = file_put_contents( $upload_path . $filename, $data );
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename( $fileurl ),
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($fileurl)),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $fileurl ,$postId);
require_once(ABSPATH . 'wp-admin/includes/image.php');
// Generate the metadata for the attachment, and update the database record.
$attach_data = wp_generate_attachment_metadata( $attach_id,$fileurl );
wp_update_attachment_metadata( $attach_id,$attach_data );
return array('post_id' => $post_id);
}
https://localhost/website/?json=ux_publish_post
Parameters:
{
“post_title”:”New Title”,
“post_content”:”This is description”,
“post_image_attachment”:”/9j/4AAQSkZ…”
}
(Image is encoded)