fix: Add WordPress media library support in standalone mode

🐛 Problem:
- WordPress Media library not loaded in standalone mode
- Error: 'wp.media is not available'
- Image upload functionality broken

 Solution:
- Added wp_enqueue_media() in render_standalone_admin()
- Added wpApiSettings global for REST API compatibility
- Print media-editor and media-audiovideo scripts
- Print media-views and imgareaselect styles

📝 Changes:
- StandaloneAdmin.php:
  - Enqueue media library
  - Output media styles in <head>
  - Output media scripts before app.js
  - Add wpApiSettings global

🎯 Result:
- WordPress media library now available in standalone mode
- Image upload works correctly
- 'Choose from Media Library' button functional
This commit is contained in:
dwindown
2025-11-16 10:42:40 +07:00
parent e1768a075a
commit b61d74fb8e

View File

@@ -43,6 +43,9 @@ class StandaloneAdmin {
* Render standalone admin interface
*/
private static function render_standalone_admin() {
// Enqueue WordPress media library (needed for image uploads)
wp_enqueue_media();
// Check if user is logged in and has permissions
$is_logged_in = is_user_logged_in();
$has_permission = $is_logged_in && current_user_can( 'manage_woocommerce' );
@@ -105,8 +108,14 @@ class StandaloneAdmin {
}
?>
<!-- WooNooW Assets Only - NO wp_head() -->
<!-- WooNooW Assets -->
<link rel="stylesheet" href="<?php echo esc_url( $css_url ); ?>">
<?php
// Print WordPress media library styles and scripts
wp_print_styles( 'media-views' );
wp_print_styles( 'imgareaselect' );
?>
</head>
<body class="woonoow-standalone">
<div id="woonoow-admin-app"></div>
@@ -137,13 +146,22 @@ class StandaloneAdmin {
// Navigation tree (single source of truth from PHP)
window.WNW_NAV_TREE = <?php echo wp_json_encode( \WooNooW\Compat\NavigationRegistry::get_frontend_nav_tree() ); ?>;
// WordPress REST API settings (for media upload compatibility)
window.wpApiSettings = {
root: <?php echo wp_json_encode( untrailingslashit( rest_url() ) ); ?>,
nonce: <?php echo wp_json_encode( $nonce ); ?>,
versionString: 'wp/v2/'
};
</script>
<script type="module" src="<?php echo esc_url( $js_url ); ?>"></script>
<?php
// NO wp_footer() - we don't want theme/plugin scripts
// Print WordPress media library scripts (needed for wp.media)
wp_print_scripts( 'media-editor' );
wp_print_scripts( 'media-audiovideo' );
?>
<script type="module" src="<?php echo esc_url( $js_url ); ?>"></script>
</body>
</html>
<?php