Organisasi fisik perpustakaan media wordpress (plugin Real Media Library)

22

Struktur folder Perpustakaan Media Nyata

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:

Folder Upload Pembuat Thumbnail Nyata

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:

Tombol untuk fisix itu

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:

masukkan deskripsi gambar di sini

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!

Matthias Günter
sumber
9
Anda tidak dimaksudkan untuk melihat struktur folder yang mendasari lampiran, dalam banyak kasus tidak ada (mungkin file bahkan tidak ada di server? S3 AWS CDN dll), penawaran WordPress dalam posting lampiran, bukan file lampiran, dan memindahkannya di server tidak produktif Anda akan lebih baik melakukan ini dengan taksonomi khusus dan menulis ulang aturan yang memicu pengalihan
Tom J Nowell
5
Sementara ini adalah pertanyaan yang sangat bagus dalam hal kejelasan / kualitas (+1 untuk usaha), pada akhirnya kita berurusan dengan plugin pihak ke-3 di sini, yang dianggap di luar topik - Saya tidak berpikir ada orang yang bisa dapat "cepat" membantu Anda tanpa berinvestasi serius dalam RML.
TheDeadMedic
@TheDeadMedic Ya itu benar. Tetapi saya mengajukan pertanyaan dengan cara, bahwa Anda tahu cara kerjanya dengan tindakan di RML. Pertanyaan ini tidak spesifik RML, ini lebih spesifik untuk Database - bagaimana mengatasi masalah dengan penggantian url.
Matthias Günter
2
Dan +1 lainnya untuk upaya - berharap kami akan memiliki lebih banyak pertanyaan seperti itu ... seperti yang kami miliki di masa-masa awal. Lagi pula, masalah utama diuraikan di atas. Untuk menyampaikan maksud Anda: Bisakah Anda mengajukan suntingan dan menjelaskan alasan atas apa yang Anda coba? Sejauh ini tidak masuk akal untuk melakukan tugas-tugas sistem file tersebut.
kaiser
Bagaimana Anda menggunakan @ MatthiasGünter ini? Sudahkah Anda menemukan solusi?
Tim Malone

Jawaban:

1

Ekstensi solusi gratis "Folder Unggahan Kustom Fisik"

Dulu saya mulai membuka utas ini dan sekarang ada plugin ekstensi yang dapat digunakan untuk Real Media Library yang memungkinkan Anda mengelola folder unggahan Anda secara fisik .

masukkan deskripsi gambar di sini

Lihatlah plugin ini: https://wordpress.org/plugins/physical-custom-upload-folder/

Apakah Anda tahu folder wp-content / uploads? Di sana, file disimpan dalam folder berbasis tahun / bulan. Ini bisa menjadi proses yang sangat rumit dan massal, terutama ketika Anda bekerja dengan klien FTP seperti FileZilla.

Memindahkan file yang sudah diunggah: Plugin ini tidak memungkinkan untuk memindahkan file secara fisik ketika Anda memindahkan file di Perpustakaan Media Real karena WordPress menggunakan URL di tempat yang berbeda. Sangat sulit untuk mempertahankan proses seperti itu. Jadi ini hanya berfungsi untuk unggahan baru.

Matthias Günter
sumber