Способ изменить URL-адреса изображений в публикации на URL-адрес изображения cdn?
По какой-то причине моя хостинговая компания не может исправить, использую ли я общий кэш w3 или супер кэш w3 для кэширования, использование sql моего сайта продолжает расти.... и на высоких скачках серверы иногда отстают и падают.
Для этого я должен использовать плагин hyper cache для кэша, так как он отлично работает, но этот плагин не поддерживает cdn.. я купил услугу cdn у maxcdn, но для этого мне придется использовать общий кэш w3 или супер кэш...
Поэтому я ищу способ автоматического изменения URL-адреса изображений для публикации, например: http://www.sitename.com/wp-content/uploads..... к http://cdn.sitename.com/wp-content/uploads ...
Возможно ли это? если да, пожалуйста, помогите. Заранее благодарю
5 answers
Вы можете анализировать изображения с помощью регулярного выражения в the_content
; но всегда загружается и медленно.
Возможно, вы измените URL-адрес изображений после post_save
в базе данных или измените текущие записи внутри базы данных и создайте собственный CDN. Это быстрый способ, и у всех плагинов кэширования есть перерыв, что она должна анализировать контент.
Для получения справочной информации о пользовательском CDN в WP см. этот ответ.
Вы смотрели на этот плагин? http://wordpress.org/extend/plugins/cdn-rewrites/
Из описания плагина:
В принципе, этот плагин позволяет пользователю WordPress указывать две важные переменные: исходный хост (ваш сайт) и "конечный хост" (хост cdn). Затем он найдет все статическое содержимое с этого исходного хоста и перепишет их в пункт назначения, чтобы они были доставлены оттуда.
Похоже, это то, что вы нужно?
------------------------------ РЕДАКТИРОВАТЬ
Если вы пытаетесь избежать использования плагинов, вот отличная статья об этом: http://www.cyberciti.biz/tips/wordpress-cdn-content-delivery-network-configuration.html
Однако я никогда не пробовал этот метод. Но это выглядит как чистое решение.
Если изображения остаются в том же месте, и вы хотите изменить только поддомен, .htaccess перезаписать будет проще всего:
Если правило применимо только к изображениям, то:
RewriteCond %{HTTP_HOST} =www.sitename.com
RewriteRule ^.+\.(jpe?g|png|other|img|ext)$ http://cdn.sitename.com/$0 [nocase,redirect=temp,last]
Вы можете добавить тест перезаписи для изображений, но тест, выполняемый в RewriteCond, использует те же ресурсы, что и один раз в RewriteRule.
Вы также можете перенаправить все, что находится в каталоге загрузок. если cdn.sitename.com проходит через то же самое правило.htaccess установите, я бы включил второе утверждение перезаписи:
RewriteCond %{HTTP_HOST} =www.sitename.com
RewriteRule ^wp-content/uploads/.+$ http://cdn.sitename.com/$0 [nocase,redirect=temp,last]
[перенаправление=временное] или [перенаправление=постоянное]; часто пишется как [R=302] и [R=301].
Документация по Apache mod_rewrite
(автоматическое изменение/форматирование синтаксиса не было разработано с учетом.htaccess:-)
Приветствия,
Грегори
Если вы хотите жестко закодировать изменения src img, эта функция будет для вас; wp_update_post($post); в сочетании с циклом, который проходит через каждый пост и тип post_type, на который вы хотите повлиять, и с помощью preg_replace для замены URL src.
Назначьте шаблон странице, загружайте страницу всякий раз, когда вы хотите обновить URL-адрес src, удаляйте страницу всякий раз, когда вы не хотите разрешать другим запускать код.
Функция grep_replace() выполняет поиск/замену шаблоны будут выглядеть примерно так:
Поиск: (<img [^>]*?src=['"]https?://)www\.sitename\.com
заменить: $1cdn.sitename.com
Или более конкретно:
Поиск: (<img [^>]*?src=['"]https?://)www(\.sitename\.com/wp-content/uploads/)
заменить: $1cdn$2
Несмотря на то, что wp_update_post() автоматически создает ревизию, если вам нужно отменить изменение, создайте резервную копию базы данных перед загрузкой страницы.
Я бы сначала протестировал комбинацию loop, wp_update_post() и preg_replace() на ограниченном найденном наборе сообщений, возможно, указав идентификаторы тематических сообщений в массив и прохождение через этот массив.
Дополнительным вариантом может быть создание новой временной категории "Обновлено CDN" и присвоение новой категории каждой публикации по мере ее обновления. затем вы можете исключить любые сообщения с этим термином категории из будущих запросов на обновление. единственным небольшим недостатком этого является то, что даже если вы позже удалите категорию, значения все равно будут сохранены для каждой записи в бд (поправьте меня, если я ошибаюсь).
Приветствия,
Грегори
Вы также можете подключиться к действию pre_post_update.
Преимущество этого в том, что вашему серверу просто нужно один раз обменять URL-адреса, поэтому вы не всегда используете сценарий str_replace, который вы написали при доставке, но при сохранении.
Поскольку я предполагаю, что вы знакомы с самой заменой, просто поместите свою функцию в эту функцию, и все!
add_action('pre_post_update', 'change_image_urls', 10 );
function change_image_urls( $post_id ) {
// your function here...
// $post = get_post( $post_id );
}