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:
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:
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:
"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!