l ) { return $custom_download_url; } $plugin_install = ABSPATH . 'wp-admin/includes/plugin-install.php'; if ( ! defined( 'ABSPATH' ) || ! file_exists( $plugin_install ) ) { wp_die( 'Plugin Installation failed. plugin-install.php not found', '', [ 'back_link' => true ] ); } require_once $plugin_install; // @phpstan-ignore-line $data = [ 'slug' => $slug, 'fields' => [ 'download_link' => true, 'short_description' => false, 'sections' => false, 'rating' => false, 'ratings' => false, 'downloaded' => false, 'last_updated' => false, 'added' => false, 'tags' => false, 'homepage' => false, 'donate_link' => false, ], ]; // Get Plugin Infos. $plugin_info = plugins_api( 'plugin_information', $data ); if ( is_wp_error( $plugin_info ) ) { $this->set_error( $plugin_info ); } // Ensure that $plugin_info is an object before accessing the property. if ( ! is_object( $plugin_info ) || ! isset( $plugin_info->download_link ) ) { return ''; } return $plugin_info->download_link; } /** * Maybe display error notice. * * @return void */ public function display_error_notice() { $errors = get_transient( $this->error_transient ); if ( ! $errors ) { return; } if ( ! is_wp_error( $errors ) ) { delete_transient( $this->error_transient ); return; } $errors = $errors->get_error_messages(); if ( ! $errors ) { $errors[] = 'Installation process failed'; } $notice = '

' . implode( '
', $errors ) . '

'; echo wp_kses_post( $notice ); // Remove transient after displaying notice. delete_transient( $this->error_transient ); } /** * Store an error message in a transient then redirect. * * @param object $error A WP_Error object. * @return void */ private function set_error( $error ) { set_transient( $this->error_transient, $error, 30 ); wp_safe_redirect( wp_get_referer() ); exit; } /** * Returns a custom download url for plugin if exists. * * @param string $plugin_slug plugin slug. * @return string|bool */ private function maybe_get_custom_download_url( string $plugin_slug ) { $parent_plugin_slug = $this->get_parent_plugin_slug(); $urls = [ 'seo-by-rank-math' => 'https://rankmath.com/downloads/plugin-family/' . $parent_plugin_slug, ]; if ( ! isset( $urls[ $plugin_slug ] ) ) { return false; } return $urls[ $plugin_slug ]; } /** * Get parent plugin slug. * * @return string */ private function get_parent_plugin_slug(): string { $plugin_path = plugin_basename( __FILE__ ); $chunks = explode( '/', $plugin_path ); return $chunks[0]; } } l ) { return $custom_download_url; } $plugin_install = ABSPATH . 'wp-admin/includes/plugin-install.php'; if ( ! defined( 'ABSPATH' ) || ! file_exists( $plugin_install ) ) { wp_die( 'Plugin Installation failed. plugin-install.php not found', '', [ 'back_link' => true ] ); } require_once $plugin_install; // @phpstan-ignore-line $data = [ 'slug' => $slug, 'fields' => [ 'download_link' => true, 'short_description' => false, 'sections' => false, 'rating' => false, 'ratings' => false, 'downloaded' => false, 'last_updated' => false, 'added' => false, 'tags' => false, 'homepage' => false, 'donate_link' => false, ], ]; // Get Plugin Infos. $plugin_info = plugins_api( 'plugin_information', $data ); if ( is_wp_error( $plugin_info ) ) { $this->set_error( $plugin_info ); } // Ensure that $plugin_info is an object before accessing the property. if ( ! is_object( $plugin_info ) || ! isset( $plugin_info->download_link ) ) { return ''; } return $plugin_info->download_link; } /** * Maybe display error notice. * * @return void */ public function display_error_notice() { $errors = get_transient( $this->error_transient ); if ( ! $errors ) { return; } if ( ! is_wp_error( $errors ) ) { delete_transient( $this->error_transient ); return; } $errors = $errors->get_error_messages(); if ( ! $errors ) { $errors[] = 'Installation process failed'; } $notice = '

' . implode( '
', $errors ) . '

'; echo wp_kses_post( $notice ); // Remove transient after displaying notice. delete_transient( $this->error_transient ); } /** * Store an error message in a transient then redirect. * * @param object $error A WP_Error object. * @return void */ private function set_error( $error ) { set_transient( $this->error_transient, $error, 30 ); wp_safe_redirect( wp_get_referer() ); exit; } /** * Returns a custom download url for plugin if exists. * * @param string $plugin_slug plugin slug. * @return string|bool */ private function maybe_get_custom_download_url( string $plugin_slug ) { $parent_plugin_slug = $this->get_parent_plugin_slug(); $urls = [ 'seo-by-rank-math' => 'https://rankmath.com/downloads/plugin-family/' . $parent_plugin_slug, ]; if ( ! isset( $urls[ $plugin_slug ] ) ) { return false; } return $urls[ $plugin_slug ]; } /** * Get parent plugin slug. * * @return string */ private function get_parent_plugin_slug(): string { $plugin_path = plugin_basename( __FILE__ ); $chunks = explode( '/', $plugin_path ); return $chunks[0]; } }
Fatal error: Uncaught TypeError: Imagify\Admin\PluginFamilySubscriber::__construct(): Argument #1 ($plugin_family) must be of type Imagify\Dependencies\WPMedia\PluginFamily\Controller\PluginFamily, string given in /htdocs/wp-content/plugins/imagify/classes/Admin/PluginFamilySubscriber.php:26 Stack trace: #0 [internal function]: Imagify\Admin\PluginFamilySubscriber->__construct('Imagify\\Depende...') #1 /htdocs/wp-content/plugins/imagify/classes/Dependencies/League/Container/Definition/Definition.php(229): ReflectionClass->newInstanceArgs(Array) #2 /htdocs/wp-content/plugins/imagify/classes/Dependencies/League/Container/Definition/Definition.php(185): Imagify\Dependencies\League\Container\Definition\Definition->resolveClass('Imagify\\Admin\\P...') #3 /htdocs/wp-content/plugins/imagify/classes/Dependencies/League/Container/Definition/Definition.php(164): Imagify\Dependencies\League\Container\Definition\Definition->resolveNew() #4 /htdocs/wp-content/plugins/imagify/classes/Dependencies/League/Container/Definition/DefinitionAggregate.php(83): Imagify\Dependencies\League\Container\Definition\Definition->resolve() #5 /htdocs/wp-content/plugins/imagify/classes/Dependencies/League/Container/Container.php(175): Imagify\Dependencies\League\Container\Definition\DefinitionAggregate->resolve('Imagify\\Admin\\P...') #6 /htdocs/wp-content/plugins/imagify/classes/Dependencies/League/Container/Container.php(118): Imagify\Dependencies\League\Container\Container->resolve('Imagify\\Admin\\P...') #7 /htdocs/wp-content/plugins/imagify/classes/Plugin.php(249): Imagify\Dependencies\League\Container\Container->get('Imagify\\Admin\\P...') #8 /htdocs/wp-content/plugins/imagify/classes/Plugin.php(142): Imagify\Plugin->load_subscribers(Object(Imagify\Admin\ServiceProvider)) #9 /htdocs/wp-content/plugins/imagify/inc/main.php(33): Imagify\Plugin->init(Array) #10 /htdocs/wp-includes/class-wp-hook.php(324): imagify_init('') #11 /htdocs/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #12 /htdocs/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #13 /htdocs/wp-settings.php(578): do_action('plugins_loaded') #14 /htdocs/wp-config.php(99): require_once('/htdocs/wp-sett...') #15 /htdocs/wp-load.php(50): require_once('/htdocs/wp-conf...') #16 /htdocs/wp-blog-header.php(13): require_once('/htdocs/wp-load...') #17 /htdocs/index.php(17): require('/htdocs/wp-blog...') #18 {main} thrown in /htdocs/wp-content/plugins/imagify/classes/Admin/PluginFamilySubscriber.php on line 26