PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.17.10
Advanced Ads – Ad Manager & AdSense v1.17.10
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 6 years ago ad-debug.php 8 years ago ad-health-notices.php 6 years ago ad-model.php 6 years ago ad-select.php 9 years ago ad.php 6 years ago ad_ajax_callbacks.php 6 years ago ad_group.php 6 years ago ad_placements.php 6 years ago ad_type_abstract.php 6 years ago ad_type_content.php 6 years ago ad_type_dummy.php 6 years ago ad_type_group.php 6 years ago ad_type_image.php 6 years ago ad_type_plain.php 6 years ago checks.php 6 years ago compatibility.php 6 years ago display-conditions.php 6 years ago filesystem.php 8 years ago frontend-notices.php 6 years ago frontend_checks.php 6 years ago plugin.php 6 years ago upgrades.php 7 years ago utils.php 6 years ago visitor-conditions.php 6 years ago widget.php 6 years ago
compatibility.php
188 lines
1 <?php
2
3 class Advanced_Ads_Compatibility {
4
5 /**
6 * Advanced_Ads_Compatibility constructor.
7 */
8 public function __construct() {
9 // Elementor plugin.
10 if ( defined( 'ELEMENTOR_VERSION' ) ) {
11 add_filter(
12 'advanced-ads-placement-content-injection-xpath',
13 array(
14 $this,
15 'content_injection_elementor',
16 ),
17 10,
18 1
19 );
20 }
21 if ( defined( 'WP_ROCKET_VERSION' ) ) {
22 add_filter( 'rocket_excluded_inline_js_content', array( $this, 'exclude_inline_js' ) );
23 }
24 // WPML.
25 add_filter( 'wpml_admin_language_switcher_active_languages', array( $this, 'wpml_language_switcher' ) );
26 // Wordpress SEO by Yoast.
27 add_filter( 'wpseo_sitemap_entry', array( $this, 'wordpress_seo_noindex_ad_attachments' ), 10, 3 );
28 // Add shortcode for MailPoet.
29 add_filter( 'mailpoet_newsletter_shortcode', array( $this, 'mailpoet_ad_shortcode' ), 10, 5 );
30 }
31
32 /**
33 * Modify xPath expression for Elementor plugin.
34 * The plugin does not wrap newly created text in 'p' tags.
35 *
36 * @param str $tag xpath tag.
37 *
38 * @return xPath expression
39 */
40 public function content_injection_elementor( $tag ) {
41 if ( 'p' === $tag ) {
42 // 'p' or 'div.elementor-widget-text-editor' without nested 'p'
43 $tag = "*[self::p or self::div[@class and contains(concat(' ', normalize-space(@class), ' '), ' elementor-widget-text-editor ') and not(descendant::p)]]";
44 }
45
46 return $tag;
47 }
48
49 /**
50 * Prevent the 'advanced_ads_ready' function declaration from being merged with other JS
51 * and outputted into the footer. This is needed because WP Rocket does not output all
52 * the code that depends on this function into the footer.
53 *
54 * @param array $pattern Patterns to match in inline JS content.
55 *
56 * @return array
57 */
58 public function exclude_inline_js( $pattern ) {
59 $pattern[] = 'advanced_ads_ready';
60
61 return $pattern;
62 }
63
64 /**
65 * Compatibility with WPML
66 * show only all languages in language switcher on Advanced Ads pages if ads and groups are translated
67 *
68 * @param array $active_languages languages that can be used in language switcher.
69 *
70 * @return array
71 */
72 public function wpml_language_switcher( $active_languages ) {
73 global $sitepress;
74 $screen = get_current_screen();
75 if ( ! isset( $screen->id ) ) {
76 return $active_languages;
77 }
78
79 switch ( $screen->id ) {
80 // check if we are on a group edit page and ad group translations are disabled.
81 case 'advanced-ads_page_advanced-ads-groups':
82 $translatable_taxonomies = $sitepress->get_translatable_taxonomies();
83 if ( ! is_array( $translatable_taxonomies ) || ! in_array( 'advanced_ads_groups', $translatable_taxonomies, true ) ) {
84 return array();
85 }
86 break;
87 // check if Advanced Ads ad post type is translatable.
88 case 'edit-advanced_ads': // overview page.
89 case 'advanced_ads': // edit page.
90 $translatable_documents = $sitepress->get_translatable_documents();
91 if ( empty( $translatable_documents['advanced_ads'] ) ) {
92 return array();
93 }
94 break;
95 // always show all languages on Placements page.
96 case 'advanced-ads_page_advanced-ads-placements':
97 return array();
98 }
99
100 return $active_languages;
101 }
102
103 /**
104 * Wordpress SEO: remove attachments attached to ads from `/attachment-sitemap.xml`.
105 *
106 * @param array $url Array of URL parts.
107 * @param string $type URL type.
108 * @param obj $post WP_Post object of attachment.
109 * @return array/bool Unmodified array of URL parts or false to remove URL.
110 */
111 public function wordpress_seo_noindex_ad_attachments( $url, $type, $post ) {
112 if ( 'post' !== $type ) {
113 return $url;
114 }
115
116 static $ad_ids = null;
117 if ( null === $ad_ids ) {
118 $ad_ids = Advanced_Ads::get_instance()->get_model()->get_ads( array(
119 'post_status' => 'any',
120 'fields' => 'ids'
121 ) );
122 }
123
124 if ( isset( $post->post_parent ) && in_array( $post->post_parent, $ad_ids, true ) ) {
125 return false;
126 }
127
128 return $url;
129 }
130
131 /**
132 * Display an ad or ad group in a newsletter created by MailPoet.
133 * e.g., [custom:ad:123] to display ad with the ID 123
134 * [custom:ad_group:345] to display ad group with the ID 345
135 *
136 * @param string $shortcode
137 * @param $newsletter unused
138 * @param $subscriber unused
139 * @param $queue unused
140 * @param $newsletter_body unused
141 *
142 * @return string
143 */
144 function mailpoet_ad_shortcode( $shortcode, $newsletter, $subscriber, $queue, $newsletter_body ) {
145 // display an ad group.
146 if ( 0 === strpos( $shortcode, '[custom:ad_group:' ) ) {
147 // get ad group ID.
148 preg_match( '/\d+/', $shortcode, $matches );
149 $group_id = $matches[0];
150
151 // is returning an empty string when the ad group is not found good UI?
152 if ( empty( $group_id ) ) {
153 return '';
154 }
155
156 // only display if the ad group type could work, i.e. default (random) and ordered.
157 $ad_group = new Advanced_Ads_Group( $group_id );
158 if ( isset( $ad_group->type ) && in_array( $ad_group->type, array( 'default', 'ordered' ), true ) ) {
159 return get_ad_group( $group_id );
160 }
161
162 return '';
163
164 // display individual ad.
165 } elseif ( 0 === strpos( $shortcode, '[custom:ad:' ) ) {
166 // get ad ID.
167 preg_match( '/\d+/', $shortcode, $matches );
168 $ad_id = $matches[0];
169
170 // is returning an empty string when the ad is not found good UI?
171 if ( empty( $ad_id ) ) {
172 return '';
173 }
174
175 $ad = new Advanced_Ads_Ad( $ad_id );
176 // only display if the ad type could work, i.e. plain text and image ads.
177 if ( isset( $ad->type ) && in_array( $ad->type, array( 'plain', 'image' ), true ) ) {
178 return get_ad( $ad_id );
179 }
180
181 return '';
182 } else {
183 // always return the shortcode if it doesn't match your own!
184 return $shortcode;
185 }
186 }
187 }
188