Вступ
На наведеному вище скріншоті ви бачите структуру папок, побудовану з преміум-плагіном 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), він може скасувати переміщення до вихідної папки.
Що ви думаєте про цю ідею? Чи є краще рішення? Я сподіваюся, що я все добре пояснив!