der_addresses SET state=%s WHERE country=%s AND state=%s LIMIT %d",
$new_state,
$country_code,
$old_state,
$limit
);
$wpdb->query( $update_query );
}
// We need to split the update query for the postmeta table in two, select + update,
// because MySQL doesn't support the LIMIT keyword in multi-table UPDATE statements.
$select_meta_ids_query = $wpdb->prepare(
"SELECT meta_id FROM {$wpdb->prefix}postmeta,
(SELECT DISTINCT post_id FROM {$wpdb->prefix}postmeta
WHERE (meta_key = '_billing_country' OR meta_key='_shipping_country') AND meta_value=%s)
AS states_in_country
WHERE (meta_key='_billing_state' OR meta_key='_shipping_state')
AND meta_value=%s
AND {$wpdb->postmeta}.post_id = states_in_country.post_id
LIMIT %d",
$country_code,
$old_state,
$limit
);
$meta_ids = $wpdb->get_results( $select_meta_ids_query, ARRAY_A );
if ( ! empty( $meta_ids ) ) {
$meta_ids = ArrayUtil::select( $meta_ids, 'meta_id' );
$meta_ids_as_comma_separated = '(' . join( ',', $meta_ids ) . ')';
$update_query = $wpdb->prepare(
"UPDATE {$wpdb->prefix}postmeta
SET meta_value=%s
WHERE meta_id IN {$meta_ids_as_comma_separated}",
$new_state
);
$wpdb->query( $update_query );
}
}
$states_as_comma_separated = "('" . join( "','", array_keys( $old_to_new_states_mapping ) ) . "')";
$posts_exist_query = $wpdb->prepare(
"
SELECT 1 FROM {$wpdb->prefix}postmeta
WHERE (meta_key='_billing_state' OR meta_key='_shipping_state')
AND meta_value IN {$states_as_comma_separated}
AND post_id IN (
SELECT post_id FROM {$wpdb->prefix}postmeta WHERE
(meta_key = '_billing_country' OR meta_key='_shipping_country')
AND meta_value=%s
)",
$country_code
);
if ( $cot_exists ) {
$more_exist_query = $wpdb->prepare(
"
SELECT EXISTS(
SELECT 1 FROM {$wpdb->prefix}wc_order_addresses
WHERE country=%s AND state IN {$states_as_comma_separated}
)
OR EXISTS (
{$posts_exist_query}
)",
$country_code
);
} else {
$more_exist_query = "SELECT EXISTS ({$posts_exist_query})";
}
return (int) ( $wpdb->get_var( $more_exist_query ) ) !== 0;
// phpcs:enable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
}
/**
* Migrate state codes in the tax rates table.
*
* @param string $country_code The country that has the states for which the migration is needed.
* @param array $old_to_new_states_mapping An associative array where keys are the old state codes and values are the new state codes.
* @return void
*/
private static function migrate_country_states_for_tax_rates( string $country_code, array $old_to_new_states_mapping ): void {
global $wpdb;
foreach ( $old_to_new_states_mapping as $old_state_code => $new_state_code ) {
$wpdb->query(
$wpdb->prepare(
"UPDATE {$wpdb->prefix}woocommerce_tax_rates SET tax_rate_state=%s WHERE tax_rate_country=%s AND tax_rate_state=%s",
$new_state_code,
$country_code,
$old_state_code
)
);
}
}
}
Fatal error: Uncaught Error: Class "Automattic\WooCommerce\Database\Migrations\MigrationHelper" not found in /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Database/Migrations/MetaToCustomTableMigrator.php:41
Stack trace:
#0 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Database/Migrations/CustomOrderTable/PostsToOrdersMigrationController.php(44): Automattic\WooCommerce\Database\Migrations\MetaToCustomTableMigrator->__construct()
#1 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/Definition.php(28): Automattic\WooCommerce\Database\Migrations\CustomOrderTable\PostsToOrdersMigrationController->__construct()
#2 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Definition/Definition.php(212): Automattic\WooCommerce\Internal\DependencyManagement\Definition->resolveClass('Automattic\\WooC...')
#3 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Definition/DefinitionAggregate.php(94): Automattic\WooCommerce\Vendor\League\Container\Definition\Definition->resolve(false)
#4 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Container.php(157): Automattic\WooCommerce\Vendor\League\Container\Definition\DefinitionAggregate->resolve('Automattic\\WooC...', false)
#5 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ExtendedContainer.php(176): Automattic\WooCommerce\Vendor\League\Container\Container->get('Automattic\\WooC...', false)
#6 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Container.php(178): Automattic\WooCommerce\Internal\DependencyManagement\ExtendedContainer->get('Automattic\\WooC...', false)
#7 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ExtendedContainer.php(176): Automattic\WooCommerce\Vendor\League\Container\Container->get('Automattic\\WooC...', false)
#8 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Argument/ArgumentResolverTrait.php(45): Automattic\WooCommerce\Internal\DependencyManagement\ExtendedContainer->get('Automattic\\WooC...')
#9 [internal function]: Automattic\WooCommerce\Vendor\League\Container\Definition\Definition->Automattic\WooCommerce\Vendor\League\Container\Argument\{closure}('Automattic\\WooC...')
#10 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Argument/ArgumentResolverTrait.php(19): array_map(Object(Closure), Array)
#11 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/Definition.php(56): Automattic\WooCommerce\Vendor\League\Container\Definition\Definition->resolveArguments(Array)
#12 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/Definition.php(29): Automattic\WooCommerce\Internal\DependencyManagement\Definition->invokeInit(Object(Automattic\WooCommerce\Internal\DataStores\Orders\DataSynchronizer))
#13 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Definition/Definition.php(212): Automattic\WooCommerce\Internal\DependencyManagement\Definition->resolveClass('Automattic\\WooC...')
#14 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Definition/DefinitionAggregate.php(94): Automattic\WooCommerce\Vendor\League\Container\Definition\Definition->resolve(false)
#15 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Container.php(157): Automattic\WooCommerce\Vendor\League\Container\Definition\DefinitionAggregate->resolve('Automattic\\WooC...', false)
#16 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ExtendedContainer.php(176): Automattic\WooCommerce\Vendor\League\Container\Container->get('Automattic\\WooC...', false)
#17 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Argument/ArgumentResolverTrait.php(45): Automattic\WooCommerce\Internal\DependencyManagement\ExtendedContainer->get('Automattic\\WooC...')
#18 [internal function]: Automattic\WooCommerce\Vendor\League\Container\Definition\Definition->Automattic\WooCommerce\Vendor\League\Container\Argument\{closure}('Automattic\\WooC...')
#19 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Argument/ArgumentResolverTrait.php(19): array_map(Object(Closure), Array)
#20 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/Definition.php(56): Automattic\WooCommerce\Vendor\League\Container\Definition\Definition->resolveArguments(Array)
#21 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/Definition.php(29): Automattic\WooCommerce\Internal\DependencyManagement\Definition->invokeInit(Object(Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController))
#22 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Definition/Definition.php(212): Automattic\WooCommerce\Internal\DependencyManagement\Definition->resolveClass('Automattic\\WooC...')
#23 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Definition/DefinitionAggregate.php(94): Automattic\WooCommerce\Vendor\League\Container\Definition\Definition->resolve(false)
#24 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Container.php(157): Automattic\WooCommerce\Vendor\League\Container\Definition\DefinitionAggregate->resolve('Automattic\\WooC...', false)
#25 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ExtendedContainer.php(176): Automattic\WooCommerce\Vendor\League\Container\Container->get('Automattic\\WooC...', false)
#26 /home/valigeria/public_html/wp-content/plugins/woocommerce/lib/packages/League/Container/Container.php(178): Automattic\WooCommerce\Internal\DependencyManagement\ExtendedContainer->get('Automattic\\WooC...', false)
#27 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ExtendedContainer.php(176): Automattic\WooCommerce\Vendor\League\Container\Container->get('Automattic\\WooC...', false)
#28 /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Container.php(120): Automattic\WooCommerce\Internal\DependencyManagement\ExtendedContainer->get('Automattic\\WooC...')
#29 /home/valigeria/public_html/wp-content/plugins/woocommerce/includes/class-woocommerce.php(271): Automattic\WooCommerce\Container->get('Automattic\\WooC...')
#30 /home/valigeria/public_html/wp-content/plugins/woocommerce/includes/class-woocommerce.php(194): WooCommerce->init_hooks()
#31 /home/valigeria/public_html/wp-content/plugins/woocommerce/includes/class-woocommerce.php(152): WooCommerce->__construct()
#32 /home/valigeria/public_html/wp-content/plugins/woocommerce/woocommerce.php(51): WooCommerce::instance()
#33 /home/valigeria/public_html/wp-content/plugins/woocommerce/woocommerce.php(66): WC()
#34 /home/valigeria/public_html/wp-settings.php(517): include_once('/home/valigeria...')
#35 /home/valigeria/public_html/wp-config.php(111): require_once('/home/valigeria...')
#36 /home/valigeria/public_html/wp-load.php(50): require_once('/home/valigeria...')
#37 /home/valigeria/public_html/wp-blog-header.php(13): require_once('/home/valigeria...')
#38 /home/valigeria/public_html/index.php(17): require('/home/valigeria...')
#39 {main}
thrown in /home/valigeria/public_html/wp-content/plugins/woocommerce/src/Database/Migrations/MetaToCustomTableMigrator.php on line 41