URLからの画像アップロード


20

SEがURLから画像をアップロードする方法が本当に好きです(多くの人がそうするはずです!)。検索してみましたが、見つけることができません。WordPressで利用できるプラグインまたはこれに類似した方法はありますか?

[メディアのアップロード/挿入] >> [コンピューターから] >> [ファイルの選択]をクリックした後、[ファイル名]ボックスに画像のURLを入力すると、URLから直接画像をアップロードおよび圧縮できます。

ここに画像の説明を入力してください

これはすばらしい機能ですが、あまり広く知られていません(実際に発見したばかりです)。ユーザーに画像URLを追加することを知らせるオプションがある、SEのようなものが少し欲しいです。

アップロードファイルフィールドをメディアアップローダーの新しいタブに追加する方法を教えてください。

これはwordpressのメディアアップロードページに新しいタブを追加する方法のチュートリアルですが、テキストとファイルアップロードフィールドのみをそのタブに追加したいと思います。何か案は?WordPress Codexでこの機能やファイルアップロードフィールドを直接処理するものは見つかりませんでした。

ありがとう。


機能リクエストはtrac.wordpress.orgに属します。
ワイク

2
機能のリクエストではありません。機能がすでに組み込まれています。
トラヴィスPflanz

@TravisPflanzはWindowsでこれに遭遇し、天才だと思いました-間違いなく私のワークフローを改善しました。とにかくMacでそれを行うことを知っていますか?command + shift + gはURLをサポートしていないようですが、別のコマンドがあるかどうかはわかりませんでした。
-user658182

「windows filemanagerにURLを入力」よりもURLからアップロードする利点は、ファイルがソースからワードプレスサーバーに直接ロードされることです。私の場合、最初にPCにダウンロードしてから、低速のモバイル接続を介してwordpressにダウンロードする代わりに、ホスティングセンターのギガビット回線を使用します。
レンネ

URLから直接「アップロード」するトリックは、Windows 10(どのブラウザーでもテスト済みのFirefox、Chrome、IE11)では機能せず、おそらく2012年以降の以前のバージョンのWindowsでは機能していません。WindowsはURLからファイルをダウンロードしますコンピューターの一時的な場所に移動し、そこからアップロードします。そのため、このトリックを使用して大きなビデオファイルを「アップロード」することはできません(PHPおよびWordPressがルックインを取得する前にホスティングプロバイダーのHTTP 413応答をバイパスするため)。
ジェイク

回答:


24

phpスクリプトを記述するか、このコードの独自のプラグインをここで作成できます。多数の画像をインポートする必要があるプロジェクトの1つで使用しました。

まず、画像を取得して、アップロードディレクトリに保存します。

$uploaddir = wp_upload_dir();
$uploadfile = $uploaddir['path'] . '/' . $filename;

$contents= file_get_contents('http://mydomain.com/folder/image.jpg');
$savefile = fopen($uploadfile, 'w');
fwrite($savefile, $contents);
fclose($savefile);

その後、画像をメディアライブラリに挿入できます。

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => $filename,
    'post_content' => '',
    'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, $uploadfile );

$imagenew = get_post( $attach_id );
$fullsizepath = get_attached_file( $imagenew->ID );
$attach_data = wp_generate_attachment_metadata( $attach_id, $fullsizepath );
wp_update_attachment_metadata( $attach_id, $attach_data );

そして出来上がり-ここに行きます。アタッチメント配列に他のさまざまなパラメーターを設定することもできます。URLの配列などを取得した場合、スクリプトをループで実行できますが、イメージ関数は実行に多くの時間とメモリを消費することに注意してください。


ああ、すみません、最初は画像が表示されませんでした。たぶんこれを行う小さなプラグインを書くでしょう。これまでに私のスクリプトを理解していただければ幸いです。プラグインのニュースを投稿し続けます。
フィスキ

投稿したとおりに画像を追加したと思います。昼食から戻ったら、さらに詳しく見ていきます。ご協力ありがとうございます!いつも感謝しています。
トラビスプフランツ

使用file_get_contentsURLではない仕事になる場合allow_url_fopenには無効になっているphp.ini- wp_remote_get異なるWP環境全体より高度に互換性があります
highvolt

こんにちは、感謝の答えのために、何のためにwp_generate_attachment_metadatawp_update_attachment_metadata
gdfgdfg

12

関数download_url()とを使用できますwp_handle_sideload()

download_url()

WordPress HTTPクラスを使用して、URLをローカルの一時ファイルにダウンロードします。呼び出し関数はファイルをunlink()する必要があることに注意してください。

wp_handle_sideload()

サイドロードを処理します。これは、従来のメディアアップロードの代わりに、別のサーバーからメディアアイテムを取得するプロセスです。このプロセスには、ファイル名のサニタイズ、拡張子のMIMEタイプの確認、およびアップロードディレクトリ内の適切なディレクトリへのファイルの移動が含まれます。

例:

// Gives us access to the download_url() and wp_handle_sideload() functions
require_once( ABSPATH . 'wp-admin/includes/file.php' );

// URL to the WordPress logo
$url = 'http://s.w.org/style/images/wp-header-logo.png';
$timeout_seconds = 5;

// Download file to temp dir
$temp_file = download_url( $url, $timeout_seconds );

if ( !is_wp_error( $temp_file ) ) {

    // Array based on $_FILE as seen in PHP file uploads
    $file = array(
        'name'     => basename($url), // ex: wp-header-logo.png
        'type'     => 'image/png',
        'tmp_name' => $temp_file,
        'error'    => 0,
        'size'     => filesize($temp_file),
    );

    $overrides = array(
        // Tells WordPress to not look for the POST form
        // fields that would normally be present as
        // we downloaded the file from a remote server, so there
        // will be no form fields
        // Default is true
        'test_form' => false,

        // Setting this to false lets WordPress allow empty files, not recommended
        // Default is true
        'test_size' => true,
    );

    // Move the temporary file into the uploads directory
    $results = wp_handle_sideload( $file, $overrides );

    if ( !empty( $results['error'] ) ) {
        // Insert any error handling here
    } else {

        $filename  = $results['file']; // Full path to the file
        $local_url = $results['url'];  // URL to the file in the uploads dir
        $type      = $results['type']; // MIME type of the file

        // Perform any actions here based in the above results
    }

}

このコードを使用して、アップロードディレクトリに画像を正常に追加しましたが、Wordpressバックエンドのメディアライブラリにアクセスすると、どこにも見つからず、検索に表示されません。正しい許可を持っていることを確認しましたが、それでも運はありません。表示されない理由は何ですか?
ニック

管理者側ではエントリを追加しません。adminにエントリを追加したい場合は、wp_insert_attachment()を使用することをお勧めします。codex.wordpress.org/Function_Reference/wp_insert_attachment または$ _FILESグローバル変数を変更することでこれを使用できます。media_handle_upload(); codex.wordpress.org/Function_Reference/media_handle_upload
Rajilesh Panoli

それはまったく機能しません
キャメロンA

5

WordPressプラグインディレクトリ- 取得して保存

このプラグインを使用すると、リモートURLから画像を取得して、独自のワードプレスメディアライブラリに保存できます。そうすることで、リモートイメージが所有者によって削除されたかどうかを心配することはありません。これにより、ローカルコンピューターに画像をダウンロードし、自分のワードプレスに再度アップロードする手順も保存されます。

画像を取得した後、wordpressは、画像をアップロードした直後と同じように、「投稿に挿入」または「属性を変更」するように促します。


1

リモート画像をWordPressにインポートするには、少なくとも3つの方法があります。

  1. 他の回答で言及されているグラブと保存プラグイン。このプラグインは少し古く、ファイルを直接保存するため、異なるサイズのサムネイルは作成されません。執筆時点での2年以上前の最終更新。

  2. Import External Image Pluginには、リモートリンクされたイメージの一括インポートがあります。これを機能させるには、PHPのメモリ制限を増やす必要がある場合があります。執筆時点での2年以上前の最終更新。

  3. URLプラグインから画像を保存してインポートすると、ネイティブ関数を使用して画像がインポートされるため、メディアギャラリーで適切に作成され、すべてのサムネイルなどが作成されます。このプラグインは2016年に最後に更新され、WordPress 4.7で動作します

開示:URLプラグインから画像保存とインポートを作成しました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.