[
'https://ps.w.org/ar-viewer/assets/icon-256x256.gif',
'https://ps.w.org/ar-viewer/assets/icon-128x128.gif',
],
];
// Return custom icons if available, otherwise use default WordPress.org URLs
if (isset($custom_icons[$plugin_slug_clean])) {
return $custom_icons[$plugin_slug_clean];
}
return [
"https://ps.w.org/{$plugin_slug_clean}/assets/icon-256x256.png", // Then PNG
"https://ps.w.org/{$plugin_slug_clean}/assets/icon-128x128.png", // Medium PNG
"https://ps.w.org/{$plugin_slug_clean}/assets/icon-256x256.gif", // Try GIF first
"https://ps.w.org/{$plugin_slug_clean}/assets/icon-128x128.gif", // Medium GIF
];
}
}
?>
[],
'loading' => true,
'message' => __('Loading plugin data...', 'ultimate-post-kit')
]);
}
// Send response
wp_send_json_success([
'plugins' => $plugins_data,
'loading' => false,
'message' => __('Plugin data loaded successfully.', 'ultimate-post-kit')
]);
}
/**
* AJAX handler for plugin installation
*/
public function install_plugin_ajax() {
// Check nonce
if (!wp_verify_nonce($_POST['nonce'], 'upk_install_plugin_nonce')) {
wp_send_json_error(['message' => __('Security check failed', 'ultimate-post-kit')]);
}
// Check user capability
if (!current_user_can('install_plugins')) {
wp_send_json_error(['message' => __('You do not have permission to install plugins', 'ultimate-post-kit')]);
}
$plugin_slug = sanitize_text_field($_POST['plugin_slug']);
if (empty($plugin_slug)) {
wp_send_json_error(['message' => __('Plugin slug is required', 'ultimate-post-kit')]);
}
// Include necessary WordPress files
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
// Get plugin information
$api = plugins_api('plugin_information', [
'slug' => $plugin_slug,
'fields' => [
'sections' => false,
],
]);
if (is_wp_error($api)) {
wp_send_json_error(['message' => __('Plugin not found: ', 'ultimate-post-kit') . $api->get_error_message()]);
}
// Install the plugin
$skin = new \WP_Ajax_Upgrader_Skin();
$upgrader = new \Plugin_Upgrader($skin);
$result = $upgrader->install($api->download_link);
if (is_wp_error($result)) {
wp_send_json_error(['message' => __('Installation failed: ', 'ultimate-post-kit') . $result->get_error_message()]);
} elseif ($skin->get_errors()->has_errors()) {
wp_send_json_error(['message' => __('Installation failed: ', 'ultimate-post-kit') . $skin->get_error_messages()]);
} elseif (is_null($result)) {
wp_send_json_error(['message' => __('Installation failed: Unable to connect to filesystem', 'ultimate-post-kit')]);
}
// Get installation status
$install_status = install_plugin_install_status($api);
wp_send_json_success([
'message' => __('Plugin installed successfully!', 'ultimate-post-kit'),
'plugin_file' => $install_status['file'],
'plugin_name' => $api->name
]);
}
}
// Initialize the manager
new UltimatePostKit_Others_Plugin_Manager();
/**
* Helper function for easy rendering
*/
function ultimate_post_kit_others_plugin() {
$manager = new UltimatePostKit_Others_Plugin_Manager();
$manager->render_others_plugin();
}