__( 'WooCommerce', 'auto-parts-and-car-accessories' ), 'slug' => 'woocommerce', 'file' => 'woocommerce.php' ) ); foreach ($recommended_plugins as $plugin) { $plugin_slug = $plugin['slug']; $plugin_file = $plugin['file']; // Check if the plugin is active if (!is_plugin_active($plugin_slug . '/' . $plugin_file)) { return false; // If any plugin is not active, return false } } return true; // All plugins are active } class Silent_Skin extends WP_Upgrader_Skin { public function header() {} public function footer() {} public function feedback($string, ...$args) {} public function error($errors) {} public function before() {} public function after() {} } // Function to install and activate plugins function auto_parts_and_car_accessories_install_and_activate_plugins() { if (!current_user_can('manage_options')) { return; } check_ajax_referer('auto_parts_and_car_accessories_welcome_nonce', 'nonce'); // Define the recommended plugins $recommended_plugins = array( array( 'name' => __( 'WooCommerce', 'auto-parts-and-car-accessories' ), 'slug' => 'woocommerce', 'file' => 'woocommerce.php' ) ); set_transient('install_and_activate_progress', array(), MINUTE_IN_SECONDS * 10); require_once(ABSPATH . 'wp-admin/includes/plugin-install.php'); require_once(ABSPATH . 'wp-admin/includes/file.php'); require_once(ABSPATH . 'wp-admin/includes/misc.php'); require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'); foreach ($recommended_plugins as $plugin) { $plugin_slug = $plugin['slug']; $plugin_file = $plugin['file']; $plugin_name = $plugin['name']; // Check if the plugin is active if (is_plugin_active($plugin_slug . '/' . $plugin_file)) { update_install_and_activate_progress($plugin_name, 'Already Active'); continue; } // Check if the plugin is installed but not active if (is_auto_parts_and_car_accessories_plugin_installed($plugin_slug)) { $activate = activate_plugin($plugin_slug . '/' . $plugin_file); if (is_wp_error($activate)) { update_install_and_activate_progress($plugin_name, 'Error'); continue; } update_install_and_activate_progress($plugin_name, 'Activated'); continue; } // Plugin is not installed or activated, proceed with installation update_install_and_activate_progress($plugin_name, 'Installing'); $api = plugins_api('plugin_information', array('slug' => $plugin_slug, 'fields' => array('sections' => false))); if (is_wp_error($api)) { update_install_and_activate_progress($plugin_name, 'Error'); continue; } $upgrader = new Plugin_Upgrader(new Silent_Skin()); $install = $upgrader->install($api->download_link); if ($install) { $activate = activate_plugin($plugin_slug . '/' . $plugin_file); if (is_wp_error($activate)) { update_install_and_activate_progress($plugin_name, 'Error'); continue; } update_install_and_activate_progress($plugin_name, 'Activated'); continue; } else { update_install_and_activate_progress($plugin_name, 'Error'); } } delete_transient('install_and_activate_progress'); if (ob_get_length()) ob_clean(); header('Content-Type: application/json; charset=utf-8'); $redirect_url = admin_url('themes.php?page=auto-parts-and-car-accessories'); echo json_encode([ 'success' => true, 'data' => [ 'redirect_url' => $redirect_url, ], ]); wp_die(); } // Function to check if a plugin is installed function is_auto_parts_and_car_accessories_plugin_installed($plugin_slug) { $installed_plugins = get_plugins(); foreach ($installed_plugins as $path => $details) { if (strpos($path, $plugin_slug) === 0) { return true; } } return false; } // Function to update the installation progress function update_install_and_activate_progress($plugin_name, $status) { $progress = get_transient('install_and_activate_progress'); $progress[] = array('plugin' => $plugin_name, 'status' => $status); set_transient('install_and_activate_progress', $progress, MINUTE_IN_SECONDS * 10); } // Dismiss function for AJAX request add_action('wp_ajax_auto_parts_and_car_accessories_dismissed_notice_handler', 'auto_parts_and_car_accessories_ajax_notice_dismiss_function'); function auto_parts_and_car_accessories_ajax_notice_dismiss_function() { if (!wp_verify_nonce($_POST['wpnonce'], 'auto_parts_and_car_accessories_welcome_nonce')) { wp_send_json_error('Invalid nonce'); exit; } if (isset($_POST['type'])) { $type = sanitize_text_field(wp_unslash($_POST['type'])); update_option('dismissed-' . $type, true); wp_send_json_success('Notice dismissed'); } else { wp_send_json_error('Type not set'); } } // After switching theme, reset dismissed notice option add_action('after_switch_theme', 'auto_parts_and_car_accessories_after_switch_theme'); function auto_parts_and_car_accessories_after_switch_theme() { update_option('dismissed-get_started_notice', FALSE); } ?>