#38452 closed defect (bug) (invalid)
register_uninstall_hook was not called on multisite enabled.
Reported by: | okvee | Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | 4.6.1 |
Component: | Plugins | Keywords: | |
Focuses: | multisite | Cc: |
Description
I have this plugin on wordpress.org. https://wordpress.org/plugins/rundiz-postorder/
And this is the uninstall code.
<?php namespace RdPostOrder\App\Controllers\Admin; if (!class_exists('\\RdPostOrder\\App\\Controllers\\Admin\\Uninstall')) { /** * The controller that will be working on uninstall (delete) the plugin. */ class Uninstall implements \RdPostOrder\App\Controllers\ControllerInterface { use \RdPostOrder\App\AppTrait; /** * {@inheritDoc} */ public function registerHooks() { // register uninstall hook register_uninstall_hook(RDPOSTORDER_FILE, ['\\RdPostOrder\\App\\Controllers\\Admin\\Uninstall', 'uninstallAction']); error_log('register hook uninstall.'); }// registerHooks /** * Do the uninstallation action (reset all values to its default). * * @global \wpdb $wpdb */ private function doUninstallAction() { global $wpdb; // reset order number in `term_relationships` table. /*$results = $wpdb->get_results( 'SELECT ' . '`' . $wpdb->term_relationships . '`.`object_id`, ' . '`' . $wpdb->term_relationships . '`.`term_taxonomy_id`, ' . '`' . $wpdb->term_taxonomy . '`.`term_taxonomy_id`, ' . '`' . $wpdb->term_taxonomy . '`.`term_id`, ' . '`' . $wpdb->term_taxonomy . '`.`taxonomy`, ' . '`' . $wpdb->posts . '`.`ID`, ' . '`' . $wpdb->posts . '`.`post_date`, ' . '`' . $wpdb->posts . '`.`post_name`, ' . '`' . $wpdb->posts . '`.`post_status`' . ' FROM `' . $wpdb->term_relationships . '`' . ' LEFT JOIN `' . $wpdb->term_taxonomy . '` ON `' . $wpdb->term_relationships . '`.`term_taxonomy_id` = `' . $wpdb->term_taxonomy . '`.`term_taxonomy_id`' . ' LEFT JOIN `' . $wpdb->posts . '` ON `' . $wpdb->term_relationships . '`.`object_id` = `' . $wpdb->posts . '`.`ID`' . ' WHERE `' . $wpdb->term_taxonomy . '`.`taxonomy` = \'category\'' . ' AND `' . $wpdb->posts . '`.`post_status` IN(\'' . implode('\', \'', $this->allowed_order_post_status) . '\')' . ' ORDER BY `' . $wpdb->posts . '`.`post_date` ASC', OBJECT ); if (is_array($results)) { foreach ($results as $row) { $wpdb->update( $wpdb->term_relationships, ['term_order' => 0], ['object_id' => $row->object_id, 'term_taxonomy_id' => $row->term_taxonomy_id], ['%d'], ['%d', '%d'] ); }// endforeach; unset($row); } unset($results);*/ // please read the comment in /Activate controller, it's the same reason. // reset order number in `posts` table. $results = $wpdb->get_results( 'SELECT ' . '`ID`, ' . '`post_date`, ' . '`post_name`, ' . '`post_status`, ' . '`post_type`' . ' FROM `' . $wpdb->posts . '`' . ' WHERE `' . $wpdb->posts . '`.`post_type` = \'post\'' . ' AND `' . $wpdb->posts . '`.`post_status` IN(\'' . implode('\', \'', $this->allowed_order_post_status) . '\')' . ' ORDER BY `' . $wpdb->posts . '`.`post_date` ASC', OBJECT ); if (is_array($results)) { foreach ($results as $row) { $wpdb->update( $wpdb->posts, ['menu_order' => 0], ['ID' => $row->ID], ['%d'], ['%d'] ); }// endforeach; unset($row); } unset($results); error_log('did uninstallation. reset data on table `' . $wpdb->posts . '`'); }// doUninstallAction /** * Uninstall the plugin.<br> * Do the same way as activate the plugin but set the order number to 0 which is its default value. * * @global \wpdb $wpdb */ public static function uninstallAction() { global $wpdb; $ThisClass = new self; error_log('called to uninstallAction method.'); if (is_multisite()) { $blog_ids = $wpdb->get_col('SELECT blog_id FROM '.$wpdb->blogs); $original_blog_id = get_current_blog_id(); if (is_array($blog_ids)) { // loop thru each sites to do uninstall action (reset data to its default value). foreach ($blog_ids as $blog_id) { error_log('switching to blog id: ' . $blog_id); switch_to_blog($blog_id); $ThisClass->doUninstallAction(); } } // switch back to current site. switch_to_blog($original_blog_id); unset($blog_id, $blog_ids, $original_blog_id); } else { $ThisClass->doUninstallAction(); } }// uninstallAction } }
The method registerHooks
will be called automatically by my autoload. This plugin is working fine on single site or non multisite enabled. It can be uninstall (delete) the plugin correctly.
In multisite enabled it is not being called, never.
Attachments (1)
Change History (3)
Note: See
TracTickets for help on using
tickets.
rundiz postorder plugin