Nareszcie mam !! dostałem tę rzecz, którą próbowałem zrobić 12 razy i 12 różnych sposobów, ale w końcu udało mi się ...
Stworzyłem niestandardowy metaboks do przesyłania i dołączania zdjęć do postów i nie wymaga on używania okropnego programu do przesyłania multimediów typu „hardbox” wbudowanego w WP. Nienawidzę tego. Nie, to, co zrobiłem, to tylko grupa danych wejściowych (tytuł, opis, plik), które możesz również zduplikować, aby dodać dodatkowe załączniki, jeśli chcesz. Wypełniasz więc pola, wybierasz obraz do przesłania i zapisujesz wersję roboczą lub publikujesz post. Po dodaniu załączników do postu metabox wyświetli pola wprowadzania wraz z podglądem załączonego obrazu dla każdego dodanego załącznika. Pola tytułu i opisu służą do generowania metadanych pliku, nic nie jest zapisywane jako post_meta, o czym wiem. To wszystko, co do tej pory pracowałem.
Muszę to zrobić, aby po zapisaniu / opublikowaniu postu, ponownym przesłaniu / utworzeniu plików załączników utworzyłyby trzy rozmiary obrazów, tak jak domyślny program do przesyłania wp, miniatura, średni, duży i zachowując obraz w pełnym rozmiarze . Jeśli to w jakiś sposób możliwe. Jeśli nie, w innym przypadku chciałbym użyć add_image_size()
do utworzenia / zdefiniowania nowych niestandardowych rozmiarów i wygenerowania ich w ten sposób po przesłaniu.
Nie jestem pewien, która funkcja jest najbardziej idealna do użycia w tym przypadku, może ta image_make_intermediate_size()
funkcja byłaby lepsza, wp_create_thumbnail()
lub wp_crop_image()
... kto wie !!
Nie mogę wymyślić, jak to zrobić, jeśli muszę uruchomić wp_handle_upload()
funkcję dla każdego z nich, a może coś z tą wp_generate_attachment_metadata()
funkcją. Jest to dla mnie mylące, ponieważ 3 rozmiary obrazów należy powiązać jako warianty tego samego załącznika i jak to zrobić.
Przeszukałem sieć, przeczytałem źródło każdego pliku związanego z wp media / upload / image, i grałem z niemal każdą funkcją związaną z przesyłaniem multimediów i nie mogę znaleźć, w jaki sposób WP tworzy 3 rozmiary obrazów w dowolnym miejscu ani jak to zrobić ja sama.
W wp-obejmuje / media.php image_resize()
funkcja wygląda najlepiej, ponieważ jest dokładnie taka, jak powinna być. Po prostu nie mogę ustalić, na co mnie stać, do diabła, za czym tęsknię lub co próbowałem zrobić, ale zrobiłem źle, tworząc miniatury obrazów.
Oto moja funkcja robocza, która wykonuje te wp_handle_upload()
czynności, ale musi także utworzyć kciuk 100 pikseli i utworzyć wersję obrazu o maksymalnej szerokości, taką jak 500 pikseli, i zapisać jako nowe pliki przesłanego.
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'] );
}
}
Każdy, kto może mi pomóc w końcu to naprawić, aby działał prawidłowo, byłby zachwycony. Spędziłem wiele niedorzecznych niezliczonych godzin, wiele różnych razy, starając się to rozwinąć, a dokumentacja jest do kitu, a nigdzie nie ma naprawdę dobrych postów na ten temat.
Dzięki
źródło
Odpowiedzi:
Cześć @jaredwilli:
Koleś! Dzielny wysiłek i miła praca. Podsumowując, może to być świetny dodatek do WordPress.
Byłeś tak blisko, ale miałeś gdzieś od 5 do 10 drobnych nieudanych założeń lub kodu, który wygląda jakbyś go uruchomił, ale nie wrócił do niego, ponieważ nie działał. Przerobiłem twoją funkcję tylko tyle, ile potrzebowałem, aby ją poprawić. Rozwiązanie następuje i pozostawię porównanie obok ciebie lub mniej wypalonej osoby. :)
Hej, czemu nie wyszaleć się i zdobyć sobie kopię PhpStorm ? Mogłeś łatwo rozwiązać to sam, byłeś tak blisko, gdybyś mógł po prostu prześledzić kod, tak jak teraz. Jeśli tak, nie marnuj czasu na bardzo błędny XDEBUG i zamiast tego pobierz Zend Debugger .
PS To moja poprzednia odpowiedź. Opublikowałem to, zanim zdałem sobie sprawę, o co dokładnie pytał Jared. To prawda, ale niezwiązana z jego pytaniem. :)
Myślę, że szukasz
add_image_size()
:Na przykład:
Po ustawieniu tego WordPress automatycznie utworzy te rozmiary. Czego potrzebujesz?
źródło
wp_generate_attachment_metadata()
robi to, jeśliadd_image_size()
jest ustawiona. Może po prostu nie próbował użyćadd_image_size()
rozmiarów obrazu?jeśli rozumiem twoje pytanie, najpierw musisz uzyskać listę rozmiarów:
to zwraca tablicę wszystkich zarejestrowanych rozmiarów obrazu (domyślnie: duży, średni, miniatura, dowolny niestandardowy rozmiar zarejestrowany za pomocą „add_image_size ()”, wtedy wszystko, co musisz zrobić, to przejść przez każdy z tych rozmiarów i utworzyć obraz o takim rozmiarze, jak to:
zamień $ file na przesłaną ścieżkę pliku, a $ crop na true lub false, jeśli chcesz przyciąć obraz do nowych wymiarów lub false, aby zmienić rozmiar.
źródło
wp_generate_attachment_metadata()
w/wp-admin/includes/image.php
widać, że robi dokładnie to, co napisali powyżej, a on jest już nazywa to. Więc jeśli nie są tworzone, to może ma wtyczkę, która filtruje je za pomocą'intermediate_image_sizes_advanced'
haka?