/** * Handles output of tools */ public static function status_tools() { global $wpdb; $tools = self::get_tools(); if (!empty($_GET['action']) && !empty($_REQUEST['_wpnonce']) && wp_verify_nonce($_REQUEST['_wpnonce'], 'debug_action')) { switch ($_GET['action']) { case 'clear_transients': wc_delete_product_transients(); wc_delete_shop_order_transients(); WC_Cache_Helper::get_transient_version('shipping', true); echo '<div class="updated"><p>' . __('Product Transients Cleared', 'woocommerce') . '</p></div>'; break; case 'clear_expired_transients': /* * Deletes all expired transients. The multi-table delete syntax is used * to delete the transient record from table a, and the corresponding * transient_timeout record from table b. * * Based on code inside core's upgrade_network() function. */ $sql = "DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\r\n\t\t\t\t\t\tWHERE a.option_name LIKE %s\r\n\t\t\t\t\t\tAND a.option_name NOT LIKE %s\r\n\t\t\t\t\t\tAND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )\r\n\t\t\t\t\t\tAND b.option_value < %d"; $rows = $wpdb->query($wpdb->prepare($sql, $wpdb->esc_like('_transient_') . '%', $wpdb->esc_like('_transient_timeout_') . '%', time())); $sql = "DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\r\n\t\t\t\t\t\tWHERE a.option_name LIKE %s\r\n\t\t\t\t\t\tAND a.option_name NOT LIKE %s\r\n\t\t\t\t\t\tAND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )\r\n\t\t\t\t\t\tAND b.option_value < %d"; $rows2 = $wpdb->query($wpdb->prepare($sql, $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time())); echo '<div class="updated"><p>' . sprintf(__('%d Transients Rows Cleared', 'woocommerce'), $rows + $rows2) . '</p></div>'; break; case 'reset_roles': // Remove then re-add caps and roles WC_Install::remove_roles(); WC_Install::create_roles(); echo '<div class="updated"><p>' . __('Roles successfully reset', 'woocommerce') . '</p></div>'; break; case 'recount_terms': $product_cats = get_terms('product_cat', array('hide_empty' => false, 'fields' => 'id=>parent')); _wc_term_recount($product_cats, get_taxonomy('product_cat'), true, false); $product_tags = get_terms('product_tag', array('hide_empty' => false, 'fields' => 'id=>parent')); _wc_term_recount($product_tags, get_taxonomy('product_tag'), true, false); echo '<div class="updated"><p>' . __('Terms successfully recounted', 'woocommerce') . '</p></div>'; break; case 'clear_sessions': $wpdb->query("\r\n\t\t\t\t\t\tDELETE FROM {$wpdb->options}\r\n\t\t\t\t\t\tWHERE option_name LIKE '_wc_session_%' OR option_name LIKE '_wc_session_expires_%'\r\n\t\t\t\t\t"); wp_cache_flush(); echo '<div class="updated"><p>' . __('Sessions successfully cleared', 'woocommerce') . '</p></div>'; break; case 'install_pages': WC_Install::create_pages(); echo '<div class="updated"><p>' . __('All missing WooCommerce pages was installed successfully.', 'woocommerce') . '</p></div>'; break; case 'delete_taxes': $wpdb->query("TRUNCATE " . $wpdb->prefix . "woocommerce_tax_rates"); $wpdb->query("TRUNCATE " . $wpdb->prefix . "woocommerce_tax_rate_locations"); echo '<div class="updated"><p>' . __('Tax rates successfully deleted', 'woocommerce') . '</p></div>'; break; case 'reset_tracking': delete_option('woocommerce_allow_tracking'); WC_Admin_Notices::add_notice('tracking'); echo '<div class="updated"><p>' . __('Usage tracking settings successfully reset.', 'woocommerce') . '</p></div>'; break; default: $action = esc_attr($_GET['action']); if (isset($tools[$action]['callback'])) { $callback = $tools[$action]['callback']; $return = call_user_func($callback); if ($return === false) { if (is_array($callback)) { echo '<div class="error"><p>' . sprintf(__('There was an error calling %s::%s', 'woocommerce'), get_class($callback[0]), $callback[1]) . '</p></div>'; } else { echo '<div class="error"><p>' . sprintf(__('There was an error calling %s', 'woocommerce'), $callback) . '</p></div>'; } } } break; } } // Manual translation update messages if (isset($_GET['translation_updated'])) { WC_Language_Pack_Upgrader::language_update_messages(); } // Display message if settings settings have been saved if (isset($_REQUEST['settings-updated'])) { echo '<div class="updated"><p>' . __('Your changes have been saved.', 'woocommerce') . '</p></div>'; } include_once 'views/html-admin-page-status-tools.php'; }
/** * Introduction step */ public function wc_setup_introduction() { $locale = get_locale(); if (isset($_GET['translation_updated'])) { WC_Language_Pack_Upgrader::language_update_messages(); } elseif ('en_US' !== $locale && WC_Language_Pack_Upgrader::has_available_update($locale)) { ?> <div class="woocommerce-message woocommerce-language-pack"> <p><?php printf(esc_html__('WooCommerce is available in %s. Would you like to use this translation?', 'woocommerce'), $locale); ?> </p> <p class="submit"> <a href="<?php echo esc_url(wp_nonce_url(admin_url('index.php?page=wc-setup&action=translation_upgrade'), 'setup_language')); ?> " class="button-primary"><?php _e('Install Translation', 'woocommerce'); ?> </a> </p> </div> <?php } ?> <h1><?php _e('Welcome to the world of WooCommerce!', 'woocommerce'); ?> </h1> <p><?php _e('Thank you for choosing WooCommerce to power your online store! This quick setup wizard will help you configure the basic settings. <strong>It’s completely optional and shouldn’t take longer than five minutes.</strong>', 'woocommerce'); ?> </p> <p><?php _e('No time right now? If you don’t want to go through the wizard, you can skip and return to the WordPress dashboard. Come back anytime if you change your mind!', 'woocommerce'); ?> </p> <p class="wc-setup-actions step"> <a href="<?php echo esc_url($this->get_next_step_link()); ?> " class="button-primary button button-large"><?php _e('Let\'s Go!', 'woocommerce'); ?> </a> <a href="<?php echo esc_url(admin_url('plugins.php')); ?> " class="button button-large"><?php _e('Not right now', 'woocommerce'); ?> </a> </p> <?php }
/** * Automatically download translations for WC ( when user install WCML ( from 3.3.3) / add new language in WPML ) * * @param string $lang_code Language code * */ function download_woocommerce_translations($lang_code) { global $sitepress; $locale = $sitepress->get_locale($lang_code); if ($locale != 'en_US' && class_exists('WC_Language_Pack_Upgrader')) { $sitepress->switch_lang($lang_code); include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/plugin.php'; require_once ABSPATH . 'wp-admin/includes/template.php'; $url = 'update-core.php?action=do-translation-upgrade'; $nonce = 'upgrade-translations'; $title = ''; $context = WP_LANG_DIR; $wc_upgrader_class = new WC_Language_Pack_Upgrader(); $upgrader = new Language_Pack_Upgrader(new Automatic_Upgrader_Skin(compact('url', 'nonce', 'title', 'context'))); // use Language_Pack_Upgrader_Skin instead of Automatic_Upgrader_Skin to display upgrade process $upgr_object = array(); $upgr_object[0] = new stdClass(); $upgr_object[0]->type = 'plugin'; $upgr_object[0]->slug = 'woocommerce'; $upgr_object[0]->language = $locale; $upgr_object[0]->version = WC_VERSION; $upgr_object[0]->updated = date('Y-m-d H:i:s'); $upgr_object[0]->package = $wc_upgrader_class->get_language_package_uri(); $upgr_object[0]->autoupdate = 1; $upgrader->bulk_upgrade($upgr_object); $this->save_translation_version($locale); } }