Обновление URL медиафайлов в медиатеке WordPress
В настоящее время мои видео размещены в установке WordPress. Я хочу переместить все видео на мой новый сервер.
Сейчас URL-адреса моих медиафайлов выглядят так: http://mysite.com/wp-content/uploads/video01.mp4
Я перемещаю все видео на мой центральный медиасервер, который будет иметь следующий новый URL: http://media.mysite.com/videos/video01.mp4
Мой сайт продолжит работать там, где он находится сейчас. Я перемещу только медиафайлы.
Я надеялся, что плагин Velvet Blues Update URLs справится с задачей, но он не находит URL-адреса для обновления на моем сайте.
Вероятно, это происходит потому, что я использую JW player на своем сайте, и JW player добавляет видео, используя только шорткод и ID в области записи.
[jwplayer mediaid="13441"]
В записи нет URL. Возможно, именно поэтому Velvet Blue не обнаруживает URL-адреса для обновления.
Учитывая это, есть ли способ обновить все URL-адреса медиафайлов в установке WordPress из медиатеки, как если бы они были добавлены как внешние URL?
Какие записи в базе данных содержат URL медиафайлов? Полагаю, моим последним средством будет выполнение поиска и замены в базе данных.
Буду признателен за любые предложения.
Спасибо

есть ли способ обновить все URL медиафайлов в WordPress
У меня была похожая проблема с медиафайлами, у которых после обновления WordPress (почему-то все ссылки на медиа изменились на совершенно неверный путь) оказались неправильные пути к файлам. Я нашел плагин Upload URL and Path Enabler, который смог переписать все URL медиафайлов на другой путь, где на самом деле хранились все мои медиафайлы.
Надеюсь, это поможет и другим!

Я думаю, вы можете создать пользовательскую функцию для замены старого wp_attachment_url.
Предположим, у вас одинаковые имена файлов в новом URL медиафайлов, тогда вы можете добавить фильтр только для плагина JW Player, примерно так:
if ( has_shortcode( get_the_content(), 'jw_player' ) ) {
function mynewmediaurl($wp_get_attachment_url){
$newmediadir = 'http://yourdomain/video/';
$filename = basename($wp_get_attachment_url );
$newurl = $newmediadir.$filename;
return $newurl;
}
add_filter('wp_get_attachment_url', 'mynewmediaurl');
}
Этот код можно добавить в ваш functions.php
Ссылки для справки:
https://codex.wordpress.org/Function_Reference/has_shortcode
https://developer.wordpress.org/reference/functions/wp_get_attachment_url/
https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_get_attachment_url
https://developer.wordpress.org/reference/functions/get_attached_file/

Используйте команду WP-CLI search-replace
для поиска записей в базе данных со старым URL и их замены на новый. Также можно выполнить --dry-run
, чтобы увидеть, сколько записей будет затронуто.
$ wp search-replace 'http://example.com/wp-content/uploads/' 'http://media.example.com/videos/' --dry-run

Предположим, что на вашем сайте ограниченное количество видео. Вы можете заменить URL, выполнив следующие действия:
Экспортируйте базу данных вашего сайта, замените URL и снова импортируйте. Это безопасный способ замены URL. Вы также можете сделать то же самое с помощью SQL-запроса, но иногда это может вызвать проблемы.

К сожалению, у меня около 1000 видео. Ручное редактирование — не то, что я рассматриваю на данном этапе, если только нет возможности сделать это с помощью какого-нибудь метода поиска и замены.

С моей точки зрения и учитывая специфику моего сайта, я могу смириться с тем, что изображения не отображаются, чем с тем, что видео не воспроизводятся. Пока видео загружаются нормально, я могу вручную исправлять другие URL, например, для изображений, постепенно со временем. Спасибо.

С помощью некоторых трюков в командной строке вы можете сгенерировать список всех mp4-файлов в папке wp-content/uploads, отфильтровать пути к папкам в текстовом редакторе с помощью поиска и замены, а затем передать результаты построчно в команду search replace WP CLI. Вам не нужно делать это вручную для каждого файла по отдельности.
