PluginProbe
Polylang / 2.1.1
Polylang v2.1.1
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
polylang / uninstall.php

uninstall.php in Polylang 2.1.1, at uninstall.php

141 lines 4.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // If uninstall not called from WordPress exit
4 if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
5 exit();
6 }
7
8 /**
9 * Manages Polylang uninstallation
10 * The goal is to remove ALL Polylang related data in db
11 *
12 * @since 0.5
13 */
14 class PLL_Uninstall {
15
16 /**
17 * Constructor: manages uninstall for multisite
18 *
19 * @since 0.5
20 */
21 function __construct() {
22 global $wpdb;
23
24 // Check if it is a multisite uninstall - if so, run the uninstall function for each blog id
25 if ( is_multisite() ) {
26 foreach ( $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" ) as $blog_id ) {
27 switch_to_blog( $blog_id );
28 $this->uninstall();
29 }
30 restore_current_blog();
31 }
32 else {
33 $this->uninstall();
34 }
35 }
36
37 /**
38 * Removes ALL plugin data
39 * only when the relevant option is active
40 *
41 * @since 0.5
42 */
43 function uninstall() {
44 $options = get_option( 'polylang' );
45
46 if ( empty( $options['uninstall'] ) ) {
47 return;
48 }
49
50 // Suppress data of the old model < 1.2
51 // FIXME: to remove when support for v1.1.6 will be dropped
52 global $wpdb;
53 $wpdb->termmeta = $wpdb->prefix . 'termmeta'; // registers the termmeta table in wpdb
54
55 // Do nothing if the termmeta table does not exists
56 if ( count( $wpdb->get_results( "SHOW TABLES LIKE '$wpdb->termmeta'" ) ) ) {
57 $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_translations'" );
58 $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_language'" );
59 $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_rtl'" );
60 $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_translations'" );
61 }
62
63 // Need to register the taxonomies
64 $pll_taxonomies = array( 'language', 'term_language', 'post_translations', 'term_translations' );
65 foreach ( $pll_taxonomies as $taxonomy ) {
66 register_taxonomy( $taxonomy, null , array( 'label' => false, 'public' => false, 'query_var' => false, 'rewrite' => false ) );
67 }
68
69 $languages = get_terms( 'language', array( 'hide_empty' => false ) );
70
71 // Delete users options
72 foreach ( get_users( array( 'fields' => 'ID' ) ) as $user_id ) {
73 delete_user_meta( $user_id, 'pll_filter_content' );
74 foreach ( $languages as $lang ) {
75 delete_user_meta( $user_id, 'description_' . $lang->slug );
76 }
77 }
78
79 // Delete menu language switchers
80 $ids = get_posts( array(
81 'post_type' => 'nav_menu_item',
82 'numberposts' => -1,
83 'nopaging' => true,
84 'fields' => 'ids',
85 'meta_key' => '_pll_menu_item',
86 ) );
87
88 foreach ( $ids as $id ) {
89 wp_delete_post( $id, true );
90 }
91
92 // Delete the strings translations ( <1.2 )
93 // FIXME: to remove when support for v1.1.6 will be dropped
94 foreach ( $languages as $lang ) {
95 delete_option( 'polylang_mo' . $lang->term_id );
96 }
97
98 // Delete the strings translations 1.2+
99 register_post_type( 'polylang_mo', array( 'rewrite' => false, 'query_var' => false ) );
100 $ids = get_posts( array(
101 'post_type' => 'polylang_mo',
102 'numberposts' => -1,
103 'nopaging' => true,
104 'fields' => 'ids',
105 ) );
106 foreach ( $ids as $id ) {
107 wp_delete_post( $id, true );
108 }
109
110 // Delete all what is related to languages and translations
111 foreach ( get_terms( $pll_taxonomies, array( 'hide_empty' => false ) ) as $term ) {
112 $term_ids[] = (int) $term->term_id;
113 $tt_ids[] = (int) $term->term_taxonomy_id;
114 }
115
116 if ( ! empty( $term_ids ) ) {
117 $term_ids = array_unique( $term_ids );
118 $wpdb->query( "DELETE FROM $wpdb->terms WHERE term_id IN ( " . implode( ',', $term_ids ) . " )" );
119 $wpdb->query( "DELETE FROM $wpdb->term_taxonomy WHERE term_id IN ( " . implode( ',', $term_ids ) . " )" );
120 }
121
122 if ( ! empty( $tt_ids ) ) {
123 $tt_ids = array_unique( $tt_ids );
124 $wpdb->query( "DELETE FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ( " . implode( ',', $tt_ids ) . " )" );
125 }
126
127 // Delete options
128 delete_option( 'polylang' );
129 delete_option( 'widget_polylang' ); // Automatically created by WP
130 delete_option( 'polylang_wpml_strings' ); // Strings registered with icl_register_string
131 delete_option( 'polylang_licenses' );
132
133 //Delete transients
134 delete_transient( 'pll_languages_list' );
135 delete_transient( 'pll_upgrade_1_4' );
136 delete_transient( 'pll_translated_slugs' );
137 }
138 }
139
140 new PLL_Uninstall();
141