我终于有了!得到了我已经尝试过12次并采用12种不同方式制作的东西,但最终使它起作用了……。
我制作了一个自定义元框,用于将图像上传和附加到帖子,并且不需要您使用WP中内置的可怕的thickbox媒体上传器。我讨厌那件事。不,我所做的只是一组输入(标题,描述,文件),您也可以复制它们,以根据需要添加其他附件。因此,您填写字段,选择要上传的图像,然后保存草稿或发布帖子。将附件添加到帖子后,元框将显示输入字段,以及添加的每个附件的附件图像的预览图像。标题和描述字段用于生成文件元数据,据我所知,没有任何内容保存为post_meta。到目前为止,这就是我目前要做的全部工作。
我需要这样做,以便在您保存/发布帖子时,依次上传/创建附件文件,它将创建三个图像尺寸,如默认的wp上传器会显示缩略图,中型,大尺寸,并且也保留全尺寸图像。如果可能的话。如果没有,我想用其他方式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'] );
}
}
任何能够帮助我最终解决此问题以使其正常工作的人都会受到爱戴。我花了很多时间来荒谬地无数小时地尝试开发这个东西,但是文档却很烂,而且在任何地方都没有关于如何做到这一点的好帖子。
谢谢