diff --git a/projects/packages/premium-analytics/changelog/update-analytics-wp-admin-shell b/projects/packages/premium-analytics/changelog/update-analytics-wp-admin-shell new file mode 100644 index 000000000000..895710660610 --- /dev/null +++ b/projects/packages/premium-analytics/changelog/update-analytics-wp-admin-shell @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Render the Premium Analytics admin page inside the native wp-admin shell (sidebar and header) instead of taking over the full screen. diff --git a/projects/packages/premium-analytics/src/class-analytics.php b/projects/packages/premium-analytics/src/class-analytics.php index daccd953800c..9973bf8436a3 100644 --- a/projects/packages/premium-analytics/src/class-analytics.php +++ b/projects/packages/premium-analytics/src/class-analytics.php @@ -143,19 +143,24 @@ public static function is_dashboard_request() { /** * Register the admin menu page. * - * The callback is __return_null because the wp-build interceptor - * renders the full-page app on admin_init and calls exit() before - * WordPress can invoke this callback. + * Uses the wp-build "wp-admin integrated" variant (`-wp-admin` slug) so the + * dashboard renders inside the native wp-admin shell, not the full-page + * variant that takes over the screen via admin_init. The render callback + * comes from the generated build, with a no-op fallback when it is absent. * * @return void */ public static function register_admin_menu() { + $render_callback = function_exists( 'jpa_jetpack_premium_analytics_wp_admin_render_page' ) + ? 'jpa_jetpack_premium_analytics_wp_admin_render_page' + : '__return_null'; + add_menu_page( esc_html( self::$menu_title ), esc_html( self::$menu_title ), 'manage_options', - 'jetpack-premium-analytics', - '__return_null', + 'jetpack-premium-analytics-wp-admin', + $render_callback, 'dashicons-chart-bar', 30 );