PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 1.7.19
Advanced Ads – Ad Manager & AdSense v1.7.19
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 / plugin.php
advanced-ads / classes Last commit date
EDD_SL_Plugin_Updater.php 9 years ago ad-ajax.php 9 years ago ad-debug.php 9 years ago ad-model.php 9 years ago ad-select.php 9 years ago ad.php 9 years ago ad_ajax_callbacks.php 9 years ago ad_group.php 9 years ago ad_placements.php 9 years ago ad_type_abstract.php 11 years ago ad_type_content.php 9 years ago ad_type_group.php 10 years ago ad_type_image.php 9 years ago ad_type_plain.php 9 years ago checks.php 9 years ago display-conditions.php 9 years ago filesystem.php 9 years ago frontend_checks.php 9 years ago plugin.php 9 years ago upgrades.php 9 years ago utils.php 9 years ago visitor-conditions.php 9 years ago widget.php 9 years ago
plugin.php
637 lines
1 <?php
2
3 /**
4 * Wordpress integration and definitions:
5 *
6 * - posttypes
7 * - taxonomy
8 * - textdomain
9 *
10 * @since 1.5.0
11 */
12 class Advanced_Ads_Plugin {
13 /**
14 *
15 * @var Advanced_Ads_Plugin
16 */
17 protected static $instance;
18
19 /**
20 *
21 * @var Advanced_Ads_Model
22 */
23 protected $model;
24
25 /**
26 * plugin options
27 *
28 * @since 1.0.1
29 * @var array (if loaded)
30 */
31 protected $options;
32
33 /**
34 * interal plugin options – set by the plugin
35 *
36 * @since 1.4.5
37 * @var array (if loaded)
38 */
39 protected $internal_options;
40
41 /**
42 * default prefix of selectors (id, class) in the frontend
43 * can be changed by options
44 *
45 * @var Advanced_Ads_Plugin
46 */
47 const DEFAULT_FRONTEND_PREFIX = 'advads-';
48
49 /**
50 *
51 * @var frontend prefix for classes and IDs
52 */
53 private $frontend_prefix;
54
55
56 private function __construct() {
57 register_activation_hook( ADVADS_BASE, array( $this, 'activate' ) );
58 register_deactivation_hook( ADVADS_BASE, array( $this, 'deactivate' ) );
59 register_uninstall_hook( ADVADS_BASE, array( 'Advanced_Ads_Plugin', 'uninstall' ) );
60
61 add_action( 'plugins_loaded', array( $this, 'wp_plugins_loaded' ), 10 );
62 }
63
64 /**
65 *
66 * @return Advanced_Ads_Plugin
67 */
68 public static function get_instance() {
69 // If the single instance hasn't been set, set it now.
70 if ( null === self::$instance ) {
71 self::$instance = new self;
72 }
73
74 return self::$instance;
75 }
76
77 /**
78 *
79 * @param Advanced_Ads_Model $model
80 */
81 public function set_model(Advanced_Ads_Model $model) {
82 $this->model = $model;
83 }
84
85 public function wp_plugins_loaded() {
86 // Load plugin text domain
87 $this->load_plugin_textdomain();
88
89 $internal_options = $this->internal_options();
90
91 /**
92 * run upgrades, if this is a new version or version does not exist
93 */
94 if ( ! defined( 'DOING_AJAX' ) && ( ! isset( $internal_options['version'] ) || version_compare( $internal_options['version'], ADVADS_VERSION, '<' ) ) ) {
95 new Advanced_Ads_Upgrades();
96 }
97
98 // activate plugin when new blog is added on multisites // -TODO this is admin-only
99 add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) );
100
101 // Load public-facing style sheet and JavaScript.
102 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) );
103 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
104
105 // add short codes
106 add_shortcode( 'the_ad', array( $this, 'shortcode_display_ad' ) );
107 add_shortcode( 'the_ad_group', array( $this, 'shortcode_display_ad_group' ) );
108 add_shortcode( 'the_ad_placement', array( $this, 'shortcode_display_ad_placement' ) );
109
110 // remove default ad group menu item // -TODO only for admin
111 add_action( 'admin_menu', array( $this, 'remove_taxonomy_menu_item' ) );
112 // load widgets
113 add_action( 'widgets_init', array( $this, 'widget_init' ) );
114
115 // load display conditions
116 Advanced_Ads_Display_Conditions::get_instance();
117 new Advanced_Ads_Frontend_Checks;
118 }
119
120 /**
121 * Register and enqueue public-facing style sheet.
122 *
123 * @since 1.0.0
124 */
125 public function enqueue_styles() {
126 // wp_enqueue_style( $this->get_plugin_slug() . '-plugin-styles', plugins_url('assets/css/public.css', __FILE__), array(), ADVADS_VERSION);
127 }
128
129 /**
130 * Return the plugin slug.
131 *
132 * @since 1.0.0
133 * @return Plugin slug variable.
134 */
135 public function get_plugin_slug() {
136 return ADVADS_SLUG;
137 }
138
139 /**
140 * Register and enqueues public-facing JavaScript files.
141 *
142 * @since 1.0.0
143 */
144 public function enqueue_scripts() {
145 // wp_enqueue_script( $this->get_plugin_slug() . '-plugin-script', plugins_url('assets/js/public.js', __FILE__), array('jquery'), ADVADS_VERSION);
146 $options = $this->options();
147 $activated_js = apply_filters( 'advanced-ads-activate-advanced-js', isset( $options['advanced-js'] ) );
148 if ( $activated_js ){
149 wp_enqueue_script( $this->get_plugin_slug() . '-advanced-js', ADVADS_BASE_URL . 'public/assets/js/advanced.js', array( 'jquery' ), ADVADS_VERSION );
150 }
151 }
152
153 public function widget_init() {
154 register_widget( 'Advanced_Ads_Widget' );
155 }
156
157 /**
158 * Fired when a new site is activated with a WPMU environment.
159 *
160 * @since 1.0.0
161 * @param int $blog_id ID of the new blog.
162 */
163 public function activate_new_site($blog_id) {
164
165 if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
166 return;
167 }
168
169 switch_to_blog( $blog_id );
170 $this->single_activate();
171 restore_current_blog();
172 }
173
174 /**
175 * Fired for each blog when the plugin is activated.
176 *
177 * @since 1.0.0
178 */
179 protected function single_activate() {
180 // $this->post_types_rewrite_flush();
181 // -TODO inform modules
182 $this->create_capabilities();
183 }
184
185 /**
186 * Fired for each blog when the plugin is deactivated.
187 *
188 * @since 1.0.0
189 */
190 protected function single_deactivate() {
191 // -TODO inform modules
192 $this->remove_capabilities();
193 }
194
195 /**
196 * Load the plugin text domain for translation.
197 *
198 * @since 1.0.0
199 */
200 public function load_plugin_textdomain() {
201 // $locale = apply_filters('advanced-ads-plugin-locale', get_locale(), $domain);
202 load_plugin_textdomain( ADVADS_SLUG, false, ADVADS_BASE_DIR . '/languages' );
203 }
204
205 /**
206 * Fired when the plugin is activated.
207 *
208 * @since 1.0.0
209 * @param boolean $network_wide True if WPMU superadmin uses
210 * "Network Activate" action, false if
211 * WPMU is disabled or plugin is
212 * activated on an individual blog.
213 */
214 public function activate($network_wide) {
215 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
216
217 if ( $network_wide ) {
218 // Get all blog ids
219 global $wpdb;
220 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
221 $original_blog_id = $wpdb->blogid;
222
223 foreach ( $blog_ids as $blog_id ) {
224 switch_to_blog( $blog_id );
225 $this->single_activate();
226 }
227
228 switch_to_blog( $original_blog_id );
229 } else {
230 $this->single_activate();
231 }
232 } else {
233 $this->single_activate();
234 }
235 }
236
237 /**
238 * Fired when the plugin is deactivated.
239 *
240 * @since 1.0.0
241 * @param boolean $network_wide
242 *
243 * True if WPMU superadmin uses
244 * "Network Deactivate" action, false if
245 * WPMU is disabled or plugin is
246 * deactivated on an individual blog.
247 */
248 public function deactivate($network_wide) {
249 if ( function_exists( 'is_multisite' ) && is_multisite() ) {
250
251 if ( $network_wide ) {
252 // Get all blog ids
253 global $wpdb;
254 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
255 $original_blog_id = $wpdb->blogid;
256
257 foreach ( $blog_ids as $blog_id ) {
258 switch_to_blog( $blog_id );
259 $this->single_deactivate();
260 }
261
262 switch_to_blog( $original_blog_id );
263 } else {
264 $this->single_deactivate();
265 }
266 } else {
267 $this->single_deactivate();
268 }
269 }
270
271 /**
272 * flush rewrites on plugin activation so permalinks for them work from the beginning on
273 *
274 * @since 1.0.0
275 * @link http://codex.wordpress.org/Function_Reference/register_post_type#Flushing_Rewrite_on_Activation
276 */
277 /*public function post_types_rewrite_flush(){
278 // load custom post type
279 Advanced_Ads::get_instance()->create_post_types();
280 // flush rewrite rules
281 flush_rewrite_rules();
282 }*/
283
284 /**
285 * remove WP tag edit page for the ad group taxonomy
286 * needed, because we can’t remove it with `show_ui` without also removing the meta box
287 *
288 * @since 1.0.0
289 */
290 public function remove_taxonomy_menu_item() {
291 remove_submenu_page( 'edit.php?post_type=advanced_ads', 'edit-tags.php?taxonomy=advanced_ads_groups&amp;post_type=advanced_ads' );
292 }
293
294 /**
295 * shortcode to include ad in frontend
296 *
297 * @since 1.0.0
298 * @param arr $atts
299 */
300 public function shortcode_display_ad($atts){
301 $atts = is_array( $atts ) ? $atts : array();
302 $id = isset($atts['id']) ? (int) $atts['id'] : 0;
303 $atts = $this->prepare_shortcode_atts( $atts );
304
305 // use the public available function here
306 return get_ad( $id, $atts );
307 }
308
309 /**
310 * shortcode to include ad from an ad group in frontend
311 *
312 * @since 1.0.0
313 * @param arr $atts
314 */
315 public function shortcode_display_ad_group($atts){
316 $atts = is_array( $atts ) ? $atts : array();
317 $id = isset($atts['id']) ? (int) $atts['id'] : 0;
318 $atts = $this->prepare_shortcode_atts( $atts );
319
320 // use the public available function here
321 return get_ad_group( $id, $atts );
322 }
323
324 /**
325 * shortcode to display content of an ad placement in frontend
326 *
327 * @since 1.1.0
328 * @param arr $atts
329 */
330 public function shortcode_display_ad_placement($atts){
331 $atts = is_array( $atts ) ? $atts : array();
332 $id = isset($atts['id']) ? (string) $atts['id'] : '';
333 $atts = $this->prepare_shortcode_atts( $atts );
334
335 // use the public available function here
336 return get_ad_placement( $id, $atts );
337 }
338
339 /**
340 * Prepare attributes by converting strings to multi-dimensional array
341 * Example: [ 'output__margin__top' => 1 ] => ['output']['margin']['top'] = 1
342 *
343 * @param array $atts array with strings
344 * @return array
345 */
346 private function prepare_shortcode_atts( $atts ) {
347 if ( defined( 'ADVANCED_ADS_DISABLE_CHANGE' ) && ADVANCED_ADS_DISABLE_CHANGE ) {
348 return array();
349 }
350
351 $result = array();
352
353 foreach ( $atts as $attr => $data ) {
354 $levels = explode( '__', $attr );
355 $last = array_pop( $levels );
356
357 $cur_lvl = &$result;
358
359 foreach ( $levels as $lvl ) {
360 if ( ! isset( $cur_lvl[ $lvl ] ) ) {
361 $cur_lvl[ $lvl ] = array();
362 }
363
364 $cur_lvl = &$cur_lvl[ $lvl ];
365 }
366
367 $cur_lvl[ $last ] = $data;
368 }
369
370 $result = array_diff_key( $result, array( 'id' => false, 'blog_id' => false ) );
371
372 return $result;
373 }
374
375 /**
376 * return plugin options
377 * these are the options updated by the user
378 *
379 * @since 1.0.1
380 * @return array $options
381 * @todo parse default options
382 */
383 public function options() {
384 if ( ! isset( $this->options ) ) {
385 $this->options = get_option( ADVADS_SLUG, array() );
386 }
387
388 return $this->options;
389 }
390
391 /**
392 * update plugin options (not for settings page, but if automatic options are needed)
393 *
394 * @since 1.5.1
395 * @param array $options new options
396 */
397 public function update_options( array $options ) {
398 // do not allow to clear options
399 if ( $options === array() ) {
400 return;
401 }
402
403 $this->options = $options;
404 update_option( ADVADS_SLUG, $options );
405 }
406
407 /**
408 * return internal plugin options
409 * these are options set by the plugin
410 *
411 * @since 1.0.1
412 * @return array $options
413 * @todo parse default options
414 */
415 public function internal_options() {
416 if ( ! isset( $this->internal_options ) ) {
417 $defaults = array(
418 'version' => ADVADS_VERSION,
419 'installed' => time(), // when was this installed
420 );
421 $this->internal_options = get_option( ADVADS_SLUG . '-internal', array() );
422
423 // save defaults
424 if($this->internal_options === array()){
425 $this->internal_options = $defaults;
426 $this->update_internal_options($this->internal_options);
427 }
428
429 // for versions installed prior to 1.5.3 set installed date for now
430 if( ! isset( $this->internal_options['installed'] )){
431 $this->internal_options['installed'] = time();
432 $this->update_internal_options($this->internal_options);
433 }
434 }
435
436 return $this->internal_options;
437 }
438
439 /**
440 * update internal plugin options
441 *
442 * @since 1.5.1
443 * @param array $options new internal options
444 */
445 public function update_internal_options( array $options ) {
446 // do not allow to clear options
447 if ( $options === array() ) {
448 return;
449 }
450
451 $this->internal_options = $options;
452 update_option( ADVADS_SLUG . '-internal', $options );
453 }
454
455 /**
456 * get prefix used for frontend elements
457 *
458 * @since 1.6.8.2
459 */
460 public function get_frontend_prefix(){
461 if ( ! $this->frontend_prefix ) {
462 $options = $this->options();
463
464 if ( ! isset( $options['front-prefix'] ) ) {
465 if ( isset( $options['id-prefix'] ) ) {
466 // deprecated: keeps widgets working that previously received an id based on the front-prefix
467 $this->frontend_prefix = esc_attr( $options['id-prefix'] );
468 } else {
469 $host = parse_url( get_home_url(), PHP_URL_HOST );
470 $this->frontend_prefix = preg_match( '/[A-Za-z][A-Za-z0-9_]{4}/', $host, $result ) ? $result[0] . '-' : Advanced_Ads_Plugin::DEFAULT_FRONTEND_PREFIX;
471 }
472 } else {
473 $this->frontend_prefix = $options['front-prefix'];
474 }
475 }
476 return $this->frontend_prefix;
477 }
478
479 /**
480 * get priority used for injection inside content
481 *
482 * @since 1.6.10.2
483 */
484 public function get_content_injection_priority(){
485 $options = $this->options();
486
487 return isset( $options['content-injection-priority'] ) ? intval( $options['content-injection-priority'] ) : 100;
488 }
489
490 /**
491 * returns the capability needed to perform an action
492 *
493 * @since 1.6.14
494 * @param str $capability a capability to check, can be internal to Advanced Ads
495 * @return str $capability a valid WordPress capability
496 */
497 public static function user_cap( $capability = 'manage_options' ){
498
499 global $advanced_ads_capabilities;
500
501 // admins can do everything
502 // is also a fallback if no option or more specific capability is given
503 if( current_user_can( 'manage_options' ) ){
504 return 'manage_options';
505 }
506
507 return apply_filters( 'advanced-ads-capability', $capability );
508
509 // check, if capability is mapped to an existing WP capability
510 /*if( isset( $advanced_ads_capabilities[ $capability ] ) ){
511 return apply_filters( 'advanced-ads-capability', $advanced_ads_capabilities[ $capability ], $capability );
512 } else {
513 // if not, use 'manage_posts' capability
514 return apply_filters( 'advanced-ads-capability', 'manage_options', $capability );
515 }*/
516
517 }
518
519 /**
520 * Create roles and capabilities
521 *
522 */
523 public function create_capabilities() {
524 if ( $role = get_role( 'administrator' ) ) {
525 $role->add_cap( 'advanced_ads_manage_options' );
526 $role->add_cap( 'advanced_ads_see_interface' );
527 $role->add_cap( 'advanced_ads_edit_ads' );
528 $role->add_cap( 'advanced_ads_manage_placements' );
529 $role->add_cap( 'advanced_ads_place_ads' );
530 }
531 }
532
533 /**
534 * Remove roles and capabilities
535 *
536 */
537 public function remove_capabilities() {
538 if ( $role = get_role( 'administrator' ) ) {
539 $role->remove_cap( 'advanced_ads_manage_options' );
540 $role->remove_cap( 'advanced_ads_see_interface' );
541 $role->remove_cap( 'advanced_ads_edit_ads' );
542 $role->remove_cap( 'advanced_ads_manage_placements' );
543 $role->remove_cap( 'advanced_ads_place_ads' );
544 }
545 }
546
547 /**
548 * Fired when the plugin is uninstalled.
549 */
550 public static function uninstall() {
551 $advads_options = Advanced_Ads::get_instance()->options();
552
553 if ( ! empty( $advads_options['uninstall-delete-data'] ) ) {
554 global $wpdb;
555 $main_blog_id = $wpdb->blogid;
556
557 Advanced_Ads::get_instance()->create_post_types();
558
559 if ( ! is_multisite() ) {
560 Advanced_Ads_Plugin::get_instance()->uninstall_single();
561 } else {
562 $blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs}" );
563
564 foreach ( $blog_ids as $blog_id ) {
565 switch_to_blog( $blog_id );
566 Advanced_Ads_Plugin::get_instance()->uninstall_single();
567 }
568 switch_to_blog( $main_blog_id );
569 }
570
571 // Delete assets (main blog).
572 Advanced_Ads_Ad_Blocker_Admin::get_instance()->clear_assets();
573 delete_option( ADVADS_AB_SLUG );
574 }
575
576 }
577
578 /**
579 * Fired for each blog when the plugin is uninstalled.
580 *
581 */
582 protected function uninstall_single() {
583 global $wpdb;
584
585 // Ads.
586 $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s", Advanced_Ads::POST_TYPE_SLUG ) );
587
588 if ( $post_ids ) {
589 $wpdb->delete(
590 $wpdb->posts,
591 array( 'post_type' => Advanced_Ads::POST_TYPE_SLUG ),
592 array( '%s' )
593 );
594
595 $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE post_id IN( " . implode( ',', $post_ids ) . " )" );
596 }
597
598 // Groups.
599 $term_ids = $wpdb->get_col( $wpdb->prepare( "SELECT t.term_id FROM {$wpdb->terms} AS t INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s", Advanced_Ads::AD_GROUP_TAXONOMY ) );
600
601 foreach ( $term_ids as $term_id ) {
602 wp_delete_term( $term_id, Advanced_Ads::AD_GROUP_TAXONOMY );
603 }
604
605 delete_option( 'advads-ad-groups' );
606 delete_option( Advanced_Ads::AD_GROUP_TAXONOMY . '_children' );
607 delete_option( 'advads-ad-weights' );
608
609 // Placements.
610 delete_option( 'advads-ads-placements' );
611
612 // User metadata.
613 delete_metadata( 'user', null, 'advanced-ads-hide-wizard', '', true );
614 delete_metadata( 'user', null, 'advanced-ads-subscribed', '', true );
615
616 // Post metadata.
617 delete_metadata( 'post', null, '_advads_ad_settings', '', true );
618
619 // Transients.
620 delete_transient( ADVADS_SLUG . '_add-on-updates-checked' );
621
622 delete_option( GADSENSE_OPT_NAME );
623 delete_option( ADVADS_SLUG );
624 delete_option( ADVADS_SLUG . '-internal' );
625 delete_option( ADVADS_SLUG . '-notices' );
626
627 // Widget.
628 $base_widget_id = Advanced_Ads_Widget::get_base_id();
629 delete_option( 'widget_' . $base_widget_id );
630
631 do_action( 'advanced-ads-uninstall' );
632
633 wp_cache_flush();
634 }
635
636 }
637