PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.47.3
Advanced Ads – Ad Manager & AdSense v1.47.3
2.0.25 2.0.24 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 / ad_type_image.php
advanced-ads / classes Last commit date
Advanced_Ads_Modal.php 2 years ago EDD_SL_Plugin_Updater.php 4 years ago ad-ajax.php 2 years ago ad-debug.php 2 years ago ad-expiration.php 3 years ago ad-health-notices.php 2 years ago ad-model.php 2 years ago ad-select.php 3 years ago ad.php 2 years ago ad_ajax_callbacks.php 2 years ago ad_group.php 2 years ago ad_placements.php 2 years ago ad_type_abstract.php 2 years ago ad_type_content.php 2 years ago ad_type_dummy.php 2 years ago ad_type_group.php 2 years ago ad_type_image.php 2 years ago ad_type_plain.php 2 years ago checks.php 2 years ago class-translation-promo.php 2 years ago compatibility.php 2 years ago display-conditions.php 2 years ago filesystem.php 3 years ago frontend_checks.php 2 years ago in-content-injector.php 2 years ago inline-css.php 2 years ago plugin.php 2 years ago upgrades.php 2 years ago utils.php 3 years ago visitor-conditions.php 2 years ago widget.php 2 years ago
ad_type_image.php
263 lines
1 <?php
2 /**
3 * Advanced Ads Image Ad Type
4 *
5 * @package Advanced_Ads
6 * @author Thomas Maier <support@wpadvancedads.com>
7 * @license GPL-2.0+
8 * @link https://wpadvancedads.com
9 * @copyright 2015 Thomas Maier, Advanced Ads GmbH
10 *
11 * Class containing information about the content ad type
12 * this should also work as an example for other ad types
13 */
14 class Advanced_Ads_Ad_Type_Image extends Advanced_Ads_Ad_Type_Abstract {
15
16 /**
17 * ID - internal type of the ad type
18 * must be static so set your own ad type ID here
19 * use slug like format, only lower case, underscores and hyphens
20 *
21 * @var string $ID ad type ID.
22 */
23 public $ID = 'image';
24
25 /**
26 * Set basic attributes
27 */
28 public function __construct() {
29 $this->title = __( 'Image Ad', 'advanced-ads' );
30 $this->description = __( 'Ads in various image formats.', 'advanced-ads' );
31 $this->parameters = [
32 'image_url' => '',
33 'image_title' => '',
34 'image_alt' => '',
35 ];
36 }
37
38 /**
39 * Output for the ad parameters metabox
40 *
41 * @param Advanced_Ads_Ad $ad ad object.
42 *
43 * @return void
44 */
45 public function render_parameters( Advanced_Ads_Ad $ad ) {
46 $id = isset( $ad->output['image_id'] ) ? $ad->output['image_id'] : '';
47 $url = isset( $ad->url ) ? esc_attr( $ad->url ) : '';
48 $edit_link = $id ? get_edit_post_link( $id ) : '';
49
50 ?><span class="label">
51 <button href="#" class="advads_image_upload button advads-button-secondary" type="button"
52 data-uploader-title="<?php esc_attr_e( 'Insert File', 'advanced-ads' ); ?>"
53 data-uploader-button-text="<?php esc_attr_e( 'Insert', 'advanced-ads' ); ?>"
54 onclick="return false;">
55 <?php esc_html_e( 'Select image', 'advanced-ads' ); ?>
56 </button>
57 </span>
58 <div>
59 <input type="hidden" name="advanced_ad[output][image_id]" value="<?php echo absint( $id ); ?>" id="advads-image-id"/>
60 <div id="advads-image-preview">
61 <?php $this->create_image_tag( $id, $ad ); ?>
62 </div>
63 <a id="advads-image-edit-link" class="<?php echo ! $edit_link ? 'hidden' : ''; ?>" href="<?php echo esc_url( $edit_link ); ?>"><span class="dashicons dashicons-edit"></span></a>
64 </div>
65 <hr/>
66 <?php
67 // don’t show if tracking plugin enabled
68 if ( ! defined( 'AAT_VERSION' ) ) :
69 ?>
70 <label for="advads-url" class="label"><?php esc_html_e( 'URL', 'advanced-ads' ); ?></label>
71 <div>
72 <input type="url" name="advanced_ad[url]" id="advads-url" class="advads-ad-url" value="<?php echo esc_url( $url ); ?>" placeholder="https://www.example.com/"/>
73 <p class="description">
74 <?php esc_html_e( 'Link to target site including http(s)', 'advanced-ads' ); ?>
75 </p>
76 </div>
77 <hr/>
78 <?php
79 endif;
80 }
81
82 /**
83 * Render image tag
84 *
85 * @param int $attachment_id post id of the image.
86 * @param Advanced_Ads_Ad $ad ad object.
87 */
88 public function create_image_tag( $attachment_id, $ad ) {
89 $image = wp_get_attachment_image_src( $attachment_id, 'full' );
90 $style = '';
91
92 // if we don't have an image, bail early.
93 if ( ! $image ) {
94 return;
95 }
96
97 list( $src, $width, $height ) = $image;
98 // override image sizes with the sizes given in ad options, but in frontend only
99 if (
100 ! is_admin()
101 || wp_doing_ajax()
102 ) {
103 $width = isset( $ad->width ) ? absint( $ad->width ) : $width;
104 $height = isset( $ad->height ) ? absint( $ad->height ) : $height;
105 }
106 $hwstring = image_hwstring( $width, $height );
107 $alt = trim( esc_textarea( get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ) ) );
108
109 global $wp_current_filter;
110
111 // TODO: use an array for attributes so they are simpler to extend
112 $sizes = '';
113 $srcset = '';
114 $more_attributes = $srcset;
115 // create srcset and sizes attributes if we are in the the_content filter and in WordPress 4.4
116 if (
117 isset( $wp_current_filter )
118 && in_array( 'the_content', $wp_current_filter, true )
119 && ! defined( 'ADVADS_DISABLE_RESPONSIVE_IMAGES' )
120 ) {
121 if ( function_exists( 'wp_get_attachment_image_srcset' ) ) {
122 $srcset = wp_get_attachment_image_srcset( $attachment_id, 'full' );
123 }
124 if ( function_exists( 'wp_get_attachment_image_sizes' ) ) {
125 $sizes = wp_get_attachment_image_sizes( $attachment_id, 'full' );
126 }
127 if ( $srcset && $sizes ) {
128 $more_attributes .= ' srcset="' . $srcset . '" sizes="' . $sizes . '"';
129 }
130 }
131
132 // TODO: move to classes/compabtility.php when we have a simpler filter for additional attributes
133 // compabitility with WP Smush. Disables their lazy load for image ads because it caused them to not show up in certain positions at all.
134 $wp_smush_settings = get_option( 'wp-smush-settings' );
135 if ( isset( $wp_smush_settings['lazy_load'] ) && $wp_smush_settings['lazy_load'] ) {
136 // Lazy load is enabled.
137 $more_attributes .= ' class="no-lazyload"';
138 }
139
140 // add css rule to be able to center the ad.
141 if ( isset( $ad->output['position'] ) && strpos( $ad->output['position'], 'center' ) === 0 ) {
142 $style .= 'display: inline-block;';
143 }
144
145 $style = apply_filters( 'advanced-ads-ad-image-tag-style', $style );
146 $style = '' !== $style ? 'style="' . $style . '"' : '';
147
148 $more_attributes = apply_filters( 'advanced-ads-ad-image-tag-attributes', $more_attributes );
149 $more_attributes .= ' ' . $hwstring . ' ' . $style;
150 $img = sprintf( '<img src="%s" alt="%s" %s />', esc_url( $src ), esc_attr( $alt ), $more_attributes );
151
152 // Add 'loading' attribute if applicable, available from WP 5.5.
153 if (
154 $wp_current_filter
155 && function_exists( 'wp_lazy_loading_enabled' )
156 && wp_lazy_loading_enabled( 'img', $wp_current_filter )
157 && ! strpos( $more_attributes, 'loading=' )
158 ) {
159 // Optimize image HTML tag with loading attributes based on WordPress filter context.
160 $img = $this->img_tag_add_loading_attr( $img, $wp_current_filter );
161 }
162
163 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- use unescaped image tag here
164 echo $img;
165 }
166
167 /**
168 * Render preview on the ad overview list
169 *
170 * @param Advanced_Ads_Ad $ad ad object.
171 */
172 public function render_preview( Advanced_Ads_Ad $ad ) {
173 if ( empty( $ad->output['image_id'] ) ) {
174 return;
175 }
176
177 list( $src, $width, $height ) = wp_get_attachment_image_src( $ad->output['image_id'], 'medium', true );
178 $preview_size_small = 50;
179 $preview_size_large = 200;
180
181 // scale down width or height for the preview
182 if ( $width > $height ) {
183 $preview_height = ceil( $height / ( $width / $preview_size_small ) );
184 $preview_width = $preview_size_small;
185 $tooltip_height = ceil( $height / ( $width / $preview_size_large ) );
186 $tooltip_width = $preview_size_large;
187 } else {
188 $preview_width = ceil( $width / ( $height / $preview_size_small ) );
189 $preview_height = $preview_size_small;
190 $tooltip_width = ceil( $width / ( $height / $preview_size_large ) );
191 $tooltip_height = $preview_size_large;
192 }
193
194 $preview_hwstring = image_hwstring( $preview_width, $preview_height );
195 $tooltip_hwstring = image_hwstring( $tooltip_width, $tooltip_height );
196 $alt = wp_strip_all_tags( get_post_meta( $ad->output['image_id'], '_wp_attachment_image_alt', true ) );
197
198 include ADVADS_ABSPATH . 'admin/views/ad-list/preview-image.php';
199 }
200
201 /**
202 * Prepare the ads frontend output by adding <object> tags
203 *
204 * @param Advanced_Ads_Ad $ad ad object.
205 * @return string $content ad content prepared for frontend output
206 */
207 public function prepare_output( $ad ) {
208 $id = ( isset( $ad->output['image_id'] ) ) ? absint( $ad->output['image_id'] ) : '';
209 $url = ( isset( $ad->url ) ) ? esc_url( $ad->url ) : '';
210
211 ob_start();
212 $this->create_image_tag( $id, $ad );
213 $img = ob_get_clean();
214 if ( ! defined( 'AAT_VERSION' ) && $url ) {
215 $alt = trim( esc_textarea( get_post_meta( $id, '_wp_attachment_image_alt', true ) ) );
216 $aria_label = !empty( $alt ) ? $alt : wp_basename( get_the_title( $id ) );
217 // get general target setting
218 $options = Advanced_Ads::get_instance()->options();
219 $target_blank = ! empty( $options['target-blank'] ) ? ' target="_blank"' : '';
220 $img = sprintf( '<a href="%s"%s aria-label="%s">%s</a>', esc_url( $url ), $target_blank, $aria_label, $img );
221 }
222
223 return $img;
224 }
225
226 /**
227 * Generate a string with the original image size for output in the backend
228 * Only show, if different from entered image sizes
229 *
230 * @param Advanced_Ads_Ad $ad ad object.
231 * @return string empty, if the entered size is the same as the original size
232 */
233 public static function show_original_image_size( Advanced_Ads_Ad $ad ) {
234 $attachment_id = ( isset( $ad->output['image_id'] ) ) ? absint( $ad->output['image_id'] ) : '';
235
236 $image = wp_get_attachment_image_src( $attachment_id, 'full' );
237
238 if ( $image ) {
239 list( $src, $width, $height ) = $image;
240 ?>
241 <p class="description">
242 <?php
243 if ( ( isset( $ad->width ) && $ad->width !== $width )
244 || ( isset( $ad->height ) && $ad->height !== $height ) ) {
245 printf(
246 /**
247 * This string shows up on the ad edit page of image ads if the size entered for the ad is different from the size of the uploaded image.
248 */
249 // translators: $s is a size string like "728 x 90".
250 esc_attr__( 'Original size: %s', 'advanced-ads' ),
251 esc_html( $width ) . '&nbsp;x&nbsp;' . esc_html( $height )
252 );
253 ?>
254 </p>
255 <?php
256 }
257 }
258
259 return '';
260 }
261
262 }
263