Extract image src from a post and send it to an external form

I have created a Facebook App to upload photos to facebook from image url with help of some tutorials. It needs an image url and description. I want to put a button “Upload to Facebook” below every “Image” type posts in wordpress.

App Main Part to upload images –

<?php
if(isset($_POST["source"]))
{
try {
    $access_token=$facebook->getAccessToken();
    $graph_url= "https://graph.facebook.com/me/photos?"
  . "url=" . urlencode($_POST["source"])
  . "&message=" . urlencode($_POST['message'])
  . "&method=POST"
  . "&access_token=" .$access_token;
    $response=file_get_contents($graph_url);
    $json=json_decode($response);
  }
  catch (FacebookApiException $e) {
    error_log('Could not post image to Facebook.');
  }
}
?>

    <form enctype="multipart/form-data" action=" " method="POST">
        Paste an image URL here:
        <input name="source" type="text"><br/><br/>
        Say something about this photo:
        <input name="message"
               type="text" value=""><br/><br/>
        <input type="submit" value="Upload" class="btn btn-primary"/><br/>
    </form>

How can i extract image src dynamically from a custom post type(Image), and set src as source in form automatically. (There is only one image in every image type post)

2 Answers
2

There is no built-in way to extract an image/image-src from the post body. If the images are attachments you can do it with get_children or WP_Query, and wp_get_attachment_image_src.

function get_image_src_from_content_101578($content) {
  global $post;
  $args = array( 
    'post_parent' => $post->ID,
  );
  $images = get_children($args);
  foreach ($images as $img) {
    var_dump(wp_get_attachment_image_src($img->ID));
  }
}
add_action('the_content','get_image_src_from_content_101578');

You could also use regex.

function replace_image_link_101578($content) {
  $pattern = '|<img.*?src="https://wordpress.stackexchange.com/questions/101578/([^"]*)".*?/?>|';
  $content = preg_match($pattern,$content,$matches);
  var_dump($matches);
  return $content;
}
add_filter('the_content','replace_image_link_101578');

The latter might be less work for the server, but may also be less reliable. If you have images embedded that aren’t attachments, it will be your only choice though.

A non-hook example that returns only the image src attribute, if found.

function replace_image_link_($content) {
  $pattern = '|<img.*?src="https://wordpress.stackexchange.com/questions/101578/([^"]*)".*?/?>|';
  $content = preg_match($pattern,$content,$matches);
  return (!empty($matches[1])) ? $matches[1] : '';
}

Leave a Comment