'nyxonn_builder_settings', 'nx_global_settings' => 'nyxonn_builder_global_settings', 'nx_performance_settings' => 'nyxonn_builder_performance_settings', 'nx_safe_mode' => 'nyxonn_builder_safe_mode', 'nx_custom_fonts' => 'nyxonn_builder_custom_fonts', 'nx_custom_icons' => 'nyxonn_builder_custom_icons', 'nx_role_manager_initialized' => 'nyxonn_builder_role_manager_initialized', 'nx_global_custom_code' => 'nyxonn_builder_global_custom_code', 'nx_global_css' => 'nyxonn_builder_global_css', 'nx_global_js' => 'nyxonn_builder_global_js', 'nx_global_scripts' => 'nyxonn_builder_global_scripts', 'nx_global_custom_css' => 'nyxonn_builder_global_custom_css', ]; private const META_MAP = [ '_nx_data' => '_nyxonn_builder_data', '_nx_data_raw' => '_nyxonn_builder_data_raw', '_nx_enabled' => '_nyxonn_builder_enabled', '_nx_layout_schema_version' => '_nyxonn_builder_layout_schema_version', '_nx_page_settings' => '_nyxonn_builder_page_settings', '_nx_page_css' => '_nyxonn_builder_page_css', '_nx_page_js' => '_nyxonn_builder_page_js', '_nx_head_js' => '_nyxonn_builder_head_js', '_nx_custom_code_enabled' => '_nyxonn_builder_custom_code_enabled', '_nx_page_custom_css' => '_nyxonn_builder_page_custom_css', '_nx_page_css_enabled' => '_nyxonn_builder_page_css_enabled', '_nx_page_scripts' => '_nyxonn_builder_page_scripts', '_nx_page_js_enabled' => '_nyxonn_builder_page_js_enabled', '_nx_template_type' => '_nyxonn_builder_tpl_type', '_nx_template_rules' => '_nyxonn_builder_tpl_rules', '_nx_template_source' => '_nyxonn_builder_tpl_source', '_nx_template_schema_version' => '_nyxonn_builder_tpl_schema_version', '_nx_template_payload' => '_nyxonn_builder_tpl_payload', '_nx_template_priority' => '_nyxonn_builder_template_priority', '_nx_template_conditions' => '_nyxonn_builder_template_conditions', '_nx_layout' => '_nyxonn_builder_layout', ]; public static function init() { self::migrate_options(); self::migrate_capabilities(); add_action( 'init', [ __CLASS__, 'migrate_content' ], 20 ); } public static function legacy_option( $canonical ) { $legacy = array_search( $canonical, self::OPTION_MAP, true ); return is_string( $legacy ) ? $legacy : ''; } public static function legacy_meta( $canonical ) { $legacy = array_search( $canonical, self::META_MAP, true ); return is_string( $legacy ) ? $legacy : ''; } public static function get_option( $canonical, $default = false ) { $sentinel = new \stdClass(); $value = get_option( $canonical, $sentinel ); if ( $sentinel !== $value ) { return $value; } $legacy = self::legacy_option( $canonical ); return $legacy ? get_option( $legacy, $default ) : $default; } public static function get_post_meta( $post_id, $canonical, $single = true ) { if ( metadata_exists( 'post', $post_id, $canonical ) ) { return get_post_meta( $post_id, $canonical, $single ); } $legacy = self::legacy_meta( $canonical ); return $legacy ? get_post_meta( $post_id, $legacy, $single ) : ( $single ? '' : [] ); } private static function migrate_options() { $sentinel = new \stdClass(); foreach ( self::OPTION_MAP as $legacy => $canonical ) { if ( $sentinel !== get_option( $canonical, $sentinel ) ) { continue; } $value = get_option( $legacy, $sentinel ); if ( $sentinel !== $value ) { update_option( $canonical, $value, false ); } } } private static function migrate_capabilities() { foreach ( wp_roles()->roles as $slug => $details ) { $role = get_role( $slug ); if ( $role && $role->has_cap( 'n' . 'x_use_builder' ) && ! $role->has_cap( Role_Manager::BUILDER_CAPABILITY ) ) { $role->add_cap( Role_Manager::BUILDER_CAPABILITY ); } } } public static function migrate_content() { if ( '2' === get_option( self::COMPLETED_OPTION, '' ) ) { return; } $post_types = array_values( array_unique( array_merge( get_post_types( [], 'names' ), [ self::LEGACY_POST_TYPE ] ) ) ); foreach ( self::META_MAP as $legacy => $canonical ) { $ids = get_posts( [ 'post_type' => $post_types, 'post_status' => 'any', 'numberposts' => -1, 'fields' => 'ids', 'meta_key' => $legacy ] ); foreach ( $ids as $post_id ) { if ( metadata_exists( 'post', $post_id, $canonical ) ) { continue; } $value = get_post_meta( $post_id, $legacy, true ); update_post_meta( $post_id, $canonical, is_string( $value ) ? wp_slash( $value ) : $value ); } } $templates = get_posts( [ 'post_type' => self::LEGACY_POST_TYPE, 'post_status' => 'any', 'numberposts' => -1, 'fields' => 'ids' ] ); foreach ( $templates as $post_id ) { wp_update_post( [ 'ID' => $post_id, 'post_type' => Template_Manager::TEMPLATES_POST_TYPE ] ); } update_option( self::COMPLETED_OPTION, '2', false ); } }