PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.20.1
Advanced Ads – Ad Manager & AdSense v1.20.1
2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / classes / compatibility.php
advanced-ads / classes Last commit date
EDD_SL_Plugin_Updater.php 6 years ago ad-ajax.php 5 years ago ad-debug.php 6 years ago ad-health-notices.php 6 years ago ad-model.php 5 years ago ad-select.php 9 years ago ad.php 5 years ago ad_ajax_callbacks.php 5 years ago ad_group.php 5 years ago ad_placements.php 5 years ago ad_type_abstract.php 5 years ago ad_type_content.php 5 years ago ad_type_dummy.php 5 years ago ad_type_group.php 6 years ago ad_type_image.php 5 years ago ad_type_plain.php 5 years ago checks.php 6 years ago compatibility.php 5 years ago display-conditions.php 5 years ago filesystem.php 8 years ago frontend-notices.php 6 years ago frontend_checks.php 5 years ago plugin.php 5 years ago upgrades.php 6 years ago utils.php 5 years ago visitor-conditions.php 6 years ago widget.php 6 years ago
compatibility.php
216 lines
1 <?php
2 /**
3 * Compatibility fixes with other plugins.
4 */
5 class Advanced_Ads_Compatibility {
6
7 /**
8 * Advanced_Ads_Compatibility constructor.
9 */
10 public function __construct() {
11 // Elementor plugin.
12 if ( defined( 'ELEMENTOR_VERSION' ) ) {
13 add_filter(
14 'advanced-ads-placement-content-injection-xpath',
15 array(
16 $this,
17 'content_injection_elementor',
18 ),
19 10,
20 1
21 );
22 }
23 if ( defined( 'WP_ROCKET_VERSION' ) ) {
24 add_filter( 'rocket_excluded_inline_js_content', array( $this, 'exclude_inline_js' ) );
25 }
26 // WPML.
27 add_filter( 'wpml_admin_language_switcher_active_languages', array( $this, 'wpml_language_switcher' ) );
28 // WordPress SEO by Yoast.
29 add_filter( 'wpseo_sitemap_entry', array( $this, 'wordpress_seo_noindex_ad_attachments' ), 10, 3 );
30 // Add shortcode for MailPoet.
31 add_filter( 'mailpoet_newsletter_shortcode', array( $this, 'mailpoet_ad_shortcode' ), 10, 5 );
32
33 add_action( 'admin_enqueue_scripts', array( $this, 'admin_dequeue_scripts_and_styles' ), 100 );
34 }
35
36 /**
37 * Modify xPath expression for Elementor plugin.
38 * The plugin does not wrap newly created text in 'p' tags.
39 *
40 * @param str $tag xpath tag.
41 *
42 * @return xPath expression
43 */
44 public function content_injection_elementor( $tag ) {
45 if ( 'p' === $tag ) {
46 // 'p' or 'div.elementor-widget-text-editor' without nested 'p'
47 $tag = "*[self::p or self::div[@class and contains(concat(' ', normalize-space(@class), ' '), ' elementor-widget-text-editor ') and not(descendant::p)]]";
48 }
49
50 return $tag;
51 }
52
53 /**
54 * Prevent the 'advanced_ads_ready' function declaration from being merged with other JS
55 * and outputted into the footer. This is needed because WP Rocket does not output all
56 * the code that depends on this function into the footer.
57 *
58 * @param array $pattern Patterns to match in inline JS content.
59 *
60 * @return array
61 */
62 public function exclude_inline_js( $pattern ) {
63 $pattern[] = 'advanced_ads_ready';
64
65 return $pattern;
66 }
67
68 /**
69 * Compatibility with WPML
70 * show only all languages in language switcher on Advanced Ads pages if ads and groups are translated
71 *
72 * @param array $active_languages languages that can be used in language switcher.
73 *
74 * @return array
75 */
76 public function wpml_language_switcher( $active_languages ) {
77 global $sitepress;
78 $screen = get_current_screen();
79 if ( ! isset( $screen->id ) ) {
80 return $active_languages;
81 }
82
83 switch ( $screen->id ) {
84 // check if we are on a group edit page and ad group translations are disabled.
85 case 'advanced-ads_page_advanced-ads-groups':
86 $translatable_taxonomies = $sitepress->get_translatable_taxonomies();
87 if ( ! is_array( $translatable_taxonomies ) || ! in_array( 'advanced_ads_groups', $translatable_taxonomies, true ) ) {
88 return array();
89 }
90 break;
91 // check if Advanced Ads ad post type is translatable.
92 case 'edit-advanced_ads': // overview page.
93 case 'advanced_ads': // edit page.
94 $translatable_documents = $sitepress->get_translatable_documents();
95 if ( empty( $translatable_documents['advanced_ads'] ) ) {
96 return array();
97 }
98 break;
99 }
100
101 return $active_languages;
102 }
103
104 /**
105 * WordPress SEO: remove attachments attached to ads from `/attachment-sitemap.xml`.
106 *
107 * @param array $url Array of URL parts.
108 * @param string $type URL type.
109 * @param obj $post WP_Post object of attachment.
110 * @return array/bool Unmodified array of URL parts or false to remove URL.
111 */
112 public function wordpress_seo_noindex_ad_attachments( $url, $type, $post ) {
113 if ( 'post' !== $type ) {
114 return $url;
115 }
116
117 static $ad_ids = null;
118 if ( null === $ad_ids ) {
119 $ad_ids = Advanced_Ads::get_instance()->get_model()->get_ads(
120 array(
121 'post_status' => 'any',
122 'fields' => 'ids',
123 )
124 );
125 }
126
127 if ( isset( $post->post_parent ) && in_array( $post->post_parent, $ad_ids, true ) ) {
128 return false;
129 }
130
131 return $url;
132 }
133
134 /**
135 * Display an ad or ad group in a newsletter created by MailPoet.
136 * e.g., [custom:ad:123] to display ad with the ID 123
137 * [custom:ad_group:345] to display ad group with the ID 345
138 *
139 * @param string $shortcode shortcode that placed the ad.
140 * @param mixed $newsletter unused.
141 * @param mixed $subscriber unused.
142 * @param mixed $queue unused.
143 * @param string $newsletter_body unused.
144 *
145 * @return string
146 */
147 public function mailpoet_ad_shortcode( $shortcode, $newsletter, $subscriber, $queue, $newsletter_body ) {
148 // display an ad group.
149 if ( 0 === strpos( $shortcode, '[custom:ad_group:' ) ) {
150 // get ad group ID.
151 preg_match( '/\d+/', $shortcode, $matches );
152 $group_id = $matches[0];
153
154 // is returning an empty string when the ad group is not found good UI?
155 if ( empty( $group_id ) ) {
156 return '';
157 }
158
159 // only display if the ad group type could work, i.e. default (random) and ordered.
160 $ad_group = new Advanced_Ads_Group( $group_id );
161 if ( isset( $ad_group->type ) && in_array( $ad_group->type, array( 'default', 'ordered' ), true ) ) {
162 return get_ad_group( $group_id );
163 }
164
165 return '';
166
167 // display individual ad.
168 } elseif ( 0 === strpos( $shortcode, '[custom:ad:' ) ) {
169 // get ad ID.
170 preg_match( '/\d+/', $shortcode, $matches );
171 $ad_id = $matches[0];
172
173 // is returning an empty string when the ad is not found good UI?
174 if ( empty( $ad_id ) ) {
175 return '';
176 }
177
178 $ad = new Advanced_Ads_Ad( $ad_id );
179 // only display if the ad type could work, i.e. plain text and image ads.
180 if ( isset( $ad->type ) && in_array( $ad->type, array( 'plain', 'image' ), true ) ) {
181 return get_ad( $ad_id );
182 }
183
184 return '';
185 } else {
186 // always return the shortcode if it doesn't match your own!
187 return $shortcode;
188 }
189 }
190
191 /**
192 * Check if placements of type other than `header` can be injected during `wp_head` action.
193 */
194 public static function can_inject_during_wp_head() {
195 // the "Thrive Theme Builder" theme.
196 if ( did_action( 'before_theme_builder_template_render' ) && ! did_action( 'after_theme_builder_template_render' ) ) {
197 return true;
198 }
199 return false;
200 }
201
202 /**
203 * Dequeue scripts and styles to prevent layout issues.
204 */
205 public function admin_dequeue_scripts_and_styles() {
206 if ( ! Advanced_Ads_Admin::screen_belongs_to_advanced_ads() ) {
207 return;
208 }
209
210 // Dequeue the css file enqueued by the JNews theme.
211 if ( defined( 'JNEWS_THEME_URL' ) ) {
212 wp_dequeue_style( 'jnews-admin' );
213 }
214 }
215 }
216