いよいよ!! このことを手に入れたのは、約12回の方法と12の異なる方法で試しましたが、ようやく機能するようになりました。
画像をアップロードして投稿に添付するためのカスタムメタボックスを作成しました。WPに組み込まれている恐ろしいシックボックスメディアアップローダーを使用する必要はありません。嫌いです。いいえ、私がしたことは、入力のグループ(タイトル、説明、ファイル)だけです。必要に応じて添付ファイルを追加するために複製することもできます。そのため、フィールドに入力し、アップロードする画像を選択して、下書きを保存するか、投稿を公開します。投稿に添付ファイルが追加されると、メタボックスには入力フィールドと、追加した各添付ファイルの添付画像のプレビュー画像が表示されます。タイトルと説明のフィールドは、ファイルメタデータを生成するために使用されますが、私が知っているpost_metaとしては何も保存されません。現在、私がこれまで取り組んできたのはそれだけです。
投稿を保存/公開するときに、添付ファイルをアップロード/作成するときに、デフォルトのwpアップローダーと同じように3つの画像サイズ、サムネイル、中、大を作成し、フルサイズの画像も保持するようにする必要があります。それがどうにか可能なら。そうでない場合は、別の方法でadd_image_size()
新しいカスタムサイズを作成/定義し、アップロード時に代わりにそのように生成したいと思います。
この場合にどの関数を使用するのが最も理想的かはわかりません。おそらく、image_make_intermediate_size()
関数の方が優れているか、wp_create_thumbnail()
またはwp_crop_image()
...誰が知っているか!!
wp_handle_upload()
それぞれについて関数を実行する必要がある場合、またはおそらくwp_generate_attachment_metadata()
関数に。3つの画像サイズが同じ添付ファイルのバリアントとして関連付けられるため、それをどのように実行するのか、私にとって混乱しています。
私はウェブを精査し、すべてのwpメディア/アップロード/画像関連ファイルのソースを読み、メディアアップロード用のほぼすべての機能でプレイしましたが、WPが3つの画像サイズを作成する方法や方法を見つけることができませんそれ自身。
wp-includes / media.phpのimage_resize()
関数は、まさにそのとおりであるため、最適であるように見えます。私は自分の人生のために私が何を失っているのか、またはやってみましたが、画像のサムネイルを作るのは間違っていたのかわかりません。
以下は、wp_handle_upload()
物と物事を処理する私の作業関数ですが、100pxのサムを作成し、500pxのような最大幅の画像のサイズ変更バージョンを作成し、アップロードされたものの新しいファイルとして保存する必要があります。
function update_attachment(){
global $post;
wp_update_attachment_metadata( $post->ID, $_POST['a_image'] );
if( !empty( $_FILES['a_image']['name'] )) { //New upload
require_once( ABSPATH . 'wp-admin/includes/file.php' );
$override['action'] = 'editpost';
$url = wp_handle_upload( $_FILES['a_image'], $override );
// $medium = image_make_intermediate_size( $uploaded_file['url'], 500, 400, true );
// $thumb = = image_make_intermediate_size( $uploaded_file['url'], 100, 100, true );
if ( isset( $file['error'] )) {
return new WP_Error( 'upload_error', $file['error'] );
}
$array_type = wp_check_filetype
$allowed_file_types = array('image/jpg','image/jpeg','image/gif','image/png');
$name_parts = pathinfo( $name );
$name = trim( substr( $name, 0, - ( 1 + strlen( $name_parts['extension'] )) ));
$type = $file['type'];
$file = $file['file'];
$title = $_POST['a_title'] ? $_POST['a_title'] : $name;
$content = $_POST['a_desc']
$post_id = $post->ID;
$attachment = array(
'post_title' => $title,
'post_type' => 'attachment',
'post_content' => $content,
'post_parent' => $post_id,
'post_mime_type' => $type,
'guid' => $url['url']
);
// Save the data
$id = wp_insert_attachment( $attachment, $_FILES['a_image'][ 'file' ]/*, $post_id - for post_thumbnails*/);
if ( !is_wp_error( $id )) {
$attach_meta = wp_generate_attachment_metadata( $id, $uploaded_file['url'] );
wp_update_attachment_metadata( $attach_id, $attach_meta );
}
update_post_meta( $post->ID, 'a_image', $uploaded_file['url'] );
}
}
適切に動作するように私が最終的にこれを修正するのを助けることができる人は誰でも愛されるでしょう。私はこのことを開発しようとして何度も何度もとんでもない数え切れないほどの時間を費やしてきたし、ドキュメンテーションはひどいものでした。
ありがとう