PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.24
Advanced Ads – Ad Manager & AdSense v2.0.24
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 / includes / ads / types / type-image.php
advanced-ads / includes / ads / types Last commit date
type-amp.php 1 year ago type-content.php 10 months ago type-dummy.php 1 year ago type-gam.php 1 year ago type-group.php 1 year ago type-image.php 1 year ago type-plain.php 1 year ago type-unknown.php 1 year ago
type-image.php
293 lines
1 <?php
2 /**
3 * This class represents the "Image" ad type.
4 *
5 * @package AdvancedAds
6 * @author Advanced Ads <info@wpadvancedads.com>
7 * @since 1.48.0
8 */
9
10 namespace AdvancedAds\Ads\Types;
11
12 use AdvancedAds\Ads\Ad_Image;
13 use AdvancedAds\Interfaces\Ad_Type;
14 use AdvancedAds\Utilities\WordPress;
15
16 defined( 'ABSPATH' ) || exit;
17
18 /**
19 * Type Image.
20 */
21 class Image implements Ad_Type {
22
23 /**
24 * Get the unique identifier (ID) of the ad type.
25 *
26 * @return string The unique ID of the ad type.
27 */
28 public function get_id(): string {
29 return 'image';
30 }
31
32 /**
33 * Get the class name of the object as a string.
34 *
35 * @return string
36 */
37 public function get_classname(): string {
38 return Ad_Image::class;
39 }
40
41 /**
42 * Get the title or name of the ad type.
43 *
44 * @return string The title of the ad type.
45 */
46 public function get_title(): string {
47 return __( 'Image Ad', 'advanced-ads' );
48 }
49
50 /**
51 * Get a description of the ad type.
52 *
53 * @return string The description of the ad type.
54 */
55 public function get_description(): string {
56 return __( 'Ads in various image formats.', 'advanced-ads' );
57 }
58
59 /**
60 * Check if this ad type requires premium.
61 *
62 * @return bool True if premium is required; otherwise, false.
63 */
64 public function is_premium(): bool {
65 return false;
66 }
67
68 /**
69 * Get the URL for upgrading to this ad type.
70 *
71 * @return string The upgrade URL for the ad type.
72 */
73 public function get_upgrade_url(): string {
74 return '';
75 }
76
77 /**
78 * Get the URL for upgrading to this ad type.
79 *
80 * @return string The upgrade URL for the ad type.
81 */
82 public function get_image(): string {
83 return ADVADS_BASE_URL . 'assets/img/ad-types/image.svg';
84 }
85
86 /**
87 * Check if this ad type has size parameters.
88 *
89 * @return bool True if has size parameters; otherwise, false.
90 */
91 public function has_size(): bool {
92 return true;
93 }
94
95 /**
96 * Render preview on the ad overview list
97 *
98 * @param Ad_Image $ad Ad instance.
99 *
100 * @TODO: refactor and test
101 *
102 * @return void
103 */
104 public function render_preview( Ad_Image $ad ): void {
105 if ( empty( $ad->get_image_id() ) ) {
106 return;
107 }
108
109 list( $src, $width, $height ) = wp_get_attachment_image_src( $ad->get_image_id(), 'medium', true );
110 $preview_size_small = 50;
111 $preview_size_large = 200;
112
113 // Scale down width or height for the preview.
114 if ( $width > $height ) {
115 $preview_height = ceil( $height / ( $width / $preview_size_small ) );
116 $preview_width = $preview_size_small;
117 $tooltip_height = ceil( $height / ( $width / $preview_size_large ) );
118 $tooltip_width = $preview_size_large;
119 } else {
120 $preview_width = ceil( $width / ( $height / $preview_size_small ) );
121 $preview_height = $preview_size_small;
122 $tooltip_width = ceil( $width / ( $height / $preview_size_large ) );
123 $tooltip_height = $preview_size_large;
124 }
125
126 $preview_hwstring = image_hwstring( $preview_width, $preview_height );
127 $tooltip_hwstring = image_hwstring( $tooltip_width, $tooltip_height );
128 $alt = wp_strip_all_tags( get_post_meta( $ad->get_image_id(), '_wp_attachment_image_alt', true ) );
129
130 include ADVADS_ABSPATH . 'admin/views/ad-list/preview-image.php';
131 }
132
133 /**
134 * Output for the ad parameters metabox
135 *
136 * @param Ad_Image $ad Ad instance.
137 *
138 * @return void
139 */
140 public function render_parameters( $ad ): void {
141 $id = $ad->get_image_id() ?? '';
142 $url = $ad->get_url() ?? '';
143 $edit_link = $id ? get_edit_post_link( $id ) : '';
144
145 ?><span class="label">
146 <button href="#" class="advads_image_upload button advads-button-secondary" type="button"
147 data-uploader-title="<?php esc_attr_e( 'Insert File', 'advanced-ads' ); ?>"
148 data-uploader-button-text="<?php esc_attr_e( 'Insert', 'advanced-ads' ); ?>"
149 onclick="return false;">
150 <?php esc_html_e( 'Select image', 'advanced-ads' ); ?>
151 </button>
152 </span>
153 <div>
154 <input type="hidden" name="advanced_ad[output][image_id]" value="<?php echo absint( $id ); ?>" id="advads-image-id"/>
155 <div id="advads-image-preview">
156 <?php $this->create_image_tag( $id, $ad ); ?>
157 </div>
158 <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>
159 </div>
160 <hr/>
161 <?php
162 if ( ! defined( 'AAT_VERSION' ) ) :
163 ?>
164 <label for="advads-url" class="label"><?php esc_html_e( 'URL', 'advanced-ads' ); ?></label>
165 <div>
166 <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/"/>
167 <p class="description">
168 <?php esc_html_e( 'Link to target site including http(s)', 'advanced-ads' ); ?>
169 </p>
170 </div>
171 <hr/>
172 <?php
173 endif;
174 }
175
176 /**
177 * Generate a string with the original image size for output in the backend
178 * Only show, if different from entered image sizes
179 *
180 * @param Ad_Image $ad Ad instance.
181 *
182 * @return string empty, if the entered size is the same as the original size
183 */
184 public function show_original_image_size( Ad_Image $ad ) {
185 $attachment_id = $ad->get_image_id() ?? '';
186 $attachment = wp_get_attachment_image_src( $attachment_id, 'full' );
187
188 if ( $attachment ) {
189 list( $src, $width, $height ) = $attachment;
190 ?>
191 <p class="description">
192 <?php
193 if ( $ad->get_width() !== $width || $ad->get_height() !== $height ) :
194 printf(
195 /* translators: $s is a size string like "728 x 90". */
196 esc_attr__( 'Original size: %s', 'advanced-ads' ),
197 esc_html( $width ) . '&nbsp;x&nbsp;' . esc_html( $height )
198 );
199 ?>
200 </p>
201 <?php
202 endif;
203 }
204
205 return '';
206 }
207
208 /**
209 * Render image tag
210 *
211 * @param int $attachment_id Attachment id.
212 * @param Ad_Image $ad Ad instance.
213 *
214 * @return void
215 */
216 public function create_image_tag( $attachment_id, $ad ): void {
217 global $wp_current_filter;
218
219 $style = '';
220 $image = wp_get_attachment_image_src( $attachment_id, 'full' );
221
222 // Early bail!!
223 if ( ! $image ) {
224 return;
225 }
226
227 list( $src, $width, $height ) = $image;
228
229 // Override image size with the size given in ad options, but in frontend only.
230 if ( ! is_admin() || wp_doing_ajax() ) {
231 $width = $ad->get_width();
232 $height = $ad->get_height();
233 }
234
235 $hwstring = image_hwstring( $width, $height );
236 $alt = trim( esc_textarea( get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ) ) );
237
238 // TODO: use an array for attributes so they are simpler to extend.
239 $sizes = '';
240 $srcset = '';
241 $more_attributes = $srcset;
242 // Create srcset and sizes attributes if we are in the the_content filter and in WordPress 4.4.
243 if (
244 isset( $wp_current_filter )
245 && in_array( 'the_content', $wp_current_filter, true )
246 && ! defined( 'ADVADS_DISABLE_RESPONSIVE_IMAGES' )
247 ) {
248 if ( function_exists( 'wp_get_attachment_image_srcset' ) ) {
249 $srcset = wp_get_attachment_image_srcset( $attachment_id, 'full' );
250 }
251 if ( function_exists( 'wp_get_attachment_image_sizes' ) ) {
252 $sizes = wp_get_attachment_image_sizes( $attachment_id, 'full' );
253 }
254 if ( $srcset && $sizes ) {
255 $more_attributes .= ' srcset="' . $srcset . '" sizes="' . $sizes . '"';
256 }
257 }
258
259 // TODO: move to classes/compabtility.php when we have a simpler filter for additional attributes
260 // Compabitility with WP Smush.
261 // Disables their lazy load for image ads because it caused them to not show up in certain positions at all.
262 $wp_smush_settings = get_option( 'wp-smush-settings' );
263 if ( isset( $wp_smush_settings['lazy_load'] ) && $wp_smush_settings['lazy_load'] ) {
264 $more_attributes .= ' class="no-lazyload"';
265 }
266
267 // Add css rule to be able to center the ad.
268 if ( strpos( $ad->get_position(), 'center' ) === 0 ) {
269 $style .= 'display: inline-block;';
270 }
271
272 $style = apply_filters( 'advanced-ads-ad-image-tag-style', $style );
273 $style = '' !== $style ? 'style="' . $style . '"' : '';
274
275 $more_attributes = apply_filters( 'advanced-ads-ad-image-tag-attributes', $more_attributes );
276 $more_attributes .= ' ' . $hwstring . ' ' . $style;
277 $img = sprintf( '<img src="%s" alt="%s" %s />', esc_url( $src ), esc_attr( $alt ), $more_attributes );
278
279 // Add 'loading' attribute if applicable, available from WP 5.5.
280 if (
281 $wp_current_filter
282 && function_exists( 'wp_lazy_loading_enabled' )
283 && wp_lazy_loading_enabled( 'img', current_filter() )
284 && ! strpos( $more_attributes, 'loading=' )
285 ) {
286 // Optimize image HTML tag with loading attributes based on WordPress filter context.
287 $img = WordPress::img_tag_add_loading_attr( $img, current_filter() );
288 }
289
290 echo $img; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
291 }
292 }
293