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
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] : '';
}