A ver si hemos entendido como se manda una imagen desde WP a GNU Social
(Tengan paciencia…)

Aquí el código:
$title = $post->post_title;
$permalink = get_permalink( $ID );
//___ extracto ___
$excerpt = get_the_excerpt();
//___ imagen ___
$args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'post_parent' => $post->ID
);
$imagenes = get_posts( $args );
$imagen_src = wp_get_attachment_image_src( $imagenes[0]->ID );
$path_imagen = "@".$imagen_src[0];
//$imagen_src = wp_get_attachment_image_src($attachment->ID, 'full');
$url = get_option('gnu-social-serverurl');
$url = $url . "api/statuses/update.xml";
$username = get_option('gnu-social-username');
$password = get_option('gnu-social-password');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);
//___ texto + resumen + (pathimagen) + url ___
$status = $title . ": " . $excerpt . "(" . $path_imagen . ")" . " -> " . $permalink;
//$data = array('source' => 'web', 'status' => $status);
$data = array('source' => 'web', 'media'=> $path_imagen,'status' => $status);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); // requerido a partir de PHP 5.6.0
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$data = curl_exec($ch);