Jak mogę zbiorczo przesyłać zdjęcia i automatycznie tworzyć posty dla każdego z nich jednocześnie?

10

Wiem, jak przesłać wiele zdjęć do istniejącego postu, ale to inny scenariusz. Dotyczy to dużego katalogu zasobów, w którym każdy niestandardowy post typu post reprezentuje zasób obrazu (w związku z tym pojedynczy obraz jest przypisywany jako „wyróżniony obraz” dla każdego postu).

Cały system działa świetnie w przypadku tworzenia zasobów pojedynczo, ale jest zbyt czasochłonny. Muszę być w stanie „wsadowo” przesłać wiele zdjęć jednocześnie, a następnie utworzyć nowy post dla każdego obrazu, a następnie dołączyć obraz do nowego postu jako „polecany obraz”.

Dla każdego postu nie będzie wprowadzana treść tekstowa - tylko niektóre metadane i niestandardowe przypisania taksonomii, więc powinno być możliwe grupowe przypisanie metadanych i taksonomii podczas tego procesu tworzenia partii.

Badałem rozwiązania od XML-RPC do tworzenia postów (które zwykle nie obsługują przesyłania / przypisywania obrazów) do wtyczek, które pobierają pliki z katalogu serwera do biblioteki multimediów (która nie obejmuje tworzenia postów) i jquery wielu plików programy do przesyłania (to po prostu zrzut plików do katalogu).

Jestem względnie zorientowany w PHP, mam wbudowane wtyczki i motywy, ale jestem zaskoczony tym, jak poradzić sobie z tym procesem, ponieważ wymaga to pierwszego kroku, aby przenieść pliki na serwer z pewną tymczasową pojemnością, a następnie wygenerować posty na podstawie plików przesłane i przypisując niektóre metadane identyfikujące do całej partii.

Mam nadzieję, że można to zrobić w niestandardowym panelu administracyjnym, ale jeśli muszę to zrobić poza wp-admin, to też w porządku ...

Pomysły?

somatyczny
źródło
Czy kiedykolwiek znalazłeś odpowiedź na to pytanie? Byłoby to dla mnie idealne ...
Zrobiłem ... ale scenariusz przekształcił się w całą wtyczkę frameworka dla projektu. Nie jest to szczególnie krótka odpowiedź - musiałbym udokumentować przepływ wielu funkcji i haczyków, które razem to osiągają.
somatyczny
1
Podsumowując, faktycznie dokonałem dwuetapowego procesu, ponieważ ze względów redakcyjnych nie było sensu faktycznie pojawiać się postów dla wszystkiego, co użytkownik przesłał. Zamiast tego użytkownik przesyła wszystkie obrazy do jednego postu „wsadowego” jako załączniki do tego pojedynczego postu. Następnie partia jest sprawdzana, a każdy załącznik jest akceptowany / odrzucany - a po opublikowaniu tego wpisu „wsadowego” niestandardowa procedura zapisywania pobiera każdy zaakceptowany załącznik i używa wp_insert_post () do utworzenia postu z tym pojedynczym załącznikiem jako polecanym wizerunek.
somatyczny
Również duplikat: wordpress.stackexchange.com/questions/55616/…
Anoop Chandrika HarisudhanNair
Jak dodajesz metadane, jak obrazy są powiązane z danymi?
Wyck

Odpowiedzi:

5

Jest ta wtyczka: Automatyczna wtyczka z polecanymi obrazami

Ze strony wtyczki:

Automatyczne posty z polecanym obrazem tworzy nowy wpis z polecanym obrazem za każdym razem, gdy obraz jest przesyłany. Za pomocą strony ustawień wtyczki można ustawić obraz do publikowania i przypisać go do jednego z innych istniejących niestandardowych typów postów i / lub formatów postów.

Zasadniczo każde przesłane zdjęcie generuje post (wybrany typ postu) i jest ustawiany jako wyróżniony obraz tego postu.

Zainstalowałem to na moim komputerze lokalnym. Strona ustawień wygląda tak i pozwala wybrać typ wpisu, w tym niestandardowe typy postów, do których chcesz przypisać przesyłanie zdjęć i jaki status publikacji chcesz.

Zrzut ekranu wtyczki

Aby zastosować wtyczkę w praktyce - przejdź do wybranego typu posta, otwórz nowy post i prześlij media.

Aby zbiorczo przesłać zdjęcia, po prostu zaznacz wiele zdjęć w oknie dialogowym „przesyłanie”. Podkreślam tutaj 8 zdjęć, ale nie widzę powodu, dla którego nie może to być 80 lub 800, chyba że istnieją ograniczenia, o których nie wiem w programie do przesyłania obrazów Wordpress.

wprowadź opis zdjęcia tutaj

Tytuły postów są ustalane według nazw plików obrazów. Powinieneś być w stanie z tym pracować i wywoływać je w swoim temaciethe_title()

Testowałem lokalnie i działa w Wordpress 3.6.

Jestem pewien, że istnieje bardziej solidny lub elastyczny sposób na osiągnięcie tego, ale w tym przypadku wtyczka wydaje się robić dokładnie to, o co prosisz, z wyjątkiem przypisywania metadanych. Może ktoś inny może trochę to rozdzielić.

Jeśli potrzebujesz dynamicznie generowanej treści postu, możesz przynajmniej zacząć od wtyczki i stamtąd iterować. Można by pomyśleć o użyciu formatów postów lub szablonów stron w celu określenia sposobu wyświetlania postów.

Uwaga: Upewnij się, że masz wszystko image_sizeustawione w functions.php. Nienawidzę musieć cofać / usuwać 10 000 zdjęć lub uruchamiać wyjątkowo długie „regeneruj miniatury” tylko dlatego, że zapomniałem lub zmieniłem rozmiar obrazu!

liczniki czasu
źródło
powinieneś komentować, gdy przegłosujesz - byłoby to o wiele bardziej pomocne w poprawie jakości strony.
timshutes
5

Ten skrypt jest dowodem koncepcji (przetestowany i działa), nie jest wtyczką i jest przeznaczony do hakowania, zakłada kilka rzeczy:

  1. Używa, wp_insert_postwięc zaleca się, aby nie podpinać go do żadnych zaczepów administratora, więc po prostu uruchom go raz!
  2. Obrazy muszą znajdować się w wp-content\uploadsfolderze, zmiana tego wymagałaby większej liczby obręczy do przeskoczenia. W przykładzie użyto niestandardowego folderu o nazwie \imagesw folderze przesyłania, możesz zmienić tę część.
  3. Nie sprawdza błędów, testowałem go tylko w folderze z 20 obrazami, więc wyniki mogą się różnić :)

Poniższy kod będzie iterował wp-content\uploads\imagesfolder i utworzył tytuł postu na podstawie nazwy dołączanego do niego obrazu. Prawdopodobnie chcesz to zmienić na coś lepszego lub ewentualnie wprowadź metadane, używając innych danych, które posiadasz (być może Exif).

function WPSE_1595_image_post() {

    // We need to use the default uploads dir
    $wp_upload_dir =  wp_upload_dir();
    // The actual folder
    $wp_upload_images = $wp_upload_dir['basedir'] . '/images';

    require_once(ABSPATH . 'wp-admin/includes/image.php');

    foreach (new DirectoryIterator($wp_upload_images) as $fileInfo) {

        if($fileInfo->isDot()) continue;

        $image_base = $fileInfo->getFilename();
        $image_name = pathinfo($fileInfo, PATHINFO_FILENAME);

        //Customize this post data as you wish
        $my_post_data = array(
            'post_title' => $image_name,
            'post_type' => 'post',
            'post_category' => array('1'),
            'post_author'   => 1,
            'post_status' => 'publish'
        );

        // We need the ID for the attachment
        $post_id = wp_insert_post($my_post_data);

        $wp_filetype = wp_check_filetype($image_base, null );

         //Customize this attachment data as you wish
        $attachment = array(
             'guid' => $wp_upload_dir['url'] . '/' . $image_name, 
             'post_mime_type' => $wp_filetype['type'],
             'post_title' => 'child-' . $image_name,
             'post_content' => '',
             'post_status' => 'inherit'
        );

        $imagefile = $wp_upload_images . '/' . $image_base;
        $attach_id = wp_insert_attachment( $attachment, $imagefile, $post_id );
        $attach_data = wp_generate_attachment_metadata( $attach_id, $imagefile );

        wp_update_attachment_metadata( $attach_id, $attach_data );
    }   
}

W przypadku czegokolwiek przekraczającego kilka tysięcy obrazów prawdopodobnie łatwiej byłoby ci użyć:

Wyck
źródło
Nadal dodaje obrazy o zmienionym rozmiarze z powrotem do folderu upload / images, a także generuje nowy post. Proces stał się rekurencyjny, więc zanim usunąłem funkcję, utworzono prawie 800 postów. Nowe generowane rozmiary powinny być wykonywane w normalnej lokalizacji wp media.
Heena Shah,