Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ============================================================================
- // AdSense Direct Injection System
- // ============================================================================
- // Code Snippets Compatible Version
- // ============================================================================
- // Add AdSense Script to Head
- add_action('wp_head', 'add_adsense_injection_script', 1);
- function add_adsense_injection_script() {
- echo '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXXX" crossorigin="anonymous"></script>';
- }
- // Main Ad Injection Function
- add_action('wp_enqueue_scripts', 'enqueue_adsense_feed_injection');
- function enqueue_adsense_feed_injection() {
- // Page Detection - Only load on pages with feeds
- $should_load = false;
- //if (is_archive() || is_search() || is_home() || is_front_page()) {
- // $should_load = true;
- //}
- //if (is_singular(array('post', 'place', 'event', 'job'))) {
- // $should_load = true;
- //}
- $current_page_slug = get_post_field('post_name', get_the_ID());
- $feed_page_slugs = array('explore');
- if (in_array($current_page_slug, $feed_page_slugs)) {
- $should_load = true;
- }
- $should_load = apply_filters('direct_ads_should_load', $should_load);
- if (!$should_load) {
- return;
- }
- //wp_enqueue_script('jquery');
- // ========================================================================
- // CONFIGURE YOUR ADSENSE ADS HERE
- // ========================================================================
- $multi_feed_config = array(
- 'placesarchive' => array(
- 'selector' => '.placesfeed',
- //'interval' => 4,
- 'positions' => array(1, 11, 21),
- 'ads' => array(
- array(
- 'type' => 'adsense',
- 'client' => 'ca-pub-XXXXXXXXXXXXXXXX',
- 'slot' => 'XXXXXXXXXX',
- 'format' => 'fluid', // or 'auto', 'rectangle', 'horizontal', 'vertical'
- 'layout_key' => '-6r+di+5g-2m-8y', // copy from AdSense
- 'priority' => 3,
- 'enabled' => true
- ),
- array(
- 'type' => 'adsense',
- 'client' => 'ca-pub-XXXXXXXXXXXXXXXX',
- 'slot' => 'XXXXXXXXXX',
- 'format' => 'fluid',
- 'layout_key' => '',
- 'priority' => 2,
- 'enabled' => true
- ),
- array(
- 'type' => 'adsense',
- 'client' => 'ca-pub-XXXXXXXXXXXXXXXX',
- 'slot' => 'XXXXXXXXXX',
- 'format' => 'fluid',
- 'layout_key' => '',
- 'priority' => 1,
- 'enabled' => true
- ),
- )
- ),
- 'eventsarchive' => array(
- 'selector' => '.eventsfeed',
- 'interval' => 4,
- //'positions' => array(2, 8, 12),
- 'ads' => array(
- array(
- 'type' => 'adsense',
- 'client' => 'ca-pub-XXXXXXXXXXXXXXXX',
- 'slot' => 'XXXXXXXXXX',
- 'format' => 'fluid',
- 'layout_key' => '',
- 'priority' => 3,
- 'enabled' => true
- ),
- array(
- 'type' => 'adsense',
- 'client' => 'ca-pub-XXXXXXXXXXXXXXXX',
- 'slot' => 'XXXXXXXXXX',
- 'format' => 'fluid',
- 'layout_key' => '',
- 'priority' => 2,
- 'enabled' => true
- ),
- array(
- 'type' => 'adsense',
- 'client' => 'ca-pub-XXXXXXXXXXXXXXXX',
- 'slot' => 'XXXXXXXXXX',
- 'format' => 'fluid',
- 'layout_key' => '',
- 'priority' => 1,
- 'enabled' => true
- ),
- )
- ),
- // add your own feed here
- );
- // Process feeds
- $processed_feeds = array();
- foreach ($multi_feed_config as $feed_key => $feed_config) {
- $ads = array();
- $use_positions_mode = isset($feed_config['positions']) && is_array($feed_config['positions']);
- $interval = isset($feed_config['interval']) ? $feed_config['interval'] : 0;
- $max_ads = isset($feed_config['max_ads']) ? $feed_config['max_ads'] : 999;
- if (isset($feed_config['ads']) && is_array($feed_config['ads'])) {
- foreach ($feed_config['ads'] as $index => $ad_config) {
- if (!isset($ad_config['enabled']) || !$ad_config['enabled']) {
- continue;
- }
- if (!isset($ad_config['type'])) {
- continue;
- }
- $ad_data = array(
- 'type' => $ad_config['type'],
- 'priority' => isset($ad_config['priority']) ? $ad_config['priority'] : 0,
- 'index' => $index
- );
- if ($ad_config['type'] === 'adsense') {
- if (!isset($ad_config['client']) || !isset($ad_config['slot'])) {
- continue;
- }
- $ad_data['client'] = $ad_config['client'];
- $ad_data['slot'] = $ad_config['slot'];
- $ad_data['format'] = isset($ad_config['format']) ? $ad_config['format'] : 'auto';
- if (isset($ad_config['layout_key'])) {
- $ad_data['layout_key'] = $ad_config['layout_key'];
- }
- } elseif ($ad_config['type'] === 'html') {
- if (!isset($ad_config['content'])) {
- continue;
- }
- $ad_data['content'] = $ad_config['content'];
- } else {
- continue;
- }
- $ads[] = $ad_data;
- }
- }
- usort($ads, function($a, $b) {
- return $b['priority'] - $a['priority'];
- });
- $processed_feeds[$feed_key] = array(
- 'selector' => $feed_config['selector'],
- 'ads' => $ads,
- 'config' => array(
- 'mode' => $use_positions_mode ? 'positions' : 'interval',
- 'interval' => $interval,
- 'positions' => $use_positions_mode ? $feed_config['positions'] : array(),
- 'max_ads' => $max_ads
- )
- );
- }
- if (!empty($processed_feeds)) {
- $json_data = wp_json_encode($processed_feeds);
- wp_add_inline_script('jquery', 'var directAdsFeedData = ' . $json_data . ';');
- if (!defined('DONOTCACHEPAGE')) {
- define('DONOTCACHEPAGE', true);
- }
- }
- }
- // Output JavaScript in Footer
- add_action('wp_footer', 'output_adsense_injection_javascript', 20);
- function output_adsense_injection_javascript() {
- ?>
- <script>
- jQuery(document).ready(function($) {
- if (!window.directAdsFeedData) {
- return;
- }
- var feedStates = {};
- var feedObservers = {};
- $.each(window.directAdsFeedData, function(feedKey, feedData) {
- var $feedContainer = $(feedData.selector);
- if (!$feedContainer.length) {
- return;
- }
- feedStates[feedKey] = {
- adIndex: 0,
- usedPositions: {},
- totalInjectedCount: 0
- };
- setupMutationObserver(feedKey, feedData, $feedContainer[0]);
- insertAds(feedKey, feedData, $feedContainer);
- });
- window.resetAndRunAdInjection = function(feedKey) {
- if (feedKey && window.directAdsFeedData[feedKey]) {
- resetFeedState(feedKey);
- var feedData = window.directAdsFeedData[feedKey];
- var $feedContainer = $(feedData.selector);
- if ($feedContainer.length) {
- insertAds(feedKey, feedData, $feedContainer);
- }
- } else {
- $.each(window.directAdsFeedData, function(key, feedData) {
- resetFeedState(key);
- var $feedContainer = $(feedData.selector);
- if ($feedContainer.length) {
- insertAds(key, feedData, $feedContainer);
- }
- });
- }
- };
- function resetFeedState(feedKey) {
- feedStates[feedKey] = {
- adIndex: 0,
- usedPositions: {},
- totalInjectedCount: 0
- };
- }
- function insertAds(feedKey, feedData, $feedContainer) {
- var ads = feedData.ads || [];
- var config = feedData.config || {mode: 'interval', interval: 4, positions: [], max_ads: 999};
- var state = feedStates[feedKey];
- var postPreviews = $feedContainer.find('.ts-preview:not(.injected-ad)');
- var positionsToInject = [];
- if (config.mode === 'positions' && config.positions.length > 0) {
- positionsToInject = config.positions.slice();
- } else if (config.mode === 'interval' && config.interval > 0) {
- for (var i = config.interval; i <= postPreviews.length; i += config.interval) {
- positionsToInject.push(i);
- if (positionsToInject.length >= config.max_ads) break;
- }
- }
- postPreviews.each(function(index) {
- var postNumber = index + 1;
- if (state.usedPositions[postNumber]) {
- return;
- }
- if (positionsToInject.indexOf(postNumber) !== -1) {
- if (state.adIndex < ads.length && state.totalInjectedCount < config.max_ads) {
- var adConfig = ads[state.adIndex];
- if (!$(this).next().hasClass('injected-ad')) {
- var $adBlock = createAdBlock(adConfig, feedKey, postNumber);
- $(this).after($adBlock);
- state.usedPositions[postNumber] = true;
- state.totalInjectedCount++;
- state.adIndex++;
- setTimeout(function() {
- initializeAd($adBlock, adConfig, feedKey, postNumber);
- }, 300);
- }
- }
- }
- });
- }
- function createAdBlock(adConfig, feedKey, position) {
- var $container = $('<div>', {
- 'class': 'ts-preview injected-ad',
- 'data-ad-type': adConfig.type,
- 'data-feed-key': feedKey,
- 'data-position': position
- });
- var $adLabel = $('<small>', {
- 'class': 'admark',
- html: 'SPONSORED CONTENT'
- });
- $container.append($adLabel);
- if (adConfig.type === 'adsense') {
- var adsenseAttrs = {
- 'class': 'adsbygoogle',
- 'data-ad-client': adConfig.client,
- 'data-ad-slot': adConfig.slot,
- 'data-ad-format': adConfig.format,
- 'data-full-width-responsive': 'true',
- css: {display: 'block'}
- };
- if (adConfig.layout_key) {
- adsenseAttrs['data-ad-layout-key'] = adConfig.layout_key;
- }
- var $adsenseIns = $('<ins>', adsenseAttrs);
- $container.append($adsenseIns);
- } else if (adConfig.type === 'html') {
- var $htmlContent = $('<div>', {
- 'class': 'html-ad-container',
- html: adConfig.content
- });
- $container.append($htmlContent);
- }
- return $container;
- }
- function initializeAd($adBlock, adConfig, feedKey, position) {
- if (adConfig.type === 'adsense') {
- initializeAdSenseAd($adBlock, feedKey, position);
- }
- }
- function initializeAdSenseAd($adBlock, feedKey, position) {
- var $adsenseIns = $adBlock.find('.adsbygoogle');
- if ($adsenseIns.length === 0) {
- return;
- }
- if ($adsenseIns.data('adsbygoogle-status')) {
- return;
- }
- try {
- (window.adsbygoogle = window.adsbygoogle || []).push({});
- } catch (e) {
- console.error('AdSense init failed:', e);
- }
- }
- function setupMutationObserver(feedKey, feedData, feedContainer) {
- if (feedObservers[feedKey]) {
- feedObservers[feedKey].disconnect();
- }
- try {
- feedObservers[feedKey] = new MutationObserver(function(mutationsList) {
- var isReset = false;
- for (var i = 0; i < mutationsList.length; i++) {
- var mutation = mutationsList[i];
- if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
- var removedPreviews = Array.from(mutation.removedNodes).some(function(node) {
- return node.nodeType === 1 && node.classList.contains('ts-preview');
- });
- if (removedPreviews) {
- isReset = true;
- break;
- }
- }
- }
- if (isReset) {
- resetFeedState(feedKey);
- }
- var $feedContainer = $(feedData.selector);
- if ($feedContainer.length) {
- insertAds(feedKey, feedData, $feedContainer);
- }
- });
- feedObservers[feedKey].observe(feedContainer, {childList: true, subtree: true});
- } catch (e) {
- console.error('MutationObserver failed:', e);
- }
- }
- $(document).on('voxel:search-results-updated', function() {
- window.resetAndRunAdInjection();
- });
- });
- </script>
- <?php
- }
Advertisement
Add Comment
Please, Sign In to add comment