>> */ protected array $plugins = []; /** * Registers the plugins so we can access them. * * @return void */ public function register() { $this->seo_plugins(); $this->conflicting_plugins(); $this->wishlist_plugins(); $this->register_plugins(); } /** * Supported SEO plugins. * * @return void */ protected function seo_plugins() { $this->plugins['seo'] = [ 'wordpress-seo' => [ 'url' => 'https://wordpress.org/plugins/seo/', 'name' => 'Yoast SEO', 'slug' => 'wordpress-seo/wp-seo.php', ], 'rank-math' => [ 'url' => 'https://wordpress.org/plugins/seo-by-rank-math/', 'name' => 'Rank Math SEO', 'slug' => 'seo-by-rank-math/rank-math.php', ], ]; } /** * Plugins likely to cause conflicts. * * @return void */ protected function conflicting_plugins() { $this->plugins['conflicting'] = [ 'gtm4wp' => [ 'name' => 'Google Tag Manager for WordPress', 'slug' => 'duracelltomi-google-tag-manager/duracelltomi-google-tag-manager-for-wordpress.php', ], 'gtm-ecommerce-woo' => [ 'name' => 'GTM for WooCommerce FREE', 'slug' => 'gtm-ecommerce-woo/gtm-ecommerce-woo.php', ], 'gtm-ecommerce-woo-pro' => [ 'name' => 'Google Tag Manager for WooCommerce PRO', 'slug' => 'gtm-ecommerce-woo-pro/gtm-ecommerce-woo-pro.php', ], 'wk-google-analytics' => [ 'name' => 'Google Analytics and Google Tag Manager by WEBKINDER', 'slug' => 'wk-google-analytics/wk-ga.php', ], 'google-tag-manager' => [ 'name' => 'Google Tag Manager', 'slug' => 'google-tag-manager/google-tag-manager.php', ], 'really-simple-google-tag-manager' => [ 'name' => 'Really Simple Google Tag Manager', 'slug' => 'really-simple-google-tag-manager/really-simple-google-tag-manager.php', ], ]; } /** * Wishlist plugins. * * @return void */ protected function wishlist_plugins() { $this->plugins['wishlist_plugins'] = [ 'yith-woocommerce-wishlist' => [ 'name' => 'YITH WooCommerce Wishlist', 'slug' => 'yith-woocommerce-wishlist/init.php', 'gf' => true, ], 'ti-woocommerce-wishlist' => [ 'name' => 'TI WooCommerce Wishlist', 'slug' => 'ti-woocommerce-wishlist/ti-woocommerce-wishlist.php', 'gf' => true, ], ]; } /** * Registers the plugins status. * * @return void */ protected function register_plugins(): void { foreach ( $this->plugins as $category => $plugins ) { foreach ( $plugins as $id => $plugin ) { $this->plugins[ $category ][ $id ] = $this->normalize_plugin( $plugin, $id ); $this->plugins[ $category ][ $id ]['active'] = is_plugin_active( $plugin['slug'] ); } } } /** * Normalize plugin * * @param array $plugin The plugin. * @param string $id The plugin ID. * * @return array Normalized plugin. */ private function normalize_plugin( array $plugin, string $id ): array { $defaults = [ 'url' => '', 'description' => '', ]; $plugin = wp_parse_args( $plugin, $defaults ); $plugin['id'] = $id; return $plugin; } /** * Gets all the possibly available plugins. * * @param string $category Limit the plugins to a category. * * @return array> Array containing the information about the plugins. */ public function get_plugins( string $category = '' ): array { return ( $category ) ? $this->plugins[ $category ] : $this->plugins; } /** * Determines whether a plugin is active. * * @param array $plugin The plugin to check. * * @return bool Whether the plugin is active. */ public function is_active( array $plugin ): bool { return isset( $plugin['active'] ) && $plugin['active'] === true; } /** * Determines whether a grandfathered polyfill is available. * * @param array $plugin The plugin to check. * * @return bool Whether the plugin is active. */ public function gf_polyfill_available( array $plugin ): bool { return isset( $plugin['gf'] ) && $plugin['gf'] === true; } }