Adsense в динамической боковой панели WordPress
Блок контекстной рекламы Adsense у меня довольно давно находится в боковой панели. Не так давно до меня дошло, что панель имеет динамический размер (22% от тела страницы) и в зависимости от расширения экрана (и размера окна браузера) блок рекламы 250х250 px немного портит внешний вид страницы.
Закономерно нарисовалась задачка: Как отображать рекламные блоки Adsense разной ширины в зависимости от расширения экрана посетителя?
К сожалению с помощью php нельзя определить расширение экрана, поскольку php выполняется на сервере и ни один параметр запроса не передает ширину экрана клиента. Поэтому подход с functions.php отпадает.
В свою очередь javascript выполняется на стороне клиента и с помощью его можно определить какой же ширины конечное изображение у клиента.
Разбор рекламного кода я проводил в первой статье
Нас интересует серединка этого всего, а именно class="adsbygoogle"
, так как для каждого блока он будет разный.
Дальше переходим в свою учетную запись AdSense и включаем рекламные блоки нужных размеров. В моем случае это:
- 125х125
- 180х150
- 200х200
- 250х250
- 300х250
И на основе секции, в которой описано class="adsbygoogle"
создаем нужный скрипт:
<script>
width = window.innerWidth;
window_percentage = (window.innerWidth/100)*95;
sidebar_percentage = Math.round((window_percentage/100)*22);
if ((sidebar_percentage > 125)&&(sidebar_percentage <= 180)) {
document.write('<ins class="adsbygoogle" ');
document.write('style="display:inline-block;width:125px;height:125px" ');
document.write('data-ad-client="ca-pub-<strong>xxxxxxxxxxxxxxxx</strong>" ');
document.write('data-ad-slot="<strong>xxxxxxxxxx</strong>"></ins> ');
} else if ((sidebar_percentage > 180)&&(sidebar_percentage <= 202)) {
document.write('<ins class="adsbygoogle" ');
document.write('style="display:inline-block;width:180px;height:150px" ');
document.write('data-ad-client="ca-pub-<strong>xxxxxxxxxxxxxxxx</strong>" ');
document.write('data-ad-slot="<strong>xxxxxxxxxx</strong>"></ins> ');
} else if ((sidebar_percentage > 202)&&(sidebar_percentage <= 250)) {
document.write('<ins class="adsbygoogle" ');
document.write('style="display:inline-block;width:200px;height:200px" ');
document.write('data-ad-client="ca-pub-<strong>xxxxxxxxxxxxxxxx</strong>" ');
document.write('data-ad-slot="<strong>xxxxxxxxxx</strong>"></ins> ');
} else if ((sidebar_percentage > 251)&&(sidebar_percentage <= 301)) {
document.write('<ins class="adsbygoogle" ');
document.write('style="display:inline-block;width:250px;height:250px" ');
document.write('data-ad-client="ca-pub-<strong>xxxxxxxxxxxxxxxx</strong>" ');
document.write('data-ad-slot="<strong>xxxxxxxxxx</strong>"></ins> ');
} else if ((sidebar_percentage > 301)&&(sidebar_percentage <= 402)) {
document.write('<ins class="adsbygoogle" ');
document.write('style="display:inline-block;width:300px;height:250px" ');
document.write('data-ad-client="ca-pub-<strong>xxxxxxxxxxxxxxxx</strong>" ');
document.write('data-ad-slot="<strong>xxxxxxxxxx</strong>"></ins> ');
}
</script>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
</center>
В моем случае размер основного тела занимает 95% от ширины страницы:
window_percentage = (window.innerWidth/100)*95
От него 22% - ширина боковой панели:
sidebar_percentage = Math.round((window_percentage/100)*22)
Дальше идет простой перебор условий и отображение необходимого блока, в зависимости от ширины экрана.
Теперь блок рекламы в сайдбаре не портит внешний вид страниц. Провозился пол дня, зато какой эффект.
Этот подход применим и другим рекламным и не рекламным блокам.