Изменение user-agent WordPress
Сразу предупрежу, что рассматривается очень индивидуальный случай. Не думаю, что многим понадобится, скорее для себя, что бы не забыть, и в случае чего подсмотреть.
В статье описывается, как заменить user-agent по-умолчанию, при использовании api wordpress.
Зачем менять user-agent WordPress?
В моем случае ситуация такая: есть интернет-магазин на WordPress (Woocommerce), который загружает товары из xml файла другого магазина (абсолютно легально, так уж устроена сфера). Делается это скриптом, через wordpress api. Но тут по какой-то причине, возможно, по недоговоренности владельцев подразделений бизнеса сайта-донора, возможно просто по раздолбайству, у сайта-донора блокируется скачивание всех изображений. Как выяснилось, заблокировано по user-agent (довольно распространенный случай). Таким образом, ломается работа скрипта загрузки и прекращается добавление новых товаров (при их появлении), т.к. нет возможности загрузить картинки.
Думаю в целом, такие случае не единичны, но именно с WordPress, не так часты.
Например, если вы загружаете картинки на сервер linux утилитой wget, вы можете прописать user-agent в параметрах, например:
1 |
wget --user-agent=<span class="hljs-string">"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0" FILE.JPG</span> |
Даже некоторые функции в WordPress позволяют менять User-Agent. Например, функция wp_remote_get(), которая получает удаленную страницу. В нее можно передать желаемый user-agent в качестве опции (подробнее
Но я, для загрузки картинок использовал wordpress функцию download_url (подробнее о использовании функции
Как проверить, какой user-agent подставляется при загрузке файла через api wordpress?
Не знаю, на сколько я выбрал самый простой способ, но он состоит в том, что бы загрузить через функцию страницу «http://www.whoishostingthis.com/tools/user-agent/» которая выводит параметры броузера, а потом глазами просмотреть html. Получалось примерно так:
1 2 |
$url="http://www.whoishostingthis.com/tools/user-agent/"; echo download_url ($url); |
Фильтр http_headers_useragent на функцию download_url не действует. Поэтому, пришлось лезть в код WordPress (благо, я давно уже забил на обновления движка).
Код функции download_url доступен в
В самой функции уже использован фильтр ‘user-agent’ => apply_filters, который подставляет user-agent по-умолчанию. Остается только заменить его на нужный, заменив строчку:
1 |
'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ), |
например, на:
1 |
'user-agent' => apply_filters( 'http_headers_useragent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko/20100101 Firefox/20.0' ), |
Удачи!