Advanced Ads - Version 1.33.0

Version Description

(March 29, 2022) =

  • Improvement: introduce new header on plugin-related pages in WP Admin
  • Improvement: better highlight selected condition options
  • Improvement: prevent admin notices from jumping on Advanced Ads pages
  • Improvement: consistently call the overview page "Dashboard" in the page title and menu
  • Fix: remove default "Visibility" setting from ad edit page to avoid confusion
Download this release

Release Info

Developer advancedads
Plugin Icon 128x128 Advanced Ads
Version 1.33.0
Comparing to
See all releases

Code changes from version 1.32.0 to 1.33.0

admin/assets/css/admin.css CHANGED
@@ -92,6 +92,10 @@ h2.hndle .advads-hndlelinks a + a, #advads_overview_adsense_stats .advads-hndlel
92
  .advads-metabox-notices .error { color: #dc3232; }
93
  .advads-metabox-notices .warning, .advads-message-warning { color: #de8400; }
94
 
 
 
 
 
95
  .post-type-advanced_ads #poststuff .meta-box-sortables .inside {
96
  margin: 0;
97
  padding: 0;
@@ -130,36 +134,91 @@ h2.hndle .advads-hndlelinks a + a, #advads_overview_adsense_stats .advads-hndlel
130
  .advads-conditions-new select:first-letter { text-transform: uppercase; }
131
  .advads-conditions-new select + .advads-loader { display: inline-block; vertical-align: middle; }
132
  .advads-display-conditions-remove + h5 { display: inline-block; margin-top: 0; margin-left: 1em; }
133
- select + .advads-conditions-single { display: inline-block; }
134
- .advads-conditions-table { border-collapse: collapse; width: 100%; max-width: 850px; }
135
- .advads-conditions-table td, .advads-conditions-table td * { vertical-align: top; }
136
  .advads-conditions-table > tbody > tr { background: #eee; }
137
- .advads-condition-line-wrap { display: flex; flex-wrap: wrap; }
138
- .advads-condition-line-wrap > input { flex-grow: 1; }
139
  .advads-conditions-table > tbody > tr > td:last-child { padding-right: 10px; }
140
- .advads-conditions-table select { vertical-align: inherit; margin: 0; }
141
  .advads-conditions-table tr:first-child.advads-conditions-connector { display: none; }
142
  .advads-conditions-connector { text-align: center; }
143
  .advads-conditions-table > tbody > .advads-conditions-connector-and { background: none; }
144
- .advads-conditions-connector label { text-transform: uppercase; background: #fff; border: 1px solid #aaa; color: #555; }
 
 
 
 
 
 
 
145
  .advads-conditions-type:first-letter { text-transform: uppercase; }
146
  .advads-conditions-table .advads-conditions-connector .advads-error-message { display: none; }
147
 
148
  .post-type-advanced_ads #advads-ad-content-plain { width: 100%; }
149
  .advads-conditions-single th { vertical-align: top; }
150
  .advads-conditions-single { margin: 0; padding: 0 10px 0 0; line-height: 1em; }
151
- select + .advads-conditions-single { padding-left: 10px }
 
 
 
 
 
 
152
  .advads-conditions-single.disabled { display: none; opacity: .5; }
153
- .advads-conditions-table .advads-conditions-single.advads-buttonset label { margin-top: 0; margin-bottom: .3em; padding: 0 .5em; background: #f7f7f7; height: 26px; line-height: 26px; color: #555; border: 1px solid #ccc; border-radius: 0; font-family: inherit; box-shadow: none; }
 
 
 
 
 
 
 
 
 
 
 
154
  .advads-conditions-table .advads-conditions-single.advads-buttonset .advads-ui-state-active { border-color: #0074a2 !important; }
155
- .advads-conditions-single.advads-buttonset label span { margin: 0; padding: 0; line-height: inherit; }
156
- .advads-conditions-postid-buttons { padding: 0 10px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  .advads-conditions-postids-show-search { margin-left: .5em !important; }
158
  .advads-conditions-postids-list li { background: #F1F1F1; padding: 3px; }
159
  .advads-conditions-postids-list .remove { margin-right: 1em; font-size: .9em; }
160
  .advads-conditions-postids-autocomplete-suggestions li span.left { float: left; }
161
  .advads-conditions-postids-autocomplete-suggestions li span.right { float: right; color: #aaa; font-size: .8em; }
162
 
 
 
 
 
 
 
 
163
  #ad-display-box .advads-conditions-terms-show-search { height: 22px; line-height: 22px; font-weight: bold; font-size: 1.5em; }
164
  .advads-conditions-terms-search { display: none; }
165
  .post-type-advanced_ads #ad-parameters-box .advads-ad-parameters-spinner { display: block; float: none; }
@@ -170,6 +229,18 @@ select + .advads-conditions-single { padding-left: 10px }
170
  .post-type-advanced_ads #advanced-ad-output-margin input[type="number"] { width: 4.5em; }
171
  .post-type-advanced_ads #advanced-ad-output-margin label + label { margin-left: 1em; }
172
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  /* option lists */
174
  .advads-option-list { overflow: hidden; }
175
  .advads-option-list > .label { display: block; padding: 10px; font-weight: bold; color: #444; text-align: left; font-size: 100%; }
@@ -346,6 +417,121 @@ tr:hover .on-hover { display: block; }
346
  text-transform: uppercase;
347
  }
348
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  /**
350
  WELCOME PANEL
351
  */
@@ -587,6 +773,7 @@ a.advads-modal-close-background {
587
  .advanced-ads-feedback-review { background-color: #fbfbfb; border: 1px solid #eee; padding: 0.5em; }
588
  .advanced-ads-feedback-review-text { font-size: 1.2em; font-weight: 400; }
589
  .advanced-ads-feedback-review .dashicons { color: #ffb900; }
 
590
 
591
  /**
592
  - GENERAL
92
  .advads-metabox-notices .error { color: #dc3232; }
93
  .advads-metabox-notices .warning, .advads-message-warning { color: #de8400; }
94
 
95
+ .post-type-advanced_ads .misc-pub-visibility {
96
+ display: none;
97
+ }
98
+
99
  .post-type-advanced_ads #poststuff .meta-box-sortables .inside {
100
  margin: 0;
101
  padding: 0;
134
  .advads-conditions-new select:first-letter { text-transform: uppercase; }
135
  .advads-conditions-new select + .advads-loader { display: inline-block; vertical-align: middle; }
136
  .advads-display-conditions-remove + h5 { display: inline-block; margin-top: 0; margin-left: 1em; }
137
+
138
+ .advads-conditions-table { border-collapse: collapse; width: 100%; }
 
139
  .advads-conditions-table > tbody > tr { background: #eee; }
 
 
140
  .advads-conditions-table > tbody > tr > td:last-child { padding-right: 10px; }
 
141
  .advads-conditions-table tr:first-child.advads-conditions-connector { display: none; }
142
  .advads-conditions-connector { text-align: center; }
143
  .advads-conditions-table > tbody > .advads-conditions-connector-and { background: none; }
144
+ .advads-conditions-connector label {
145
+ text-transform: uppercase;
146
+ background: #fff;
147
+ border: 1px solid #aaa;
148
+ color: #555;
149
+ margin-top: 10px;
150
+ margin-bottom: 10px;
151
+ }
152
  .advads-conditions-type:first-letter { text-transform: uppercase; }
153
  .advads-conditions-table .advads-conditions-connector .advads-error-message { display: none; }
154
 
155
  .post-type-advanced_ads #advads-ad-content-plain { width: 100%; }
156
  .advads-conditions-single th { vertical-align: top; }
157
  .advads-conditions-single { margin: 0; padding: 0 10px 0 0; line-height: 1em; }
158
+ select + .advads-conditions-single { display: inline-flex; flex-wrap: wrap; align-items: center; }
159
+ #advads-ad-display-conditions select {
160
+ margin-right: 10px;
161
+ }
162
+ #advads-ad-display-conditions .advads-condition-line-wrap select {
163
+ margin-right: 20px;
164
+ }
165
  .advads-conditions-single.disabled { display: none; opacity: .5; }
166
+ .advads-conditions-table .advads-conditions-single.advads-buttonset label {
167
+ margin: 0.5em 0.5em 0.5em 0;
168
+ padding-right: 0;
169
+ padding-left: 0.5em;
170
+ background: #f7f7f7;
171
+ height: 28px;
172
+ line-height: 26px;
173
+ color: #555;
174
+ font-family: inherit;
175
+ box-shadow: none;
176
+ border: 1px solid #ccc;
177
+ }
178
  .advads-conditions-table .advads-conditions-single.advads-buttonset .advads-ui-state-active { border-color: #0074a2 !important; }
179
+ .advads-conditions-single.advads-buttonset label span {
180
+ margin: 0;
181
+ padding: 0;
182
+ line-height: inherit;
183
+ padding-left: 0.5em;
184
+ display: flex;
185
+ align-items: center;
186
+ }
187
+ .advads-conditions-single.advads-buttonset label span:after {
188
+ font-family: "dashicons";
189
+ padding: 0;
190
+ width: 28px;
191
+ display: inline-block;
192
+ border-left: 1px solid #ccc;
193
+ margin-left: 1em;
194
+ height: 28px;
195
+ line-height: 30px;
196
+ text-align: center;
197
+ color: #ccc;
198
+ }
199
+ .advads-conditions-single.advads-buttonset label:not(.advads-ui-state-active) span:after { content: "\f159"; }
200
+ .advads-conditions-single.advads-buttonset label.advads-ui-state-active span:after {
201
+ content: "\f12a";
202
+ color: white;
203
+ border-color: #0074a2;
204
+ }
205
+ .advads-conditions-not-selected.advads-notice-inline {
206
+ margin: 0;
207
+ }
208
+ .advads-conditions-single.advads-buttonset label.advads-ui-state-active:hover span:after { content: "\f153"; }
209
  .advads-conditions-postids-show-search { margin-left: .5em !important; }
210
  .advads-conditions-postids-list li { background: #F1F1F1; padding: 3px; }
211
  .advads-conditions-postids-list .remove { margin-right: 1em; font-size: .9em; }
212
  .advads-conditions-postids-autocomplete-suggestions li span.left { float: left; }
213
  .advads-conditions-postids-autocomplete-suggestions li span.right { float: right; color: #aaa; font-size: .8em; }
214
 
215
+ .advads-conditions-table td:nth-of-type(2) {
216
+ display: flex;
217
+ flex-wrap: wrap;
218
+ align-items: center;
219
+ gap: 10px;
220
+ }
221
+
222
  #ad-display-box .advads-conditions-terms-show-search { height: 22px; line-height: 22px; font-weight: bold; font-size: 1.5em; }
223
  .advads-conditions-terms-search { display: none; }
224
  .post-type-advanced_ads #ad-parameters-box .advads-ad-parameters-spinner { display: block; float: none; }
229
  .post-type-advanced_ads #advanced-ad-output-margin input[type="number"] { width: 4.5em; }
230
  .post-type-advanced_ads #advanced-ad-output-margin label + label { margin-left: 1em; }
231
 
232
+ @media screen and (max-width: 782px) {
233
+ .advads-conditions-table .advads-conditions-single.advads-buttonset label {
234
+ height: 40px;
235
+ line-height: 36px;
236
+ }
237
+
238
+ .advads-conditions-single.advads-buttonset label span:after {
239
+ height: 39px;
240
+ line-height: 40px;
241
+ }
242
+ }
243
+
244
  /* option lists */
245
  .advads-option-list { overflow: hidden; }
246
  .advads-option-list > .label { display: block; padding: 10px; font-weight: bold; color: #444; text-align: left; font-size: 100%; }
417
  text-transform: uppercase;
418
  }
419
 
420
+ /**
421
+ * Branded Page Header
422
+ */
423
+ /* Hide some h1 headlines and buttons created by WordPress on our pages since we show our custom header */
424
+ .post-type-advanced_ads .wrap .wp-heading-inline,
425
+ .advanced-ads_page_advanced-ads-groups .wrap .wp-heading-inline,
426
+ .post-type-advanced_ads .wrap .page-title-action
427
+ {
428
+ display: none;
429
+ }
430
+
431
+ #advads-header {
432
+ border-bottom: 1px solid #c3c4c7;
433
+ padding: 22px 0px;
434
+ margin-left: -20px;
435
+ background: #fff;
436
+ }
437
+
438
+ #advads-header-wrapper {
439
+ display: grid;
440
+ width: calc(100% - 20px);
441
+ grid-template-columns: max-content 1fr auto;
442
+ justify-content: start;
443
+ justify-items: start;
444
+ align-content: center;
445
+ align-items: start;
446
+ padding-left: 20px;
447
+ gap: 10px 10px;
448
+ }
449
+
450
+ #advads-header svg {
451
+ display: inline;
452
+ margin: 0;
453
+ width: 32px;
454
+ }
455
+
456
+ #advads-header h1 {
457
+ display: inline;
458
+ font-weight: 300;
459
+ margin: 0 10px;
460
+ line-height: 30px;
461
+ vertical-align: top;
462
+ }
463
+
464
+ #advads-header .header-action {
465
+ margin-right: 10px;
466
+ border: 1px solid #1B183A;
467
+ font-weight: 400;
468
+ color: #1B183A;
469
+ background: #fff;
470
+ }
471
+
472
+ #advads-header .header-action .dashicons {
473
+ line-height: 30px;
474
+ margin-left: -5px;
475
+ padding-right: 5px;
476
+ }
477
+
478
+ #advads-header #advads-header-links {
479
+ margin-right: 20px;
480
+ }
481
+
482
+ #advads-header #advads-header-links a {
483
+ margin-left: 10px;
484
+ }
485
+
486
+ #advads-header #advads-header-links .advads-upgrade {
487
+ font-weight: bold;
488
+ text-decoration: none;
489
+ color: #1d2327;
490
+ }
491
+
492
+ #advads-header #advads-links a {
493
+ color: #1B183A;
494
+ }
495
+
496
+ @media (max-width: 782px) {
497
+ #advads-header-wrapper {
498
+ grid-template-columns: 1fr;
499
+ }
500
+ #advads-header .header-action .dashicons {
501
+ line-height: 40px;
502
+ }
503
+ #advads-header #advads-header-links {
504
+ grid-column-end: auto;
505
+ }
506
+ }
507
+
508
+ /**
509
+ * Custom Boxes, similar to WP Metaboxes
510
+ */
511
+ .advads-box {
512
+ margin-bottom: 20px;
513
+ padding: 0px;
514
+ }
515
+ .advads-box h2 {
516
+ border-bottom: 1px solid #eee;
517
+ font-size: 14px;
518
+ padding: 8px 12px;
519
+ margin: 0;
520
+ line-height: 1.4;
521
+ }
522
+ .advads-box-wrapper {
523
+ display: flex;
524
+ justify-content: space-between;
525
+ flex-wrap: wrap;
526
+ column-gap: 20px;
527
+ }
528
+ .advads-box-half {
529
+ flex: 1 0 calc(50% - 20px);
530
+ }
531
+ .advads-box-third {
532
+ flex: 1 0 calc(33% - 20px);
533
+ }
534
+
535
  /**
536
  WELCOME PANEL
537
  */
773
  .advanced-ads-feedback-review { background-color: #fbfbfb; border: 1px solid #eee; padding: 0.5em; }
774
  .advanced-ads-feedback-review-text { font-size: 1.2em; font-weight: 400; }
775
  .advanced-ads-feedback-review .dashicons { color: #ffb900; }
776
+ .row-actions .aa-get-pro { font-weight: bold; color: #0474A2; }
777
 
778
  /**
779
  - GENERAL
admin/assets/js/conditions.js CHANGED
@@ -97,7 +97,7 @@ jQuery( document ).ready(
97
  minLength: 1,
98
  select: function ( event, ui ) {
99
  // append new line with input fields.
100
- $( '<label class="button advads-ui-state-active">' + ui.item.label + '<input type="hidden" name="' + self.data( 'inputName' ) + '" value="' + ui.item.value + '"></label>' ).appendTo( self.siblings( '.advads-conditions-terms-buttons' ) )
101
 
102
  // show / hide other elements
103
  // $( '.advads-display-conditions-individual-post' ).hide();
@@ -135,7 +135,7 @@ jQuery( document ).ready(
135
  minLength: 1,
136
  select: function ( event, ui ) {
137
  // append new line with input fields
138
- var newline = $( '<label class="button advads-ui-state-active">' + ui.item.label + '</label>' )
139
  $( '<input type="hidden" name="' + self.dataset.fieldName + '[value][]" value="' + ui.item.value + '"/>' ).appendTo( newline )
140
  newline.insertBefore( $( self ).parent( '.advads-conditions-postids-search-line' ) )
141
  },
97
  minLength: 1,
98
  select: function ( event, ui ) {
99
  // append new line with input fields.
100
+ $( '<label class="button advads-button advads-ui-state-active"><span class="advads-button-text">' + ui.item.label + '<input type="hidden" name="' + self.data( 'inputName' ) + '" value="' + ui.item.value + '"></span></label>' ).appendTo( self.siblings( '.advads-conditions-terms-buttons' ) )
101
 
102
  // show / hide other elements
103
  // $( '.advads-display-conditions-individual-post' ).hide();
135
  minLength: 1,
136
  select: function ( event, ui ) {
137
  // append new line with input fields
138
+ var newline = $( '<label class="button advads-button advads-ui-state-active"><span class="advads-button-text">' + ui.item.label + '</span></label>' )
139
  $( '<input type="hidden" name="' + self.dataset.fieldName + '[value][]" value="' + ui.item.value + '"/>' ).appendTo( newline )
140
  newline.insertBefore( $( self ).parent( '.advads-conditions-postids-search-line' ) )
141
  },
admin/assets/js/ui.js CHANGED
@@ -30,7 +30,7 @@
30
  var $label = jQuery( 'label[for="' + $changed.attr( 'id' ) + '"]', $ancestor );
31
 
32
  if ( type === 'radio' ) {
33
- $buttonset.parent().find( 'label' ).removeClass( 'advads-ui-state-active' );
34
  }
35
 
36
  if ( $changed.is( ':checked' ) ) {
@@ -49,16 +49,31 @@
49
  var $that = jQuery( this );
50
 
51
  $that.each( function() {
52
- $this = jQuery( this );
53
 
54
- if ( $this.data( 'advads_buttonset' ) ) {
55
  return true;
56
  }
57
- $this.data( 'advads_buttonset', true );
58
 
59
  var items = 'input[type=checkbox], input[type=radio]';
60
- var $all_buttons = $this.find( items );
61
- $this.addClass( 'advads-buttonset' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
  $all_buttons.advads_button();
64
  } );
30
  var $label = jQuery( 'label[for="' + $changed.attr( 'id' ) + '"]', $ancestor );
31
 
32
  if ( type === 'radio' ) {
33
+ $ancestor.find( 'label' ).removeClass( 'advads-ui-state-active' );
34
  }
35
 
36
  if ( $changed.is( ':checked' ) ) {
49
  var $that = jQuery( this );
50
 
51
  $that.each( function() {
52
+ $buttonset = jQuery( this );
53
 
54
+ if ( $buttonset.data( 'advads_buttonset' ) ) {
55
  return true;
56
  }
57
+ $buttonset.data( 'advads_buttonset', true );
58
 
59
  var items = 'input[type=checkbox], input[type=radio]';
60
+ var $all_buttons = $buttonset.find( items );
61
+
62
+ if ( ! $all_buttons.length ) {
63
+ return;
64
+ }
65
+
66
+ // Show selected checkboxes first.
67
+ if ( jQuery.escapeSelector ) {
68
+ $items = jQuery();
69
+ $all_buttons.filter( ':checked' ).each( function() {
70
+ $items = $items.add( $buttonset.find( 'label[for="' + jQuery.escapeSelector( this.id ) + '"]' ) );
71
+ $items = $items.add( this );
72
+ } );
73
+ $items.prependTo( $buttonset );
74
+ }
75
+
76
+ $buttonset.addClass( 'advads-buttonset' );
77
 
78
  $all_buttons.advads_button();
79
  } );
admin/class-advanced-ads-admin.php CHANGED
@@ -246,7 +246,6 @@ class Advanced_Ads_Admin {
246
  global $post;
247
  wp_enqueue_media( array( 'post' => $post ) );
248
  }
249
-
250
  }
251
 
252
  /**
@@ -255,7 +254,6 @@ class Advanced_Ads_Admin {
255
  * @return bool true if screen belongs to Advanced Ads
256
  */
257
  public static function screen_belongs_to_advanced_ads() {
258
-
259
  if ( ! function_exists( 'get_current_screen' ) ) {
260
  return false;
261
  }
@@ -333,7 +331,7 @@ class Advanced_Ads_Admin {
333
 
334
  /**
335
  * Remove all registered admin_notices from AA screens
336
- * - we need to use this or some users have half or more of their viewports cluttered with unrelated notices
337
  */
338
  if ( $this->screen_belongs_to_advanced_ads() ) {
339
  remove_all_actions( 'admin_notices' );
@@ -354,6 +352,10 @@ class Advanced_Ads_Admin {
354
  }
355
  }
356
 
 
 
 
 
357
  // Show success notice after starter setup was imported. Registered here because it will be visible only once.
358
  if ( isset( $_GET['message'] ) && 'advanced-ads-starter-setup-success' === $_GET['message'] ) {
359
  add_action( 'advanced-ads-admin-notices', array( $this, 'starter_setup_success_message' ) );
@@ -365,10 +367,13 @@ class Advanced_Ads_Admin {
365
  && current_user_can( Advanced_Ads_Plugin::user_cap( 'advanced_ads_edit_ads' ) )
366
  && ( ! isset( $screen->id ) || 'toplevel_page_advanced-ads' !== $screen->id ) ) {
367
  $this->notices = Advanced_Ads_Admin_Notices::get_instance()->notices;
 
 
368
  Advanced_Ads_Admin_Notices::get_instance()->display_notices();
369
 
370
  // allow other Advanced Ads plugins to show admin notices at this late stage.
371
  do_action( 'advanced-ads-admin-notices' );
 
372
  }
373
  }
374
 
@@ -380,7 +385,6 @@ class Advanced_Ads_Admin {
380
  * @return array $links
381
  */
382
  public function add_plugin_links( $links ) {
383
-
384
  if ( ! is_array( $links ) ) {
385
  return $links;
386
  }
@@ -390,7 +394,11 @@ class Advanced_Ads_Admin {
390
  array_unshift( $links, $support_link );
391
 
392
  // add link to add-ons.
393
- $extend_link = '<a href="' . ADVADS_URL . 'add-ons/?utm_source=advanced-ads&utm_medium=link&utm_campaign=plugin-page" target="_blank">' . __( 'Add-Ons', 'advanced-ads' ) . '</a>';
 
 
 
 
394
  array_unshift( $links, $extend_link );
395
 
396
  return $links;
@@ -402,7 +410,6 @@ class Advanced_Ads_Admin {
402
  * @since 1.7.14
403
  */
404
  public function add_deactivation_logic() {
405
-
406
  $screen = get_current_screen();
407
  if ( ! isset( $screen->id ) || ! in_array( $screen->id, array( 'plugins', 'plugins-network' ), true ) ) {
408
  return;
@@ -456,7 +463,6 @@ class Advanced_Ads_Admin {
456
  if ( isset( $form['advanced_ads_disable_reason'] )
457
  && 'get help' === $form['advanced_ads_disable_reason']
458
  && ! empty( $form['advanced_ads_disable_reply_email'] ) ) {
459
-
460
  $email = trim( $form['advanced_ads_disable_reply_email'] );
461
  if ( ! is_email( $email ) ) {
462
  die();
@@ -494,7 +500,6 @@ class Advanced_Ads_Admin {
494
  $success = wp_mail( 'improve@wpadvancedads.com', $subject, $text, $headers );
495
 
496
  die();
497
-
498
  }
499
 
500
  /**
@@ -667,7 +672,6 @@ class Advanced_Ads_Admin {
667
 
668
  /* translators: %s is the URL to add a new review, https://wordpress.org/support/plugin/advanced-ads/reviews/#new-post */
669
  return sprintf( __( 'Thank the developer with a &#9733;&#9733;&#9733;&#9733;&#9733; review on <a href="%s" target="_blank">wordpress.org</a>', 'advanced-ads' ), 'https://wordpress.org/support/plugin/advanced-ads/reviews/#new-post' );
670
-
671
  }
672
 
673
  return $default_text;
@@ -677,7 +681,6 @@ class Advanced_Ads_Admin {
677
  * Import a starter setup for new users
678
  */
679
  public function import_starter_setup() {
680
-
681
  if (
682
  ! isset( $_GET['action'] )
683
  || 'advanced_ads_starter_setup' !== $_GET['action']
@@ -742,4 +745,30 @@ class Advanced_Ads_Admin {
742
  self::$admin_settings = $new_settings;
743
  }
744
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
745
  }
246
  global $post;
247
  wp_enqueue_media( array( 'post' => $post ) );
248
  }
 
249
  }
250
 
251
  /**
254
  * @return bool true if screen belongs to Advanced Ads
255
  */
256
  public static function screen_belongs_to_advanced_ads() {
 
257
  if ( ! function_exists( 'get_current_screen' ) ) {
258
  return false;
259
  }
331
 
332
  /**
333
  * Remove all registered admin_notices from AA screens
334
+ * we need to use this or some users have half or more of their viewports cluttered with unrelated notices
335
  */
336
  if ( $this->screen_belongs_to_advanced_ads() ) {
337
  remove_all_actions( 'admin_notices' );
352
  }
353
  }
354
 
355
+ if ( $this->screen_belongs_to_advanced_ads() ) {
356
+ $this->branded_admin_header();
357
+ }
358
+
359
  // Show success notice after starter setup was imported. Registered here because it will be visible only once.
360
  if ( isset( $_GET['message'] ) && 'advanced-ads-starter-setup-success' === $_GET['message'] ) {
361
  add_action( 'advanced-ads-admin-notices', array( $this, 'starter_setup_success_message' ) );
367
  && current_user_can( Advanced_Ads_Plugin::user_cap( 'advanced_ads_edit_ads' ) )
368
  && ( ! isset( $screen->id ) || 'toplevel_page_advanced-ads' !== $screen->id ) ) {
369
  $this->notices = Advanced_Ads_Admin_Notices::get_instance()->notices;
370
+
371
+ echo '<div class="wrap">';
372
  Advanced_Ads_Admin_Notices::get_instance()->display_notices();
373
 
374
  // allow other Advanced Ads plugins to show admin notices at this late stage.
375
  do_action( 'advanced-ads-admin-notices' );
376
+ echo '</div>';
377
  }
378
  }
379
 
385
  * @return array $links
386
  */
387
  public function add_plugin_links( $links ) {
 
388
  if ( ! is_array( $links ) ) {
389
  return $links;
390
  }
394
  array_unshift( $links, $support_link );
395
 
396
  // add link to add-ons.
397
+ if ( defined( 'AAP_VERSION' ) ) {
398
+ $extend_link = '<a href="' . ADVADS_URL . 'add-ons/?utm_source=advanced-ads&utm_medium=link&utm_campaign=plugin-page-add-ons" target="_blank">' . __( 'Add-Ons', 'advanced-ads' ) . '</a>';
399
+ } else {
400
+ $extend_link = '<a href="' . ADVADS_URL . 'add-ons/all-access/?utm_source=advanced-ads&utm_medium=link&utm_campaign=plugin-page-features" target="_blank" class="aa-get-pro">' . __( 'See Pro Features', 'advanced-ads' ) . '</a>';
401
+ }
402
  array_unshift( $links, $extend_link );
403
 
404
  return $links;
410
  * @since 1.7.14
411
  */
412
  public function add_deactivation_logic() {
 
413
  $screen = get_current_screen();
414
  if ( ! isset( $screen->id ) || ! in_array( $screen->id, array( 'plugins', 'plugins-network' ), true ) ) {
415
  return;
463
  if ( isset( $form['advanced_ads_disable_reason'] )
464
  && 'get help' === $form['advanced_ads_disable_reason']
465
  && ! empty( $form['advanced_ads_disable_reply_email'] ) ) {
 
466
  $email = trim( $form['advanced_ads_disable_reply_email'] );
467
  if ( ! is_email( $email ) ) {
468
  die();
500
  $success = wp_mail( 'improve@wpadvancedads.com', $subject, $text, $headers );
501
 
502
  die();
 
503
  }
504
 
505
  /**
672
 
673
  /* translators: %s is the URL to add a new review, https://wordpress.org/support/plugin/advanced-ads/reviews/#new-post */
674
  return sprintf( __( 'Thank the developer with a &#9733;&#9733;&#9733;&#9733;&#9733; review on <a href="%s" target="_blank">wordpress.org</a>', 'advanced-ads' ), 'https://wordpress.org/support/plugin/advanced-ads/reviews/#new-post' );
 
675
  }
676
 
677
  return $default_text;
681
  * Import a starter setup for new users
682
  */
683
  public function import_starter_setup() {
 
684
  if (
685
  ! isset( $_GET['action'] )
686
  || 'advanced_ads_starter_setup' !== $_GET['action']
745
  self::$admin_settings = $new_settings;
746
  }
747
  }
748
+
749
+ /**
750
+ * Add an Advanced Ads branded header to plugin pages
751
+ */
752
+ private function branded_admin_header() {
753
+ $screen_id = get_current_screen()->id;
754
+ // manually set a few page titles
755
+ switch ( $screen_id ) {
756
+ case 'edit-advanced_ads': // ad overview
757
+ $title = __( 'Your Ads', 'advanced-ads' );
758
+ break;
759
+ case 'advanced-ads_page_advanced-ads-groups': // ad groups
760
+ $title = __( 'Your Groups', 'advanced-ads' );
761
+ break;
762
+ case 'advanced-ads_page_advanced-ads-placements':
763
+ $title = __( 'Your Placements', 'advanced-ads' );
764
+ break;
765
+ case 'advanced-ads_page_advanced-ads-settings':
766
+ $title = __( 'Advanced Ads Settings', 'advanced-ads' );
767
+ break;
768
+ default:
769
+ $title = get_admin_page_title();
770
+ break;
771
+ }
772
+ include ADVADS_BASE_PATH . 'admin/views/header.php';
773
+ }
774
  }
admin/includes/class-menu.php CHANGED
@@ -63,7 +63,7 @@ class Advanced_Ads_Admin_Menu {
63
  // use the overview page only when there is an ad already.
64
  if ( $has_ads ) {
65
  add_menu_page(
66
- __( 'Overview', 'advanced-ads' ),
67
  'Advanced Ads',
68
  Advanced_Ads_Plugin::user_cap( 'advanced_ads_see_interface' ),
69
  $this->plugin_slug,
@@ -71,7 +71,17 @@ class Advanced_Ads_Admin_Menu {
71
  Advanced_Ads_Plugin::get_icon_svg(),
72
  '58.74'
73
  );
 
 
 
 
 
 
 
 
 
74
  }
 
75
  // forward Ads link to new-ad page when there is no ad existing yet.
76
  // the target to post-new.php needs the extra "new" or any other attribute, since the original add-ad link was removed by CSS using the exact href attribute as a selector.
77
  $target = ( ! $has_ads ) ? 'post-new.php?post_type=' . Advanced_Ads::POST_TYPE_SLUG . '&new=new' : 'edit.php?post_type=' . Advanced_Ads::POST_TYPE_SLUG;
@@ -86,7 +96,7 @@ class Advanced_Ads_Admin_Menu {
86
  // display the main overview page as second item when we don’t have ads yet.
87
  if ( ! $has_ads ) {
88
  add_menu_page(
89
- __( 'Overview', 'advanced-ads' ),
90
  'Advanced Ads',
91
  Advanced_Ads_Plugin::user_cap( 'advanced_ads_see_interface' ),
92
  $this->plugin_slug,
@@ -97,8 +107,8 @@ class Advanced_Ads_Admin_Menu {
97
 
98
  add_submenu_page(
99
  $this->plugin_slug,
100
- __( 'Overview', 'advanced-ads' ),
101
- __( 'Overview', 'advanced-ads' ),
102
  Advanced_Ads_Plugin::user_cap( 'advanced_ads_see_interface' ),
103
  $this->plugin_slug,
104
  array( $this, 'display_overview_page' )
63
  // use the overview page only when there is an ad already.
64
  if ( $has_ads ) {
65
  add_menu_page(
66
+ __( 'Dashboard', 'advanced-ads' ),
67
  'Advanced Ads',
68
  Advanced_Ads_Plugin::user_cap( 'advanced_ads_see_interface' ),
69
  $this->plugin_slug,
71
  Advanced_Ads_Plugin::get_icon_svg(),
72
  '58.74'
73
  );
74
+ // the main menu entry automatically creates a submenu entry with the title "Advanced Ads"
75
+ // to show another title, we needed to create a submenu entry that uses the same page menu slug as the parent menu item
76
+ add_submenu_page(
77
+ $this->plugin_slug,
78
+ __( 'Dashboard', 'advanced-ads' ),
79
+ __( 'Dashboard', 'advanced-ads' ),
80
+ Advanced_Ads_Plugin::user_cap( 'advanced_ads_edit_ads' ),
81
+ $this->plugin_slug
82
+ );
83
  }
84
+
85
  // forward Ads link to new-ad page when there is no ad existing yet.
86
  // the target to post-new.php needs the extra "new" or any other attribute, since the original add-ad link was removed by CSS using the exact href attribute as a selector.
87
  $target = ( ! $has_ads ) ? 'post-new.php?post_type=' . Advanced_Ads::POST_TYPE_SLUG . '&new=new' : 'edit.php?post_type=' . Advanced_Ads::POST_TYPE_SLUG;
96
  // display the main overview page as second item when we don’t have ads yet.
97
  if ( ! $has_ads ) {
98
  add_menu_page(
99
+ __( 'Dashboard', 'advanced-ads' ),
100
  'Advanced Ads',
101
  Advanced_Ads_Plugin::user_cap( 'advanced_ads_see_interface' ),
102
  $this->plugin_slug,
107
 
108
  add_submenu_page(
109
  $this->plugin_slug,
110
+ __( 'Dashboard', 'advanced-ads' ),
111
+ __( 'Dashboard', 'advanced-ads' ),
112
  Advanced_Ads_Plugin::user_cap( 'advanced_ads_see_interface' ),
113
  $this->plugin_slug,
114
  array( $this, 'display_overview_page' )
admin/includes/class-meta-box.php CHANGED
@@ -509,7 +509,7 @@ class Advanced_Ads_Admin_Meta_Boxes {
509
  if ( ! current_user_can( Advanced_Ads_Plugin::user_cap( 'advanced_ads_see_interface' ) ) ) {
510
  return;
511
  }
512
- add_meta_box( 'advads_dashboard_widget', __( 'Ads Dashboard', 'advanced-ads' ), array( $this, 'dashboard_widget_function' ), 'dashboard', 'side', 'high' );
513
  }
514
 
515
  /**
509
  if ( ! current_user_can( Advanced_Ads_Plugin::user_cap( 'advanced_ads_see_interface' ) ) ) {
510
  return;
511
  }
512
+ add_meta_box( 'advads_dashboard_widget', __( 'Dashboard', 'advanced-ads' ), array( $this, 'dashboard_widget_function' ), 'dashboard', 'side', 'high' );
513
  }
514
 
515
  /**
admin/includes/class-overview-widgets.php CHANGED
@@ -632,7 +632,7 @@ endif;
632
  $add_ons['selling']['link_title'] = __( 'Activate now', 'advanced-ads' );
633
  $installed_pro_plugins++;
634
  } elseif ( class_exists( 'Advanced_Ads_Selling_Plugin' ) ) {
635
- $add_ons['selling']['link'] = ADVADS_URL . 'manual/getting-started-selling-ads/?utm_source=advanced-ads&utm_medium=link&utm_campaign=overview-add-ons-manual';
636
  $add_ons['selling']['desc'] = '';
637
  $add_ons['selling']['installed'] = true;
638
  $add_ons['selling']['order'] = 20;
@@ -667,7 +667,7 @@ endif;
667
  $add_ons['slider']['link'] = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=advanced-ads-slider/slider.php&amp', 'activate-plugin_advanced-ads-slider/slider.php' );
668
  $add_ons['slider']['link_title'] = __( 'Activate now', 'advanced-ads' );
669
  } elseif ( class_exists( 'Advanced_Ads_Slider_Plugin' ) ) {
670
- $add_ons['slider']['link'] = ADVADS_URL . 'add-ons/slider/?utm_source=advanced-ads&utm_medium=link&utm_campaign=overview-add-ons-manual';
671
  $add_ons['slider']['desc'] = '';
672
  $add_ons['slider']['installed'] = true;
673
  $add_ons['slider']['order'] = 20;
632
  $add_ons['selling']['link_title'] = __( 'Activate now', 'advanced-ads' );
633
  $installed_pro_plugins++;
634
  } elseif ( class_exists( 'Advanced_Ads_Selling_Plugin' ) ) {
635
+ $add_ons['selling']['link'] = ADVADS_URL . 'manual/selling-ads/?utm_source=advanced-ads&utm_medium=link&utm_campaign=overview-add-ons-manual';
636
  $add_ons['selling']['desc'] = '';
637
  $add_ons['selling']['installed'] = true;
638
  $add_ons['selling']['order'] = 20;
667
  $add_ons['slider']['link'] = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=advanced-ads-slider/slider.php&amp', 'activate-plugin_advanced-ads-slider/slider.php' );
668
  $add_ons['slider']['link_title'] = __( 'Activate now', 'advanced-ads' );
669
  } elseif ( class_exists( 'Advanced_Ads_Slider_Plugin' ) ) {
670
+ $add_ons['slider']['link'] = ADVADS_URL . 'manual/ad-slider/?utm_source=advanced-ads&utm_medium=link&utm_campaign=overview-add-ons-manual';
671
  $add_ons['slider']['desc'] = '';
672
  $add_ons['slider']['installed'] = true;
673
  $add_ons['slider']['order'] = 20;
admin/views/ad-group.php CHANGED
@@ -11,6 +11,9 @@
11
 
12
  $ad_groups_list = new Advanced_Ads_Groups_List();
13
 
 
 
 
14
  // create new group.
15
  if ( isset( $_REQUEST['advads-group-add-nonce'] ) ) {
16
  $create_result = $ad_groups_list->create_group();
@@ -19,9 +22,9 @@ if ( isset( $_REQUEST['advads-group-add-nonce'] ) ) {
19
  // potential error comes from WP_Error and is no user input.
20
  // phpcs:ignore
21
  $error_string = $create_result->get_error_message();
22
- echo '<div id="message" class="error"><p>' . esc_html( $error_string ) . '</p></div>';
23
  } else {
24
- echo '<div id="message" class="updated"><p>' . esc_html__( 'Ad Group successfully created', 'advanced-ads' ) . '</p></div>';
25
  }
26
  }
27
  // save updated groups.
@@ -32,11 +35,14 @@ if ( isset( $_REQUEST['advads-group-update-nonce'] ) ) {
32
  $error_string = $udpate_result->get_error_message();
33
  // potential error comes from WP_Error and is no user input.
34
  // phpcs:ignore
35
- echo '<div id="message" class="error"><p>' . $error_string . '</p></div>';
36
  } else {
37
- echo '<div id="message" class="updated"><p>' . esc_html__( 'Ad Groups successfully updated', 'advanced-ads' ) . '</p></div>';
38
  }
39
  }
 
 
 
40
 
41
  $last_edited_group_id = 0;
42
  if ( isset( $_REQUEST['advads-last-edited-group'] ) ) {
@@ -53,18 +59,11 @@ if ( isset( $_REQUEST['advads-last-edited-group'] ) ) {
53
 
54
  ?>
55
  <div class="wrap nosubsub">
56
- <h1 class="wp-heading-inline">
57
- <?php
58
- echo esc_html( $title );
59
- ?>
60
- </h1>
61
  <?php
62
 
63
  if ( ! empty( $_REQUEST['s'] ) ) {
64
  printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;', 'advanced-ads' ) . '</span>', esc_html( wp_unslash( $_REQUEST['s'] ) ) );
65
- } else {
66
- $group_page_url = Advanced_Ads_Groups_List::group_page_url( array( 'action' => 'edit' ) );
67
- echo ' <a href="' . esc_url( $group_page_url ) . '" id="advads-new-ad-group-link" class="add-new-h2">' . esc_html( $tax->labels->add_new_item ) . '</a>';
68
  }
69
  ?>
70
  <form id="advads-new-group-form" action="" method="post" style="display:none;">
@@ -100,13 +99,6 @@ if ( isset( $_REQUEST['advads-last-edited-group'] ) ) {
100
 
101
  <div id="col-container">
102
  <div class="col-wrap">
103
- <div class="tablenav top">
104
- <form class="search-form" action="" method="get">
105
- <!--input type="hidden" name="taxonomy" value="<?php echo esc_attr( $taxonomy ); ?>" /-->
106
- <input type="hidden" name="page" value="advanced-ads-groups" />
107
- <?php $wp_list_table->search_box( $tax->labels->search_items, 'tag' ); ?>
108
- </form>
109
- </div>
110
  <div id="advads-ad-group-list">
111
  <form action="" method="post" id="advads-form-groups">
112
  <?php wp_nonce_field( 'update-advads-groups', 'advads-group-update-nonce' ); ?>
11
 
12
  $ad_groups_list = new Advanced_Ads_Groups_List();
13
 
14
+ ?>
15
+ <div class="wrap">
16
+ <?php
17
  // create new group.
18
  if ( isset( $_REQUEST['advads-group-add-nonce'] ) ) {
19
  $create_result = $ad_groups_list->create_group();
22
  // potential error comes from WP_Error and is no user input.
23
  // phpcs:ignore
24
  $error_string = $create_result->get_error_message();
25
+ echo '<div id="message" class="error inline"><p>' . esc_html( $error_string ) . '</p></div>';
26
  } else {
27
+ echo '<div id="message" class="updated inline"><p>' . esc_html__( 'Ad Group successfully created', 'advanced-ads' ) . '</p></div>';
28
  }
29
  }
30
  // save updated groups.
35
  $error_string = $udpate_result->get_error_message();
36
  // potential error comes from WP_Error and is no user input.
37
  // phpcs:ignore
38
+ echo '<div id="message" class="error inline"><p>' . $error_string . '</p></div>';
39
  } else {
40
+ echo '<div id="message" class="updated inline"><p>' . esc_html__( 'Ad Groups successfully updated', 'advanced-ads' ) . '</p></div>';
41
  }
42
  }
43
+ ?>
44
+ </div>
45
+ <?php
46
 
47
  $last_edited_group_id = 0;
48
  if ( isset( $_REQUEST['advads-last-edited-group'] ) ) {
59
 
60
  ?>
61
  <div class="wrap nosubsub">
62
+ <h2 style="display: none;"><!-- There needs to be an empty H2 headline at the top of the page so that WordPress can properly position admin notifications --></h2>
 
 
 
 
63
  <?php
64
 
65
  if ( ! empty( $_REQUEST['s'] ) ) {
66
  printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;', 'advanced-ads' ) . '</span>', esc_html( wp_unslash( $_REQUEST['s'] ) ) );
 
 
 
67
  }
68
  ?>
69
  <form id="advads-new-group-form" action="" method="post" style="display:none;">
99
 
100
  <div id="col-container">
101
  <div class="col-wrap">
 
 
 
 
 
 
 
102
  <div id="advads-ad-group-list">
103
  <form action="" method="post" id="advads-form-groups">
104
  <?php wp_nonce_field( 'update-advads-groups', 'advads-group-update-nonce' ); ?>
admin/views/ad-info-top.php CHANGED
@@ -1,10 +1,10 @@
1
  <?php // display ad wizard controls.
2
- ?><button type="button" id="advads-start-wizard" class="dashicons-before dashicons-controls-play page-title-action"><?php esc_html_e( 'Start Wizard', 'advanced-ads' ); ?></button>
3
- <button type="button" id="advads-stop-wizard" class="advads-stop-wizard dashicons-before dashicons-no page-title-action hidden"><?php esc_html_e( 'Stop Wizard', 'advanced-ads' ); ?></button>
4
  <script>
5
  // move wizard button to head.
6
- jQuery('#advads-start-wizard').appendTo('h1');
7
- jQuery('.advads-stop-wizard').insertAfter('h1');
8
  </script>
9
  <?php
10
  // show wizard welcome message.
1
  <?php // display ad wizard controls.
2
+ ?><button id="advads-start-wizard" type="button" class="header-action button"><span class="dashicons dashicons-controls-play"></span><?php esc_html_e( 'Start Wizard', 'advanced-ads' ); ?></button>
3
+ <button id="advads-stop-wizard" type="button" class="header-action button advads-stop-wizard hidden"><span class="dashicons dashicons-no"></span><?php esc_html_e( 'Stop Wizard', 'advanced-ads' ); ?></button>
4
  <script>
5
  // move wizard button to head.
6
+ jQuery('#advads-start-wizard').appendTo('#advads-header-actions');
7
+ jQuery('.advads-stop-wizard').appendTo('#advads-header-actions');
8
  </script>
9
  <?php
10
  // show wizard welcome message.
admin/views/ad-info.php CHANGED
@@ -21,7 +21,7 @@
21
  ),
22
  )
23
  ),
24
- esc_url( ADVADS_URL ) . 'manual/display-ads/?utm_source=advanced-ads&utm_medium=link&utm_campaign=edit'
25
  );
26
  ?>
27
  </span>
21
  ),
22
  )
23
  ),
24
+ esc_url( ADVADS_URL ) . 'manual/first-ad/?utm_source=advanced-ads&utm_medium=link&utm_campaign=edit-ad-title'
25
  );
26
  ?>
27
  </span>
admin/views/header.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Header on admin pages
4
+ *
5
+ * @var string $title page title.
6
+ * @var string $screen_id ID of the current screen.
7
+ */
8
+ ?>
9
+ <div id="advads-header">
10
+ <div id="advads-header-wrapper">
11
+ <div>
12
+ <svg class="advads-header-logo" xmlns="http://www.w3.org/2000/svg" x="0" y="0" height="30" width="30" viewBox="0 0 351.7 352" xml:space="preserve"><path d="M252.2 149.6v125.1h-174.9v-174.9H202.4c-5.2-11.8-8-24.7-8-38.5s3-26.7 8-38.5h-37.7H0v267.9l8.8 8.8 -8.8-8.8C0 324.5 27.5 352 61.3 352l0 0h103.4 164.5V149.3c-11.8 5.2-25 8.3-38.8 8.3C276.9 157.6 264 154.6 252.2 149.6z" fill="#1C1B3A"/><circle cx="290.4" cy="61.3" r="61.3" fill="#0E75A4"/></svg>
13
+ <h1><?php echo esc_html( $title ); ?></h1>
14
+ </div>
15
+ <div id="advads-header-actions">
16
+ <?php
17
+ // load page-specific information
18
+ $manual_url = 'manual/';
19
+ switch ( $screen_id ) :
20
+ case 'advanced_ads': // ad edit page
21
+ case 'edit-advanced_ads': // ad overview
22
+ ?>
23
+ <a href="<?php echo esc_url( admin_url( 'post-new.php?post_type=advanced_ads' ) ); ?>" class="header-action button" ><span class="dashicons dashicons-plus"></span><?php esc_html_e( 'New Ad', 'advanced-ads' ); ?></a>
24
+ <?php
25
+ $manual_url = 'manual/first-ad/';
26
+ break;
27
+ case 'advanced-ads_page_advanced-ads-groups': // ad groups
28
+ ?>
29
+ <a href="#" id="advads-new-ad-group-link" class="header-action button"><span class="dashicons dashicons-plus"></span><?php esc_html_e( 'New Ad Group', 'advanced-ads' ); ?></a>
30
+ <?php
31
+ $manual_url = 'manual/rotate-ad/';
32
+ break;
33
+ case 'advanced-ads_page_advanced-ads-placements':
34
+ ?>
35
+ <a href="#" class="header-action button" title="<?php esc_html_e( 'Create a new placement', 'advanced-ads' ); ?>" onclick="advads_toggle('.advads-placements-new-form'); advads_scroll_to_element('#advads-placements-new-form');"><span class="dashicons dashicons-plus"></span><?php esc_html_e( 'New Placement', 'advanced-ads' ); ?></a>
36
+ <?php
37
+ $manual_url = 'manual/placements/';
38
+ break;
39
+ endswitch;
40
+ $manual_url = apply_filters( 'advanced-ads-admin-header-manual-url', $manual_url, $screen_id );
41
+ ?>
42
+ </div>
43
+ <div id="advads-header-links">
44
+ <?php if ( ! defined( 'AAP_VERSION' ) ) : ?>
45
+ <a class="advads-upgrade" href="<?php echo esc_url( ADVADS_URL ); ?>add-ons/?utm_source=advanced-ads&utm_medium=link&utm_campaign=header-upgrade-<?php echo esc_attr( $screen_id ); ?>" target="_blank"><?php esc_html_e( 'See all Add-ons', 'advanced-ads' ); ?></a>
46
+ <?php endif; ?>
47
+ <a href="<?php echo esc_url( ADVADS_URL . $manual_url ); ?>?utm_source=advanced-ads&utm_medium=link&utm_campaign=header-manual-<?php echo esc_attr( $screen_id ); ?>" target="_blank"><?php esc_html_e( 'Manual', 'advanced-ads' ); ?></a>
48
+ </div>
49
+ </div>
50
+ </div>
admin/views/notices/plugin_error.php CHANGED
@@ -1 +1 @@
1
- <div class="notice notice-error advads-admin-notice"><p><?php echo $text; ?></p></div>
1
+ <div class="notice notice-error advads-admin-notice inline"><p><?php echo wp_kses_post( $text ); ?></p></div>
admin/views/overview.php CHANGED
@@ -5,8 +5,6 @@
5
 
6
  ?>
7
  <div class="wrap">
8
- <h1><?php esc_html_e( 'Ads Dashboard', 'advanced-ads' ); ?></h1>
9
-
10
  <div id="advads-overview">
11
  <?php Advanced_Ads_Overview_Widgets_Callbacks::setup_overview_widgets(); ?>
12
  </div>
5
 
6
  ?>
7
  <div class="wrap">
 
 
8
  <div id="advads-overview">
9
  <?php Advanced_Ads_Overview_Widgets_Callbacks::setup_overview_widgets(); ?>
10
  </div>
admin/views/placements.php CHANGED
@@ -11,23 +11,16 @@ $quick_actions['delete'] = '<a style="cursor: pointer;" class="advads-delete-tag
11
 
12
  ?>
13
  <div class="wrap">
14
-
15
  <?php
16
  if ( isset( $_GET['message'] ) ) :
17
  if ( $_GET['message'] === 'error' ) :
18
  ?>
19
- <div id="message" class="error"><p><?php esc_html_e( 'Couldn’t create the new placement. Please check your form field and whether the name is already in use.', 'advanced-ads' ); ?></p></div>
20
  <?php elseif ( $_GET['message'] === 'updated' ) : ?>
21
- <div id="message" class="updated"><p><?php esc_html_e( 'Placements updated', 'advanced-ads' ); ?></p></div>
22
  <?php endif; ?>
23
  <?php endif; ?>
24
- <h1 class="wp-heading-inline"><?php echo esc_html( get_admin_page_title() ); ?></h1>
25
- <a href="#" class="page-title-action" title="<?php esc_html_e( 'Create a new placement', 'advanced-ads' ); ?>" class="button-secondary" onclick="advads_toggle('.advads-placements-new-form'); advads_scroll_to_element('#advads-placements-new-form');">
26
- <?php esc_html_e( 'New Placement', 'advanced-ads' ); ?>
27
- </a>
28
-
29
- <hr class="wp-header-end">
30
-
31
  <p class="description"><?php esc_html_e( 'Placements are physically places in your theme and posts. You can use them if you plan to change ads and ad groups on the same place without the need to change your templates.', 'advanced-ads' ); ?></p>
32
  <p class="description">
33
  <?php
@@ -54,7 +47,6 @@ $quick_actions['delete'] = '<a style="cursor: pointer;" class="advads-delete-tag
54
  $existing_types = array_unique( array_column( $placements, 'type' ) );
55
  do_action( 'advanced-ads-placements-list-before', $placements );
56
  ?>
57
- <h2><?php esc_html_e( 'Placements', 'advanced-ads' ); ?></h2>
58
  <form method="POST" action="" id="advanced-ads-placements-form">
59
 
60
  <?php
11
 
12
  ?>
13
  <div class="wrap">
14
+ <h2 style="display: none;"><!-- There needs to be an empty H2 headline at the top of the page so that WordPress can properly position admin notifications --></h2>
15
  <?php
16
  if ( isset( $_GET['message'] ) ) :
17
  if ( $_GET['message'] === 'error' ) :
18
  ?>
19
+ <div id="message" class="error inline"><p><?php esc_html_e( 'Couldn’t create the new placement. Please check your form field and whether the name is already in use.', 'advanced-ads' ); ?></p></div>
20
  <?php elseif ( $_GET['message'] === 'updated' ) : ?>
21
+ <div id="message" class="updated inline"><p><?php esc_html_e( 'Placements updated', 'advanced-ads' ); ?></p></div>
22
  <?php endif; ?>
23
  <?php endif; ?>
 
 
 
 
 
 
 
24
  <p class="description"><?php esc_html_e( 'Placements are physically places in your theme and posts. You can use them if you plan to change ads and ad groups on the same place without the need to change your templates.', 'advanced-ads' ); ?></p>
25
  <p class="description">
26
  <?php
47
  $existing_types = array_unique( array_column( $placements, 'type' ) );
48
  do_action( 'advanced-ads-placements-list-before', $placements );
49
  ?>
 
50
  <form method="POST" action="" id="advanced-ads-placements-form">
51
 
52
  <?php
admin/views/settings.php CHANGED
@@ -16,7 +16,7 @@ $setting_tabs = apply_filters(
16
  )
17
  );
18
  ?><div class="wrap">
19
- <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
20
  <?php Advanced_Ads_Checks::show_issues(); ?>
21
 
22
  <?php settings_errors(); ?>
16
  )
17
  );
18
  ?><div class="wrap">
19
+ <h2 style="display: none;"><!-- There needs to be an empty H2 headline at the top of the page so that WordPress can properly position admin notifications --></h2>
20
  <?php Advanced_Ads_Checks::show_issues(); ?>
21
 
22
  <?php settings_errors(); ?>
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.32.0
16
  * Author: Thomas Maier, Advanced Ads GmbH
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.32.0' );
43
 
44
  // Autoloading, modules and functions.
45
 
12
  * Plugin Name: Advanced Ads
13
  * Plugin URI: https://wpadvancedads.com
14
  * Description: Manage and optimize your ads in WordPress
15
+ * Version: 1.33.0
16
  * Author: Thomas Maier, Advanced Ads GmbH
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.33.0' );
43
 
44
  // Autoloading, modules and functions.
45
 
changelog.txt CHANGED
@@ -1,5 +1,26 @@
1
  == Changelog ==
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  = 1.31.1 =
4
 
5
  - Fix: show ad edit button when Advanced Ads block is used
1
  == Changelog ==
2
 
3
+ = 1.33.0 =
4
+
5
+ - Improvement: introduce new header on plugin-related pages in WP Admin
6
+ - Improvement: better highlight selected condition options
7
+ - Improvement: prevent admin notices from jumping on Advanced Ads pages
8
+ - Improvement: consistently call the overview page "Dashboard" in the page title and menu
9
+ - Fix: remove default "Visibility" setting from ad edit page to avoid confusion
10
+
11
+ = 1.32.0 =
12
+
13
+ - Improvement: load display/visitor conditions automatically after selecting them
14
+ - Fix: prevent undefined index notice in display conditions
15
+ - Fix: accommodate for deprecation in WP_User_Query in WordPress 5.9.0
16
+ - Fix: prevent tooltips from flowing out of right edge of viewport
17
+ - Fix: correct ad list counter for expiring ads
18
+ - Fix: prevent creating unneeded group wrapper around Advanced Ads block
19
+ - Fix: escape the ad title on groups screen to prevent authenticated XSS
20
+ - Fix: prevent authenticated XSS in plain text ads if `DISALLOW_UNFILTERED_HTML` is set
21
+ - Fix: prevent authenticated RCE in plain text ads if `DISALLOW_FILE_EDIT` is set
22
+ - Fix: rename "Responsive (Matched Content)" AdSense ad type to "Multiplex ads"
23
+
24
  = 1.31.1 =
25
 
26
  - Fix: show ad edit button when Advanced Ads block is used
classes/display-conditions.php CHANGED
@@ -608,14 +608,16 @@ class Advanced_Ads_Display_Conditions {
608
  $args = array( 'hide_empty' => false );
609
  $args['include'] = $checked;
610
  $checked_terms = get_terms( $taxonomy->name, $args );
 
611
  ?>
612
  <div class="advads-conditions-terms-buttons dynamic-search"><?php
613
  foreach ( $checked_terms as $_checked_term ) :
614
- ?><label class="button advads-ui-state-active"><?php echo $_checked_term->name;
615
- ?><input type="hidden" name="<?php echo $inputname; ?>"
616
- value="<?php echo $_checked_term->term_id; ?>"></label><?php
617
  endforeach;
618
  ?></div><?php
 
619
  } else {
620
  ?>
621
  <div class="advads-conditions-terms-buttons dynamic-search"></div><?php
@@ -627,8 +629,6 @@ class Advanced_Ads_Display_Conditions {
627
  ?>" data-input-name="<?php echo $inputname; ?>"
628
  placeholder="<?php _e( 'term name or id', 'advanced-ads' ); ?>"/><?php
629
  else :
630
- ?>
631
- <div class="advads-conditions-terms-buttons advads-buttonset"><?php
632
  foreach ( $terms as $_term ) :
633
  $field_id = "advads-conditions-$_term->term_id-$rand";
634
  ?><input type="checkbox" id="<?php echo $field_id; ?>" name="<?php echo $inputname; ?>"
@@ -636,8 +636,6 @@ class Advanced_Ads_Display_Conditions {
636
  ?>><label for="<?php echo $field_id; ?>"><?php echo $_term->name; ?></label><?php
637
  endforeach;
638
  include ADVADS_BASE_PATH . 'admin/views/conditions/not-selected.php';
639
- ?>
640
- </div><?php
641
  endif;
642
  endif;
643
 
@@ -672,7 +670,8 @@ class Advanced_Ads_Display_Conditions {
672
  ?>
673
  <div class="advads-conditions-single advads-buttonset advads-conditions-postid-buttons">
674
  <?php
675
- // query active post ids.
 
676
  if ( array() !== $values ) {
677
  $args = array(
678
  'post_type' => 'any',
@@ -686,18 +685,15 @@ class Advanced_Ads_Display_Conditions {
686
  $the_query = new WP_Query( $args );
687
  while ( $the_query->have_posts() ) {
688
  $the_query->next_post();
689
- ?><label
690
- class="button advads-ui-state-active"><?php echo get_the_title( $the_query->post->ID ) . ' (' . $the_query->post->post_type . ')';
691
- ?><input type="hidden" name="<?php echo $name; ?>[value][]" value="<?php echo $the_query->post->ID; ?>">
692
- </label><?php
 
693
  }
694
  }
695
- ?><span class="advads-conditions-postids-show-search button" <?php
696
- if ( ! count( $values ) ) {
697
- echo 'style="display:none;"';
698
- }
699
- ?>>+</span>
700
- <p class="advads-conditions-postids-search-line">
701
  <input type="text" class="advads-display-conditions-individual-post" <?php if ( count( $values ) ) {
702
  echo 'style="display:none;"';
703
  } ?>
@@ -705,6 +701,7 @@ class Advanced_Ads_Display_Conditions {
705
  data-field-name="<?php echo $name; ?>"/><?php
706
  wp_nonce_field( 'internal-linking', '_ajax_linking_nonce', false );
707
  ?></p></div><?php
 
708
  }
709
 
710
  /**
608
  $args = array( 'hide_empty' => false );
609
  $args['include'] = $checked;
610
  $checked_terms = get_terms( $taxonomy->name, $args );
611
+ // phpcs:disable Squiz.PHP.EmbeddedPhp.ContentBeforeOpen, Squiz.PHP.EmbeddedPhp.ContentAfterOpen, Squiz.PHP.EmbeddedPhp.ContentBeforeEnd, Squiz.PHP.EmbeddedPhp.ContentAfterEnd -- Prevent whitespaces between labels
612
  ?>
613
  <div class="advads-conditions-terms-buttons dynamic-search"><?php
614
  foreach ( $checked_terms as $_checked_term ) :
615
+ ?><label class="button advads-button advads-ui-state-active"><span class="advads-button-text"><?php
616
+ echo esc_html( $_checked_term->name ); ?><input type="hidden" name="<?php echo esc_attr( $inputname ); ?>"
617
+ value="<?php echo esc_attr( $_checked_term->term_id ); ?>"></span></label><?php
618
  endforeach;
619
  ?></div><?php
620
+ // phpcs:enable
621
  } else {
622
  ?>
623
  <div class="advads-conditions-terms-buttons dynamic-search"></div><?php
629
  ?>" data-input-name="<?php echo $inputname; ?>"
630
  placeholder="<?php _e( 'term name or id', 'advanced-ads' ); ?>"/><?php
631
  else :
 
 
632
  foreach ( $terms as $_term ) :
633
  $field_id = "advads-conditions-$_term->term_id-$rand";
634
  ?><input type="checkbox" id="<?php echo $field_id; ?>" name="<?php echo $inputname; ?>"
636
  ?>><label for="<?php echo $field_id; ?>"><?php echo $_term->name; ?></label><?php
637
  endforeach;
638
  include ADVADS_BASE_PATH . 'admin/views/conditions/not-selected.php';
 
 
639
  endif;
640
  endif;
641
 
670
  ?>
671
  <div class="advads-conditions-single advads-buttonset advads-conditions-postid-buttons">
672
  <?php
673
+ // Query active post ids.
674
+ // phpcs:disable Squiz.PHP.EmbeddedPhp.ContentBeforeOpen, Squiz.PHP.EmbeddedPhp.ContentAfterOpen, Squiz.PHP.EmbeddedPhp.ContentBeforeEnd, Squiz.PHP.EmbeddedPhp.ContentAfterEnd -- Prevent whitespaces between labels
675
  if ( array() !== $values ) {
676
  $args = array(
677
  'post_type' => 'any',
685
  $the_query = new WP_Query( $args );
686
  while ( $the_query->have_posts() ) {
687
  $the_query->next_post();
688
+ ?><label class="button advads-button advads-ui-state-active"><span class="advads-button-text"><?php
689
+ echo esc_html(
690
+ sprintf( '%s (%s)', get_the_title( $the_query->post->ID ), $the_query->post->post_type )
691
+ ); ?></span><input type="hidden" name="<?php echo esc_attr( $name ); ?>[value][]"
692
+ value="<?php echo esc_attr( $the_query->post->ID ); ?>"></label><?php
693
  }
694
  }
695
+ ?><span class="advads-conditions-postids-show-search button" <?php if ( ! count( $values ) ) {
696
+ echo 'style="display:none;"'; } ?>>+</span><p class="advads-conditions-postids-search-line">
 
 
 
 
697
  <input type="text" class="advads-display-conditions-individual-post" <?php if ( count( $values ) ) {
698
  echo 'style="display:none;"';
699
  } ?>
701
  data-field-name="<?php echo $name; ?>"/><?php
702
  wp_nonce_field( 'internal-linking', '_ajax_linking_nonce', false );
703
  ?></p></div><?php
704
+ // phpcs:enable
705
  }
706
 
707
  /**
languages/advanced-ads.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Advanced Ads plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Advanced Ads 1.32.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/advanced-ads/\n"
7
  "Last-Translator: Thomas Maier <post@webzunft.de>\n"
8
  "Language-Team: webgilde <support@wpadvancedads.com>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2022-03-07T08:28:03-06:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: advanced-ads\n"
@@ -94,25 +94,46 @@ msgstr ""
94
  msgid "Permanently delete this placement?"
95
  msgstr ""
96
 
97
- #: admin/class-advanced-ads-admin.php:389
98
- #: admin/includes/class-menu.php:156
99
- #: admin/includes/class-menu.php:159
100
  #: admin/views/settings.php:29
101
  msgid "Support"
102
  msgstr ""
103
 
104
- #: admin/class-advanced-ads-admin.php:393
105
  #: admin/includes/class-overview-widgets.php:72
106
  msgid "Add-Ons"
107
  msgstr ""
108
 
 
 
 
 
109
  #. translators: %s is the URL to add a new review, https://wordpress.org/support/plugin/advanced-ads/reviews/#new-post
110
  #. translators: %s is a URL.
111
- #: admin/class-advanced-ads-admin.php:669
112
  #: admin/includes/class-overview-widgets.php:191
113
  msgid "Thank the developer with a &#9733;&#9733;&#9733;&#9733;&#9733; review on <a href=\"%s\" target=\"_blank\">wordpress.org</a>"
114
  msgstr ""
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  #. translators: %1$s is a version number.
117
  #: admin/includes/ad-health-notices.php:32
118
  msgid "Your <strong>PHP version (%1$s) is too low</strong>. Advanced Ads is built for PHP %2$s and higher. It might work, but updating PHP is highly recommended. Please ask your hosting provider for more information."
@@ -126,7 +147,7 @@ msgstr ""
126
  #. translators: %s is a list of PHP extensions.
127
  #. Translators: %s is a name of a module.
128
  #: admin/includes/ad-health-notices.php:54
129
- #: admin/views/placements.php:389
130
  msgid "Missing PHP extensions could cause issues. Please ask your hosting provider to enable them: %s"
131
  msgstr ""
132
 
@@ -312,7 +333,7 @@ msgid "Display ads with the highest ad weight first"
312
  msgstr ""
313
 
314
  #: admin/includes/class-ad-groups-list.php:339
315
- #: admin/views/placements.php:276
316
  #: modules/import-export/classes/import.php:153
317
  #: modules/import-export/classes/import.php:193
318
  #: modules/import-export/classes/import.php:595
@@ -321,7 +342,7 @@ msgid "Edit"
321
  msgstr ""
322
 
323
  #: admin/includes/class-ad-groups-list.php:340
324
- #: admin/views/placements.php:307
325
  msgid "Usage"
326
  msgstr ""
327
 
@@ -555,14 +576,17 @@ msgid "Expiring"
555
  msgstr ""
556
 
557
  #: admin/includes/class-menu.php:66
558
- #: admin/includes/class-menu.php:89
559
- #: admin/includes/class-menu.php:100
560
- #: admin/includes/class-menu.php:101
561
- msgid "Overview"
 
 
 
562
  msgstr ""
563
 
564
- #: admin/includes/class-menu.php:80
565
- #: admin/includes/class-menu.php:81
566
  #: admin/includes/class-shortcode-creator.php:212
567
  #: admin/views/ad-group-list-form-row.php:91
568
  #: admin/views/ad-group-list-header.php:16
@@ -575,59 +599,55 @@ msgstr ""
575
  msgid "Ads"
576
  msgstr ""
577
 
578
- #: admin/includes/class-menu.php:112
579
  #: public/class-advanced-ads.php:797
580
  msgid "Add New Ad"
581
  msgstr ""
582
 
583
- #: admin/includes/class-menu.php:113
584
  #: admin/views/ad-group-list-ads.php:36
 
585
  #: public/class-advanced-ads.php:796
586
  #: public/class-advanced-ads.php:800
587
  msgid "New Ad"
588
  msgstr ""
589
 
590
- #: admin/includes/class-menu.php:121
591
  msgid "Ad Groups & Rotations"
592
  msgstr ""
593
 
594
- #: admin/includes/class-menu.php:122
595
  msgid "Groups & Rotation"
596
  msgstr ""
597
 
598
- #: admin/includes/class-menu.php:131
599
  msgid "Ad Placements"
600
  msgstr ""
601
 
602
- #: admin/includes/class-menu.php:132
603
  #: admin/includes/class-shortcode-creator.php:226
604
- #: admin/views/placements.php:57
605
  #: classes/widget.php:122
606
  #: modules/gutenberg/includes/class-gutenberg.php:88
607
  #: modules/import-export/views/page.php:25
608
  msgid "Placements"
609
  msgstr ""
610
 
611
- #: admin/includes/class-menu.php:140
612
- msgid "Advanced Ads Settings"
613
- msgstr ""
614
-
615
- #: admin/includes/class-menu.php:141
616
  msgid "Settings"
617
  msgstr ""
618
 
619
- #: admin/includes/class-menu.php:176
620
- #: admin/includes/class-menu.php:180
621
  #: admin/includes/class-settings.php:298
622
  msgid "Licenses"
623
  msgstr ""
624
 
625
- #: admin/includes/class-menu.php:276
626
- #: admin/includes/class-menu.php:301
627
  msgid "Sorry, you are not allowed to access this feature."
628
  msgstr ""
629
 
630
- #: admin/includes/class-menu.php:288
631
  msgid "You attempted to edit an ad group that doesn&#8217;t exist. Perhaps it was deleted?"
632
  msgstr ""
633
 
@@ -650,15 +670,15 @@ msgid "Layout / Output"
650
  msgstr ""
651
 
652
  #: admin/includes/class-meta-box.php:104
653
- #: admin/views/placements.php:184
654
- #: admin/views/placements.php:430
655
  #: classes/ad-debug.php:152
656
  msgid "Display Conditions"
657
  msgstr ""
658
 
659
  #: admin/includes/class-meta-box.php:112
660
- #: admin/views/placements.php:193
661
- #: admin/views/placements.php:438
662
  #: classes/ad-debug.php:239
663
  msgid "Visitor Conditions"
664
  msgstr ""
@@ -677,6 +697,7 @@ msgstr ""
677
  #: admin/includes/class-overview-widgets.php:179
678
  #: admin/views/ad-main-metabox.php:29
679
  #: admin/views/ad-output-metabox.php:65
 
680
  #: admin/views/settings/general/custom-label.php:10
681
  #: classes/ad_type_plain.php:238
682
  #: modules/ads-txt/admin/views/setting-create.php:12
@@ -697,11 +718,6 @@ msgstr ""
697
  msgid "Ad Settings"
698
  msgstr ""
699
 
700
- #: admin/includes/class-meta-box.php:512
701
- #: admin/views/overview.php:8
702
- msgid "Ads Dashboard"
703
- msgstr ""
704
-
705
  #. translators: %1$d is the number of ads, %2$s and %3$s are URLs.
706
  #: admin/includes/class-meta-box.php:528
707
  msgid "%1$d ads – <a href=\"%2$s\">manage</a> - <a href=\"%3$s\">new</a>"
@@ -1179,7 +1195,7 @@ msgid "Update"
1179
  msgstr ""
1180
 
1181
  #: admin/views/ad-group-list-ads.php:20
1182
- #: admin/views/placements.php:348
1183
  #: classes/ad-debug.php:118
1184
  #: classes/ad-debug.php:167
1185
  #: classes/ad-debug.php:169
@@ -1196,7 +1212,7 @@ msgid "add"
1196
  msgstr ""
1197
 
1198
  #: admin/views/ad-group-list-form-row.php:31
1199
- #: admin/views/placements.php:64
1200
  #: modules/gadsense/admin/views/external-ads-list.php:41
1201
  #: modules/gadsense/admin/views/external-ads-list.php:51
1202
  #: modules/privacy/admin/views/setting-general.php:44
@@ -1204,8 +1220,8 @@ msgid "Name"
1204
  msgstr ""
1205
 
1206
  #: admin/views/ad-group-list-form-row.php:56
1207
- #: admin/views/placements.php:64
1208
- #: admin/views/placements.php:258
1209
  #: modules/gadsense/admin/views/adsense-ad-parameters.php:105
1210
  msgid "Type"
1211
  msgstr ""
@@ -1234,7 +1250,7 @@ msgstr ""
1234
 
1235
  #: admin/views/ad-group-list-row.php:22
1236
  #: admin/views/ad-info.php:7
1237
- #: admin/views/placements.php:311
1238
  msgid "shortcode"
1239
  msgstr ""
1240
 
@@ -1252,36 +1268,36 @@ msgstr ""
1252
  msgid "ID: %s"
1253
  msgstr ""
1254
 
1255
- #: admin/views/ad-group.php:24
1256
  msgid "Ad Group successfully created"
1257
  msgstr ""
1258
 
1259
- #: admin/views/ad-group.php:37
1260
  msgid "Ad Groups successfully updated"
1261
  msgstr ""
1262
 
1263
- #: admin/views/ad-group.php:64
1264
  msgid "Search results for &#8220;%s&#8221;"
1265
  msgstr ""
1266
 
1267
- #: admin/views/ad-group.php:72
1268
  msgid "Group title"
1269
  msgstr ""
1270
 
1271
- #: admin/views/ad-group.php:73
1272
  msgid "save"
1273
  msgstr ""
1274
 
1275
- #: admin/views/ad-group.php:75
1276
  msgid "Ad Groups are a very flexible method to bundle ads. You can use them to display random ads in the frontend or run split tests, but also just for informational purposes. Not only can an Ad Groups have multiple ads, but an ad can belong to multiple ad groups."
1277
  msgstr ""
1278
 
1279
  #. translators: %s is a URL.
1280
- #: admin/views/ad-group.php:81
1281
  msgid "Find more information about ad groups in the <a href=\"%s\" target=\"_blank\">manual</a>."
1282
  msgstr ""
1283
 
1284
- #: admin/views/ad-group.php:119
1285
  msgid "Update Groups"
1286
  msgstr ""
1287
 
@@ -1394,7 +1410,7 @@ msgstr ""
1394
  #: admin/views/placements-ad-label-position.php:13
1395
  #: admin/views/placements-ad-label.php:9
1396
  #: admin/views/placements-ad-label.php:11
1397
- #: admin/views/placements.php:270
1398
  #: modules/gadsense/includes/class-network-adsense.php:321
1399
  msgid "default"
1400
  msgstr ""
@@ -1725,16 +1741,35 @@ msgstr ""
1725
  msgid "There is an error in your AdSense setup."
1726
  msgstr ""
1727
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1728
  #: admin/views/modal.php:36
1729
  #: admin/views/modal.php:37
1730
- #: admin/views/placements.php:321
1731
- #: admin/views/placements.php:322
1732
  msgid "Close"
1733
  msgstr ""
1734
 
1735
  #. Translators: 1: "Options", 2: the name of a placement.
1736
  #: admin/views/modal.php:39
1737
- #: admin/views/placements.php:232
1738
  msgid "Close and save"
1739
  msgstr ""
1740
 
@@ -2004,136 +2039,126 @@ msgstr ""
2004
  msgid "Placements updated"
2005
  msgstr ""
2006
 
2007
- #: admin/views/placements.php:25
2008
- #: admin/views/placements.php:466
2009
- msgid "Create a new placement"
2010
- msgstr ""
2011
-
2012
- #: admin/views/placements.php:26
2013
- #: admin/views/placements.php:468
2014
- msgid "New Placement"
2015
- msgstr ""
2016
-
2017
- #: admin/views/placements.php:31
2018
  msgid "Placements are physically places in your theme and posts. You can use them if you plan to change ads and ad groups on the same place without the need to change your templates."
2019
  msgstr ""
2020
 
2021
  #. Translators: %s is a URL.
2022
- #: admin/views/placements.php:37
2023
  msgid "See also the manual for more information on <a href=\"%s\">placements</a>."
2024
  msgstr ""
2025
 
2026
- #: admin/views/placements.php:69
2027
  msgid "Output"
2028
  msgstr ""
2029
 
2030
- #: admin/views/placements.php:73
2031
  msgid "Delivery"
2032
  msgstr ""
2033
 
2034
- #: admin/views/placements.php:81
2035
  msgid "- show all types -"
2036
  msgstr ""
2037
 
2038
- #: admin/views/placements.php:88
2039
  msgid "filter by name"
2040
  msgstr ""
2041
 
2042
- #: admin/views/placements.php:139
2043
  msgid "show usage"
2044
  msgstr ""
2045
 
2046
- #: admin/views/placements.php:163
2047
  msgid "ad label"
2048
  msgstr ""
2049
 
2050
- #: admin/views/placements.php:175
2051
  msgid "Inline CSS"
2052
  msgstr ""
2053
 
2054
- #: admin/views/placements.php:186
2055
  msgid "Use display conditions for placements."
2056
  msgstr ""
2057
 
2058
- #: admin/views/placements.php:187
2059
- #: admin/views/placements.php:196
2060
  msgid "The free version provides conditions on the ad edit page."
2061
  msgstr ""
2062
 
2063
- #: admin/views/placements.php:195
2064
  msgid "Use visitor conditions for placements."
2065
  msgstr ""
2066
 
2067
- #: admin/views/placements.php:202
2068
  msgid "Minimum Content Length"
2069
  msgstr ""
2070
 
2071
- #: admin/views/placements.php:204
2072
  msgid "Minimum length of content before automatically injected ads are allowed in them."
2073
  msgstr ""
2074
 
2075
- #: admin/views/placements.php:210
2076
  msgid "Words Between Ads"
2077
  msgstr ""
2078
 
2079
- #: admin/views/placements.php:212
2080
  msgid "A minimum amount of words between automatically injected ads."
2081
  msgstr ""
2082
 
2083
  #. Translators: 1: "Options", 2: the name of a placement.
2084
- #: admin/views/placements.php:231
2085
  #: modules/import-export/views/page.php:26
2086
  msgid "Options"
2087
  msgstr ""
2088
 
2089
  #. Translators: %s is the name of a placement.
2090
- #: admin/views/placements.php:243
2091
  msgid "Placement type \"%s\" is missing and was reset to \"default\".<br/>Please check if the responsible add-on is activated."
2092
  msgstr ""
2093
 
2094
- #: admin/views/placements.php:314
2095
  msgid "template (PHP)"
2096
  msgstr ""
2097
 
2098
- #: admin/views/placements.php:349
2099
  msgid "Group"
2100
  msgstr ""
2101
 
2102
- #: admin/views/placements.php:365
2103
  msgid "after"
2104
  msgstr ""
2105
 
2106
- #: admin/views/placements.php:366
2107
  msgid "before"
2108
  msgstr ""
2109
 
2110
- #: admin/views/placements.php:379
2111
  msgid "position"
2112
  msgstr ""
2113
 
2114
- #: admin/views/placements.php:385
2115
  msgid "Important Notice"
2116
  msgstr ""
2117
 
2118
  #. Translators: %s is a URL.
2119
- #: admin/views/placements.php:408
2120
  msgid "Tutorial: <a href=\"%s\" target=\"_blank\">How to place visible ads in the header of your website</a>."
2121
  msgstr ""
2122
 
2123
- #: admin/views/placements.php:424
2124
  msgid "show all options"
2125
  msgstr ""
2126
 
2127
- #: admin/views/placements.php:447
2128
  msgid "edit conditions"
2129
  msgstr ""
2130
 
2131
- #: admin/views/placements.php:457
2132
  msgctxt "checkbox to remove placement"
2133
  msgid "delete"
2134
  msgstr ""
2135
 
2136
- #: admin/views/placements.php:464
2137
  msgid "Save Placements"
2138
  msgstr ""
2139
 
@@ -2860,114 +2885,114 @@ msgstr ""
2860
  msgid "accelerated mobile pages"
2861
  msgstr ""
2862
 
2863
- #: classes/display-conditions.php:624
2864
  msgctxt "display the terms search field on ad edit page"
2865
  msgid "add more terms"
2866
  msgstr ""
2867
 
2868
- #: classes/display-conditions.php:628
2869
  msgid "term name or id"
2870
  msgstr ""
2871
 
2872
- #: classes/display-conditions.php:704
2873
  msgid "title or id"
2874
  msgstr ""
2875
 
2876
- #: classes/display-conditions.php:758
2877
  #: includes/array_ad_conditions.php:63
2878
  msgid "Home Page"
2879
  msgstr ""
2880
 
2881
- #: classes/display-conditions.php:759
2882
  #: includes/array_ad_conditions.php:64
2883
  msgid "show on Home page"
2884
  msgstr ""
2885
 
2886
- #: classes/display-conditions.php:763
2887
  #: includes/array_ad_conditions.php:68
2888
  msgid "Singular Pages"
2889
  msgstr ""
2890
 
2891
- #: classes/display-conditions.php:764
2892
  #: includes/array_ad_conditions.php:69
2893
  msgid "show on singular pages/posts"
2894
  msgstr ""
2895
 
2896
- #: classes/display-conditions.php:768
2897
  #: includes/array_ad_conditions.php:73
2898
  msgid "Archive Pages"
2899
  msgstr ""
2900
 
2901
- #: classes/display-conditions.php:769
2902
  #: includes/array_ad_conditions.php:74
2903
  msgid "show on any type of archive page (category, tag, author and date)"
2904
  msgstr ""
2905
 
2906
- #: classes/display-conditions.php:773
2907
  #: includes/array_ad_conditions.php:78
2908
  msgid "Search Results"
2909
  msgstr ""
2910
 
2911
- #: classes/display-conditions.php:774
2912
  #: includes/array_ad_conditions.php:79
2913
  msgid "show on search result pages"
2914
  msgstr ""
2915
 
2916
- #: classes/display-conditions.php:778
2917
  #: includes/array_ad_conditions.php:83
2918
  msgid "404 Page"
2919
  msgstr ""
2920
 
2921
- #: classes/display-conditions.php:779
2922
  #: includes/array_ad_conditions.php:84
2923
  msgid "show on 404 error page"
2924
  msgstr ""
2925
 
2926
- #: classes/display-conditions.php:783
2927
  #: includes/array_ad_conditions.php:88
2928
  msgid "Attachment Pages"
2929
  msgstr ""
2930
 
2931
- #: classes/display-conditions.php:784
2932
  #: includes/array_ad_conditions.php:89
2933
  msgid "show on attachment pages"
2934
  msgstr ""
2935
 
2936
- #: classes/display-conditions.php:788
2937
  #: includes/array_ad_conditions.php:93
2938
  msgid "Secondary Queries"
2939
  msgstr ""
2940
 
2941
- #: classes/display-conditions.php:789
2942
  #: includes/array_ad_conditions.php:94
2943
  msgid "allow ads in secondary queries"
2944
  msgstr ""
2945
 
2946
- #: classes/display-conditions.php:793
2947
  msgid "RSS Feed"
2948
  msgstr ""
2949
 
2950
- #: classes/display-conditions.php:794
2951
  msgid "allow ads in RSS Feed"
2952
  msgstr ""
2953
 
2954
- #: classes/display-conditions.php:798
2955
  msgid "REST API"
2956
  msgstr ""
2957
 
2958
- #: classes/display-conditions.php:799
2959
  msgid "allow ads in REST API"
2960
  msgstr ""
2961
 
2962
- #: classes/display-conditions.php:834
2963
  msgid "older than"
2964
  msgstr ""
2965
 
2966
- #: classes/display-conditions.php:835
2967
  msgid "younger than"
2968
  msgstr ""
2969
 
2970
- #: classes/display-conditions.php:837
2971
  msgid "days"
2972
  msgstr ""
2973
 
@@ -4273,10 +4298,6 @@ msgstr ""
4273
  msgid "Update Ad Group"
4274
  msgstr ""
4275
 
4276
- #: public/class-advanced-ads.php:760
4277
- msgid "Add New Ad Group"
4278
- msgstr ""
4279
-
4280
  #: public/class-advanced-ads.php:761
4281
  msgid "New Ad Groups Name"
4282
  msgstr ""
2
  # This file is distributed under the same license as the Advanced Ads plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Advanced Ads 1.33.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/advanced-ads/\n"
7
  "Last-Translator: Thomas Maier <post@webzunft.de>\n"
8
  "Language-Team: webgilde <support@wpadvancedads.com>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2022-03-29T10:48:03-04:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: advanced-ads\n"
94
  msgid "Permanently delete this placement?"
95
  msgstr ""
96
 
97
+ #: admin/class-advanced-ads-admin.php:393
98
+ #: admin/includes/class-menu.php:166
99
+ #: admin/includes/class-menu.php:169
100
  #: admin/views/settings.php:29
101
  msgid "Support"
102
  msgstr ""
103
 
104
+ #: admin/class-advanced-ads-admin.php:398
105
  #: admin/includes/class-overview-widgets.php:72
106
  msgid "Add-Ons"
107
  msgstr ""
108
 
109
+ #: admin/class-advanced-ads-admin.php:400
110
+ msgid "See Pro Features"
111
+ msgstr ""
112
+
113
  #. translators: %s is the URL to add a new review, https://wordpress.org/support/plugin/advanced-ads/reviews/#new-post
114
  #. translators: %s is a URL.
115
+ #: admin/class-advanced-ads-admin.php:674
116
  #: admin/includes/class-overview-widgets.php:191
117
  msgid "Thank the developer with a &#9733;&#9733;&#9733;&#9733;&#9733; review on <a href=\"%s\" target=\"_blank\">wordpress.org</a>"
118
  msgstr ""
119
 
120
+ #: admin/class-advanced-ads-admin.php:757
121
+ msgid "Your Ads"
122
+ msgstr ""
123
+
124
+ #: admin/class-advanced-ads-admin.php:760
125
+ msgid "Your Groups"
126
+ msgstr ""
127
+
128
+ #: admin/class-advanced-ads-admin.php:763
129
+ msgid "Your Placements"
130
+ msgstr ""
131
+
132
+ #: admin/class-advanced-ads-admin.php:766
133
+ #: admin/includes/class-menu.php:150
134
+ msgid "Advanced Ads Settings"
135
+ msgstr ""
136
+
137
  #. translators: %1$s is a version number.
138
  #: admin/includes/ad-health-notices.php:32
139
  msgid "Your <strong>PHP version (%1$s) is too low</strong>. Advanced Ads is built for PHP %2$s and higher. It might work, but updating PHP is highly recommended. Please ask your hosting provider for more information."
147
  #. translators: %s is a list of PHP extensions.
148
  #. Translators: %s is a name of a module.
149
  #: admin/includes/ad-health-notices.php:54
150
+ #: admin/views/placements.php:381
151
  msgid "Missing PHP extensions could cause issues. Please ask your hosting provider to enable them: %s"
152
  msgstr ""
153
 
333
  msgstr ""
334
 
335
  #: admin/includes/class-ad-groups-list.php:339
336
+ #: admin/views/placements.php:268
337
  #: modules/import-export/classes/import.php:153
338
  #: modules/import-export/classes/import.php:193
339
  #: modules/import-export/classes/import.php:595
342
  msgstr ""
343
 
344
  #: admin/includes/class-ad-groups-list.php:340
345
+ #: admin/views/placements.php:299
346
  msgid "Usage"
347
  msgstr ""
348
 
576
  msgstr ""
577
 
578
  #: admin/includes/class-menu.php:66
579
+ #: admin/includes/class-menu.php:78
580
+ #: admin/includes/class-menu.php:79
581
+ #: admin/includes/class-menu.php:99
582
+ #: admin/includes/class-menu.php:110
583
+ #: admin/includes/class-menu.php:111
584
+ #: admin/includes/class-meta-box.php:512
585
+ msgid "Dashboard"
586
  msgstr ""
587
 
588
+ #: admin/includes/class-menu.php:90
589
+ #: admin/includes/class-menu.php:91
590
  #: admin/includes/class-shortcode-creator.php:212
591
  #: admin/views/ad-group-list-form-row.php:91
592
  #: admin/views/ad-group-list-header.php:16
599
  msgid "Ads"
600
  msgstr ""
601
 
602
+ #: admin/includes/class-menu.php:122
603
  #: public/class-advanced-ads.php:797
604
  msgid "Add New Ad"
605
  msgstr ""
606
 
607
+ #: admin/includes/class-menu.php:123
608
  #: admin/views/ad-group-list-ads.php:36
609
+ #: admin/views/header.php:23
610
  #: public/class-advanced-ads.php:796
611
  #: public/class-advanced-ads.php:800
612
  msgid "New Ad"
613
  msgstr ""
614
 
615
+ #: admin/includes/class-menu.php:131
616
  msgid "Ad Groups & Rotations"
617
  msgstr ""
618
 
619
+ #: admin/includes/class-menu.php:132
620
  msgid "Groups & Rotation"
621
  msgstr ""
622
 
623
+ #: admin/includes/class-menu.php:141
624
  msgid "Ad Placements"
625
  msgstr ""
626
 
627
+ #: admin/includes/class-menu.php:142
628
  #: admin/includes/class-shortcode-creator.php:226
 
629
  #: classes/widget.php:122
630
  #: modules/gutenberg/includes/class-gutenberg.php:88
631
  #: modules/import-export/views/page.php:25
632
  msgid "Placements"
633
  msgstr ""
634
 
635
+ #: admin/includes/class-menu.php:151
 
 
 
 
636
  msgid "Settings"
637
  msgstr ""
638
 
639
+ #: admin/includes/class-menu.php:186
640
+ #: admin/includes/class-menu.php:190
641
  #: admin/includes/class-settings.php:298
642
  msgid "Licenses"
643
  msgstr ""
644
 
645
+ #: admin/includes/class-menu.php:286
646
+ #: admin/includes/class-menu.php:311
647
  msgid "Sorry, you are not allowed to access this feature."
648
  msgstr ""
649
 
650
+ #: admin/includes/class-menu.php:298
651
  msgid "You attempted to edit an ad group that doesn&#8217;t exist. Perhaps it was deleted?"
652
  msgstr ""
653
 
670
  msgstr ""
671
 
672
  #: admin/includes/class-meta-box.php:104
673
+ #: admin/views/placements.php:176
674
+ #: admin/views/placements.php:422
675
  #: classes/ad-debug.php:152
676
  msgid "Display Conditions"
677
  msgstr ""
678
 
679
  #: admin/includes/class-meta-box.php:112
680
+ #: admin/views/placements.php:185
681
+ #: admin/views/placements.php:430
682
  #: classes/ad-debug.php:239
683
  msgid "Visitor Conditions"
684
  msgstr ""
697
  #: admin/includes/class-overview-widgets.php:179
698
  #: admin/views/ad-main-metabox.php:29
699
  #: admin/views/ad-output-metabox.php:65
700
+ #: admin/views/header.php:47
701
  #: admin/views/settings/general/custom-label.php:10
702
  #: classes/ad_type_plain.php:238
703
  #: modules/ads-txt/admin/views/setting-create.php:12
718
  msgid "Ad Settings"
719
  msgstr ""
720
 
 
 
 
 
 
721
  #. translators: %1$d is the number of ads, %2$s and %3$s are URLs.
722
  #: admin/includes/class-meta-box.php:528
723
  msgid "%1$d ads – <a href=\"%2$s\">manage</a> - <a href=\"%3$s\">new</a>"
1195
  msgstr ""
1196
 
1197
  #: admin/views/ad-group-list-ads.php:20
1198
+ #: admin/views/placements.php:340
1199
  #: classes/ad-debug.php:118
1200
  #: classes/ad-debug.php:167
1201
  #: classes/ad-debug.php:169
1212
  msgstr ""
1213
 
1214
  #: admin/views/ad-group-list-form-row.php:31
1215
+ #: admin/views/placements.php:56
1216
  #: modules/gadsense/admin/views/external-ads-list.php:41
1217
  #: modules/gadsense/admin/views/external-ads-list.php:51
1218
  #: modules/privacy/admin/views/setting-general.php:44
1220
  msgstr ""
1221
 
1222
  #: admin/views/ad-group-list-form-row.php:56
1223
+ #: admin/views/placements.php:56
1224
+ #: admin/views/placements.php:250
1225
  #: modules/gadsense/admin/views/adsense-ad-parameters.php:105
1226
  msgid "Type"
1227
  msgstr ""
1250
 
1251
  #: admin/views/ad-group-list-row.php:22
1252
  #: admin/views/ad-info.php:7
1253
+ #: admin/views/placements.php:303
1254
  msgid "shortcode"
1255
  msgstr ""
1256
 
1268
  msgid "ID: %s"
1269
  msgstr ""
1270
 
1271
+ #: admin/views/ad-group.php:27
1272
  msgid "Ad Group successfully created"
1273
  msgstr ""
1274
 
1275
+ #: admin/views/ad-group.php:40
1276
  msgid "Ad Groups successfully updated"
1277
  msgstr ""
1278
 
1279
+ #: admin/views/ad-group.php:66
1280
  msgid "Search results for &#8220;%s&#8221;"
1281
  msgstr ""
1282
 
1283
+ #: admin/views/ad-group.php:71
1284
  msgid "Group title"
1285
  msgstr ""
1286
 
1287
+ #: admin/views/ad-group.php:72
1288
  msgid "save"
1289
  msgstr ""
1290
 
1291
+ #: admin/views/ad-group.php:74
1292
  msgid "Ad Groups are a very flexible method to bundle ads. You can use them to display random ads in the frontend or run split tests, but also just for informational purposes. Not only can an Ad Groups have multiple ads, but an ad can belong to multiple ad groups."
1293
  msgstr ""
1294
 
1295
  #. translators: %s is a URL.
1296
+ #: admin/views/ad-group.php:80
1297
  msgid "Find more information about ad groups in the <a href=\"%s\" target=\"_blank\">manual</a>."
1298
  msgstr ""
1299
 
1300
+ #: admin/views/ad-group.php:111
1301
  msgid "Update Groups"
1302
  msgstr ""
1303
 
1410
  #: admin/views/placements-ad-label-position.php:13
1411
  #: admin/views/placements-ad-label.php:9
1412
  #: admin/views/placements-ad-label.php:11
1413
+ #: admin/views/placements.php:262
1414
  #: modules/gadsense/includes/class-network-adsense.php:321
1415
  msgid "default"
1416
  msgstr ""
1741
  msgid "There is an error in your AdSense setup."
1742
  msgstr ""
1743
 
1744
+ #: admin/views/header.php:29
1745
+ #: public/class-advanced-ads.php:760
1746
+ msgid "New Ad Group"
1747
+ msgstr ""
1748
+
1749
+ #: admin/views/header.php:35
1750
+ #: admin/views/placements.php:458
1751
+ msgid "Create a new placement"
1752
+ msgstr ""
1753
+
1754
+ #: admin/views/header.php:35
1755
+ #: admin/views/placements.php:460
1756
+ msgid "New Placement"
1757
+ msgstr ""
1758
+
1759
+ #: admin/views/header.php:45
1760
+ msgid "See all Add-ons"
1761
+ msgstr ""
1762
+
1763
  #: admin/views/modal.php:36
1764
  #: admin/views/modal.php:37
1765
+ #: admin/views/placements.php:313
1766
+ #: admin/views/placements.php:314
1767
  msgid "Close"
1768
  msgstr ""
1769
 
1770
  #. Translators: 1: "Options", 2: the name of a placement.
1771
  #: admin/views/modal.php:39
1772
+ #: admin/views/placements.php:224
1773
  msgid "Close and save"
1774
  msgstr ""
1775
 
2039
  msgid "Placements updated"
2040
  msgstr ""
2041
 
2042
+ #: admin/views/placements.php:24
 
 
 
 
 
 
 
 
 
 
2043
  msgid "Placements are physically places in your theme and posts. You can use them if you plan to change ads and ad groups on the same place without the need to change your templates."
2044
  msgstr ""
2045
 
2046
  #. Translators: %s is a URL.
2047
+ #: admin/views/placements.php:30
2048
  msgid "See also the manual for more information on <a href=\"%s\">placements</a>."
2049
  msgstr ""
2050
 
2051
+ #: admin/views/placements.php:61
2052
  msgid "Output"
2053
  msgstr ""
2054
 
2055
+ #: admin/views/placements.php:65
2056
  msgid "Delivery"
2057
  msgstr ""
2058
 
2059
+ #: admin/views/placements.php:73
2060
  msgid "- show all types -"
2061
  msgstr ""
2062
 
2063
+ #: admin/views/placements.php:80
2064
  msgid "filter by name"
2065
  msgstr ""
2066
 
2067
+ #: admin/views/placements.php:131
2068
  msgid "show usage"
2069
  msgstr ""
2070
 
2071
+ #: admin/views/placements.php:155
2072
  msgid "ad label"
2073
  msgstr ""
2074
 
2075
+ #: admin/views/placements.php:167
2076
  msgid "Inline CSS"
2077
  msgstr ""
2078
 
2079
+ #: admin/views/placements.php:178
2080
  msgid "Use display conditions for placements."
2081
  msgstr ""
2082
 
2083
+ #: admin/views/placements.php:179
2084
+ #: admin/views/placements.php:188
2085
  msgid "The free version provides conditions on the ad edit page."
2086
  msgstr ""
2087
 
2088
+ #: admin/views/placements.php:187
2089
  msgid "Use visitor conditions for placements."
2090
  msgstr ""
2091
 
2092
+ #: admin/views/placements.php:194
2093
  msgid "Minimum Content Length"
2094
  msgstr ""
2095
 
2096
+ #: admin/views/placements.php:196
2097
  msgid "Minimum length of content before automatically injected ads are allowed in them."
2098
  msgstr ""
2099
 
2100
+ #: admin/views/placements.php:202
2101
  msgid "Words Between Ads"
2102
  msgstr ""
2103
 
2104
+ #: admin/views/placements.php:204
2105
  msgid "A minimum amount of words between automatically injected ads."
2106
  msgstr ""
2107
 
2108
  #. Translators: 1: "Options", 2: the name of a placement.
2109
+ #: admin/views/placements.php:223
2110
  #: modules/import-export/views/page.php:26
2111
  msgid "Options"
2112
  msgstr ""
2113
 
2114
  #. Translators: %s is the name of a placement.
2115
+ #: admin/views/placements.php:235
2116
  msgid "Placement type \"%s\" is missing and was reset to \"default\".<br/>Please check if the responsible add-on is activated."
2117
  msgstr ""
2118
 
2119
+ #: admin/views/placements.php:306
2120
  msgid "template (PHP)"
2121
  msgstr ""
2122
 
2123
+ #: admin/views/placements.php:341
2124
  msgid "Group"
2125
  msgstr ""
2126
 
2127
+ #: admin/views/placements.php:357
2128
  msgid "after"
2129
  msgstr ""
2130
 
2131
+ #: admin/views/placements.php:358
2132
  msgid "before"
2133
  msgstr ""
2134
 
2135
+ #: admin/views/placements.php:371
2136
  msgid "position"
2137
  msgstr ""
2138
 
2139
+ #: admin/views/placements.php:377
2140
  msgid "Important Notice"
2141
  msgstr ""
2142
 
2143
  #. Translators: %s is a URL.
2144
+ #: admin/views/placements.php:400
2145
  msgid "Tutorial: <a href=\"%s\" target=\"_blank\">How to place visible ads in the header of your website</a>."
2146
  msgstr ""
2147
 
2148
+ #: admin/views/placements.php:416
2149
  msgid "show all options"
2150
  msgstr ""
2151
 
2152
+ #: admin/views/placements.php:439
2153
  msgid "edit conditions"
2154
  msgstr ""
2155
 
2156
+ #: admin/views/placements.php:449
2157
  msgctxt "checkbox to remove placement"
2158
  msgid "delete"
2159
  msgstr ""
2160
 
2161
+ #: admin/views/placements.php:456
2162
  msgid "Save Placements"
2163
  msgstr ""
2164
 
2885
  msgid "accelerated mobile pages"
2886
  msgstr ""
2887
 
2888
+ #: classes/display-conditions.php:626
2889
  msgctxt "display the terms search field on ad edit page"
2890
  msgid "add more terms"
2891
  msgstr ""
2892
 
2893
+ #: classes/display-conditions.php:630
2894
  msgid "term name or id"
2895
  msgstr ""
2896
 
2897
+ #: classes/display-conditions.php:700
2898
  msgid "title or id"
2899
  msgstr ""
2900
 
2901
+ #: classes/display-conditions.php:755
2902
  #: includes/array_ad_conditions.php:63
2903
  msgid "Home Page"
2904
  msgstr ""
2905
 
2906
+ #: classes/display-conditions.php:756
2907
  #: includes/array_ad_conditions.php:64
2908
  msgid "show on Home page"
2909
  msgstr ""
2910
 
2911
+ #: classes/display-conditions.php:760
2912
  #: includes/array_ad_conditions.php:68
2913
  msgid "Singular Pages"
2914
  msgstr ""
2915
 
2916
+ #: classes/display-conditions.php:761
2917
  #: includes/array_ad_conditions.php:69
2918
  msgid "show on singular pages/posts"
2919
  msgstr ""
2920
 
2921
+ #: classes/display-conditions.php:765
2922
  #: includes/array_ad_conditions.php:73
2923
  msgid "Archive Pages"
2924
  msgstr ""
2925
 
2926
+ #: classes/display-conditions.php:766
2927
  #: includes/array_ad_conditions.php:74
2928
  msgid "show on any type of archive page (category, tag, author and date)"
2929
  msgstr ""
2930
 
2931
+ #: classes/display-conditions.php:770
2932
  #: includes/array_ad_conditions.php:78
2933
  msgid "Search Results"
2934
  msgstr ""
2935
 
2936
+ #: classes/display-conditions.php:771
2937
  #: includes/array_ad_conditions.php:79
2938
  msgid "show on search result pages"
2939
  msgstr ""
2940
 
2941
+ #: classes/display-conditions.php:775
2942
  #: includes/array_ad_conditions.php:83
2943
  msgid "404 Page"
2944
  msgstr ""
2945
 
2946
+ #: classes/display-conditions.php:776
2947
  #: includes/array_ad_conditions.php:84
2948
  msgid "show on 404 error page"
2949
  msgstr ""
2950
 
2951
+ #: classes/display-conditions.php:780
2952
  #: includes/array_ad_conditions.php:88
2953
  msgid "Attachment Pages"
2954
  msgstr ""
2955
 
2956
+ #: classes/display-conditions.php:781
2957
  #: includes/array_ad_conditions.php:89
2958
  msgid "show on attachment pages"
2959
  msgstr ""
2960
 
2961
+ #: classes/display-conditions.php:785
2962
  #: includes/array_ad_conditions.php:93
2963
  msgid "Secondary Queries"
2964
  msgstr ""
2965
 
2966
+ #: classes/display-conditions.php:786
2967
  #: includes/array_ad_conditions.php:94
2968
  msgid "allow ads in secondary queries"
2969
  msgstr ""
2970
 
2971
+ #: classes/display-conditions.php:790
2972
  msgid "RSS Feed"
2973
  msgstr ""
2974
 
2975
+ #: classes/display-conditions.php:791
2976
  msgid "allow ads in RSS Feed"
2977
  msgstr ""
2978
 
2979
+ #: classes/display-conditions.php:795
2980
  msgid "REST API"
2981
  msgstr ""
2982
 
2983
+ #: classes/display-conditions.php:796
2984
  msgid "allow ads in REST API"
2985
  msgstr ""
2986
 
2987
+ #: classes/display-conditions.php:831
2988
  msgid "older than"
2989
  msgstr ""
2990
 
2991
+ #: classes/display-conditions.php:832
2992
  msgid "younger than"
2993
  msgstr ""
2994
 
2995
+ #: classes/display-conditions.php:834
2996
  msgid "days"
2997
  msgstr ""
2998
 
4298
  msgid "Update Ad Group"
4299
  msgstr ""
4300
 
 
 
 
 
4301
  #: public/class-advanced-ads.php:761
4302
  msgid "New Ad Groups Name"
4303
  msgstr ""
lib/composer/ClassLoader.php CHANGED
@@ -10,12 +10,12 @@
10
  * file that was distributed with this source code.
11
  */
12
 
13
- namespace AdvancedAds\Autoload;
14
 
15
  /**
16
  * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
  *
18
- * $loader = new \AdvancedAds\Autoload\ClassLoader();
19
  *
20
  * // register classes with namespaces
21
  * $loader->add('Symfony\Component', __DIR__.'/component');
10
  * file that was distributed with this source code.
11
  */
12
 
13
+ namespace AdvancedAds\Composer\Autoload;
14
 
15
  /**
16
  * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
  *
18
+ * $loader = new \AdvancedAds\Composer\Autoload\ClassLoader();
19
  *
20
  * // register classes with namespaces
21
  * $loader->add('Symfony\Component', __DIR__.'/component');
lib/composer/autoload_classmap.php CHANGED
@@ -54,7 +54,7 @@ return array(
54
  'Advanced_Ads_Utils' => $baseDir . '/classes/utils.php',
55
  'Advanced_Ads_Visitor_Conditions' => $baseDir . '/classes/visitor-conditions.php',
56
  'Advanced_Ads_Widget' => $baseDir . '/classes/widget.php',
57
- 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
58
  'Yoast_I18n_WordPressOrg_v3' => $vendorDir . '/yoast/i18n-module/src/i18n-wordpressorg-v3.php',
59
  'Yoast_I18n_v3' => $vendorDir . '/yoast/i18n-module/src/i18n-v3.php',
60
  );
54
  'Advanced_Ads_Utils' => $baseDir . '/classes/utils.php',
55
  'Advanced_Ads_Visitor_Conditions' => $baseDir . '/classes/visitor-conditions.php',
56
  'Advanced_Ads_Widget' => $baseDir . '/classes/widget.php',
57
+
58
  'Yoast_I18n_WordPressOrg_v3' => $vendorDir . '/yoast/i18n-module/src/i18n-wordpressorg-v3.php',
59
  'Yoast_I18n_v3' => $vendorDir . '/yoast/i18n-module/src/i18n-v3.php',
60
  );
lib/composer/autoload_real.php CHANGED
@@ -8,13 +8,13 @@ class ComposerAutoloaderInit_advanced_ads
8
 
9
  public static function loadClassLoader($class)
10
  {
11
- if ('AdvancedAds\Autoload\ClassLoader' === $class) {
12
  require __DIR__ . '/ClassLoader.php';
13
  }
14
  }
15
 
16
  /**
17
- * @return \AdvancedAds\Autoload\ClassLoader
18
  */
19
  public static function getLoader()
20
  {
@@ -25,14 +25,14 @@ class ComposerAutoloaderInit_advanced_ads
25
  require __DIR__ . '/platform_check.php';
26
 
27
  spl_autoload_register(array('ComposerAutoloaderInit_advanced_ads', 'loadClassLoader'), true, true);
28
- self::$loader = $loader = new \AdvancedAds\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
  spl_autoload_unregister(array('ComposerAutoloaderInit_advanced_ads', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
- call_user_func(\AdvancedAds\Autoload\ComposerStaticInit_advanced_ads::getInitializer($loader));
36
  } else {
37
  $classMap = require __DIR__ . '/autoload_classmap.php';
38
  if ($classMap) {
8
 
9
  public static function loadClassLoader($class)
10
  {
11
+ if ('AdvancedAds\Composer\Autoload\ClassLoader' === $class) {
12
  require __DIR__ . '/ClassLoader.php';
13
  }
14
  }
15
 
16
  /**
17
+ * @return \AdvancedAds\Composer\Autoload\ClassLoader
18
  */
19
  public static function getLoader()
20
  {
25
  require __DIR__ . '/platform_check.php';
26
 
27
  spl_autoload_register(array('ComposerAutoloaderInit_advanced_ads', 'loadClassLoader'), true, true);
28
+ self::$loader = $loader = new \AdvancedAds\Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
  spl_autoload_unregister(array('ComposerAutoloaderInit_advanced_ads', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\AdvancedAds\Composer\Autoload\ComposerStaticInit_advanced_ads::getInitializer($loader));
36
  } else {
37
  $classMap = require __DIR__ . '/autoload_classmap.php';
38
  if ($classMap) {
lib/composer/autoload_static.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_static.php @generated by Composer
4
 
5
- namespace AdvancedAds\Autoload;
6
 
7
  class ComposerStaticInit_advanced_ads
8
  {
@@ -55,7 +55,7 @@ class ComposerStaticInit_advanced_ads
55
  'Advanced_Ads_Utils' => __DIR__ . '/../..' . '/classes/utils.php',
56
  'Advanced_Ads_Visitor_Conditions' => __DIR__ . '/../..' . '/classes/visitor-conditions.php',
57
  'Advanced_Ads_Widget' => __DIR__ . '/../..' . '/classes/widget.php',
58
- 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
59
  'Yoast_I18n_WordPressOrg_v3' => __DIR__ . '/..' . '/yoast/i18n-module/src/i18n-wordpressorg-v3.php',
60
  'Yoast_I18n_v3' => __DIR__ . '/..' . '/yoast/i18n-module/src/i18n-v3.php',
61
  );
2
 
3
  // autoload_static.php @generated by Composer
4
 
5
+ namespace AdvancedAds\Composer\Autoload;
6
 
7
  class ComposerStaticInit_advanced_ads
8
  {
55
  'Advanced_Ads_Utils' => __DIR__ . '/../..' . '/classes/utils.php',
56
  'Advanced_Ads_Visitor_Conditions' => __DIR__ . '/../..' . '/classes/visitor-conditions.php',
57
  'Advanced_Ads_Widget' => __DIR__ . '/../..' . '/classes/widget.php',
58
+
59
  'Yoast_I18n_WordPressOrg_v3' => __DIR__ . '/..' . '/yoast/i18n-module/src/i18n-wordpressorg-v3.php',
60
  'Yoast_I18n_v3' => __DIR__ . '/..' . '/yoast/i18n-module/src/i18n-v3.php',
61
  );
public/class-advanced-ads.php CHANGED
@@ -757,7 +757,7 @@ class Advanced_Ads {
757
  'parent_item_colon' => __( 'Parent Ad Groups:', 'advanced-ads' ),
758
  'edit_item' => __( 'Edit Ad Group', 'advanced-ads' ),
759
  'update_item' => __( 'Update Ad Group', 'advanced-ads' ),
760
- 'add_new_item' => __( 'Add New Ad Group', 'advanced-ads' ),
761
  'new_item_name' => __( 'New Ad Groups Name', 'advanced-ads' ),
762
  'menu_name' => __( 'Groups', 'advanced-ads' ),
763
  'not_found' => __( 'No Ad Group found', 'advanced-ads' ),
757
  'parent_item_colon' => __( 'Parent Ad Groups:', 'advanced-ads' ),
758
  'edit_item' => __( 'Edit Ad Group', 'advanced-ads' ),
759
  'update_item' => __( 'Update Ad Group', 'advanced-ads' ),
760
+ 'add_new_item' => __( 'New Ad Group', 'advanced-ads' ),
761
  'new_item_name' => __( 'New Ad Groups Name', 'advanced-ads' ),
762
  'menu_name' => __( 'Groups', 'advanced-ads' ),
763
  'not_found' => __( 'No Ad Group found', 'advanced-ads' ),
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: ads, adsense, amp, ads.txt, ad rotations, ad blocker, amazon, banner, clic
4
  Requires at least: 4.9
5
  Tested up to: 5.9
6
  Requires PHP: 5.6
7
- Stable tag: 1.32.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -33,7 +33,10 @@ Would you like to know if there is a certain feature, what the optimized setup w
33
 
34
  Advanced Ads allowed us to grow from 0 to 100 MM monthly ad impressions. Benefit from our experience as a publisher and monetize your website today!
35
 
36
- [Full Feature List](https://wpadvancedads.com/features/).
 
 
 
37
 
38
  = ad management =
39
 
@@ -48,21 +51,21 @@ Advanced Ads allowed us to grow from 0 to 100 MM monthly ad impressions. Benefit
48
  choose between different ad types that enable you to:
49
 
50
  * insert ads and banners from all ad and affiliate networks (e.g., Google AdSense, Amazon, BuySellAds, Google Ad Manager (formerly Google DoubleClick for Publishers, DFP), Ezoic, media.net, Booking.com, Tradedoubler, Awin, Getyourguide, The Moneytizer, Infolinks...)
51
- * dedicated support for all types of Google AdSense ads, including text and display ads, native ads (In-article, In-feed, matched content), Auto ads, and Auto ads for AMP
52
  * display images and image banners
53
  * create content-rich ads with the WordPress TinyMCE editor
54
  * insert contextual Amazon Native Shopping Ads
55
  * inject HTML, CSS, Javascript or PHP code
56
  * use shortcodes within ads (to also deliver advertisements from another ad plugin like Ad Inserter, AdRotate, Quick AdSense, WP Bannerize, or the Google AdSense Plugin WP QUADS)
57
 
58
- = display ads for WP =
59
 
60
  * auto-inject ads via placements
61
  * use functions to display ads in template files
62
  * use shortcodes to place ads manually in post content
63
  * show ads in the sidebar and in widgets
64
  * disable all ads on specific pages
65
- * display multiple ads (ad blocks)
66
  * display a customizable ad label, e.g., “Advertisements” above each banner ad
67
 
68
  = display conditions =
@@ -73,7 +76,7 @@ show ads based on content. [List of all display conditions](https://wpadvancedad
73
  * posts by category, tags, taxonomies, author, and age
74
  * archive pages by category, tags, taxonomies
75
  * special page types like 404, attachment and front page
76
- * post and pages by contained keywords (keyword targeting) or URL parameters, included in [Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/)
77
  * hide ads on secondary queries (e.g., posts in sidebars)
78
  * display or hide banners within the post feed
79
  * hide all ads from specific page types, e.g., 404 pages, feed
@@ -85,9 +88,10 @@ serve ads by conditions based on the visitor. [List of all visitor conditions](h
85
 
86
  * display or hide a banner by device: mobile and tablet or desktop
87
  * display or hide a banner by role and for logged-in visitors
88
- * advanced visitor conditions: previously visited URL (referrer), user capability, browser language, browser and device included in [Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/)
89
- * display ads by geolocation with the [Geo Targeting add-on](https://wpadvancedads.com/add-ons/geo-targeting/)
90
- * display ads by browser width with the [Responsive add-on](https://wpadvancedads.com/add-ons/responsive-ads/)
 
91
 
92
  > **Fantastic plugin and outstanding support**
93
  > I tried at least three other ad plugins for WordPress and ‘Advanced Ads’ is by and far the best one. Last but not least in the support. The first port of call are a number of excellent tutorials. And finally the hands on support. I don’t quite know how he does it but the speed and depth of responses are absolutely amazing.
@@ -102,15 +106,15 @@ Placements to insert ads in pre-defined positions in your theme and content. [Li
102
  * ads before closing `</head>` tag
103
  * ads in the footer
104
  * create [split tests and A/B testing](https://wpadvancedads.com/ab-testing-wordpress/)
105
- * many more ad positions with [add-ons](https://wpadvancedads.com/add-ons/)
106
  * automatic insertion of any kind of footer and header code, not only advertising
107
 
108
  = mobile devices =
109
 
110
  * display ads on mobile and tablets or desktop only
111
  * display responsive image ads
112
- * ads for specific browser sizes only using [Responsive Ads](https://wpadvancedads.com/add-ons/responsive-ads/)
113
- * inserting ads on AMP pages with [Responsive Ads](https://wpadvancedads.com/add-ons/responsive-ads/)
114
 
115
  = Google AdSense =
116
 
@@ -120,7 +124,7 @@ Amazing features of the most powerful and easy Google AdSense plugin.
120
  * pull ad units directly from your Google AdSense account
121
  * show AdSense revenue in WP Admin
122
  * change settings of your Google AdSense ads directly from your WordPress backend
123
- * supports all Google AdSense ad types, including Google AdSense display ads, native ads like In-feed ads, In-article ads, matched content ads, Google AdSense Auto ads, and Google AdSense Auto ads for AMP
124
  * change type and sizes of AdSense ads without going into your Google AdSense account
125
  * hide Google AdSense advertisements on 404 pages by default (to comply with Google AdSense terms)
126
  * insert Google AdSense code for verification and AdSense Auto Ads
@@ -128,8 +132,8 @@ Amazing features of the most powerful and easy Google AdSense plugin.
128
  * easy Ad Health integration and Google AdSense violation checks
129
  * option to remove the Google AdSense background color
130
  * place Google AdSense In-feed ads using the also free [In-feed add-on](https://wordpress.org/plugins/advanced-ads-adsense-in-feed/)
131
- * assistant for exact sizes of responsive Google AdSense ads with the [Responsive add-on](https://wpadvancedads.com/add-ons/responsive-ads/)
132
- * convert Google AdSense ads into AMP ads automatically with the [Responsive add-on](https://wpadvancedads.com/add-ons/responsive-ads/)
133
  * ads.txt generated with the correct AdSense information automatically
134
  * works along with Google Site Kit or can replace it if you want to [control your ad placements](https://wpadvancedads.com/place-adsense-ad-unit-manually/)
135
 
@@ -146,11 +150,27 @@ Like j4ckson185, there are thousands of happy AdSense users:
146
 
147
  https://vimeo.com/577170591
148
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  = ad blocker =
150
 
151
  * basic features to prevent ads from being removed by AdBlock and other ad blockers
152
  * prevent ad blockers from breaking sites where plugin scripts are running
153
- * ad blocking detection: show alternative content to ad block users with [Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/) and improve the monetization of your website
154
 
155
  Learn more on the [plugin homepage](https://wpadvancedads.com).
156
 
@@ -158,22 +178,7 @@ Thank you for motivating us with your [positive review](https://wordpress.org/su
158
 
159
  Localizations: Arabic, Chinese, Czech, Danish, Dutch, English, French, German, Hebrew, Hungarian, Italian, Japanese, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, Turkish, Vietnamese
160
 
161
- > <strong>Add-Ons</strong>
162
- >
163
- > * all add-ons include priority email support
164
- > * [Advanced Ads Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/) – powerful tools for ad optimizations: cache-busting, more placements, lazy loading, ad blocker module, click fraud protection, and many more
165
- > * [Tracking](https://wpadvancedads.com/add-ons/tracking/) – track ad impressions and ad clicks with local methods or Google Analytics
166
- > * [Responsive Ads](https://wpadvancedads.com/add-ons/responsive-ads/) – target ads to specific browser sizes and create ads for AMP
167
- > * [Google Ad Manager Integration](https://wpadvancedads.com/add-ons/google-ad-manager/) – a quick and error-free way to load ad units from your Google Ad Manager (formerly Google DoubleClick for Publishers, DFP) account without touching any ad codes
168
- > * [Geo Targeting](https://wpadvancedads.com/add-ons/geo-targeting/) – display ads based on the geo location of the visitor
169
- > * [Sticky Ads](https://wpadvancedads.com/add-ons/sticky-ads/) – increase click rates with fixed, sticky, and anchor ads
170
- > * [Fixed Widget for WordPress](https://wordpress.org/plugins/q2w3-fixed-widget/) – turn sidebar widgets into performant fixed sticky ads
171
- > * [PopUp and Layer Ads](https://wpadvancedads.com/add-ons/popup-and-layer-ads/) – display ads and other content in layers, popups, and interstitials
172
- > * [Selling Ads](https://wpadvancedads.com/add-ons/selling-ads/) - allows you to sell ads on your website fully automated, including payments and advertiser profiles
173
- > * [Ad Slider](https://wpadvancedads.com/add-ons/slider/) – create a simple slider from your ads
174
-
175
- If you have problems with Advanced Ads, please reach out to [our support](https://wordpress.org/support/plugin/advanced-ads) or open a [new topic](https://wordpress.org/support/plugin/advanced-ads/#new-topic-0) in our forums on wordpress.org
176
- .
177
 
178
  = Integrations =
179
 
@@ -183,6 +188,7 @@ Advanced Ads integrates with plenty of other plugins:
183
  - BuddyPress – [How to add ads on BuddyPress pages](https://wpadvancedads.com/ads-on-buddypress-pages/)
184
  - bbPress – [How to show ads on bbPress pages?](https://wpadvancedads.com/ads-in-bbpress/)
185
  - Cookie Consent, Borlabs Cookies, Complianz, GDPR Cookie Consent, and other content manager – [How to show ads based on visitors’ consent](https://wpadvancedads.com/manual/ad-cookie-consent/)
 
186
  - GamiPress – [How to target ads on GamiPress websites](https://wpadvancedads.com/manual/gamipress-ads/)
187
  - Genesis – [Genesis Ads add-on](https://wpadvancedads.com/add-ons/genesis-ads/)
188
  - MailPoet - [How to integrate Advanced Ads in MailPoet Newsletters](https://wpadvancedads.com/mailpoet-newsletters/)
@@ -290,8 +296,8 @@ Advanced Ads can be used along Google Site Kit or replace it if you need more co
290
 
291
  = Is the plugin compatible with page builders? =
292
 
293
- Yes. It works out of the box with all site builders that allow shortcodes or widgets, like Elementor, SiteOrigin, Beaver Builder, WPBakery Page Builder (formerly Visual Composer), [Nimble Page Builder](https://wordpress.org/plugins/nimble-builder/), and others.
294
- There is also a [free add-on to support the WPBakery Page Builder (formerly Visual Composer)](https://wordpress.org/plugins/ads-for-visual-composer/).
295
 
296
  = Will ads show up for ad block users? =
297
 
@@ -324,15 +330,10 @@ Yes. You can use plenty of [hooks](https://wpadvancedads.com/codex/) to customiz
324
 
325
  == Changelog ==
326
 
327
- = 1.32.0 =
328
-
329
- - Improvement: load display/visitor conditions automatically after selecting them
330
- - Fix: prevent undefined index notice in display conditions
331
- - Fix: accommodate for deprecation in WP_User_Query in WordPress 5.9.0
332
- - Fix: prevent tooltips from flowing out of right edge of viewport
333
- - Fix: correct ad list counter for expiring ads
334
- - Fix: prevent creating unneeded group wrapper around Advanced Ads block
335
- - Fix: escape the ad title on groups screen to prevent authenticated XSS
336
- - Fix: prevent authenticated XSS in plain text ads if `DISALLOW_UNFILTERED_HTML` is set
337
- - Fix: prevent authenticated RCE in plain text ads if `DISALLOW_FILE_EDIT` is set
338
- - Fix: rename "Responsive (Matched Content)" AdSense ad type to "Multiplex ads"
4
  Requires at least: 4.9
5
  Tested up to: 5.9
6
  Requires PHP: 5.6
7
+ Stable tag: 1.33.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
33
 
34
  Advanced Ads allowed us to grow from 0 to 100 MM monthly ad impressions. Benefit from our experience as a publisher and monetize your website today!
35
 
36
+ > **Advanced Ads All Access**
37
+ >This plugin is the lite version of the Advanced Ads plugin that comes with all the features you will ever need to optimize your ads and increase your revenues, including advanced ad targeting, split tests, click fraud protection, lazy loading, background, popups and sticky ads, full AMP support, adblocker detection, the most comfortable Google Ad Manager integration, and tons more. [Click here to purchase the best premium WordPress ad management plugin now!](https://wpadvancedads.com/add-ons/all-access/?utm_source=wporg&utm_medium=link&utm_campaign=wp-all-access)
38
+
39
+ [Full Feature List](https://wpadvancedads.com/features/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features)
40
 
41
  = ad management =
42
 
51
  choose between different ad types that enable you to:
52
 
53
  * insert ads and banners from all ad and affiliate networks (e.g., Google AdSense, Amazon, BuySellAds, Google Ad Manager (formerly Google DoubleClick for Publishers, DFP), Ezoic, media.net, Booking.com, Tradedoubler, Awin, Getyourguide, The Moneytizer, Infolinks...)
54
+ * dedicated support for all types of Google AdSense ads, including text and display ads, native ads (In-article, In-feed, Multiplex ads), Auto ads, and Auto ads for AMP
55
  * display images and image banners
56
  * create content-rich ads with the WordPress TinyMCE editor
57
  * insert contextual Amazon Native Shopping Ads
58
  * inject HTML, CSS, Javascript or PHP code
59
  * use shortcodes within ads (to also deliver advertisements from another ad plugin like Ad Inserter, AdRotate, Quick AdSense, WP Bannerize, or the Google AdSense Plugin WP QUADS)
60
 
61
+ = display ads for WordPress =
62
 
63
  * auto-inject ads via placements
64
  * use functions to display ads in template files
65
  * use shortcodes to place ads manually in post content
66
  * show ads in the sidebar and in widgets
67
  * disable all ads on specific pages
68
+ * display multiple ads (ad grids)
69
  * display a customizable ad label, e.g., “Advertisements” above each banner ad
70
 
71
  = display conditions =
76
  * posts by category, tags, taxonomies, author, and age
77
  * archive pages by category, tags, taxonomies
78
  * special page types like 404, attachment and front page
79
+ * post and pages by contained keywords [(keyword targeting)](https://wpadvancedads.com/manual/ads-based-on-keywords/?utm_source=wporg&utm_medium=link&utm_campaign=features) or URL parameters, included in [Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features-pro-1)
80
  * hide ads on secondary queries (e.g., posts in sidebars)
81
  * display or hide banners within the post feed
82
  * hide all ads from specific page types, e.g., 404 pages, feed
88
 
89
  * display or hide a banner by device: mobile and tablet or desktop
90
  * display or hide a banner by role and for logged-in visitors
91
+ * advanced visitor conditions: previously visited URL (referrer), user capability, browser language, browser and device included in [Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features-pro-2)
92
+ * display ads by geolocation with the [Geo Targeting add-on](https://wpadvancedads.com/add-ons/geo-targeting/?utm_source=wporg&utm_medium=link&utm_campaign=features
93
+ )
94
+ * display ads by browser width with the [Responsive add-on](https://wpadvancedads.com/add-ons/responsive-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features-responsive-1)
95
 
96
  > **Fantastic plugin and outstanding support**
97
  > I tried at least three other ad plugins for WordPress and ‘Advanced Ads’ is by and far the best one. Last but not least in the support. The first port of call are a number of excellent tutorials. And finally the hands on support. I don’t quite know how he does it but the speed and depth of responses are absolutely amazing.
106
  * ads before closing `</head>` tag
107
  * ads in the footer
108
  * create [split tests and A/B testing](https://wpadvancedads.com/ab-testing-wordpress/)
109
+ * many more ad positions with [add-ons](https://wpadvancedads.com/add-ons/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features)
110
  * automatic insertion of any kind of footer and header code, not only advertising
111
 
112
  = mobile devices =
113
 
114
  * display ads on mobile and tablets or desktop only
115
  * display responsive image ads
116
+ * ads for specific browser sizes only using [Responsive Ads](https://wpadvancedads.com/add-ons/responsive-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features-responsive-2)
117
+ * inserting ads on AMP pages with [Responsive Ads](https://wpadvancedads.com/add-ons/responsive-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features-responsive-3)
118
 
119
  = Google AdSense =
120
 
124
  * pull ad units directly from your Google AdSense account
125
  * show AdSense revenue in WP Admin
126
  * change settings of your Google AdSense ads directly from your WordPress backend
127
+ * supports all Google AdSense ad types, including Google AdSense display ads, native ads like In-feed ads, In-article ads, Matched content ads, Multliplex ads, Google AdSense Auto ads, and Google AdSense Auto ads for AMP
128
  * change type and sizes of AdSense ads without going into your Google AdSense account
129
  * hide Google AdSense advertisements on 404 pages by default (to comply with Google AdSense terms)
130
  * insert Google AdSense code for verification and AdSense Auto Ads
132
  * easy Ad Health integration and Google AdSense violation checks
133
  * option to remove the Google AdSense background color
134
  * place Google AdSense In-feed ads using the also free [In-feed add-on](https://wordpress.org/plugins/advanced-ads-adsense-in-feed/)
135
+ * assistant for exact sizes of responsive Google AdSense ads with the [Responsive add-on](https://wpadvancedads.com/add-ons/responsive-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features-responsive-4)
136
+ * convert Google AdSense ads into AMP ads automatically with the [Responsive add-on](https://wpadvancedads.com/add-ons/responsive-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features-responsive-5)
137
  * ads.txt generated with the correct AdSense information automatically
138
  * works along with Google Site Kit or can replace it if you want to [control your ad placements](https://wpadvancedads.com/place-adsense-ad-unit-manually/)
139
 
150
 
151
  https://vimeo.com/577170591
152
 
153
+ > <strong>Add-Ons</strong>
154
+ >
155
+ > * all add-ons include priority email support
156
+ > * [All Access](https://wpadvancedads.com/add-ons/all-access/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – includes all available add-ons
157
+ > * [Advanced Ads Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – powerful tools for ad optimizations: cache-busting, more placements, [lazy loading](https://wpadvancedads.com/lazy-load-ads/?utm_source=wporg&utm_medium=link&utm_campaign=features), ad blocker module, [click fraud protection](https://wpadvancedads.com/manual/click-fraud-protection/?utm_source=wporg&utm_medium=link&utm_campaign=features), and many more
158
+ > * [Tracking](https://wpadvancedads.com/add-ons/tracking/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – track ad impressions and ad clicks with local methods or Google Analytics
159
+ > * [Responsive Ads](https://wpadvancedads.com/add-ons/responsive-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – target ads to specific browser sizes and create ads for AMP
160
+ > * [Google Ad Manager Integration](https://wpadvancedads.com/add-ons/google-ad-manager/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – a quick and error-free way to load ad units from your Google Ad Manager (formerly Google DoubleClick for Publishers, DFP) account without touching any ad codes
161
+ > * [Geo Targeting](https://wpadvancedads.com/add-ons/geo-targeting/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – display ads based on the geo location of the visitor
162
+ > * [Sticky Ads](https://wpadvancedads.com/add-ons/sticky-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – increase click rates with fixed, sticky, and anchor ads
163
+ > * [Fixed Widget for WordPress](https://wordpress.org/plugins/q2w3-fixed-widget/) – turn sidebar widgets into performant fixed sticky ads
164
+ > * [PopUp and Layer Ads](https://wpadvancedads.com/add-ons/popup-and-layer-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – display ads and other content in layers, popups, and interstitials
165
+ > * [Selling Ads](https://wpadvancedads.com/add-ons/selling-ads/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) - allows you to sell ads on your website fully automated, including payments and advertiser profiles
166
+ > * [Ad Slider](https://wpadvancedads.com/add-ons/slider/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons) – create a simple slider from your ads
167
+ > * [Full Feature List](https://wpadvancedads.com/features/?utm_source=wporg&utm_medium=link&utm_campaign=wp-add-ons)
168
+
169
  = ad blocker =
170
 
171
  * basic features to prevent ads from being removed by AdBlock and other ad blockers
172
  * prevent ad blockers from breaking sites where plugin scripts are running
173
+ * ad blocking detection: show alternative content to ad block users with [Pro](https://wpadvancedads.com/add-ons/advanced-ads-pro/?utm_source=wporg&utm_medium=link&utm_campaign=wp-features-pro-3) and improve the monetization of your website
174
 
175
  Learn more on the [plugin homepage](https://wpadvancedads.com).
176
 
178
 
179
  Localizations: Arabic, Chinese, Czech, Danish, Dutch, English, French, German, Hebrew, Hungarian, Italian, Japanese, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, Turkish, Vietnamese
180
 
181
+ If you have problems with Advanced Ads, please open a [new topic](https://wordpress.org/support/plugin/advanced-ads/#new-topic-0) in our forums on wordpress.org, or reach out to our [premium support](https://wpadvancedads.com/support/), if you have an active license.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
 
183
  = Integrations =
184
 
188
  - BuddyPress – [How to add ads on BuddyPress pages](https://wpadvancedads.com/ads-on-buddypress-pages/)
189
  - bbPress – [How to show ads on bbPress pages?](https://wpadvancedads.com/ads-in-bbpress/)
190
  - Cookie Consent, Borlabs Cookies, Complianz, GDPR Cookie Consent, and other content manager – [How to show ads based on visitors’ consent](https://wpadvancedads.com/manual/ad-cookie-consent/)
191
+ - Elementor - [How to create and implement ads in Elementor](https://wpadvancedads.com/elementor-ads/)
192
  - GamiPress – [How to target ads on GamiPress websites](https://wpadvancedads.com/manual/gamipress-ads/)
193
  - Genesis – [Genesis Ads add-on](https://wpadvancedads.com/add-ons/genesis-ads/)
194
  - MailPoet - [How to integrate Advanced Ads in MailPoet Newsletters](https://wpadvancedads.com/mailpoet-newsletters/)
296
 
297
  = Is the plugin compatible with page builders? =
298
 
299
+ Yes. It works out of the box with all site builders that allow shortcodes or widgets, like [Elementor](https://wpadvancedads.com/elementor-ads/), SiteOrigin, [Beaver Builder](https://wpadvancedads.com/beaver-builder-ads/), WPBakery Page Builder (formerly Visual Composer), [Nimble Page Builder](https://wordpress.org/plugins/nimble-builder/), and others.
300
+ There is also a [free add-on to support the WPBakery Page Builder](https://wordpress.org/plugins/ads-for-visual-composer/) (formerly Visual Composer).
301
 
302
  = Will ads show up for ad block users? =
303
 
330
 
331
  == Changelog ==
332
 
333
+ = 1.33.0 (March 29, 2022) =
334
+
335
+ - Improvement: introduce new header on plugin-related pages in WP Admin
336
+ - Improvement: better highlight selected condition options
337
+ - Improvement: prevent admin notices from jumping on Advanced Ads pages
338
+ - Improvement: consistently call the overview page "Dashboard" in the page title and menu
339
+ - Fix: remove default "Visibility" setting from ad edit page to avoid confusion