Pengantar.
Pada tangkapan layar di atas Anda dapat melihat struktur folder yang dibangun dengan plugin premium Real Media Library . Sekarang saya ingin membuat plugin ekstensi yang dapat mengatur struktur folder menjadi struktur folder fisik - RML hanya struktur visual.
Pembaruan # 2 (2017-01-27): Lihat jawabannya!
Lihatlah organisasi Fisik perpustakaan media wordpress (plugin Real Media Library) di mana saya telah membuat plugin ekstensi gratis.
Pembaruan # 1 (2016-12-14): Keberhasilan pertama: Folder unggahan thumbnail khusus
Sekarang, saya telah membuat plugin lain Real Thumbnail Generator , yang memungkinkan Anda untuk membuat folder unggah thumbnail khusus. Lihat saja screenshot ini:
Mengapa folder thumbnail khusus? Folder thumbnail khusus lebih mudah dirawat, karena di sini, kami tidak perlu memelihara URL pembaruan basis data karena thumbnail masih di lokasi yang sama (yang masih belum diubah oleh ekstensi RML).
Jika Anda ingin mempelajari lebih lanjut tentang generator thumbnail khusus, Anda dapat melihat utas ini, di mana saya telah menjelaskan pendekatan teknis Setiap ukuran gambar khusus dalam direktori upload kustom? .
Tetap di utas ini, karena awal 2017 saya akan melanjutkan pengembangan ekstensi RML yang memungkinkan sinkronisasi antara RML dan folder unggahan server. Ekstensi ini juga kompatibel dengan plugin Real Thumbnail Generator, sehingga harus ada pembaruan basis data.
Pos asli
Tujuan ekstensi saya.
Saat ini saya berada di folder "/ Tidak Terorganisir", itu artinya folder / wp-content / uploads /. Ketika saya memindahkan file (seperti yang Anda lihat di screenshot) ke folder PDF / SubDir file tersebut ada di folder visual. Sekarang ekstensi saya mendeteksi folder berbeda dengan folder fisik dan memperlihatkan sedikit "tombol" yang memungkinkan pengguna untuk memindahkannya secara fisik juga:
Pengguna sekarang mengklik tombol "Physix it!" dan file tersebut harus dipindahkan ke /wp-content/uploads/pdfs/subdir/Another-Doc.pdf . Saya telah membuat proses pemindahan: Saya membaca semua file media untuk lampiran ini (termasuk thumbnail untuk gambar) dan menggunakan fungsi rename php ($ old_file, $ new_file) bersama-sama dengan fungsi WP wp_mkdir_p () . GUID di tabel wp_posts dan meta data di wp_postmeta juga diubah. Ketika semua file dipindahkan, saya sebut tindakan:
<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>
$ meta adalah sebuah array:
Kunci "ganti nama" berisi semua proses penggantian nama (misalnya di sini dapat berupa file thumbnail untuk gambar).
Masalahnya: Jaminan kompatibilitas plugin.
Masalah utama (jika ada) dari pustaka media WordPress adalah, bahwa banyak plugin menyimpan referensi ke gambar dengan URL lengkap alih-alih ID lampiran. Itu artinya, ada tabel MySQL dengan kolom yang berisi URL ke file yang diberikan. Bagaimana saya bisa menjamin bahwa SEMUA referensi terkini dengan folder fisik? Saya pikir itu tidak mungkin.
Satu pendekatan yang mungkin.
Saya menghubungkan ke tindakan dan memperbarui tabel standar seperti wp_post-> post_content , ... dengan pernyataan REPLACE rekursif dalam 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
}
?>
Variabel $ rec sekarang menjadi REPLACE-Statement:
REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')
Ngomong-ngomong: Untuk gambar (testimage.jpg) dengan semua file thumbnail dapat terlihat seperti ini:
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')
Tetapi apa yang terjadi, jika itu adalah string berseri (JSON) dalam tabel database? Jadi sepertinya { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }
. Apa yang harus saya tambahkan ke Pernyataan-REPLACE?
Pernyataan REPLACE sekarang dapat digunakan melalui semua tabel MySQL yang berisi URL gambar. Saya berpikir untuk membuat array filter tempat plugin dapat menambahkan tabel mereka dan ekstensi saya melakukan sisanya:
<?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")
//...
));
?>
Log "pindah"
Saya ingin membuat "log" di mana pengguna dapat membatalkan pemindahan. Jika pengguna melihat, gambar rusak (misalnya di plugin Slider Revolution), ia dapat membatalkan pemindahan ke folder asli.
Apa pendapat Anda tentang gagasan itu? Apakah ada solusi yang lebih baik? Saya harap saya telah menjelaskan semuanya dengan baik!