0

次のコードを使用して、ページの最初の画像を特集画像としてアップロードしています。

function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

  if(empty($first_img)){ //Defines a default image
    $first_img = "/images/default.jpg";
  }
  return $first_img;
}

function save_first_image(){
    global $post, $posts;
    $first_image = catch_that_image();
    $post_id = $post -> post_id;
    $args = array('timeout' => '1200');
    $get = wp_remote_get( $first_image,$args );

    $type = wp_remote_retrieve_header( $get, 'content-type' );
    $mirror = wp_upload_bits(rawurldecode(basename( $first_image )), '', wp_remote_retrieve_body( $get ) );
    //Attachment options
    $attachment = array(
    'post_title'=> basename( $first_image ),
    'post_mime_type' => $type
    );
    // Add the image to your media library and set as featured image
    $attach_id = wp_insert_attachment( $attachment, $mirror['file'], $post_id );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $first_image );
    wp_update_attachment_metadata( $attach_id, $attach_data );
    set_post_thumbnail( $post_id, $attach_id );
}

正常に動作していましたが、今では常に壊れた画像を添付しているようです。

誰かがこれを経験したことがありますか - 問題の原因が cloudflare であるかどうか疑問に思っています - しかし、それを無効にしても、まだ壊れた画像がアップロードされています.

すべての画像はサイトの webroot のフォルダーに保存されています。wp_remote_get を使用せずにアップロードする方法はありますか?

ありがとう

4

1 に答える 1

0

はぁ、またやった - 何時間も検索した後、ここに投稿した直後に答えを見つけてください!!

function save_first_image(){
    global $post, $posts;
    $image_url = catch_that_image();
    $post_id = $post -> post_id;
    $upload_dir = wp_upload_dir();
    $image_data = file_get_contents($image_url);
    $filename = basename($image_url);
    if(wp_mkdir_p($upload_dir['path']))
        $file = $upload_dir['path'] . '/' . $filename;
    else
        $file = $upload_dir['basedir'] . '/' . $filename;
    file_put_contents($file, $image_data);

    $wp_filetype = wp_check_filetype($filename, null );
    $attachment = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => sanitize_file_name($filename),
        'post_content' => '',
        'post_status' => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $file, $post_id );
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );
    wp_update_attachment_metadata( $attach_id, $attach_data );

    set_post_thumbnail( $post_id, $attach_id );
}
于 2013-05-29T14:56:23.840 に答える