PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.8.21
Advanced Ads – Ad Manager & AdSense v1.8.21
2.0.26 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 / modules / gadsense / includes / class-ad-type-adsense.php
advanced-ads / modules / gadsense / includes Last commit date
class-ad-type-adsense.php 9 years ago class-gadsense-data.php 8 years ago
class-ad-type-adsense.php
270 lines
1 <?php
2
3 /**
4 * Advanced Ads dfp Ad Type
5 *
6 * @package Advanced_Ads
7 * @author Thomas Maier <thomas.maier@webgilde.com>
8 * @license GPL-2.0+
9 * @link http://webgilde.com
10 * @copyright 2015 Thomas Maier, webgilde GmbH
11 *
12 * Class containing information about the adsense ad type
13 *
14 * see also includes/class-ad-type-abstract.php for basic object
15 *
16 */
17 class Advanced_Ads_Ad_Type_Adsense extends Advanced_Ads_Ad_Type_Abstract {
18
19 /**
20 * ID - internal type of the ad type
21 *
22 * must be static so set your own ad type ID here
23 * use slug like format, only lower case, underscores and hyphens
24 *
25 * @since 1.4
26 */
27 public $ID = 'adsense';
28
29 /**
30 * set basic attributes
31 *
32 * @since 1.4
33 */
34 public function __construct() {
35 $this->title = __( 'AdSense ad', 'advanced-ads' );
36 $this->description = __( 'Use ads from your Google AdSense account', 'advanced-ads' );
37 $this->parameters = array(
38 'content' => ''
39 );
40 }
41
42 /**
43 * output for the ad parameters metabox
44 *
45 * this will be loaded using ajax when changing the ad type radio buttons
46 * echo the output right away here
47 * name parameters must be in the "advanced_ads" array
48 *
49 * @param obj $ad ad object
50 * @since 1.4
51 */
52 public function render_parameters($ad) {
53 $content = (string) ( isset( $ad->content ) ? $ad->content : '' );
54 $unit_id = '';
55 $unit_code = '';
56 $unit_type = '';
57 $unit_width = 0;
58 $unit_height = 0;
59 $json_content = '';
60 $unit_resize = '';
61 $extra_params = array(
62 'default_width' => '',
63 'default_height' => '',
64 'at_media' => array(),
65 );
66
67 $db = Advanced_Ads_AdSense_Data::get_instance();
68 $pub_id = trim( $db->get_adsense_id() );
69
70 // check pub_id for errors
71 $pub_id_errors = false;
72 if( $pub_id !== '' && 0 !== strpos( $pub_id, 'pub-' )){
73 $pub_id_errors = __( 'The Publisher ID has an incorrect format. (must start with "pub-")', 'advanced-ads' );
74 }
75
76 if ( trim($content) !== '' ) {
77
78 $json_content = stripslashes( $content );
79
80 // get json content striped by slashes
81 $content = json_decode( stripslashes( $content ) );
82
83 if ( isset($content->unitType) ) {
84 $content->json = $json_content;
85 $unit_type = $content->unitType;
86 $unit_code = $content->slotId;
87 $layout = isset( $content->layout ) ? $content->layout : '';
88 $layout_key = isset( $content->layout_key ) ? $content->layout_key : '';
89
90 if ( 'responsive' != $content->unitType && 'link-responsive' != $content->unitType && 'matched-content' != $content->unitType ) {
91 // Normal ad unit
92 $unit_width = $ad->width;
93 $unit_height = $ad->height;
94 } else {
95 // Responsive && matched content
96 $unit_resize = (isset($content->resize)) ? $content->resize : 'auto';
97 if ( 'auto' != $unit_resize ) {
98 $extra_params = apply_filters( 'advanced-ads-gadsense-ad-param-data', $extra_params, $content, $ad );
99 }
100 }
101 if ( ! empty($pub_id) ) {
102 $unit_id = 'ca-' . $pub_id . ':' . $unit_code;
103 }
104 }
105 }
106
107 if( '' === trim( $pub_id ) && '' !== trim( $unit_code ) ){
108 $pub_id_errors = __( 'Your AdSense Publisher ID is missing.', 'advanced-ads' );
109 }
110
111 $default_template = GADSENSE_BASE_PATH . 'admin/views/adsense-ad-parameters.php';
112 /**
113 * Inclusion of other UI template is done here. The content is passed in order to allow the inclusion of different
114 * templates file, depending of the ad. It's up to the developer to verify that $content is not an empty
115 * variable (which is the case for a new ad).
116 *
117 * Inclusion of .js and .css files for the ad creation/editon page are done by another hook. See
118 * 'advanced-ads-gadsense-ad-param-script' and 'advanced-ads-gadsense-ad-param-style' in "../admin/class-gadsense-admin.php".
119 */
120 $template = apply_filters( 'advanced-ads-gadsense-ad-param-template', $default_template, $content );
121
122 require $template;
123 }
124
125 /**
126 * sanitize content field on save
127 *
128 * @param str $content ad content
129 * @return str $content sanitized ad content
130 * @since 1.0.0
131 */
132 public function sanitize_content($content = '') {
133 return $content = wp_unslash( $content );
134 }
135
136 /**
137 * prepare the ads frontend output
138 *
139 * @param obj $ad ad object
140 * @return str $content ad content prepared for frontend output
141 * @since 1.0.0
142 */
143 public function prepare_output($ad) {
144 global $gadsense;
145
146 $content = json_decode( stripslashes( $ad->content ) );
147
148 if( isset( $ad->args['wp_the_query']['is_404'] )
149 && $ad->args['wp_the_query']['is_404']
150 && ! defined( 'ADVADS_ALLOW_ADSENSE_ON_404' ) ){
151 return '';
152 }
153
154 $output = '';
155 $db = Advanced_Ads_AdSense_Data::get_instance();
156 $pub_id = $db->get_adsense_id();
157 $limit_per_page = $db->get_limit_per_page();
158
159 if ( ! isset($content->unitType) || empty($pub_id) ) {
160 return $output; }
161 // deprecated since the adsbygoogle.js file is now always loaded
162 if ( ! isset($gadsense['google_loaded']) || ! $gadsense['google_loaded'] ) {
163 $gadsense['google_loaded'] = true;
164 }
165
166 //check if passive cb is used
167 if ( isset( $gadsense['adsense_count'] ) ) {
168 $gadsense['adsense_count']++;
169 } else {
170 $gadsense['adsense_count'] = 1;
171 }
172
173 if ( $limit_per_page && 3 < $gadsense['adsense_count'] && $ad->global_output ) {
174 // The maximum allowed adSense ad per page count is 3 (according to the current Google AdSense TOS).
175 return '';
176 }
177
178 $output = apply_filters( 'advanced-ads-gadsense-output', false, $ad, $pub_id, $content );
179 if ( $output !== false ) {
180 return $output;
181 } elseif ( advads_is_amp() ) {
182 // Prevent output on AMP pages.
183 return '';
184 }
185
186 $output = '';
187
188 // build static normal content ads first
189 if ( ! in_array( $content->unitType, array( 'responsive', 'link-responsive', 'matched-content', 'in-article', 'in-feed' ) ) ) {
190 $output .= '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' . "\n";
191 $output .= '<ins class="adsbygoogle" ';
192 $output .= 'style="display:inline-block;width:' . $ad->width . 'px;height:' . $ad->height . 'px;" ' . "\n";
193 $output .= 'data-ad-client="ca-' . $pub_id . '" ' . "\n";
194 $output .= 'data-ad-slot="' . $content->slotId . '"';
195 // ad type for static link unit
196 if( 'link' == $content->unitType ){
197 $output .= "\n" . 'data-ad-format="link"';
198 }
199 $output .= '></ins> ' . "\n";
200 $output .= '<script> ' . "\n";
201 $output .= '(adsbygoogle = window.adsbygoogle || []).push({}); ' . "\n";
202 $output .= '</script>' . "\n";
203 } else {
204 if ( ! isset($content->resize) || 'auto' == $content->resize ) {
205 $this->append_defaut_responsive_content( $output, $pub_id, $content );
206 } else {
207 /**
208 * At this point, the ad is responsive ($ad->content->unitType == responsive)
209 * The value of $ad->content->resize should be tested to format the output correctly
210 * The $output variable already contains the first line which includes "adsbygoogle.js",
211 * The rest of the output should be appended to it.
212 */
213 $unmodified = $output;
214 $output = apply_filters( 'advanced-ads-gadsense-responsive-output', $output, $ad, $pub_id );
215 if ( $unmodified == $output ) {
216 /**
217 * If the output has not been modified, perform a default responsive output.
218 * A simple did_action check isn't sufficient, some hooks may be attached and fired but didn't touch the output
219 */
220 $this->append_defaut_responsive_content( $output, $pub_id, $content );
221 }
222 }
223 }
224 return $output;
225 }
226
227 protected function append_defaut_responsive_content(&$output, $pub_id, $content) {
228 $format = '';
229 $style = 'display:block;';
230 switch( $content->unitType ){
231 case 'matched-content' :
232 $format = 'autorelaxed';
233 break;
234 case 'link-responsive' :
235 $format = 'link';
236 break;
237 case 'in-feed' :
238 $format = 'fluid';
239 $layout = $content->layout;
240 $layout_key = $content->layout_key;
241 break;
242 case 'in-article' :
243 $format = 'fluid';
244 $layout = 'in-article';
245 $style = 'display:block; text-align:center;';
246 break;
247 case 'link-responsive' :
248 $format = 'link';
249 break;
250 default :
251 $format = 'auto';
252 }
253
254 $output .= '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>' . "\n";
255 $output .= '<ins class="adsbygoogle" ';
256 $output .= 'style="'. $style .'" ';
257 $output .= 'data-ad-client="ca-' . $pub_id . '" ' . "\n";
258 $output .= 'data-ad-slot="' . $content->slotId . '" ' . "\n";
259 $output .= isset( $layout ) ? 'data-ad-layout="' . $layout . '"' . "\n" : '';
260 $output .= isset( $layout_key ) ? 'data-ad-layout-key="' . $layout_key . '"' . "\n" : '';
261 $output .= 'data-ad-format="';
262 $output .= $format;
263 $output .= '"></ins>' . "\n";
264 $output .= '<script> ' . "\n";
265 $output .= apply_filters( 'advanced-ads-gadsense-responsive-adsbygoogle', '(adsbygoogle = window.adsbygoogle || []).push({}); ' . "\n");
266 $output .= '</script>' . "\n";
267 }
268
269 }
270