should_run() ) { return; } /* * Run the request to fetch the indexability status. Set last fetch time. * Update the Ryte option status. Will run a new request only if the last * one is not within the `WPSEO_Ryte_Option::FETCH_LIMIT` time interval. */ $wpseo_ryte = new WPSEO_Ryte(); $wpseo_ryte->fetch_from_ryte(); // Get the Ryte API response to properly handle errors. $response = $wpseo_ryte->get_response(); if ( is_array( $response ) && isset( $response['is_error'] ) ) { $this->response_error( $response ); return; } // The request was successful: get the updated Ryte option. $ryte_option = $this->get_ryte_option(); switch ( $ryte_option->get_status() ) { case WPSEO_Ryte_Option::IS_NOT_INDEXABLE: $this->is_not_indexable_response(); break; case WPSEO_Ryte_Option::IS_INDEXABLE: $this->is_indexable_response(); break; case WPSEO_Ryte_Option::NOT_FETCHED: default: // WPSEO_Ryte_Option::CANNOT_FETCH. $this->unknown_indexability_response(); break; } } /** * Checks whether the Ryte Site Health check should run. * * Checks for the WordPress environment type, checks if Ryte integration is * enabled, the blog is public, and the Yoast SEO environment is not development mode. * * @return bool Whether the Ryte Site Health check should run. */ protected function should_run() { if ( wp_get_environment_type() !== 'production' ) { return false; } $ryte_option = $this->get_ryte_option(); if ( ! $ryte_option->is_enabled() ) { return false; } if ( get_option( 'blog_public' ) === '0' ) { return false; } return ! $this->is_development_mode(); } /** * Checks if debug mode is on but Yoast development mode is not on (i.e. for non-Yoast developers). * * @return bool True when debug mode is on and Yoast development mode is not on. */ protected function is_development_mode() { return wp_debug_mode() && ! WPSEO_Utils::is_development_mode(); } /** * Returns a new instance of WPSEO_Ryte_Option. * * @return WPSEO_Ryte_Option New Ryte Option. */ protected function get_ryte_option() { return new WPSEO_Ryte_Option(); } /** * Adds the content for a failed Ryte API request. * * @param array $response The error details. * * @return void */ protected function response_error( $response ) { $this->label = esc_html__( 'An error occurred while checking whether your site can be found by search engines', 'wordpress-seo' ); $this->status = self::STATUS_RECOMMENDED; $this->badge['color'] = 'red'; $this->description = sprintf( '%s

%s', sprintf( /* translators: %1$s: Expands to 'Ryte', %2$s: Expands to 'Yoast SEO'. */ esc_html__( '%1$s offers a free indexability check for %2$s users. The request to %1$s to check whether your site can be found by search engines failed due to an error.', 'wordpress-seo' ), 'Ryte', 'Yoast SEO' ), sprintf( /* translators: 1: The Ryte response raw error code, if any. 2: The error message. 3: The WordPress error code, if any. */ __( 'Error details: %1$s %2$s %3$s', 'wordpress-seo' ), $response['raw_error_code'], $response['message'], $response['wp_error_code'] ) ); $this->actions = sprintf( /* translators: %1$s: Opening tag of the link to the Yoast knowledge base, %2$s: Link closing tag. */ esc_html__( 'If this is a live site, %1$sit is recommended that you figure out why the check failed.%2$s', 'wordpress-seo' ), '', WPSEO_Admin_Utils::get_new_tab_message() . '' ); $this->actions .= '

'; $this->add_ryte_link(); } /** * Adds the content for the "Cannot be indexed" response. * * @return void */ protected function is_not_indexable_response() { $this->label = esc_html__( 'Your site cannot be found by search engines', 'wordpress-seo' ); $this->status = self::STATUS_CRITICAL; $this->badge['color'] = 'red'; $this->description = sprintf( /* translators: %1$s: Expands to 'Ryte', %2$s: Expands to 'Yoast SEO'. */ esc_html__( '%1$s offers a free indexability check for %2$s users and it has determined that your site cannot be found by search engines. If this site is live or about to become live, this should be fixed.', 'wordpress-seo' ), 'Ryte', 'Yoast SEO' ); $this->actions = sprintf( /* translators: %1$s: Opening tag of the link to the Yoast knowledge base, %2$s: Link closing tag. */ esc_html__( '%1$sRead more about troubleshooting search engine visibility.%2$s', 'wordpress-seo' ), '', WPSEO_Admin_Utils::get_new_tab_message() . '' ); $this->actions .= '

'; $this->add_ryte_link(); } /** * Adds the content for the "Cannot tell if it can be indexed" response. * * @return void */ protected function unknown_indexability_response() { $this->label = sprintf( /* translators: %1$s: Expands to 'Ryte'. */ esc_html__( '%1$s cannot determine whether your site can be found by search engines', 'wordpress-seo' ), 'Ryte' ); $this->status = self::STATUS_RECOMMENDED; $this->badge['color'] = 'red'; /* translators: %1$s: Expands to 'Ryte', %2$s: Expands to 'Yoast SEO'. */ $description = esc_html__( '%1$s offers a free indexability check for %2$s users and right now it has trouble determining whether search engines can find your site. This could have several (legitimate) reasons and is not a problem in itself. If this is a live site, it is recommended that you figure out why the %1$s check failed.', 'wordpress-seo' ); $this->description = sprintf( $description, 'Ryte', 'Yoast SEO' ); $this->description .= '
'; /* translators: %1$s: Expands to 'Ryte', %2$s: Link start tag to the Yoast knowledge base, %3$s: Link closing tag. */ $alert_text = esc_html__( 'As the indexability status of your website can only be fetched from %1$s every 15 seconds, a first step could be to wait at least 15 seconds and refresh the Site Health page. If that did not help, %2$sread more about troubleshooting search engine visibility%3$s.', 'wordpress-seo' ); $alert_content = sprintf( $alert_text, 'Ryte', '', WPSEO_Admin_Utils::get_new_tab_message() . '' ); $alert = new Alert_Presenter( $alert_content, 'info' ); $this->description .= $alert->present(); $this->add_ryte_link(); } /** * Adds the content for the "Can be indexed" response. * * @return void */ protected function is_indexable_response() { $this->label = esc_html__( 'Your site can be found by search engines', 'wordpress-seo' ); $this->status = self::STATUS_GOOD; $this->badge['color'] = 'blue'; /* translators: %1$s: Expands to 'Ryte', %2$s: Expands to 'Yoast SEO'. */ $description = esc_html__( '%1$s offers a free indexability check for %2$s users, and it shows that your site can be found by search engines.', 'wordpress-seo' ); $this->description = sprintf( $description, 'Ryte', 'Yoast SEO' ); } /** * Adds the link to the Ryte site to the actions. * * @return void */ protected function add_ryte_link() { $this->actions .= sprintf( /* translators: %1$s: Opening tag of the link to the Yoast Ryte website, %2$s: Expands to 'Ryte', %3$s: Link closing tag. */ esc_html__( '%1$sGo to %2$s to analyze your entire site%3$s', 'wordpress-seo' ), '', 'Ryte', WPSEO_Admin_Utils::get_new_tab_message() . '' ); } }