Вопрос или проблема
Чтобы избежать проблем с кэшированием изображений, я хотел бы, чтобы WordPress ссылался на мои jpeg изображения с помощью URL параметра. Я знаю, что в javascript я могу сделать это:
<img id="idSigma" src="#" class="classSigma">
<script>
$(document).ready(function() {
var d = new Date();
$("#idSigma").attr("src", "images/Sigma.jpeg?t=" + d.getTime());
});
</script>
Есть ли способ заставить WordPress делать это для всех внутренних ссылок? Например, если я щелкну правой кнопкой мыши на изображении в записи блога и выберу открыть изображение, оно уже будет указывать на ссылку с URL параметром. Это обеспечит, что все изображения будут свежими, так как я планирую обновлять их ежедневно. Моей первой мыслью было поискать этот код в media.php, но, возможно, есть более лучший способ, чем модификация исходного кода.
Правка, вот что у меня есть на данный момент, это работает в моем php эмуляторе, когда я устанавливаю переменную $content, но ничего не делает в WordPress:
function add_jpeg_params($content){
preg_match_all("/https?:\/\/[^\/\s]+\/\S+\.(jpg|jpeg)/", $content, $output_array);
$items_to_replace = array_unique($output_array[0]);
$items_to_replace = array_values($items_to_replace);
for ($j = 0; $j < sizeof($items_to_replace); $j++) {
$content = preg_replace('~' . $items_to_replace[$j] . '~', $items_to_replace[$j] . '?t=" . time(), $content);
}
return $content;
}
add_filter("the_content','add_jpeg_params');
Я добавил это в functions.php в своей теме WordPress.
Правка 2: Решение опубликовано ниже. Хук, который мне был нужен, это ‘post_thumbnail_html’.
function add_jpeg_params($content){
preg_match_all("/https?:\/\/[^\/\s]+\/\S+\.(jpg|jpeg)/", $content, $output_array);
$items_to_replace = array_unique($output_array[0]);
$items_to_replace = array_values($items_to_replace);
for ($j = 0; $j < sizeof($items_to_replace); $j++) {
$content = str_replace($items_to_replace[$j], $items_to_replace[$j] . '?t=" . time(), $content);
}
return $content;
}
add_filter("the_content','add_jpeg_params',10);
add_filter('post_thumbnail_html', 'add_jpeg_params' );
@kingsgambit
Я хочу передать следующие параметры URL в конце каждого изображения на сайте WordPress: ?f=auto
Я использую WooCommerce и хотел бы добавить следующие параметры URL в конце каждого изображения на своем сайте WordPress.
Не могли бы вы помочь мне с этим?
С уважением!!
Ответ или решение
Чтобы избежать проблем с кэшированием изображений в WordPress, вы можете использовать URL-параметры для JPEG-изображений в своих постах. Данный подход обеспечит обновление изображений без необходимости очищать кэш. В этом ответе мы рассмотрим, как добавить параметры к URL изображений через функции WordPress.
1. Зачем использовать URL-параметры для изображений?
При изменении или обновлении изображений, веб-браузеры или прокси-серверы могут кэшировать старые версии изображений. Это может привести к тому, что пользователи не увидят последних обновлений. Использование URL-параметров (например, ?t={timestamp}
или ?f=auto
) позволяет браузерам воспринимать каждую изменённую ссылку как уникальную, что предотвращает использование кэша.
2. Как реализовать добавление параметров с помощью PHP в WordPress?
Для добавления параметров к изображениям в постах WordPress, вы можете использовать хук the_content
. Это позволяет изменять HTML-код контента перед его отображением. Вот пример кода, который вы можете разместить в файле functions.php
вашей темы WordPress:
function add_jpeg_params($content) {
// Находим все JPEG-ссылки в контенте
preg_match_all("/https?:\/\/[^\/\s]+\/\S+\.(jpg|jpeg)/", $content, $output_array);
// Убираем дубликаты
$items_to_replace = array_unique($output_array[0]);
foreach ($items_to_replace as $item) {
// Заменяем старую ссылку на новую с параметрами
$content = str_replace($item, $item . '?t=' . time(), $content);
}
return $content;
}
// Добавляем фильтры для контента и изображений постов
add_filter('the_content', 'add_jpeg_params', 10);
add_filter('post_thumbnail_html', 'add_jpeg_params');
3. Как это работает?
- Функция
add_jpeg_params
: Эта функция сначала использует регулярное выражение для поиска всех JPEG-ссылок в содержимом поста. - Удаление дубликатов: Мы используем
array_unique
, чтобы гарантировать, что каждая ссылка будет обработана только один раз. - Замена ссылок: Затем каждая ссылка заменяется на новую версию с добавленным параметром времени, что гарантирует, что браузеры загружают актуальную версию изображения.
- Фильтры: Добавление фильтров
the_content
иpost_thumbnail_html
позволяет применить изменения как к содержимому поста, так и к изображениям, установленным в качестве миниатюр.
4. Добавление параметров для WooCommerce
Если вашему интернет-магазину на WooCommerce также необходимо добавлять параметры к изображениям, этот код всё также будет работать для товаров. Объект $content
включает изображения, используемые в описаниях товаров, так что не требуется дополнительных модификаций.
5. Заключение
Применение параметров к URL изображений обеспечивает актуальность вашего контента на сайте, снижая риск кэширования старых версий изображений. Предложенный код — это простой и эффективный способ решения этой проблемы в WordPress. Убедитесь, что вы тщательно протестировали изменения на своем сайте, чтобы убедиться в корректной работе и отсутствии негативных последствий на производительность сайта.