Wordpress medya kütüphanesinin fiziksel organizasyonu (Gerçek Medya Kütüphanesi eklentisi)


22

Real Media Library klasör yapısı

Giriş.

Yukarıdaki ekran görüntüsünde, premium eklenti Real Media Library ile oluşturulmuş bir klasör yapısını görebilirsiniz . Şimdi, klasör yapısını fiziksel klasör yapısında düzenleyebilecek bir eklenti eklentisi oluşturmak istiyorum - RML sadece görsel yapıdır.

Güncelleme # 2 (2017-01-27): Cevabı kontrol et!

Göz at wordpress medya kütüphanesi fiziksel organizasyon (Real Media Library eklentisi) Ben özgür bir uzatma eklentisi oluşturduk.

Güncelleme # 1 (2016-12-14): İlk başarı: Özel küçük resim yükleme klasörü

Şimdi, özel küçük resim yükleme klasörü oluşturmanıza izin veren başka bir eklenti Gerçek Küçük Resim Oluşturucusu oluşturdum. Sadece bu ekran görüntüsüne bir göz atın:

Gerçek Küçük Resim Oluşturucusu

Neden özel küçük resim klasörleri? Özel minik resim klasörlerinin bakımı daha kolaydır, çünkü burada, minik resimler hala aynı konumda olduğundan (hala RML uzantısı tarafından değiştirilmemiştir) veritabanı güncelleme URL'lerini korumamız gerekmez.

Özel küçük resim oluşturucu hakkında daha fazla bilgi edinmek istiyorsanız, teknik bir yaklaşım açıkladığım bu konuya bir göz atabilirsiniz . Özel yükleme dizinindeki her özel resim boyutu? .

Lütfen bu konuya devam edin, çünkü 2017'nin başında, RML ile sunucu yüklenenler klasörü arasında senkronizasyon sağlayan RML uzantısının geliştirilmesine devam edeceğim. Uzantı ayrıca Real Thumbnail Generator eklentisiyle de uyumludur, bu nedenle veritabanı güncellemesi yapılmalıdır.

Orijinal yayın

Uzatma hedefim.

Şu anda "/ Unorganized" klasöründeyim, bunun anlamı / wp-content / uploads / klasörüdür. Dosyayı (ekran görüntüsünde görebileceğiniz gibi) PDF / SubDir klasörüne taşıdığımda, dosya görsel klasördedir. Şimdi benim uzantım fiziksel klasörü olan farklı klasörü tespit ediyor ve kullanıcının fiziksel olarak hareket etmesine izin veren küçük bir "düğme" gösteriyor:

Onu karıştırmak için kullanılan düğme

Kullanıcı şimdi "Physix it!" Butonuna tıklıyor. ve dosya /wp-content/uploads/pdfs/subdir/Another-Doc.pdf adresine taşınmalıdır . Taşıma işlemini zaten yarattım: Bu ekin tüm medya dosyalarını okudum (resimler için küçük resimler dahil) ve php işlevinin adını ($ old_file, $ new_file) WP işlevi wp_mkdir_p () ile birlikte kullanıyorum . GUID Wp_posts masa ve meta veri wp_postmeta da değiştirilir. Tüm dosyalar taşındığında eylemi çağırırım:

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

$ meta bir dizidir:

görüntü tanımını buraya girin

"Rename" anahtarı, tüm yeniden adlandırma işlemlerini içerir (örneğin, görüntüler için küçük resimler olabilir).

Sorun: Garanti eklentisi uyumluluğu.

WordPress medya kütüphanesinin asıl sorunu (eğer öyleyse), birçok eklentinin ekleri ID yerine URL'leri tam olan resimlere referans olarak kaydetmesidir. Bu, verilen dosyanın URL'sini içeren sütunlara sahip MySQL tabloları olduğu anlamına gelir. ALL referanslarının fiziksel klasörler ile güncel olduğunu nasıl garanti edebilirim ? Bunun imkansız olduğunu düşünüyorum.

Bir olası yaklaşım.

Aksiyona bağlanıyorum ve wp_post-> post_content , ... gibi standart tabloları SQL'deki özyinelemeli bir REPLACE ifadesiyle güncelliyorum .

<?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
}
?>

$ Rec değişkeni artık bir REPLACE ifadesidir:

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

Bu arada: Tüm küçük resimler içeren bir resim için (testimage.jpg) şöyle görünebilir:

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')

Ancak, veritabanı tablosundaki serileştirilmiş bir dize (JSON) ise ne olur? Öyle görünüyor { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }. REPLACE ifadesine ne eklemeliyim?

REPLACE Beyanı şimdi resim URL'leri içeren tüm MySQL tabloları aracılığıyla kullanılabilir. Eklentilerin tablolarını ekleyebileceği bir filtre dizisi oluşturmayı düşündüm ve uzantım gerisini halletti:

<?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")
    //...
));
?>

"Taşı" günlüğü

Kullanıcıların hamleleri geri alabileceği bir "günlük" oluşturmak istiyorum. Bir kullanıcı görürse, bir görüntü bozulur (örneğin Slider Revolution eklentisinde), orijinal klasöre taşınmasını geri alabilir.

Bu fikir hakkında ne düşünüyorsun? Daha iyi bir çözüm var mı? Umarım hepsini güzel bir şekilde anlatmışımdır!


9
Eklerin altındaki klasör yapısını görmek istemezsiniz, çoğu durumda hiçbiri yoktur (belki de dosyalar sunucuda bile değil mi? S3 AWS CDN vb.), WordPress ek dosyalarla ilgilenir, ek dosyalarla uğraşmaz ve bir sunucu üzerinde onları hareket ettirmek verimsizdir. Özel bir taksonomi ile bunu yapmak daha iyi olurdu ve yönlendirme tetikleyen kuralları yeniden yazın
Tom J Nowell

5
Bu açıklık / kalite açısından mükemmel bir soru olmasına rağmen (çaba için +1), sonuçta burada üçüncü şahıslara ait bir eklenti ile uğraşıyoruz, konu dışı kabul ediliyor - kimsenin yapabileceğini sanmıyorum. "hızla", RML'ye ciddi bir şekilde yatırım yapmadan size yardımcı olur.
TheDeadMedic

@TheDeadMedic Evet bu doğru. Fakat ben soruyu şöyle sordum, RML'deki eylemlerle nasıl çalıştığını bildiğinizi. Bu soru RML'ye özgü değildir, daha çok Veritabanına özgüdür - url değişikliği ile ilgili sorunu nasıl çözersiniz.
Matthias Günter

2
Ve çaba için başka bir + 1 - keşke bu tür sorular daha fazla olsaydı… ilk günlerde olduğu gibi. Neyse, ana problemler yukarıda açıklanmıştır. Amacınızı belirtmek için: Lütfen bir düzenleme yapıp , denediğiniz şeyin nedenini açıklayabilir misiniz? Şimdiye kadar bu dosya sistemi görevlerini yerine getirmenin bir anlamı yoktur.
kaiser

MatthiasGünter ile nasıl başardınız? Bir çözüm bulmayı başardınız mı?
Tim Malone

Yanıtlar:


1

Ücretsiz çözüm uzantısı "Physical Custom Upload Folder"

Uzun zaman önce bu konuyu açmaya başladım ve şimdi Real Media Library için yüklenenler klasörünüzü fiziksel olarak yönetmenizi sağlayan kullanışlı bir eklenti eklentisi var .

görüntü tanımını buraya girin

Bu eklentiye göz atın: https://wordpress.org/plugins/physical-custom-upload-folder/

Wp-content / uploads klasörünü biliyor musunuz? Burada, dosyalar yıl / ay bazlı klasörlerde saklanır. Bu, özellikle FileZilla gibi bir FTP istemcisiyle çalışırken çok karmaşık ve toplu bir işlem olabilir.

Zaten yüklenen dosyaların taşınması: Bu eklenti, dosyaları Real Media Library'deki bir dosyayı taşıdığınızda fiziksel olarak taşımanıza izin vermez, çünkü WordPress URL'leri farklı yerlerde kullanır. Böyle bir süreci sürdürmek çok zor. Yani bu sadece yeni yüklemelerde işe yarar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.