web-dev-qa-db-ja.com

投稿からimage srcを抽出して外部のフォームに送る

私はいくつかのチュートリアルの助けを借りて画像のURLからFacebookに写真をアップロードするために Facebookアプリ を作成しました。画像のURLと説明が必要です。 WordPressのすべての「画像」タイプの投稿の下に「Facebookにアップロード」ボタンを配置します。

画像をアップロードするアプリ本体 -

<?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>

カスタムの投稿タイプ(Image)から動的に画像srcを抽出し、フォーム内で自動的にsrcをsourceとして設定する方法を教えてください。 (各画像タイプの投稿には1つの画像しかありません)

2
Prateek

投稿本文からimage/image-srcを抽出するための組み込みの方法はありません。画像が添付ファイルの場合は、get_childrenまたはWP_Query、および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');

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');

後者のサーバーにとっては動作が遅くなる可能性がありますが、信頼性も低下する可能性があります。添付ファイルではない画像が埋め込まれている場合は、それが唯一の選択肢になります。

見つかった場合、image src属性のみを返す、フック以外の例。

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()は、投稿に含まれる画像を判断するためにpost_parentテーブルのwp_posts列を使用するため、投稿内のすべての画像を取得するための信頼できる方法ではありません。問題は、画像のpost_parent最初がこの画像を使った投稿のみを指すことです。

他の投稿が同じ画像を使用している場合、その投稿で実行してもget_childrenはその画像を見つけられません。そのため、あなたの画像リストは不完全になり、最初に添付された画像のみを含みます。

0
Robert Bethge