web-dev-qa-db-fra.com

Extraire l'image src d'un article et l'envoyer à un formulaire externe

J'ai créé une application Facebook pour télécharger des photos sur Facebook à partir de l'URL de l'image à l'aide de didacticiels. Il faut une URL d’image et une description. Je veux mettre un bouton "Télécharger sur Facebook" en dessous de chaque type "Image" messages dans wordpress.

Partie principale de l'application pour télécharger des 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>

Comment puis-je extraire image src de manière dynamique à partir d'un type de message personnalisé (Image) et définir src comme source dans le formulaire automatiquement. (Il n'y a qu'une seule image dans chaque type d'image post)

2
Prateek

Il n'y a pas de méthode intégrée pour extraire une image/image-src du post-body. Si les images sont des pièces jointes, vous pouvez le faire avec get_children ou WP_Query et 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');

Vous pouvez également utiliser regex.

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

Ce dernier pourrait représenter moins de travail pour le serveur, mais pourrait aussi être moins fiable. Si vous avez des images incorporées qui ne sont pas des pièces jointes, ce sera votre seul choix.

Un exemple non-hook qui renvoie uniquement l'attribut image src, s'il est trouvé.

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

get_children() n'est pas un moyen fiable d'obtenir toutes les images d'une publication, car il utilise la colonne post_parent de la table wp_posts pour décider quelles images appartiennent à une publication. Le problème est que post_parent d'une image pointe uniquement sur le message que a utilisé en premier cette image.

Si d'autres publications utilisent la même image, get_children ne la trouvera pas si elle est diffusée sur cette publication. Votre liste d'images sera donc incomplète et ne contiendra que les images jointes pour la première fois.

0
Robert Bethge