: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* @package WPSEO\Admin\Formatter
use Yoast\WP\SEO\Config\Schema_Types;
use Yoast\WP\SEO\Editors\Application\Analysis_Features\Enabled_Analysis_Features_Repository;
use Yoast\WP\SEO\Editors\Application\Integrations\Integration_Information_Repository;
* This class forces needed methods for the metabox localization.
class WPSEO_Metabox_Formatter {
* Object that provides formatted values.
* @var WPSEO_Metabox_Formatter_Interface
* Setting the formatter property.
* @param WPSEO_Metabox_Formatter_Interface $formatter Object that provides the formatted values.
public function __construct( WPSEO_Metabox_Formatter_Interface $formatter ) {
$this->formatter = $formatter;
* @return array<string,string|array<string|int|bool>|bool|int>
public function get_values() {
$defaults = $this->get_defaults();
$values = $this->formatter->get_values();
return ( $values + $defaults );
* Returns array with all the values always needed by a scraper object.
* @return array<string,string|array<string|int|bool>|bool|int> Default settings for the metabox.
private function get_defaults() {
$schema_types = new Schema_Types();
$host = YoastSEO()->helpers->url->get_url_host( get_site_url() );
'author_name' => get_the_author_meta( 'display_name' ),
'site_name' => YoastSEO()->meta->for_current_page()->site_name,
'sitewide_social_image' => WPSEO_Options::get( 'og_default_image' ),
'contentLocale' => get_locale(),
'userLocale' => get_user_locale(),
'translations' => $this->get_translations(),
'metadesc_template' => '',
'isPremium' => YoastSEO()->helpers->product->is_premium(),
'siteIconUrl' => get_site_icon_url(),
'facebook' => WPSEO_Options::get( 'opengraph', false ),
'twitter' => WPSEO_Options::get( 'twitter', false ),
'displayFooter' => WPSEO_Capability_Utils::current_user_can( 'wpseo_manage_options' ),
'pageTypeOptions' => $schema_types->get_page_type_options(),
'articleTypeOptions' => $schema_types->get_article_type_options(),
'twitterCardType' => 'summary_large_image',
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */
__( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-seo-analysis-collapsible-metabox">',
'<strong>' . __( 'Not available', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */
__( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-seo-analysis-collapsible-metabox">',
'<strong>' . __( 'Needs improvement', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */
__( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-seo-analysis-collapsible-metabox">',
'<strong>' . __( 'OK', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the SEO score. */
__( '%1$sSEO%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-seo-analysis-collapsible-metabox">',
'<strong>' . __( 'Good', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */
__( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-readability-analysis-collapsible-metabox">',
'<strong>' . __( 'Not available', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */
__( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-readability-analysis-collapsible-metabox">',
'<strong>' . __( 'Needs improvement', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */
__( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-readability-analysis-collapsible-metabox">',
'<strong>' . __( 'OK', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the readability score. */
__( '%1$sReadability%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-readability-analysis-collapsible-metabox">',
'<strong>' . __( 'Good', 'wordpress-seo' ) . '</strong>'
'inclusive-language' => [
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */
__( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-inclusive-language-analysis-collapsible-metabox">',
'<strong>' . __( 'Not available', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */
__( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-inclusive-language-analysis-collapsible-metabox">',
'<strong>' . __( 'Needs improvement', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */
__( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-inclusive-language-analysis-collapsible-metabox">',
'<strong>' . __( 'Potentially non-inclusive', 'wordpress-seo' ) . '</strong>'
/* translators: %1$s expands to the opening anchor tag, %2$s to the closing anchor tag, %3$s to the inclusive language score. */
__( '%1$sInclusive language%2$s: %3$s', 'wordpress-seo' ),
'<a href="#yoast-inclusive-language-analysis-collapsible-metabox">',
'<strong>' . __( 'Good', 'wordpress-seo' ) . '</strong>'
* Filter to determine if the markers should be enabled or not.
* @param bool $showMarkers Should the markers being enabled. Default = true.
'show_markers' => apply_filters( 'wpseo_enable_assessment_markers', true ),
'zapierIntegrationActive' => WPSEO_Options::get( 'zapier_integration_active', false ) ? 1 : 0,
'zapierConnectedStatus' => ! empty( WPSEO_Options::get( 'zapier_subscription', [] ) ) ? 1 : 0,
'getJetpackBoostPrePublishLink' => WPSEO_Shortlinker::get( 'https://yoa.st/jetpack-boost-get-prepublish?domain=' . $host ),
'upgradeJetpackBoostPrePublishLink' => WPSEO_Shortlinker::get( 'https://yoa.st/jetpack-boost-upgrade-prepublish?domain=' . $host ),
'woocommerceUpsellSchemaLink' => WPSEO_Shortlinker::get( 'https://yoa.st/product-schema-metabox' ),
'woocommerceUpsellGooglePreviewLink' => WPSEO_Shortlinker::get( 'https://yoa.st/product-google-preview-metabox' ),
$integration_information_repo = YoastSEO()->classes->get( Integration_Information_Repository::class );
$enabled_integrations = $integration_information_repo->get_integration_information();
$defaults = array_merge( $defaults, $enabled_integrations );
$enabled_features_repo = YoastSEO()->classes->get( Enabled_Analysis_Features_Repository::class );
$enabled_features = $enabled_features_repo->get_enabled_features()->parse_to_legacy_array();
return array_merge( $defaults, $enabled_features );
* Returns Jed compatible YoastSEO.js translations.
private function get_translations() {
$locale = get_user_locale();
$file = WPSEO_PATH . 'languages/wordpress-seo-' . $locale . '.json';
if ( file_exists( $file ) ) {
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Retrieving a local file.
$file = file_get_contents( $file );
if ( is_string( $file ) && $file !== '' ) {
return json_decode( $file, true );