web-dev-qa-db-ja.com

アップロード後にサムネイルを再生成

私はWordpressのcodexからまっすぐ来るこの素晴らしい小さなコードを持っています

if($_FILES['user_picture']['size'] != 0):
            if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
            $uploadedfile = $_FILES['user_picture'];
            $upload_overrides = array( 'test_form' => false );
            $movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
            if ( $movefile ) {
                $wp_filetype = $movefile['type'];
                $filename = $movefile['file'];
                $wp_upload_dir = wp_upload_dir();
                $attachment = array(
                    'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
                    'post_mime_type' => $wp_filetype,
                    'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
                    'post_content' => '',
                    'post_status' => 'inherit'
                );
                $attach_id = wp_insert_attachment( $attachment, $filename);
            }
        endif;

重要なことは、うまく機能することですが、function.phpに設定されているすべての画像サイズが作成されるわけではないということです。画像をアップロードするたびにサムネイルを再生成するプラグインを実行したくない場合は、アップロード後にこれらすべてのサムネイルを作成する方法が必要です。どうやって ?

更新

他のスクリプトがどのように機能するかを調べた後、ファイルを取り戻してwp_get_image_editor関数を使用して親指を立てる必要があります。 wp_handle_uploadまたはwp_insert_attachmentを実行した後にwordpressが画像のサイズを変更しないとは信じられません。

2
Warface

追加中

$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id,  $attach_data );

後に

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

それを修正しました。

3
Warface