Фізична організація медіатеки wordpress (плагін Real Media Library)


22

Структура папок Real Media Library

Вступ

На наведеному вище скріншоті ви бачите структуру папок, побудовану з преміум-плагіном Real Media Library . Тепер я хочу створити розширення, який може організувати структуру папок у фізичну структуру папок - RML - це лише візуальна структура.

Оновлення №2 (2017-01-27): Перевірте відповідь!

Погляньте на Фізичну організацію медіатеки Wordpress (плагін Real Media Library), де я створив безкоштовний плагін розширення.

Оновлення №1 (2016-12-14): перший успіх: спеціальна папка для завантаження мініатюр

Тепер я створив ще один плагін Real Thumbnail Generator , який дозволяє створювати власну папку для завантаження мініатюр. Просто подивіться на цей знімок екрана:

Папка завантаження реального мініатюру

Чому спеціальні папки-мініатюри? Спеціальні папки-мініатюри легше обслуговувати, оскільки тут нам не потрібно підтримувати URL-адреси оновлення бази даних, оскільки ескізи все ще знаходяться в одному місці (яке досі не змінюється розширенням RML).

Якщо ви хочете дізнатися більше про користувальницький генератор мініатюр, ви можете ознайомитись з цією темою, де я пояснив технічний підхід Кожен спеціальний розмір зображення у спеціальному каталозі завантаження? .

Будь ласка, продовжуйте цю тему, тому що на початку 2017 року я продовжуватиму розробку розширення RML, що дозволяє синхронізувати RML з папкою завантаження сервера. Розширення також сумісне з плагіном Real Thumbnail Generator, тому повинно бути оновлення бази даних.

Оригінальна публікація

Моя мета розширення.

На даний момент я перебуваю в папці "/ Unorganized", це означає, що це папка / wp-content / uploads /. Коли я переміщу файл (як ви бачите на скріншоті), в папку PDF / SubDir файл знаходиться у візуальній папці. Тепер моє розширення визначає іншу папку до фізичної та показує невелику "кнопку", яка дозволяє користувачеві пересувати її і фізично:

Кнопка для фіксації

Користувач тепер натискає кнопку "Physix it!" і файл слід перемістити в /wp-content/uploads/pdfs/subdir/Abody-Doc.pdf . Я вже створив процес переміщення: я читаю всі мультимедійні файли для цього вкладеного файлу (включаючи мініатюри для зображень) і використовую перейменування функції php ($ old_file, $ new_file) разом з функцією WP wp_mkdir_p () . GUID у таблиці wp_posts та метадані в wp_postmeta також змінені. Коли всі файли переміщені, я викликаю дію:

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

$ meta - масив:

введіть тут опис зображення

Ключ "перейменувати" містить усі процеси перейменування (наприклад, тут можуть бути мініатюрні файли для зображень).

Проблема: Гарантія сумісності плагінів.

Основна проблема (якщо вона є) медіатеки WordPress полягає в тому, що багато плагінів зберігають посилання на зображення із повними URL-адресами замість ідентифікатора вкладеного файлу. Це означає, що існують таблиці MySQL зі стовпцями, що містять URL-адресу даного файлу. Як я можу гарантувати, що ВСІ посилання актуальні для фізичних папок? Я думаю, що це неможливо.

Один з можливих підходів.

Я підключаюсь до дії та оновлюю стандартні таблиці на зразок wp_post-> post_content , ... з рекурсивним REPLACE-оператором у 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
}
?>

Змінна $ rec тепер є ЗАМОВЛЕННЯМ:

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

До речі: Для зображення (testimage.jpg) з усіма мініатюрними файлами воно може виглядати так:

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

Але що станеться, якщо це серіалізована рядок (JSON) у таблиці бази даних? Так виглядає { "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }. Що я повинен додати до ЗАВДАННЯ ЗАМІНИ?

Заява REPLACE тепер може використовуватися через усі таблиці MySQL, що містять URL-адреси зображень. Я думав про створення масиву фільтрів, де плагіни можуть додавати свої таблиці, а моє розширення робити все інше:

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

Журнал "переміщення"

Я хочу створити "журнал", де користувачі можуть скасовувати переміщення. Якщо користувач бачить, що зображення порушено (наприклад, у плагіні Slider Revolution), він може скасувати переміщення до вихідної папки.

Що ви думаєте про цю ідею? Чи є краще рішення? Я сподіваюся, що я все добре пояснив!


9
Ви не призначені для того, щоб бачити структуру папок, що лежать в основі вкладених файлів, у багатьох випадках їх немає (можливо, файлів немає навіть на сервері? S3 AWS CDN тощо), WordPress займається публікаціями вкладень, а не файлами вкладень та переміщення їх по серверу є контрпродуктивним. Вам краще зробити це за допомогою власної систематики та переписати правила, які викликають переадресацію
Том Дж. Ноуелл

5
Хоча це відмінне запитання щодо чіткості / якості (+1 для зусиль), в кінцевому рахунку ми маємо справу з стороннім плагіном, який вважається поза темою - я не думаю, що хтось не зможе "швидко" допоможе вам, не отримуючи серйозних вкладень у RML.
TheDeadMedic

@TheDeadMedic Так, це правда. Але я задав питання так, щоб ви знали, як це працює з діями в RML. Це питання не є специфічним для RML, а більш специфічним для Бази даних - як вирішити проблему із заміною URL-адреси.
Маттіас Гюнтер

2
І ще +1 для зусиль - бажайте, щоб у нас було більше таких питань ..., як у нас в перші дні. У будь-якому випадку основні проблеми окреслені вище. Щоб зробити свою думку: Чи можете ви, будь ласка, подати правки та пояснити міркування того, що ви намагаєтесь? Поки виконувати ці завдання файлової системи не має сенсу.
кайзер

Як ти пішов з цим @ MatthiasGünter? Вам вдалося знайти рішення?
Тім Малоун

Відповіді:


1

Безкоштовне розширення рішення "Фізична спеціальна папка для завантаження"

Давно я почав відкривати цю тему, і тепер є корисний плагін розширення для Real Media Library, який дозволяє фізично керувати папкою завантажень .

введіть тут опис зображення

Перевірте цей плагін: https://wordpress.org/plugins/physical-custom-upload-folder/

Чи знаєте ви папку wp-content / uploads? Там файли зберігаються в папках на основі року / місяця. Це може бути дуже складним і масовим процесом, особливо коли ви працюєте з FTP-клієнтом, як FileZilla.

Переміщення вже завантажених файлів: Цей плагін не дозволяє фізично переміщувати файли під час переміщення файлу в бібліотеці Real Media, оскільки WordPress використовує URL-адреси в різних місцях. Підтримувати такий процес дуже важко. Отже, це працює лише для нових завантажень.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.