Fizyczna organizacja biblioteki multimediów wordpress (wtyczka Real Media Library)

22

Struktura folderów Real Media Library

Wprowadzenie.

Na powyższym zrzucie ekranu widać strukturę folderów zbudowaną z wtyczki premium Real Media Library . Teraz chcę utworzyć wtyczkę rozszerzenia, która może uporządkować strukturę folderów w fizyczną strukturę folderów - RML jest tylko strukturą wizualną.

Aktualizacja nr 2 (27.01.2017): Sprawdź odpowiedź!

Zobacz fizyczną organizację biblioteki multimediów wordpress (wtyczka Real Media Library), w której stworzyłem darmową wtyczkę rozszerzenia.

Aktualizacja nr 1 (14.12.2016): Pierwszy sukces: niestandardowy folder przesyłania miniatur

Teraz stworzyłem kolejną wtyczkę Real Thumbnail Generator , która pozwala na utworzenie niestandardowego folderu przesyłania miniatur. Wystarczy spojrzeć na ten zrzut ekranu:

Folder przesyłania rzeczywistego generatora miniatur

Dlaczego niestandardowe foldery miniatur? Niestandardowe foldery miniatur są łatwiejsze w utrzymaniu, ponieważ tutaj nie musimy utrzymywać adresów URL aktualizacji bazy danych, ponieważ miniatury nadal znajdują się w tej samej lokalizacji (która nie jest zmieniana przez rozszerzenie RML).

Jeśli chcesz dowiedzieć się więcej o niestandardowym generatorze miniatur, zapoznaj się z tym wątkiem, w którym wyjaśniłem podejście techniczne. Każdy niestandardowy rozmiar obrazu w niestandardowym katalogu przesyłania? .

Proszę o kontynuowanie tego wątku, ponieważ na początku 2017 roku będę kontynuować rozwój rozszerzenia RML, który umożliwia synchronizację między RML a folderem przesyłania serwera. Rozszerzenie jest również kompatybilne z wtyczką Real Thumbnail Generator, dlatego należy zaktualizować bazę danych.

Oryginalny post

Mój cel rozszerzenia.

W tej chwili jestem w folderze „/ Unorganized”, co oznacza, że ​​jest to folder / wp-content / uploads /. Kiedy przenoszę plik (jak widać na zrzucie ekranu) do folderu PDFs / SubDir, plik znajduje się w folderze wizualnym. Teraz moje rozszerzenie wykrywa inny folder niż fizyczny i pokazuje mały „przycisk”, który pozwala również użytkownikowi przenieść go fizycznie:

Przycisk, aby go unieruchomić

Użytkownik klika teraz przycisk „Physix it!” i plik powinien zostać przeniesiony do /wp-content/uploads/pdfs/subdir/Another-Doc.pdf . Już utworzyłem proces przenoszenia: odczytałem wszystkie pliki multimedialne dla tego załącznika (w tym miniatury obrazów) i używam zmiany nazwy funkcji php ($ stary_plik, $ nowy_plik) wraz z funkcją WP wp_mkdir_p () . Identyfikator GUID w tabeli wp_posts i metadane w wp_postmeta również ulegają zmianie. Po przeniesieniu wszystkich plików wywołuję akcję:

<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>

$ meta to tablica:

wprowadź opis zdjęcia tutaj

Klucz „zmiana nazwy” zawiera wszystkie procesy zmiany nazwy (na przykład tutaj mogą być pliki miniaturek obrazów).

Problem: Gwarancja zgodności wtyczek.

Głównym problemem (jeśli jest) biblioteki multimediów WordPress jest to, że wiele wtyczek zapisuje odniesienia do obrazów z pełnymi adresami URL zamiast identyfikatora załącznika. Oznacza to, że istnieją tabele MySQL z kolumnami zawierającymi adres URL do podanego pliku. Jak mogę zagwarantować, że WSZYSTKIE referencje są aktualne w folderach fizycznych? Myślę, że to niemożliwe.

Jedno możliwe podejście.

Wchodzę w akcję i aktualizuję standardowe tabele, takie jak wp_post-> post_content , ... za pomocą rekurencyjnej instrukcji REPLACE w SQL.

<?php    
/**
 * When a attachment is moved.
 * 
 * @hooked RML/Physix/Moved
 */
function physix_moved($meta, $id) {
    $rename = $meta["rename"];

    // Prepare array for recursive REPLACE
    $arr = array();
    foreach ($rename as $value) {
        $arr[] = array($value["old_url"], $value["new_url"]);
    }
    $rec = $this->recReplace($arr, "post_content"); // function is already finished
}
?>

Zmienna $ rec jest teraz instrukcją REPLACE:

REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')

Nawiasem mówiąc: obraz (testimage.jpg) ze wszystkimi plikami miniatur może wyglądać następująco:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(post_content, 'https://example.io/wp-content/uploads/testimage-750x350.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-750x350.jpg'), 'https://example.io/wp-content/uploads/testimage-1170x855.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1170x855.jpg'), 'https://example.io/wp-content/uploads/testimage-256x187.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-256x187.jpg'), 'https://example.io/wp-content/uploads/testimage-1024x748.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1024x748.jpg'), 'https://example.io/wp-content/uploads/testimage-300x219.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-300x219.jpg'), 'https://example.io/wp-content/uploads/testimage-150x150.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-150x150.jpg'), 'https://example.io/wp-content/uploads/testimage.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage.jpg')

Ale co się stanie, jeśli jest to szeregowany ciąg (JSON) w tabeli bazy danych? Tak to wygląda { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }. Co muszę dodać do instrukcji REPLACE?

Z instrukcji REPLACE można teraz korzystać we wszystkich tabelach MySQL, które zawierają adresy URL obrazów. Myślałem o stworzeniu tablicy filtrów, w której wtyczki mogą dodawać swoje tabele, a moje rozszerzenie zajmie się resztą:

<?php
$tables = apply_filters("RML/Physix/Moved/Tables", array( // TODO: use $wpdb->prefix
    "wp_posts" => array("post_excerpt", "post_content"),
    "wp_postmeta" => array("meta_value")
    //...
));
?>

Dziennik „przenoszenia”

Chcę utworzyć „dziennik”, w którym użytkownicy mogą cofać ruchy. Jeśli użytkownik zobaczy, obraz jest uszkodzony (na przykład we wtyczce Slider Revolution), może cofnąć przeniesienie do oryginalnego folderu.

Co sądzisz o tym pomyśle? Czy jest lepsze rozwiązanie? Mam nadzieję, że wszystko wyjaśniłem w przyjemny sposób!

Matthias Günter
źródło
9
Nie powinieneś widzieć struktury folderów leżących u podstaw załączników, w wielu przypadkach ich nie ma (być może plików nie ma nawet na serwerze? S3 AWS CDN itp.), WordPress zajmuje się postami załączników, a nie plikami załączników i przenoszenie ich na serwerze przynosi efekt przeciwny do zamierzonego. Lepiej byłoby to zrobić za pomocą niestandardowej taksonomii i przepisać reguły, które powodują przekierowanie
Tom J Nowell
5
Chociaż jest to doskonałe pytanie pod względem przejrzystości / jakości (+1 za wysiłek), ostatecznie mamy tutaj do czynienia z wtyczką innej firmy, która jest uważana za nie na temat - nie sądzę, aby ktokolwiek był w stanie „szybko” pomaga ci bez poważnego inwestowania w RML.
TheDeadMedic
@TheDeadMedic Tak, to prawda. Ale zadałem pytanie w ten sposób, że wiesz, jak to działa z działaniami w RML. To pytanie nie jest specyficzne dla RML, jest bardziej specyficzne dla bazy danych - jak rozwiązać problem z zastąpieniem adresu URL.
Matthias Günter
2
I kolejne +1 za wysiłek - szkoda, że ​​nie będziemy mieć więcej takich pytań… tak jak na początku. W każdym razie główne problemy zostały przedstawione powyżej. Aby wyrazić swoją opinię: czy możesz złożyć edycję i wyjaśnić powód tego, czego próbujesz? Jak dotąd wykonywanie tych zadań systemu plików nie ma sensu.
kaiser
Jak poszedłeś z tym @ MatthiasGünter? Czy udało ci się znaleźć rozwiązanie?
Tim Malone

Odpowiedzi:

1

Bezpłatne rozszerzenie rozwiązania „Fizyczny niestandardowy folder przesyłania”

Dawno temu zacząłem otwierać ten wątek, a teraz jest użyteczna wtyczka rozszerzenia dla Real Media Library, która pozwala fizycznie zarządzać folderem przesyłania .

wprowadź opis zdjęcia tutaj

Sprawdź tę wtyczkę: https://wordpress.org/plugins/physical-custom-upload-folder/

Czy znasz folder wp-content / uploads? Tam pliki są przechowywane w folderach opartych na rok / miesiąc. Może to być bardzo skomplikowany i masowy proces, szczególnie gdy pracujesz z klientem FTP takim jak FileZilla.

Przenoszenie już przesłanych plików: Ta wtyczka nie pozwala na fizyczne przenoszenie plików podczas przenoszenia pliku w bibliotece Real Media Library, ponieważ WordPress używa adresów URL w różnych miejscach. Bardzo trudno jest utrzymać taki proces. Działa to tylko w przypadku nowych plików.

Matthias Günter
źródło