Advanced Ads - Version 1.10.2

Version Description

  • fixed issue with JNews theme which produced a widget ID that is blockable by ad blockers
  • fixed second page on ads overview showing the same results as the first
  • fixed issue that caused some items to vanish on admin pages without screen ID
Download this release

Release Info

Developer webzunft
Plugin Icon 128x128 Advanced Ads
Version 1.10.2
Comparing to
See all releases

Code changes from version 1.10.1 to 1.10.2

admin/includes/class-list-filters.php CHANGED
@@ -255,9 +255,12 @@ class Advanced_Ads_Ad_List_Filters {
255
  */
256
  public function post_results( $posts, $the_query ) {
257
  if ( ! function_exists( 'get_current_screen' ) ) {
258
- return;
259
  }
260
- $scr = get_current_screen();
 
 
 
261
  // execute only on the first query.
262
  if ( ! $scr ) {
263
  // if there are already some records, don't re-execute. Prevents bug with plugins making early extra query.
@@ -288,11 +291,20 @@ class Advanced_Ads_Ad_List_Filters {
288
  }
289
 
290
  // re-collect data from the search results.
291
- if ( isset( $_REQUEST['s'] ) ) {
292
  $this->collect_all_ads( $posts );
293
  $new_posts = $this->ad_filters( $this->all_ads, $the_query );
294
  }
295
 
 
 
 
 
 
 
 
 
 
296
  // replace the post list.
297
  $the_query->posts = $new_posts;
298
 
@@ -308,6 +320,7 @@ class Advanced_Ads_Ad_List_Filters {
308
  private function ad_filters( $posts, &$the_query ) {
309
  $using_original = true;
310
  $request = wp_unslash( $_REQUEST );
 
311
  /**
312
  * Filter post status
313
  */
255
  */
256
  public function post_results( $posts, $the_query ) {
257
  if ( ! function_exists( 'get_current_screen' ) ) {
258
+ return $posts;
259
  }
260
+
261
+ $new_posts = $posts;
262
+ $scr = get_current_screen();
263
+
264
  // execute only on the first query.
265
  if ( ! $scr ) {
266
  // if there are already some records, don't re-execute. Prevents bug with plugins making early extra query.
291
  }
292
 
293
  // re-collect data from the search results.
294
+ if ( isset( $_REQUEST['s'] ) && '' !== $_REQUEST['s'] ) {
295
  $this->collect_all_ads( $posts );
296
  $new_posts = $this->ad_filters( $this->all_ads, $the_query );
297
  }
298
 
299
+ $per_page = 20;
300
+ if ( $per_page < count( $new_posts ) ) {
301
+ $paged = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 1;
302
+ $total = count( $new_posts );
303
+ $new_posts = array_slice( $new_posts, ( $paged - 1 ) * $per_page, $per_page );
304
+ $the_query->found_posts = $total;
305
+ $the_query->post_count = count( $new_posts );
306
+ }
307
+
308
  // replace the post list.
309
  $the_query->posts = $new_posts;
310
 
320
  private function ad_filters( $posts, &$the_query ) {
321
  $using_original = true;
322
  $request = wp_unslash( $_REQUEST );
323
+
324
  /**
325
  * Filter post status
326
  */
advanced-ads.php CHANGED
@@ -12,7 +12,7 @@
12
  * Plugin Name: Advanced Ads
13
  * Plugin URI: https://wpadvancedads.com
14
  * Description: Manage and optimize your ads in WordPress
15
- * Version: 1.10.1
16
  * Author: Thomas Maier
17
  * Author URI: https://wpadvancedads.com
18
  * Text Domain: advanced-ads
@@ -39,7 +39,7 @@ define( 'ADVADS_BASE_DIR', dirname( ADVADS_BASE ) ); // directory of the plugin
39
  // general and global slug, e.g. to store options in WP
40
  define( 'ADVADS_SLUG', 'advanced-ads' );
41
  define( 'ADVADS_URL', 'https://wpadvancedads.com/' );
42
- define( 'ADVADS_VERSION', '1.10.1' );
43
 
44
  /*----------------------------------------------------------------------------*
45
  * Autoloading, modules and functions
12
  * Plugin Name: Advanced Ads
13
  * Plugin URI: https://wpadvancedads.com
14
  * Description: Manage and optimize your ads in WordPress
15
+ * Version: 1.10.2
16
  * Author: Thomas Maier
17
  * Author URI: https://wpadvancedads.com
18
  * Text Domain: advanced-ads
39
  // general and global slug, e.g. to store options in WP
40
  define( 'ADVADS_SLUG', 'advanced-ads' );
41
  define( 'ADVADS_URL', 'https://wpadvancedads.com/' );
42
+ define( 'ADVADS_VERSION', '1.10.2' );
43
 
44
  /*----------------------------------------------------------------------------*
45
  * Autoloading, modules and functions
classes/widget.php CHANGED
@@ -203,13 +203,16 @@ class Advanced_Ads_Widget extends WP_Widget {
203
 
204
  /**
205
  * Make it harder for ad blockers to block the widget.
 
206
  *
207
  * @param str $before_widget
208
  * @param array $instance Settings for the current widget instance.
209
  * @return str $before_widget
210
  */
211
  private function maybe_replace_frontend_id( $before_widget, $instance ) {
212
- if ( ! empty( $instance['remove-widget-id'] ) ) {
 
 
213
  $pattern = '#\sid=("|\')[^"\']+["\']#';
214
  if ( ( defined( 'ADVANCED_ADS_SHOW_WIDGET_ID' ) && ADVANCED_ADS_SHOW_WIDGET_ID )
215
  || ! empty( $instance['q2w3_fixed_widget'] )
203
 
204
  /**
205
  * Make it harder for ad blockers to block the widget.
206
+ * removes the pre-defined widget ID (e.g., advads_ad_widget-20) and replaces it with one that uses the individual frontend prefix
207
  *
208
  * @param str $before_widget
209
  * @param array $instance Settings for the current widget instance.
210
  * @return str $before_widget
211
  */
212
  private function maybe_replace_frontend_id( $before_widget, $instance ) {
213
+ if ( empty( $instance['remove-widget-id'] )
214
+ || defined( 'JNEWS_THEME_ID' ) // the JNews theme overrides the widget ID and resets it, so we target this specifically.
215
+ ) {
216
  $pattern = '#\sid=("|\')[^"\']+["\']#';
217
  if ( ( defined( 'ADVANCED_ADS_SHOW_WIDGET_ID' ) && ADVANCED_ADS_SHOW_WIDGET_ID )
218
  || ! empty( $instance['q2w3_fixed_widget'] )
public/assets/js/advanced.js CHANGED
@@ -1 +1 @@
1
- advads={supports_localstorage:function(){"use strict";try{if(!window||window.localStorage===undefined){return false}window.localStorage.setItem("x","x");window.localStorage.removeItem("x");return true}catch(e){return false}},max_per_session:function(name,max){var num=1;if(max===undefined||parseInt(max)===0){max=1}if(this.cookie_exists(name)){if(this.get_cookie(name)>=max){return true}num=num+parseInt(this.get_cookie(name))}this.set_cookie(name,num);return false},count_up:function(name,exdays){var num=1;if(this.cookie_exists(name)){num=num+parseInt(this.get_cookie(name))}this.set_cookie(name,num)},set_cookie_exists:function(name){if(get_cookie(name)){return true}set_cookie(name,"",0);return false},get_cookie:function(name){var i,x,y,ADVcookies=document.cookie.split(";");for(i=0;i<ADVcookies.length;i++){x=ADVcookies[i].substr(0,ADVcookies[i].indexOf("="));y=ADVcookies[i].substr(ADVcookies[i].indexOf("=")+1);x=x.replace(/^\s+|\s+$/g,"");if(x===name){return unescape(y)}}},set_cookie:function(name,value,exdays,path,domain,secure){var expiry=exdays==null?null:exdays*24*60*60;this.set_cookie_sec(name,value,expiry,path,domain,secure)},set_cookie_sec:function(name,value,expiry,path,domain,secure){var exdate=new Date;exdate.setSeconds(exdate.getSeconds()+parseInt(expiry));document.cookie=name+"="+escape(value)+(expiry==null?"":"; expires="+exdate.toUTCString())+(path==null?"; path=/":"; path="+path)+(domain==null?"":"; domain="+domain)+(secure==null?"":"; secure")},cookie_exists:function(name){var c_value=this.get_cookie(name);if(c_value!==null&&c_value!==""&&c_value!==undefined){return true}return false},move:function(element,target,options){var el=jQuery(element);if(typeof options==="undefined"){options={}}if(typeof options.css==="undefined"){options.css={}}if(typeof options.method==="undefined"){options.method="prependTo"}if(target===""&&typeof options.target!=="undefined"){switch(options.target){case"wrapper":var offset="left";if(typeof options.offset!=="undefined"){offset=options.offset}target=this.find_wrapper(element,offset);break}}if(typeof options.moveintohidden==="undefined"){target=jQuery(target).filter(":visible")}switch(options.method){case"insertBefore":el.insertBefore(target);break;case"insertAfter":el.insertAfter(target);break;case"appendTo":el.appendTo(target);break;case"prependTo":el.prependTo(target);break;default:el.prependTo(target)}},set_parent_relative:function(element){var el=jQuery(element);var parent=el.parent();if(parent.css("position")==="static"||parent.css("position")===""){parent.css("position","relative")}},fix_element:function(element,options){this.set_parent_relative(element);var el=jQuery(element);if(typeof options!=="undefined"&&options.is_invisible){el.show()}var topoffset=parseInt(el.offset().top);var leftoffset=parseInt(el.offset().left);if(typeof options!=="undefined"&&options.is_invisible){el.hide()}el.css("position","fixed").css("top",topoffset+"px").css("left",leftoffset+"px").css("right","")},find_wrapper:function(element,offset){var returnValue;jQuery("body").children().each(function(key,value){if(value.id!==element.substring(1)){var checkedelement=jQuery(value);if(offset==="right"&&checkedelement.offset().left+jQuery(checkedelement).width()<jQuery(window).width()||offset==="left"&&checkedelement.offset().left>0){if(checkedelement.css("position")==="static"||checkedelement.css("position")===""){checkedelement.css("position","relative")}returnValue=value;return false}}});return returnValue},center_fixed_element:function(element){var el=jQuery(element);var left=jQuery(window).width()/2-parseInt(el.css("width"))/2;el.css("left",left+"px")},center_vertically:function(element){var el=jQuery(element);var left=jQuery(window).height()/2-parseInt(el.css("height"))/2;el.css("top",left+"px")},close:function(element){var wrapper=jQuery(element);wrapper.remove()},privacy:{get_state:function(){if(!window.advads_options||!window.advads_options.privacy){return"not_needed"}var options=window.advads_options.privacy;if(!options.enabled){return"not_needed"}var method=options["consent-method"]?options["consent-method"]:"0";switch(method){case"0":return"not_needed";break;case"custom":if(options["custom-cookie-value"===undefined]||options["custom-cookie-value"]===undefined){return"not_needed"}var found=advads.get_cookie(options["custom-cookie-name"]);if(typeof found!=="string"){return"unknown"}if(options["custom-cookie-value"]===""&&found===""||options["custom-cookie-value"]!==""&&found.indexOf(options["custom-cookie-value"])!==-1){return"accepted"}return"unknown";break;default:return advads.cookie_exists(method)?"accepted":"unknown"}},is_adsense_npa_enabled:function(){if(!window.advads_options||!window.advads_options.privacy){return true}var options=window.advads_options.privacy;return!!options["show-non-personalized-adsense"]}}};jQuery(document).ready(function(){if(advads.supports_localstorage()&&localStorage.getItem("advads_frontend_picker")){var advads_picker_cur,advads_picker_overlay=jQuery("<div id='advads-picker-overlay'>"),advads_picker_no=[document.body,document.documentElement,document];advads_picker_overlay.css({position:"absolute",border:"solid 2px #428bca",backgroundColor:"rgba(66,139,202,0.5)",boxSizing:"border-box",zIndex:1e6,pointerEvents:"none"}).prependTo("body");jQuery(document).mousemove(function(e){if(e.target===advads_picker_cur){return}if(~advads_picker_no.indexOf(e.target)){advads_picker_cur=null;advads_picker_overlay.hide();return}var target=jQuery(e.target),offset=target.offset(),width=target.outerWidth(),height=target.outerHeight();advads_picker_cur=e.target;advads_picker_overlay.css({top:offset.top,left:offset.left,width:width,height:height}).show();console.log(jQuery(advads_picker_cur).getPath())});jQuery(document).click(function(e){var path=jQuery(advads_picker_cur).getPath();localStorage.setItem("advads_frontend_element",path);window.location=localStorage.getItem("advads_prev_url")})}});jQuery.fn.extend({getPath:function(path,depth){if(typeof path==="undefined")path="";if(typeof depth==="undefined")depth=0;if(this.is("html")){return"html > "+path}else if(3===depth){return path}var cur=this.get(0).nodeName.toLowerCase();var el_id=this.attr("id"),el_class=this.attr("class");depth=depth+1;if(typeof el_id!=="undefined"&&!/\d/.test(el_id)){cur+="#"+el_id}else if(typeof el_class!=="undefined"){el_class=el_class.split(/[\s\n]+/);el_class=jQuery.grep(el_class,function(element,index){return!/\d/.test(element)});if(el_class.length){cur+="."+el_class.slice(0,2).join(".")}}if(this.siblings(cur).length){cur+=":eq("+this.siblings(cur).addBack().not("#advads-picker-overlay").index(this)+")"}if(path===""){return this.parent().getPath(cur,depth)}else{return this.parent().getPath(cur+" > "+path,depth)}}});
1
+ advads={supports_localstorage:function(){"use strict";try{if(!window||window.localStorage===undefined){return false}window.localStorage.setItem("x","x");window.localStorage.removeItem("x");return true}catch(e){return false}},max_per_session:function(name,max){var num=1;if(max===undefined||parseInt(max)===0){max=1}if(this.cookie_exists(name)){if(this.get_cookie(name)>=max){return true}num=num+parseInt(this.get_cookie(name))}this.set_cookie(name,num);return false},count_up:function(name,exdays){var num=1;if(this.cookie_exists(name)){num=num+parseInt(this.get_cookie(name))}this.set_cookie(name,num)},set_cookie_exists:function(name){if(get_cookie(name)){return true}set_cookie(name,"",0);return false},get_cookie:function(name){var i,x,y,ADVcookies=document.cookie.split(";");for(i=0;i<ADVcookies.length;i++){x=ADVcookies[i].substr(0,ADVcookies[i].indexOf("="));y=ADVcookies[i].substr(ADVcookies[i].indexOf("=")+1);x=x.replace(/^\s+|\s+$/g,"");if(x===name){return unescape(y)}}},set_cookie:function(name,value,exdays,path,domain,secure){var expiry=exdays==null?null:exdays*24*60*60;this.set_cookie_sec(name,value,expiry,path,domain,secure)},set_cookie_sec:function(name,value,expiry,path,domain,secure){var exdate=new Date;exdate.setSeconds(exdate.getSeconds()+parseInt(expiry));document.cookie=name+"="+escape(value)+(expiry==null?"":"; expires="+exdate.toUTCString())+(path==null?"; path=/":"; path="+path)+(domain==null?"":"; domain="+domain)+(secure==null?"":"; secure")},cookie_exists:function(name){var c_value=this.get_cookie(name);if(c_value!==null&&c_value!==""&&c_value!==undefined){return true}return false},move:function(element,target,options){var el=jQuery(element);if(typeof options==="undefined"){options={}}if(typeof options.css==="undefined"){options.css={}}if(typeof options.method==="undefined"){options.method="prependTo"}if(target===""&&typeof options.target!=="undefined"){switch(options.target){case"wrapper":var offset="left";if(typeof options.offset!=="undefined"){offset=options.offset}target=this.find_wrapper(element,offset);break}}if(typeof options.moveintohidden==="undefined"){target=jQuery(target).filter(":visible")}switch(options.method){case"insertBefore":el.insertBefore(target);break;case"insertAfter":el.insertAfter(target);break;case"appendTo":el.appendTo(target);break;case"prependTo":el.prependTo(target);break;default:el.prependTo(target)}},set_parent_relative:function(element){var el=jQuery(element);var parent=el.parent();if(parent.css("position")==="static"||parent.css("position")===""){parent.css("position","relative")}},fix_element:function(element,options){this.set_parent_relative(element);var el=jQuery(element);if(typeof options!=="undefined"&&options.is_invisible){el.show()}var topoffset=parseInt(el.offset().top);var leftoffset=parseInt(el.offset().left);if(typeof options!=="undefined"&&options.is_invisible){el.hide()}el.css("position","fixed").css("top",topoffset+"px").css("left",leftoffset+"px").css("right","")},find_wrapper:function(element,offset){var returnValue;jQuery("body").children().each(function(key,value){if(value.id!==element.substring(1)){var checkedelement=jQuery(value);if(offset==="right"&&checkedelement.offset().left+jQuery(checkedelement).width()<jQuery(window).width()||offset==="left"&&checkedelement.offset().left>0){if(checkedelement.css("position")==="static"||checkedelement.css("position")===""){checkedelement.css("position","relative")}returnValue=value;return false}}});return returnValue},center_fixed_element:function(element){var el=jQuery(element);var left=jQuery(window).width()/2-parseInt(el.css("width"))/2;el.css("left",left+"px")},center_vertically:function(element){var el=jQuery(element);var left=jQuery(window).height()/2-parseInt(el.css("height"))/2;el.css("top",left+"px")},close:function(element){var wrapper=jQuery(element);wrapper.remove()},wait_for_images:function($el,ready_callback){var loaded_count=0;var srcs=[];$el.find('img[src][src!=""]').each(function(){srcs.push(this.src)});if(srcs.length===0){ready_callback.call($el)}jQuery.each(srcs,function(i,src){var image=new Image;image.src=src;var events="load error";jQuery(image).one(events,function me(event){jQuery(this).off(events,me);loaded_count++;if(loaded_count==srcs.length){ready_callback.call($el[0]);return false}})})},privacy:{get_state:function(){if(!window.advads_options||!window.advads_options.privacy){return"not_needed"}var options=window.advads_options.privacy;if(!options.enabled){return"not_needed"}var method=options["consent-method"]?options["consent-method"]:"0";switch(method){case"0":return"not_needed";break;case"custom":if(options["custom-cookie-value"===undefined]||options["custom-cookie-value"]===undefined){return"not_needed"}var found=advads.get_cookie(options["custom-cookie-name"]);if(typeof found!=="string"){return"unknown"}if(options["custom-cookie-value"]===""&&found===""||options["custom-cookie-value"]!==""&&found.indexOf(options["custom-cookie-value"])!==-1){return"accepted"}return"unknown";break;default:return advads.cookie_exists(method)?"accepted":"unknown"}},is_adsense_npa_enabled:function(){if(!window.advads_options||!window.advads_options.privacy){return true}var options=window.advads_options.privacy;return!!options["show-non-personalized-adsense"]}}};jQuery(document).ready(function(){if(advads.supports_localstorage()&&localStorage.getItem("advads_frontend_picker")){var advads_picker_cur,advads_picker_overlay=jQuery("<div id='advads-picker-overlay'>"),advads_picker_no=[document.body,document.documentElement,document];advads_picker_overlay.css({position:"absolute",border:"solid 2px #428bca",backgroundColor:"rgba(66,139,202,0.5)",boxSizing:"border-box",zIndex:1e6,pointerEvents:"none"}).prependTo("body");jQuery(document).mousemove(function(e){if(e.target===advads_picker_cur){return}if(~advads_picker_no.indexOf(e.target)){advads_picker_cur=null;advads_picker_overlay.hide();return}var target=jQuery(e.target),offset=target.offset(),width=target.outerWidth(),height=target.outerHeight();advads_picker_cur=e.target;advads_picker_overlay.css({top:offset.top,left:offset.left,width:width,height:height}).show();console.log(jQuery(advads_picker_cur).getPath())});jQuery(document).click(function(e){var path=jQuery(advads_picker_cur).getPath();localStorage.setItem("advads_frontend_element",path);window.location=localStorage.getItem("advads_prev_url")})}});jQuery.fn.extend({getPath:function(path,depth){if(typeof path==="undefined")path="";if(typeof depth==="undefined")depth=0;if(this.is("html")){return"html > "+path}else if(3===depth){return path}var cur=this.get(0).nodeName.toLowerCase();var el_id=this.attr("id"),el_class=this.attr("class");depth=depth+1;if(typeof el_id!=="undefined"&&!/\d/.test(el_id)){cur+="#"+el_id}else if(typeof el_class!=="undefined"){el_class=el_class.split(/[\s\n]+/);el_class=jQuery.grep(el_class,function(element,index){return!/\d/.test(element)});if(el_class.length){cur+="."+el_class.slice(0,2).join(".")}}if(this.siblings(cur).length){cur+=":eq("+this.siblings(cur).addBack().not("#advads-picker-overlay").index(this)+")"}if(path===""){return this.parent().getPath(cur,depth)}else{return this.parent().getPath(cur+" > "+path,depth)}}});
public/assets/js/advanced.orig.js CHANGED
@@ -298,6 +298,42 @@ advads = {
298
  // remove the ad
299
  wrapper.remove();
300
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301
 
302
  privacy: {
303
  /**
298
  // remove the ad
299
  wrapper.remove();
300
  },
301
+ /**
302
+ * Wait until images are ready.
303
+ *
304
+ * @param {obj} $el jQuery object.
305
+ * @param {function} ready_callback Ready callback.
306
+ * derrived from https://github.com/alexanderdickson/waitForImages/blob/master/dist/jquery.waitforimages.js
307
+ */
308
+ wait_for_images: function( $el, ready_callback ) {
309
+ var loaded_count = 0;
310
+ var srcs = [];
311
+
312
+ $el.find( 'img[src][src!=""]' ).each( function () {
313
+ srcs.push( this.src );
314
+ });
315
+
316
+ if ( srcs.length === 0 ) {
317
+ ready_callback.call( $el );
318
+ }
319
+
320
+ jQuery.each( srcs, function( i, src ) {
321
+ var image = new Image();
322
+ image.src = src;
323
+ var events = 'load error';
324
+
325
+ jQuery( image ).one( events, function me( event ) {
326
+ // Remove remaining handler (either 'load' or 'error').
327
+ jQuery( this ).off( events, me );
328
+ loaded_count++;
329
+
330
+ if ( loaded_count == srcs.length ) {
331
+ ready_callback.call( $el[0] );
332
+ return false;
333
+ }
334
+ } );
335
+ } );
336
+ },
337
 
338
  privacy: {
339
  /**
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: ads, ad manager, ad widget, ad rotation, adsense, advertise, advertisement
5
  Requires at least: 4.6
6
  Tested up to: 4.9
7
  Requires PHP: 5.4
8
- Stable tag: 1.10.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -43,11 +43,12 @@ I built Advanced Ads based on my experience delivering millions of ads per month
43
 
44
  choose between different ad types that enable you to:
45
 
46
- * insert code for any ad and affiliate networks (e.g., AdSense, Chitika, Amazon, BuySellAds, Google Ad Manager, DoubleClick, Ezoic, media.net, … )
47
  * dedicated support for all types of Google AdSense banners, including Responsive, InFeed and InArticle ads
48
  * display images and image banners
49
  * create content-rich ads with the WordPress TinyMCE editor
50
- * use shortcodes within ads (to also deliver advertisements from other ad plugins like Ad Inserter, AdRotate or the AdSense Plugin WP QUADS)
 
51
 
52
  = display ads for WP =
53
 
@@ -56,7 +57,7 @@ choose between different ad types that enable you to:
56
  * show ads in sidebars and widget areas
57
  * disable all ads on specific pages
58
  * display multiple ads (ad blocks)
59
- * display a customizable label, e.g., “Advertisements” above each ad
60
 
61
  = display conditions =
62
 
@@ -91,6 +92,7 @@ Placements to insert ads in pre-defined positions in your theme and content. [Li
91
  * ads in the footer
92
  * test placements against each other with [Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/)
93
  * many more ad positions with [add-ons](https://wpadvancedads.com/add-ons/)
 
94
 
95
  = mobile devices =
96
 
@@ -174,7 +176,7 @@ You can use Advanced Ads to insert ads into your WordPress site without any codi
174
  To get started, just take a look at
175
 
176
  * the [general first ad tutorial](https://wpadvancedads.com/manual/first-ad/)
177
- * using [AdSense Auto ads] in WordPress (https://wpadvancedads.com/adsense-auto-ads-wordpress/)
178
  * the [AdSense overview page](https://wpadvancedads.com/manual/adsense-ads).
179
 
180
  = What about my users’ privacy and GDPR? =
@@ -264,6 +266,12 @@ Yes. Advanced Ads is based on WordPress standards and therefore easily customiza
264
 
265
  == Changelog ==
266
 
 
 
 
 
 
 
267
  = 1.10.1 =
268
 
269
  * fixed issue caused by wrongly registered third party taxonomies
5
  Requires at least: 4.6
6
  Tested up to: 4.9
7
  Requires PHP: 5.4
8
+ Stable tag: 1.10.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
43
 
44
  choose between different ad types that enable you to:
45
 
46
+ * insert code for any ad and affiliate networks (e.g., AdSense, Chitika, Amazon, BuySellAds, Google Ad Manager, DoubleClick (DFP), Ezoic, media.net, … )
47
  * dedicated support for all types of Google AdSense banners, including Responsive, InFeed and InArticle ads
48
  * display images and image banners
49
  * create content-rich ads with the WordPress TinyMCE editor
50
+ * create Amazon ads with the Rich Content ad type and the [Amazon Associates Link Builder](https://wordpress.org/plugins/amazon-associates-link-builder/)
51
+ * use shortcodes within ads (to also deliver advertisements from other ad plugins like Ad Inserter, AdRotate, Quick AdSense, WP Bannerize, or the AdSense Plugin WP QUADS)
52
 
53
  = display ads for WP =
54
 
57
  * show ads in sidebars and widget areas
58
  * disable all ads on specific pages
59
  * display multiple ads (ad blocks)
60
+ * display a customizable label, e.g., “Advertisements” above each banner ad
61
 
62
  = display conditions =
63
 
92
  * ads in the footer
93
  * test placements against each other with [Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/)
94
  * many more ad positions with [add-ons](https://wpadvancedads.com/add-ons/)
95
+ * inject any kind of code into header or footer, not only advertising
96
 
97
  = mobile devices =
98
 
176
  To get started, just take a look at
177
 
178
  * the [general first ad tutorial](https://wpadvancedads.com/manual/first-ad/)
179
+ * using [AdSense Auto ads](https://wpadvancedads.com/adsense-auto-ads-wordpress/) in WordPress
180
  * the [AdSense overview page](https://wpadvancedads.com/manual/adsense-ads).
181
 
182
  = What about my users’ privacy and GDPR? =
266
 
267
  == Changelog ==
268
 
269
+ = 1.10.2 =
270
+
271
+ * fixed issue with JNews theme which produced a widget ID that is blockable by ad blockers
272
+ * fixed second page on ads overview showing the same results as the first
273
+ * fixed issue that caused some items to vanish on admin pages without screen ID
274
+
275
  = 1.10.1 =
276
 
277
  * fixed issue caused by wrongly registered third party taxonomies