/wp-content/plugins/wordpress-seo/inc/class-upgrade.php
https://gitlab.com/iamgraeme/royalmile · PHP · 208 lines · 104 code · 37 blank · 67 comment · 14 complexity · c80ba9f3b59aa199690bf74767efe991 MD5 · raw file
- <?php
- /**
- * @package WPSEO
- * @subpackage Internal
- */
- /**
- * This code handles the option upgrades
- */
- class WPSEO_Upgrade {
- /**
- * Holds the Yoast SEO options
- *
- * @var array
- */
- private $options = array();
- /**
- * Class constructor
- */
- public function __construct() {
- $this->options = WPSEO_Options::get_option( 'wpseo' );
- WPSEO_Options::maybe_set_multisite_defaults( false );
- if ( version_compare( $this->options['version'], '1.5.0', '<' ) ) {
- $this->upgrade_15( $this->options['version'] );
- }
- if ( version_compare( $this->options['version'], '2.0', '<' ) ) {
- $this->upgrade_20();
- }
- if ( version_compare( $this->options['version'], '2.1', '<' ) ) {
- $this->upgrade_21();
- }
- if ( version_compare( $this->options['version'], '2.2', '<' ) ) {
- $this->upgrade_22();
- }
- if ( version_compare( $this->options['version'], '2.3', '<' ) ) {
- $this->upgrade_23();
- }
- if ( version_compare( $this->options['version'], '3.0', '<' ) ) {
- $this->upgrade_30();
- }
- if ( version_compare( $this->options['version'], '3.3', '<' ) ) {
- $this->upgrade_33();
- }
- /**
- * Filter: 'wpseo_run_upgrade' - Runs the upgrade hook which are dependent on Yoast SEO
- *
- * @deprecated Since 3.1
- *
- * @api string - The current version of Yoast SEO
- */
- do_action( 'wpseo_run_upgrade', $this->options['version'] );
- $this->finish_up();
- }
- /**
- * Run the Yoast SEO 1.5 upgrade routine
- *
- * @param string $version Current plugin version.
- */
- private function upgrade_15( $version ) {
- // Clean up options and meta.
- WPSEO_Options::clean_up( null, $version );
- WPSEO_Meta::clean_up();
- // Add new capabilities on upgrade.
- wpseo_add_capabilities();
- }
- /**
- * Moves options that moved position in WPSEO 2.0
- */
- private function upgrade_20() {
- /**
- * Clean up stray wpseo_ms options from the options table, option should only exist in the sitemeta table.
- * This could have been caused in many version of Yoast SEO, so deleting it for everything below 2.0
- */
- delete_option( 'wpseo_ms' );
- $this->move_pinterest_option();
- }
- /**
- * Detects if taxonomy terms were split and updates the corresponding taxonomy meta's accordingly.
- */
- private function upgrade_21() {
- $taxonomies = get_option( 'wpseo_taxonomy_meta', array() );
- if ( ! empty( $taxonomies ) ) {
- foreach ( $taxonomies as $taxonomy => $tax_metas ) {
- foreach ( $tax_metas as $term_id => $tax_meta ) {
- if ( function_exists( 'wp_get_split_term' ) && $new_term_id = wp_get_split_term( $term_id, $taxonomy ) ) {
- $taxonomies[ $taxonomy ][ $new_term_id ] = $taxonomies[ $taxonomy ][ $term_id ];
- unset( $taxonomies[ $taxonomy ][ $term_id ] );
- }
- }
- }
- update_option( 'wpseo_taxonomy_meta', $taxonomies );
- }
- }
- /**
- * Performs upgrade functions to Yoast SEO 2.2
- */
- private function upgrade_22() {
- // Unschedule our tracking.
- wp_clear_scheduled_hook( 'yoast_tracking' );
- // Clear the tracking settings, the seen about setting and the ignore tour setting.
- $options = get_option( 'wpseo' );
- unset( $options['tracking_popup_done'], $options['yoast_tracking'], $options['seen_about'], $options['ignore_tour'] );
- update_option( 'wpseo', $options );
- }
- /**
- * Schedules upgrade function to Yoast SEO 2.3
- */
- private function upgrade_23() {
- add_action( 'wp', array( $this, 'upgrade_23_query' ), 90 );
- add_action( 'admin_head', array( $this, 'upgrade_23_query' ), 90 );
- }
- /**
- * Performs upgrade query to Yoast SEO 2.3
- */
- public function upgrade_23_query() {
- $wp_query = new WP_Query( 'post_type=any&meta_key=_yoast_wpseo_sitemap-include&meta_value=never&order=ASC' );
- if ( ! empty( $wp_query->posts ) ) {
- $options = get_option( 'wpseo_xml' );
- $excluded_posts = array();
- if ( $options['excluded-posts'] !== '' ) {
- $excluded_posts = explode( ',', $options['excluded-posts'] );
- }
- foreach ( $wp_query->posts as $post ) {
- if ( ! in_array( $post->ID, $excluded_posts ) ) {
- $excluded_posts[] = $post->ID;
- }
- }
- // Updates the meta value.
- $options['excluded-posts'] = implode( ',', $excluded_posts );
- // Update the option.
- update_option( 'wpseo_xml', $options );
- }
- // Remove the meta fields.
- delete_post_meta_by_key( '_yoast_wpseo_sitemap-include' );
- }
- /**
- * Performs upgrade functions to Yoast SEO 3.0
- */
- private function upgrade_30() {
- // Remove the meta fields for sitemap prio.
- delete_post_meta_by_key( '_yoast_wpseo_sitemap-prio' );
- }
- /**
- * Performs upgrade functions to Yoast SEO 3.3
- */
- private function upgrade_33() {
- // Notification dismissals have been moved to User Meta instead of global option.
- delete_option( Yoast_Notification_Center::STORAGE_KEY );
- }
- /**
- * Move the pinterest verification option from the wpseo option to the wpseo_social option
- */
- private function move_pinterest_option() {
- $options_social = get_option( 'wpseo_social' );
- if ( isset( $option_wpseo['pinterestverify'] ) ) {
- $options_social['pinterestverify'] = $option_wpseo['pinterestverify'];
- unset( $option_wpseo['pinterestverify'] );
- update_option( 'wpseo_social', $options_social );
- update_option( 'wpseo', $option_wpseo );
- }
- }
- /**
- * Runs the needed cleanup after an update, setting the DB version to latest version, flushing caches etc.
- */
- private function finish_up() {
- $this->options = WPSEO_Options::get_option( 'wpseo' ); // Re-get to make sure we have the latest version.
- update_option( 'wpseo', $this->options ); // This also ensures the DB version is equal to WPSEO_VERSION.
- add_action( 'shutdown', 'flush_rewrite_rules' ); // Just flush rewrites, always, to at least make them work after an upgrade.
- WPSEO_Sitemaps_Cache::clear(); // Flush the sitemap cache.
- WPSEO_Options::ensure_options_exist(); // Make sure all our options always exist - issue #1245.
- }
- }