У меня наконец то !! получил эту вещь, которую я пытался сделать 12 раз, и 12 разными способами, но, наконец, заставил ее работать, вроде как.
Я создал собственный метабокс для загрузки и прикрепления изображений к сообщениям, и он не требует от вас использования ужасного загрузчика файлов мультимедиа, встроенного в WP. Я ненавижу эту вещь. Нет, я сделал только группу входов (заголовок, описание, файл), которую вы также можете дублировать, чтобы добавить дополнительные вложения, если хотите. Таким образом, вы заполняете поля, выбираете изображение для загрузки и сохраняете черновик или публикуете сообщение. Как только в сообщение добавлены вложения, в метабоксе отобразятся поля ввода, а также изображение предварительного просмотра вложенного изображения для каждого добавленного вложения. Поля title и description используются для генерации метаданных файла, ничто не сохраняется как 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()
все и вся, но ей также нужно создать большой палец размером 100 пикселей и создать версию изображения с максимальной шириной, например, 500 пикселей, и сохранить ее как новые файлы загруженного файла.
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'] );
}
}
Любой, кто сможет мне помочь, наконец-то исправит это, чтобы он работал должным образом, и был бы любим. Я потратил так много нелепых, бесчисленных часов, много разных раз, пытаясь разработать эту штуку, и документация отстой, и на самом деле нигде нет хороших сообщений о том, как это сделать.
Благодарность
источник
Ответы:
Привет @jaredwilli:
Чувак! Доблестное усилие и хорошая работа. В целом это может быть отличным дополнением к WordPress.
Вы были так близки, но у вас было где-то между 5 и 10 небольшими ошибочными предположениями или кодом, который выглядел так, как будто вы его запустили, но не вернулись к нему, потому что он не работал. Я переработал вашу функцию только столько, сколько мне нужно, чтобы исправить это. Решение следует, и я оставлю параллельное сравнение вашему или кому-то менее сгоревшему. :)
Эй, почему бы не разориться и получить себе копию PhpStorm ? Вы могли бы легко решить это самостоятельно, вы были бы так близки, если бы вы могли просто проследить код, как я сейчас могу. Если вы это сделаете, не тратьте свое время на очень глючный XDEBUG и вместо этого загрузите Zend Debugger .
PS Это мой прежний ответ. Я написал это прежде, чем понял, о чем именно спрашивал Джаред. Это правильно, но не связано с его вопросом. :)
Я думаю, что вы ищете это
add_image_size()
:Например:
При установке этого WordPress автоматически создаст эти размеры. Что то, что вам нужно?
источник
wp_generate_attachment_metadata()
делает это, еслиadd_image_size()
установлено. Может быть, он просто не пытался использоватьadd_image_size()
для установки размеров изображения?если я понимаю ваш вопрос, вы должны сначала получить список размеров, как это:
это возвращает массив всех зарегистрированных размеров изображения (по умолчанию: большой, средний, миниатюра, любой нестандартный размер, зарегистрированный с помощью «add_image_size ()», тогда все, что вам нужно сделать, это выполнить цикл по каждому из размеров и создать изображение для этого размера, например это:
замените $ file на путь к загруженному файлу и $ crop на true или false, если вы хотите обрезать изображение до новых размеров или false для изменения размера.
источник
wp_generate_attachment_metadata()
в/wp-admin/includes/image.php
вы увидите , что он делает именно то , что вы писали выше, и он уже назвал это. Так что, если они не создаются, то, возможно, у него есть плагин, который фильтрует их с помощью'intermediate_image_sizes_advanced'
хука?