Если вам нравится SbUP Форум, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....

 

Проблема вставки адаптивных блоков через function.php в WordPress

Автор art_gud, 13-03-2015, 00:07:33

« назад - далее »

art_gudTopic starter

Давно не обращался к форумчанам за помощью. Суть проблемы в следующем. Решил перенести блок рекламы из сайтбара, где место оказалось совсем не кликабельным, в тело статьи, а именно после первого заголовка H2. Код сей конструкции привожу ниже, под спойлелом. Вставил я этот код в function.php, как и положено. Там где код блока, поставил адаптивный.

Эта конструкция работает, это точно, потому как под первым заголовком начала выводится пустая область. Но код так и не показался, даже через сутки. Методом проб и ошибок пришел к выводу, что проблема именно в коде блока AdSense. Функция тупа не выполняет асинхронную загрузку - с синхронной загрузкой все грузится прекрасно. Но беда в том, что для адаптивных блоков предусмотрена только асинхронная загрузка и это логично и меня это устраивает. Вопрос: почему так? Может это особенность function.php или этой конкретно взятой функции? Помогите, пожалуйста, очень нужно, ибо все это делать вручную не охота. Спасибо! :'(

[spoiler]function ads_h2($content) {
$ads='код Google Adsense';
if (is_single()) {
$content=preg_replace('#<h2(.*?)</h2>#','<div class="adsense-box"><h2\1</h2>'.$ads.'</div>',$content, 1);
}
else {
}
return $content;
}
add_filter('the_content', 'ads_h2');
[/spoiler]


DOleg

Можете попробовать официальный плагин от Гугла, Google Publisher (справка по плагину на русском).

ЦитироватьПлагин проанализирует ваш сайт и предложит места для размещения рекламы.

Вам останется только выбрать их.


art_gudTopic starter

Цитата: DOleg от 13-03-2015, 11:34:46Вам останется только выбрать их.

Попробую конечно, но хотелось все сделать своими силами и в том месте, где нужно. Но все-равно спасибо.

DOleg

1. Вставить чистый код, например после контента, что бы проверить, работает ли код вообще для сайта.
2. Вставить код в функцию, но без preg_replace

function ads_h2($content) {
$ads='код Google Adsense';
if (is_single()) {
$content='<div class="adsense-box">'.$ads.'</div>'.$content;
// или такой вариант: $content=$content.'<div class="adsense-box">'.$ads.'</div>';
}
return $content;
}
add_filter('the_content', 'ads_h2');


Что получается в исходном коде?

art_gudTopic starter

Цитата: DOleg от 13-03-2015, 13:25:41Вставить чистый код, например после контента, что бы проверить, работает ли код вообще для сайта.

Код работает прекрасно.

Цитата: DOleg от 13-03-2015, 13:25:41Вставить код в функцию, но без preg_replace

С базовой функцией выводит в исходном коде следующее:

[spoiler]<div class="adsense-box">
<h2>Подзаголовок</h2>
<script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><br>
<!-- название блока адсенс --><br>
<ins class="adsbygoogle" <br="" data-adsbygoogle-status="done" style="width: auto; height: auto;"><ins id="aswift_1_expand" style="display:inline-table;border:none;height:NaNpx;margin:0;padding:0;position:relative;visibility:visible;width:NaNpx;background-color:transparent"><ins id="aswift_1_anchor" style="display:block;border:none;height:NaNpx;margin:0;padding:0;position:relative;visibility:visible;width:NaNpx;background-color:transparent"><iframe width="undefined" height="undefined" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" onload="var i=this.id,s=window.google_iframe_oncopy,H=s&amp;&amp;s.handlers,h=H&amp;&amp;H,w=this.contentWindow,d;try{d=w.dоcument}catch(e){}if(h&amp;&amp;d&amp;&amp;(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else if(h.match){try{h=s.upd(h,i)}catch(e){}w.location.replace(h)}}" id="aswift_1" name="aswift_1" style="left:0;position:absolute;top:0;"></iframe></ins></ins></ins><br>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>[/spoiler]

С вашим кодом выводится тоже самое, только в начале текста, что вполне логично, ведь preg_replace как раз и отвечает за подмену подзаголовка таким подзаголовком с кодом адсенс. Тут же основная проблема в том, что не хочет грузиться асинхронный код - обычный синхронный код обычного статичного объявления, к примеру, 728х90, грузится и отображается. Но меня такой вариант не устраивает, так как 40%+ пользователей на сайт приходят с мобильного и нужен адаптивный блок. Тем более синхронный ход - это ж прошлый век, сайт итак нагружен скриптами.

К сожалению предложенный вами плагин совершенно не подходит, так как предлагает места, в которые я и без него могу вставить объявления, ну разве что только над 1-3 абзацами. Но статьи не все будут хорошо смотреться с кодом над 3 абзацем. Подзаголовок Н2 тут самое то и вручную ни чего делать не придется.


DOleg

Цитата: art_gud от 13-03-2015, 14:28:48К сожалению предложенный вами плагин совершенно не подходит
Я не знал, что у плагина такой недостаток.

Цитата: art_gud от 13-03-2015, 14:28:48Но меня такой вариант не устраивает
Понимаю. Код на первый взгляд вполне корректный, поэтому вполне возможен вариант, что объявления с размером 728х90 для вас есть, а другого нет.

ЦитироватьЕсли объявления не появятся на них по прошествии 48 часов, проверьте, правильно ли вы установили код.
Объявлений всё ещё нет?

art_gudTopic starter

Цитата: DOleg от 13-03-2015, 17:55:15Понимаю. Код на первый взгляд вполне корректный, поэтому вполне возможен вариант, что объявления с размером 728х90 для вас есть, а другого нет.

Не думаю, любые блоки с синхронной загрузкой грузятся, какой бы у них размер ни был.

Цитата: DOleg от 13-03-2015, 17:55:15Объявлений всё ещё нет?

Нет, я его уже убрал, пока поставил в начале статьи, но это не то, что нужно. Отписался на официальном форуме Адсенса, может там кто поможет. Я на 100% уверен, что дело в асинхронной загрузке, но как эту проблему решить я понятия не имею.

DOleg

ЦитироватьОб адаптивных рекламных блоках

Не задана ширина родительского контейнера. Размер адаптивного рекламного блока не вычисляется автоматически, если не задана ширина его родительского контейнера, например плавающего элемента. В этом случае для установки размера контейнера включите в код мультимедийные запросы CSS. Подробнее о настройке адаптивных рекламных блоков...

У вашего div class="adsense-box" установлена ширина?

И как вариант, если ваша хотелка не заработает, создать несколько блоков с разной шириной, под размеры разных устройств, и в зависимости от устройства выдавать конкретный блок с конкретным размером.


art_gudTopic starter

Цитата: DOleg от 15-03-2015, 14:07:28У вашего div class="adsense-box" установлена ширина?

А вот это мысль, попробую, спасибо.



Если вам нравится SbUP Форум, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....