PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.39.2
Advanced Ads – Ad Manager & AdSense v1.39.2
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 3 years ago EDD_SL_Plugin_Updater.php 4 years ago ad-ajax.php 3 years ago ad-debug.php 3 years ago ad-expiration.php 3 years ago ad-health-notices.php 3 years ago ad-model.php 3 years ago ad-select.php 3 years ago ad.php 3 years ago ad_ajax_callbacks.php 3 years ago ad_group.php 3 years ago ad_placements.php 3 years ago ad_type_abstract.php 3 years ago ad_type_content.php 3 years ago ad_type_dummy.php 3 years ago ad_type_group.php 3 years ago ad_type_image.php 3 years ago ad_type_plain.php 3 years ago checks.php 3 years ago compatibility.php 3 years ago display-conditions.php 3 years ago filesystem.php 3 years ago frontend-notices.php 3 years ago frontend_checks.php 3 years ago in-content-injector.php 3 years ago inline-css.php 3 years ago plugin.php 3 years ago upgrades.php 6 years ago utils.php 3 years ago visitor-conditions.php 3 years ago widget.php 3 years ago
ad_type_image.php
260 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 $img = wp_img_tag_add_loading_attr( $img, $wp_current_filter );
160 }
161
162 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- use unescaped image tag here
163 echo $img;
164 }
165
166 /**
167 * Render preview on the ad overview list
168 *
169 * @param Advanced_Ads_Ad $ad ad object.
170 */
171 public function render_preview( Advanced_Ads_Ad $ad ) {
172 if ( empty( $ad->output['image_id'] ) ) {
173 return;
174 }
175
176 list( $src, $width, $height ) = wp_get_attachment_image_src( $ad->output['image_id'], 'medium', true );
177 $preview_size_small = 50;
178 $preview_size_large = 200;
179
180 // scale down width or height for the preview
181 if ( $width > $height ) {
182 $preview_height = ceil( $height / ( $width / $preview_size_small ) );
183 $preview_width = $preview_size_small;
184 $tooltip_height = ceil( $height / ( $width / $preview_size_large ) );
185 $tooltip_width = $preview_size_large;
186 } else {
187 $preview_width = ceil( $width / ( $height / $preview_size_small ) );
188 $preview_height = $preview_size_small;
189 $tooltip_width = ceil( $width / ( $height / $preview_size_large ) );
190 $tooltip_height = $preview_size_large;
191 }
192
193 $preview_hwstring = image_hwstring( $preview_width, $preview_height );
194 $tooltip_hwstring = image_hwstring( $tooltip_width, $tooltip_height );
195 $alt = wp_strip_all_tags( get_post_meta( $ad->output['image_id'], '_wp_attachment_image_alt', true ) );
196
197 include ADVADS_BASE_PATH . 'admin/views/ad-list/preview-image.php';
198 }
199
200 /**
201 * Prepare the ads frontend output by adding <object> tags
202 *
203 * @param Advanced_Ads_Ad $ad ad object.
204 * @return string $content ad content prepared for frontend output
205 */
206 public function prepare_output( $ad ) {
207 $id = ( isset( $ad->output['image_id'] ) ) ? absint( $ad->output['image_id'] ) : '';
208 $url = ( isset( $ad->url ) ) ? esc_url( $ad->url ) : '';
209
210 ob_start();
211 $this->create_image_tag( $id, $ad );
212 $img = ob_get_clean();
213 if ( ! defined( 'AAT_VERSION' ) && $url ) {
214 // get general target setting
215 $options = Advanced_Ads::get_instance()->options();
216 $target_blank = ! empty( $options['target-blank'] ) ? ' target="_blank"' : '';
217 $img = sprintf( '<a href="%s"%s>%s</a>', esc_url( $url ), $target_blank, $img );
218 }
219
220 return $img;
221 }
222
223 /**
224 * Generate a string with the original image size for output in the backend
225 * Only show, if different from entered image sizes
226 *
227 * @param Advanced_Ads_Ad $ad ad object.
228 * @return string empty, if the entered size is the same as the original size
229 */
230 public static function show_original_image_size( Advanced_Ads_Ad $ad ) {
231 $attachment_id = ( isset( $ad->output['image_id'] ) ) ? absint( $ad->output['image_id'] ) : '';
232
233 $image = wp_get_attachment_image_src( $attachment_id, 'full' );
234
235 if ( $image ) {
236 list( $src, $width, $height ) = $image;
237 ?>
238 <p class="description">
239 <?php
240 if ( ( isset( $ad->width ) && $ad->width !== $width )
241 || ( isset( $ad->height ) && $ad->height !== $height ) ) {
242 printf(
243 /**
244 * 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.
245 */
246 // translators: $s is a size string like "728 x 90".
247 esc_attr__( 'Original size: %s', 'advanced-ads' ),
248 esc_html( $width ) . '&nbsp;x&nbsp;' . esc_html( $height )
249 );
250 ?>
251 </p>
252 <?php
253 }
254 }
255
256 return '';
257 }
258
259 }
260