diff --git a/src/bp-core/bp-core-options.php b/src/bp-core/bp-core-options.php
index de638993d..ec44b01e4 100644
--- a/src/bp-core/bp-core-options.php
+++ b/src/bp-core/bp-core-options.php
@@ -756,22 +756,33 @@ function bp_is_activity_heartbeat_active( $default = true ) {
 }
 
 /**
- * Get the current theme package ID.
+ * Get the current template pack ID.
  *
  * @since 1.7.0
+ * @since 3.0.0 Add support for WordPress themes to override template pack selection.
  *
- * @param string $default Optional. Fallback value if not found in the database.
- *                        Default: 'legacy'.
- * @return string ID of the theme package.
+ * @param string $default Optional. Fallback value if no preference set. Default: 'legacy'.
+ *
+ * @return string ID of the template pack.
  */
 function bp_get_theme_package_id( $default = 'legacy' ) {
+	$active_package = bp_get_option( '_bp_theme_package_id', $default );
+	$all_packages   = array_keys( buddypress()->theme_compat->packages );
+
+	foreach ( $all_packages as $package ) {
+		// e.g. "buddypress-use-nouveau", "buddypress-use-legacy".
+		if ( current_theme_supports( "buddypress-use-{$package}" ) ) {
+			$active_package = $package;
+			break;
+		}
+	}
 
 	/**
-	 * Filters the current theme package ID.
+	 * Filters the current template pack ID.
 	 *
 	 * @since 1.7.0
 	 *
-	 * @param string $value The current theme package ID.
+	 * @param string $value The template pack ID.
 	 */
-	return apply_filters( 'bp_get_theme_package_id', bp_get_option( '_bp_theme_package_id', $default ) );
+	return apply_filters( 'bp_get_theme_package_id', $active_package );
 }
