From 86573777d8c818c5fb15ac8757356ee07214d473 Mon Sep 17 00:00:00 2001 From: Marcus Quinn Date: Sat, 15 Mar 2025 18:01:44 +0000 Subject: [PATCH] Fix plugin list display and improve error handling --- admin/settings.php | 119 +++++++++++++++++++++-------------------- wp-allstars-plugin.php | 3 +- 2 files changed, 62 insertions(+), 60 deletions(-) diff --git a/admin/settings.php b/admin/settings.php index 9bc94e6..a23ac3b 100644 --- a/admin/settings.php +++ b/admin/settings.php @@ -205,60 +205,48 @@ function wp_allstars_ajax_get_plugins() { $recommended_plugins = wp_allstars_get_recommended_plugins(); if (!isset($recommended_plugins[$category])) { wp_send_json_error('Invalid category: ' . $category); + return; } // Try to get cached data first $cached_data = wp_allstars_get_cached_plugins($category); if ($cached_data !== false) { error_log('Using cached data for category: ' . $category); - // Setup the list table with cached data - $GLOBALS['tab'] = 'plugin-install'; - $_REQUEST['tab'] = 'plugin-install'; - $_REQUEST['type'] = 'plugin-install'; - set_current_screen('plugin-install'); - - $wp_list_table = _get_list_table('WP_Plugin_Install_List_Table', array( - 'screen' => 'plugin-install' - )); - - // Override the items with our cached data - $wp_list_table->items = $cached_data->plugins; - $wp_list_table->set_pagination_args(array( - 'total_items' => count($cached_data->plugins), - 'per_page' => count($cached_data->plugins), - )); - - add_filter('plugin_install_action_links', function($action_links, $plugin) { - // Get pro plugins configuration - $pro_plugins = wp_allstars_get_pro_plugins_config(); + try { + // Setup the list table with cached data + $GLOBALS['tab'] = 'plugin-install'; + $_REQUEST['tab'] = 'plugin-install'; + $_REQUEST['type'] = 'plugin-install'; + set_current_screen('plugin-install'); - // Check if this plugin has a pro version - foreach ($pro_plugins as $pro_plugin) { - if (isset($pro_plugin['free_slug']) && $pro_plugin['free_slug'] === $plugin['slug']) { - $action_links[] = sprintf( - '%s', - esc_url($pro_plugin['url']), - esc_html__('Go Pro', 'wp-allstars') - ); - break; - } - } + $wp_list_table = _get_list_table('WP_Plugin_Install_List_Table', array( + 'screen' => 'plugin-install' + )); - return $action_links; - }, 10, 2); - - ob_start(); - $wp_list_table->display(); - $html = ob_get_clean(); - - wp_send_json_success($html); - return; + // Override the items with our cached data + $wp_list_table->items = $cached_data->plugins; + $wp_list_table->set_pagination_args(array( + 'total_items' => count($cached_data->plugins), + 'per_page' => count($cached_data->plugins), + )); + + add_filter('plugin_install_action_links', 'wp_allstars_add_pro_button', 10, 2); + + ob_start(); + $wp_list_table->display(); + $html = ob_get_clean(); + + wp_send_json_success($html); + return; + } catch (Exception $e) { + error_log('Error displaying cached plugins: ' . $e->getMessage()); + // Fall through to fetch fresh data + } } error_log('Fetching fresh data for category: ' . $category); error_log('Plugins to fetch: ' . implode(', ', $recommended_plugins[$category])); - // If no cache, get fresh data try { $plugins = array(); @@ -303,6 +291,11 @@ function wp_allstars_ajax_get_plugins() { } } + if (empty($plugins)) { + wp_send_json_error('No plugin data could be retrieved for category: ' . $category); + return; + } + error_log('Total plugins fetched: ' . count($plugins)); // Create response object @@ -335,29 +328,17 @@ function wp_allstars_ajax_get_plugins() { 'per_page' => count($plugins), )); - add_filter('plugin_install_action_links', function($action_links, $plugin) { - // Get pro plugins configuration - $pro_plugins = wp_allstars_get_pro_plugins_config(); - - // Check if this plugin has a pro version - foreach ($pro_plugins as $pro_plugin) { - if (isset($pro_plugin['free_slug']) && $pro_plugin['free_slug'] === $plugin['slug']) { - $action_links[] = sprintf( - '%s', - esc_url($pro_plugin['url']), - esc_html__('Go Pro', 'wp-allstars') - ); - break; - } - } - - return $action_links; - }, 10, 2); + add_filter('plugin_install_action_links', 'wp_allstars_add_pro_button', 10, 2); ob_start(); $wp_list_table->display(); $html = ob_get_clean(); + if (empty($html)) { + wp_send_json_error('Failed to generate plugin display HTML'); + return; + } + wp_send_json_success($html); } catch (Exception $e) { @@ -367,6 +348,26 @@ function wp_allstars_ajax_get_plugins() { } add_action('wp_ajax_wp_allstars_get_plugins', 'wp_allstars_ajax_get_plugins'); +// Helper function to add pro button to plugin cards +function wp_allstars_add_pro_button($action_links, $plugin) { + // Get pro plugins configuration + $pro_plugins = wp_allstars_get_pro_plugins_config(); + + // Check if this plugin has a pro version + foreach ($pro_plugins as $pro_plugin) { + if (isset($pro_plugin['free_slug']) && $pro_plugin['free_slug'] === $plugin['slug']) { + $action_links[] = sprintf( + '%s', + esc_url($pro_plugin['url']), + esc_html__('Go Pro', 'wp-allstars') + ); + break; + } + } + + return $action_links; +} + // Remove the old plugins API filter since we're handling everything in the AJAX endpoint remove_filter('plugins_api_result', 'wp_allstars_plugins_api_result'); diff --git a/wp-allstars-plugin.php b/wp-allstars-plugin.php index 7784ca7..ba4b0f1 100644 --- a/wp-allstars-plugin.php +++ b/wp-allstars-plugin.php @@ -31,8 +31,9 @@ register_activation_hook( __FILE__, 'wp_allstars_activate' ); // Load core functionality require_once plugin_dir_path(__FILE__) . 'includes/class-wp-allstars-auto-upload.php'; -// Load admin UI +// Load admin UI and configurations if ( is_admin() ) { + require_once plugin_dir_path( __FILE__ ) . 'admin/pro-plugins-config.php'; require_once plugin_dir_path( __FILE__ ) . 'admin/settings.php'; }