4

media_sideload_image

WordPressにはmedia_sideload_imageという関数があります。画像をアップロードしてメディアライブラリに添付するために使用されます。

私は次のような画像のURLを受け入れます:

h ** p://s.wordpress.org/style/images/wp-header-logo.png

書き換えられたURL

Web上の一部のURLは、次のように書き直されます。

http://placekitten.com/100/100

エラーメッセージ:

申し訳ありませんが、このファイルタイプはセキュリティ上の理由から許可されていません。

ファイルタイプは正しいJPGファイルですが、ファイル拡張子がありません。

私の場合、MIMEタイプを追加しても機能しません

この機能を試してみましたが、ファイル拡張子が設定されていないので役に立ちません。

add_filter('upload_mimes', 'add_custom_upload_mimes');
function add_custom_upload_mimes($existing_mimes){
    $existing_mimes['jpeg'] = 'image/jpeg';
    return $existing_mimes;
}

質問

メディアライブラリに画像を添付するために、media_sideload_imageなどを使用してURL h ** p://placekitten.com/100/100をアップロードするにはどうすればよいですか?

4

3 に答える 3

10

この解決策が必要なときに、昨日あなたの質問を読みました。24時間後に答えが見つかります。

ここに完全な解決策があります

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

$image_url = "http://domain.com/blog/23092839823";
$image_tmp = download_url($image_url);

    if( is_wp_error( $image_tmp ) ){
        echo "<br> Image Download Fail:";
    }else {
        $image_size = filesize($image_tmp);
        $image_name = basename($image_url) . ".jpg"; // .jpg optional


        //Download complete now upload in your project
        $file = array(
           'name' => $image_name, // ex: wp-header-logo.png
           'type' => 'image/jpg',
           'tmp_name' => $image_tmp,
           'error' => 0,
           'size' => $image_size
        );


        //This image/file will show on media page...
        $thumb_id = media_handle_sideload( $file, $post_id, $desc);
        set_post_thumbnail($post_id, $thumb_id); //optional

        echo "<br> Image Save ";
    }
于 2015-11-19T20:24:33.670 に答える
3

unfiltered_uploadコアを掘り下げると、拡張子なしでファイルをアップロードするには機能が必要なようです。

if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) )
    return $upload_error_handler( $file, __( 'Sorry, this file type is not permitted for security reasons.' ));

役割と機能のドキュメントによると:

この機能は、デフォルトではどの役割にも使用できません (スーパー管理者を含む)。次の定数を定義して、この機能を有効にする必要があります。

define( 'ALLOW_UNFILTERED_UPLOADS', true );

この定数を定義すると、単一サイトのインストールではすべてのロールに unfiltered_upload 機能が付与されますが、マルチサイトのインストールではスーパー管理者のみにこの機能が付与されます。

于 2013-04-02T04:07:44.833 に答える