Yoast SEO - Version 12.3

Version Description

Download this release

Release Info

Developer Yoast
Plugin Icon 128x128 Yoast SEO
Version 12.3
Comparing to
See all releases

Code changes from version 12.2 to 12.3

Files changed (57) hide show
  1. admin/admin-settings-changed-listener.php +85 -0
  2. admin/class-admin-asset-manager.php +4 -0
  3. admin/class-admin-init.php +11 -51
  4. admin/class-admin.php +1 -0
  5. admin/class-gutenberg-compatibility.php +2 -2
  6. admin/class-plugin-compatibility.php +27 -0
  7. admin/class-yoast-form.php +13 -0
  8. admin/class-yoast-input-validation.php +37 -2
  9. admin/import/plugins/class-import-rankmath.php +174 -0
  10. admin/import/plugins/class-importers.php +1 -0
  11. admin/tracking/class-tracking-plugin-data.php +0 -5
  12. admin/tracking/class-tracking-settings-data.php +129 -1
  13. admin/views/form/select.php +1 -0
  14. admin/views/sidebar.php +30 -7
  15. css/dist/{admin-global-1220-rtl.min.css → admin-global-1230-rtl.min.css} +1 -1
  16. css/dist/{admin-global-1220.min.css → admin-global-1230.min.css} +1 -1
  17. css/dist/{adminbar-1220-rtl.min.css → adminbar-1230-rtl.min.css} +0 -0
  18. css/dist/{adminbar-1220.min.css → adminbar-1230.min.css} +0 -0
  19. css/dist/{alerts-1220-rtl.min.css → alerts-1230-rtl.min.css} +0 -0
  20. css/dist/{alerts-1220.min.css → alerts-1230.min.css} +0 -0
  21. css/dist/{dashboard-1220-rtl.min.css → dashboard-1230-rtl.min.css} +0 -0
  22. css/dist/{dashboard-1220.min.css → dashboard-1230.min.css} +0 -0
  23. css/dist/{edit-page-1220-rtl.min.css → edit-page-1230-rtl.min.css} +0 -0
  24. css/dist/{edit-page-1220.min.css → edit-page-1230.min.css} +0 -0
  25. css/dist/{featured-image-1220-rtl.min.css → featured-image-1230-rtl.min.css} +0 -0
  26. css/dist/{featured-image-1220.min.css → featured-image-1230.min.css} +0 -0
  27. css/dist/{filter-explanation-1220-rtl.min.css → filter-explanation-1230-rtl.min.css} +0 -0
  28. css/dist/{filter-explanation-1220.min.css → filter-explanation-1230.min.css} +0 -0
  29. css/dist/{inside-editor-1220-rtl.min.css → inside-editor-1230-rtl.min.css} +0 -0
  30. css/dist/{inside-editor-1220.min.css → inside-editor-1230.min.css} +0 -0
  31. css/dist/{metabox-1220-rtl.min.css → metabox-1230-rtl.min.css} +0 -0
  32. css/dist/{metabox-1220.min.css → metabox-1230.min.css} +0 -0
  33. css/dist/{metabox-primary-category-1220-rtl.min.css → metabox-primary-category-1230-rtl.min.css} +0 -0
  34. css/dist/{metabox-primary-category-1220.min.css → metabox-primary-category-1230.min.css} +0 -0
  35. css/dist/{search-appearance-1220-rtl.min.css → search-appearance-1230-rtl.min.css} +0 -0
  36. css/dist/{search-appearance-1220.min.css → search-appearance-1230.min.css} +0 -0
  37. css/dist/{structured-data-blocks-1220-rtl.min.css → structured-data-blocks-1230-rtl.min.css} +0 -0
  38. css/dist/{structured-data-blocks-1220.min.css → structured-data-blocks-1230.min.css} +0 -0
  39. css/dist/{toggle-switch-1220-rtl.min.css → toggle-switch-1230-rtl.min.css} +0 -0
  40. css/dist/{toggle-switch-1220.min.css → toggle-switch-1230.min.css} +0 -0
  41. css/dist/{wpseo-dismissible-1220-rtl.min.css → wpseo-dismissible-1230-rtl.min.css} +0 -0
  42. css/dist/{wpseo-dismissible-1220.min.css → wpseo-dismissible-1230.min.css} +0 -0
  43. css/dist/{yoast-components-1220-rtl.min.css → yoast-components-1230-rtl.min.css} +0 -0
  44. css/dist/{yoast-components-1220.min.css → yoast-components-1230.min.css} +0 -0
  45. css/dist/{yoast-extensions-1220-rtl.min.css → yoast-extensions-1230-rtl.min.css} +0 -0
  46. css/dist/{yoast-extensions-1220.min.css → yoast-extensions-1230.min.css} +0 -0
  47. css/dist/{yst_plugin_tools-1220-rtl.min.css → yst_plugin_tools-1230-rtl.min.css} +0 -0
  48. css/dist/{yst_plugin_tools-1220.min.css → yst_plugin_tools-1230.min.css} +0 -0
  49. css/dist/{yst_seo_score-1220-rtl.min.css → yst_seo_score-1230-rtl.min.css} +0 -0
  50. css/dist/{yst_seo_score-1220.min.css → yst_seo_score-1230.min.css} +0 -0
  51. {admin/metabox → deprecated/admin}/class-metabox-tab-section.php +43 -0
  52. frontend/schema/class-schema-utils.php +4 -1
  53. inc/class-upgrade.php +24 -0
  54. inc/health-check.php +184 -0
  55. inc/options/class-wpseo-option.php +3 -1
  56. inc/sitemaps/class-sitemaps.php +35 -13
  57. js/dist/analysis-1220.min.js +0 -21
admin/admin-settings-changed-listener.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Admin
6
+ */
7
+
8
+ /**
9
+ * A Wordpress integration that listens for whether the SEO changes have been saved successfully.
10
+ */
11
+ class WPSEO_Admin_Settings_Changed_Listener implements WPSEO_WordPress_Integration {
12
+
13
+ /**
14
+ * Have the Yoast SEO settings been saved.
15
+ *
16
+ * @var bool
17
+ */
18
+ private static $settings_saved = false;
19
+
20
+ /**
21
+ * Registers all hooks to WordPress.
22
+ *
23
+ * @return void
24
+ */
25
+ public function register_hooks() {
26
+ add_action( 'admin_init', array( $this, 'intercept_save_update_notification' ) );
27
+ }
28
+
29
+ /**
30
+ * Checks and overwrites the wp_settings_errors global to determine whether the Yoast SEO settings have been saved.
31
+ */
32
+ public function intercept_save_update_notification() {
33
+ global $pagenow;
34
+
35
+ if ( $pagenow !== 'admin.php' || ! WPSEO_Utils::is_yoast_seo_page() ) {
36
+ return;
37
+ }
38
+
39
+ // Variable name is the same as the global that is set by get_settings_errors.
40
+ $wp_settings_errors = get_settings_errors();
41
+
42
+ foreach ( $wp_settings_errors as $key => $wp_settings_error ) {
43
+ if ( ! $this->is_settings_updated_notification( $wp_settings_error ) ) {
44
+ continue;
45
+ }
46
+
47
+ self::$settings_saved = true;
48
+ unset( $wp_settings_errors[ $key ] );
49
+ // Overwrite the global with the list excluding the Changed saved message.
50
+ $GLOBALS['wp_settings_errors'] = $wp_settings_errors;
51
+ break;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Checks whether the settings notification is a settings_updated notification.
57
+ *
58
+ * @param array $wp_settings_error The settings object.
59
+ *
60
+ * @return bool Whether this is a settings updated settings notification.
61
+ */
62
+ public function is_settings_updated_notification( $wp_settings_error ) {
63
+ return ! empty( $wp_settings_error['code'] ) && $wp_settings_error['code'] === 'settings_updated';
64
+ }
65
+
66
+ /**
67
+ * Get whether the settings have successfully been saved
68
+ *
69
+ * @return bool Whether the settings have successfully been saved.
70
+ */
71
+ public function have_settings_been_saved() {
72
+ return self::$settings_saved;
73
+ }
74
+
75
+ /**
76
+ * Renders a success message if the Yoast SEO settings have been saved.
77
+ */
78
+ public function show_success_message() {
79
+ if ( $this->have_settings_been_saved() ) {
80
+ echo '<p class="wpseo-message"><span class="dashicons dashicons-yes"></span>',
81
+ esc_html__( 'Settings saved.', 'wordpress-seo' ),
82
+ '</p>';
83
+ }
84
+ }
85
+ }
admin/class-admin-asset-manager.php CHANGED
@@ -372,6 +372,7 @@ class WPSEO_Admin_Asset_Manager {
372
  'name' => 'admin-script',
373
  'src' => 'wp-seo-admin-' . $flat_version,
374
  'deps' => array(
 
375
  'jquery',
376
  'jquery-ui-core',
377
  'jquery-ui-progressbar',
@@ -706,6 +707,9 @@ class WPSEO_Admin_Asset_Manager {
706
  array(
707
  'name' => 'adminbar',
708
  'src' => 'adminbar-' . $flat_version,
 
 
 
709
  ),
710
  array(
711
  'name' => 'primary-category',
372
  'name' => 'admin-script',
373
  'src' => 'wp-seo-admin-' . $flat_version,
374
  'deps' => array(
375
+ 'lodash',
376
  'jquery',
377
  'jquery-ui-core',
378
  'jquery-ui-progressbar',
707
  array(
708
  'name' => 'adminbar',
709
  'src' => 'adminbar-' . $flat_version,
710
+ 'deps' => array(
711
+ 'admin-bar',
712
+ ),
713
  ),
714
  array(
715
  'name' => 'primary-category',
admin/class-admin-init.php CHANGED
@@ -40,7 +40,6 @@ class WPSEO_Admin_Init {
40
  add_action( 'admin_init', array( $this, 'permalink_notice' ), 15 );
41
  add_action( 'admin_init', array( $this, 'page_comments_notice' ), 15 );
42
  add_action( 'admin_init', array( $this, 'ga_compatibility_notice' ), 15 );
43
- add_action( 'admin_init', array( $this, 'yoast_plugin_compatibility_notification' ), 15 );
44
  add_action( 'admin_init', array( $this, 'yoast_plugin_suggestions_notification' ), 15 );
45
  add_action( 'admin_init', array( $this, 'recalculate_notice' ), 15 );
46
  add_action( 'admin_init', array( $this, 'unsupported_php_notice' ), 15 );
@@ -340,56 +339,6 @@ class WPSEO_Admin_Init {
340
  );
341
  }
342
 
343
- /**
344
- * Add an alert if outdated versions of Yoast SEO plugins are running.
345
- */
346
- public function yoast_plugin_compatibility_notification() {
347
- $compatibility_checker = new WPSEO_Plugin_Compatibility( WPSEO_VERSION );
348
- $plugins = $compatibility_checker->get_installed_plugins_compatibility();
349
-
350
- $notification_center = Yoast_Notification_Center::get();
351
-
352
- foreach ( $plugins as $name => $plugin ) {
353
- $type = ( $plugin['active'] ) ? Yoast_Notification::ERROR : Yoast_Notification::WARNING;
354
- $notification = $this->get_yoast_seo_compatibility_notification( $name, $plugin, $type );
355
-
356
- if ( $plugin['active'] && $plugin['compatible'] === false ) {
357
- $notification_center->add_notification( $notification );
358
-
359
- continue;
360
- }
361
-
362
- $notification_center->remove_notification( $notification );
363
- }
364
- }
365
-
366
- /**
367
- * Build Yoast SEO compatibility problem notification.
368
- *
369
- * @param string $name The plugin name to use for the unique ID.
370
- * @param array $plugin The plugin to retrieve the data from.
371
- * @param string $level The severity level to use for the notification.
372
- *
373
- * @return Yoast_Notification
374
- */
375
- private function get_yoast_seo_compatibility_notification( $name, $plugin, $level = Yoast_Notification::WARNING ) {
376
- $info_message = sprintf(
377
- /* translators: %1$s expands to Yoast SEO, %2$s expands to the plugin version, %3$s expands to the plugin name */
378
- __( '%1$s detected you are using version %2$s of %3$s, please update to the latest version to prevent compatibility issues.', 'wordpress-seo' ),
379
- 'Yoast SEO',
380
- $plugin['version'],
381
- $plugin['title']
382
- );
383
-
384
- return new Yoast_Notification(
385
- $info_message,
386
- array(
387
- 'id' => 'wpseo-outdated-yoast-seo-plugin-' . $name,
388
- 'type' => $level,
389
- )
390
- );
391
- }
392
-
393
  /**
394
  * Shows the notice for recalculating the post. the Notice will only be shown if the user hasn't dismissed it before.
395
  */
@@ -735,4 +684,15 @@ class WPSEO_Admin_Init {
735
  );
736
  }
737
  }
 
 
 
 
 
 
 
 
 
 
 
738
  }
40
  add_action( 'admin_init', array( $this, 'permalink_notice' ), 15 );
41
  add_action( 'admin_init', array( $this, 'page_comments_notice' ), 15 );
42
  add_action( 'admin_init', array( $this, 'ga_compatibility_notice' ), 15 );
 
43
  add_action( 'admin_init', array( $this, 'yoast_plugin_suggestions_notification' ), 15 );
44
  add_action( 'admin_init', array( $this, 'recalculate_notice' ), 15 );
45
  add_action( 'admin_init', array( $this, 'unsupported_php_notice' ), 15 );
339
  );
340
  }
341
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
342
  /**
343
  * Shows the notice for recalculating the post. the Notice will only be shown if the user hasn't dismissed it before.
344
  */
684
  );
685
  }
686
  }
687
+
688
+ /* ********************* DEPRECATED METHODS ********************* */
689
+ /**
690
+ * Add an alert if outdated versions of Yoast SEO plugins are running.
691
+ *
692
+ * @deprecated 12.3
693
+ * @codeCoverageIgnore
694
+ */
695
+ public function yoast_plugin_compatibility_notification() {
696
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
697
+ }
698
  }
admin/class-admin.php CHANGED
@@ -112,6 +112,7 @@ class WPSEO_Admin {
112
  $integrations[] = new WPSEO_MyYoast_Route();
113
  $integrations[] = new WPSEO_Schema_Person_Upgrade_Notification();
114
  $integrations[] = new WPSEO_Tracking( 'https://tracking.yoast.com/stats', ( WEEK_IN_SECONDS * 2 ) );
 
115
 
116
  $integrations = array_merge(
117
  $integrations,
112
  $integrations[] = new WPSEO_MyYoast_Route();
113
  $integrations[] = new WPSEO_Schema_Person_Upgrade_Notification();
114
  $integrations[] = new WPSEO_Tracking( 'https://tracking.yoast.com/stats', ( WEEK_IN_SECONDS * 2 ) );
115
+ $integrations[] = new WPSEO_Admin_Settings_Changed_Listener();
116
 
117
  $integrations = array_merge(
118
  $integrations,
admin/class-gutenberg-compatibility.php CHANGED
@@ -15,14 +15,14 @@ class WPSEO_Gutenberg_Compatibility {
15
  *
16
  * @var string
17
  */
18
- const CURRENT_RELEASE = '6.5.0';
19
 
20
  /**
21
  * The minimally supported version of Gutenberg by the plugin.
22
  *
23
  * @var string
24
  */
25
- const MINIMUM_SUPPORTED = '6.5.0';
26
 
27
  /**
28
  * Holds the current version.
15
  *
16
  * @var string
17
  */
18
+ const CURRENT_RELEASE = '6.6.0';
19
 
20
  /**
21
  * The minimally supported version of Gutenberg by the plugin.
22
  *
23
  * @var string
24
  */
25
+ const MINIMUM_SUPPORTED = '6.6.0';
26
 
27
  /**
28
  * Holds the current version.
admin/class-plugin-compatibility.php CHANGED
@@ -7,6 +7,9 @@
7
 
8
  /**
9
  * Class WPSEO_Plugin_Compatibility.
 
 
 
10
  */
11
  class WPSEO_Plugin_Compatibility {
12
 
@@ -34,10 +37,14 @@ class WPSEO_Plugin_Compatibility {
34
  /**
35
  * WPSEO_Plugin_Compatibility constructor.
36
  *
 
 
37
  * @param string $version The version to check against.
38
  * @param null|class $availability_checker The checker to use.
39
  */
40
  public function __construct( $version, $availability_checker = null ) {
 
 
41
  // We trim off the patch version, as this shouldn't break the comparison.
42
  $this->current_wpseo_version = $this->get_major_minor_version( $version );
43
  $this->availability_checker = $this->retrieve_availability_checker( $availability_checker );
@@ -47,11 +54,15 @@ class WPSEO_Plugin_Compatibility {
47
  /**
48
  * Retrieves the availability checker.
49
  *
 
 
50
  * @param null|object $checker The checker to set.
51
  *
52
  * @return WPSEO_Plugin_Availability The checker to use.
53
  */
54
  private function retrieve_availability_checker( $checker ) {
 
 
55
  if ( is_null( $checker ) || ! is_object( $checker ) ) {
56
  $checker = new WPSEO_Plugin_Availability();
57
  $checker->register();
@@ -63,18 +74,26 @@ class WPSEO_Plugin_Compatibility {
63
  /**
64
  * Wraps the availability checker's get_installed_plugins method.
65
  *
 
 
66
  * @return array Array containing all the installed plugins.
67
  */
68
  public function get_installed_plugins() {
 
 
69
  return $this->installed_plugins;
70
  }
71
 
72
  /**
73
  * Creates a list of installed plugins and whether or not they are compatible.
74
  *
 
 
75
  * @return array Array containing the installed plugins and compatibility.
76
  */
77
  public function get_installed_plugins_compatibility() {
 
 
78
  foreach ( $this->installed_plugins as $key => $plugin ) {
79
 
80
  $this->installed_plugins[ $key ]['compatible'] = $this->is_compatible( $key );
@@ -86,11 +105,15 @@ class WPSEO_Plugin_Compatibility {
86
  /**
87
  * Checks whether or not a plugin is compatible.
88
  *
 
 
89
  * @param string $plugin The plugin to look for and match.
90
  *
91
  * @return bool Whether or not the plugin is compatible.
92
  */
93
  public function is_compatible( $plugin ) {
 
 
94
  $plugin = $this->availability_checker->get_plugin( $plugin );
95
 
96
  // If we are not syncing versions, we are always compatible.
@@ -105,11 +128,15 @@ class WPSEO_Plugin_Compatibility {
105
  /**
106
  * Gets the major/minor version of the plugin for easier comparing.
107
  *
 
 
108
  * @param string $version The version to trim.
109
  *
110
  * @return string The major/minor version of the plugin.
111
  */
112
  protected function get_major_minor_version( $version ) {
 
 
113
  return substr( $version, 0, 3 );
114
  }
115
  }
7
 
8
  /**
9
  * Class WPSEO_Plugin_Compatibility.
10
+ *
11
+ * @codeCoverageIgnore
12
+ * @deprecated 12.3
13
  */
14
  class WPSEO_Plugin_Compatibility {
15
 
37
  /**
38
  * WPSEO_Plugin_Compatibility constructor.
39
  *
40
+ * @deprecated 12.3
41
+ *
42
  * @param string $version The version to check against.
43
  * @param null|class $availability_checker The checker to use.
44
  */
45
  public function __construct( $version, $availability_checker = null ) {
46
+ _deprecated_function( __METHOD__, '12.3' );
47
+
48
  // We trim off the patch version, as this shouldn't break the comparison.
49
  $this->current_wpseo_version = $this->get_major_minor_version( $version );
50
  $this->availability_checker = $this->retrieve_availability_checker( $availability_checker );
54
  /**
55
  * Retrieves the availability checker.
56
  *
57
+ * @deprecated 12.3
58
+ *
59
  * @param null|object $checker The checker to set.
60
  *
61
  * @return WPSEO_Plugin_Availability The checker to use.
62
  */
63
  private function retrieve_availability_checker( $checker ) {
64
+ _deprecated_function( __METHOD__, '12.3' );
65
+
66
  if ( is_null( $checker ) || ! is_object( $checker ) ) {
67
  $checker = new WPSEO_Plugin_Availability();
68
  $checker->register();
74
  /**
75
  * Wraps the availability checker's get_installed_plugins method.
76
  *
77
+ * @deprecated 12.3
78
+ *
79
  * @return array Array containing all the installed plugins.
80
  */
81
  public function get_installed_plugins() {
82
+ _deprecated_function( __METHOD__, '12.3' );
83
+
84
  return $this->installed_plugins;
85
  }
86
 
87
  /**
88
  * Creates a list of installed plugins and whether or not they are compatible.
89
  *
90
+ * @deprecated 12.3
91
+ *
92
  * @return array Array containing the installed plugins and compatibility.
93
  */
94
  public function get_installed_plugins_compatibility() {
95
+ _deprecated_function( __METHOD__, '12.3' );
96
+
97
  foreach ( $this->installed_plugins as $key => $plugin ) {
98
 
99
  $this->installed_plugins[ $key ]['compatible'] = $this->is_compatible( $key );
105
  /**
106
  * Checks whether or not a plugin is compatible.
107
  *
108
+ * @deprecated 12.3
109
+ *
110
  * @param string $plugin The plugin to look for and match.
111
  *
112
  * @return bool Whether or not the plugin is compatible.
113
  */
114
  public function is_compatible( $plugin ) {
115
+ _deprecated_function( __METHOD__, '12.3' );
116
+
117
  $plugin = $this->availability_checker->get_plugin( $plugin );
118
 
119
  // If we are not syncing versions, we are always compatible.
128
  /**
129
  * Gets the major/minor version of the plugin for easier comparing.
130
  *
131
+ * @deprecated 12.3
132
+ *
133
  * @param string $version The version to trim.
134
  *
135
  * @return string The major/minor version of the plugin.
136
  */
137
  protected function get_major_minor_version( $version ) {
138
+ _deprecated_function( __METHOD__, '12.3' );
139
+
140
  return substr( $version, 0, 3 );
141
  }
142
  }
admin/class-yoast-form.php CHANGED
@@ -153,7 +153,20 @@ class Yoast_Form {
153
  */
154
  public function admin_footer( $submit = true, $show_sidebar = true ) {
155
  if ( $submit ) {
 
 
 
 
 
 
 
 
 
156
  submit_button( __( 'Save changes', 'wordpress-seo' ) );
 
 
 
 
157
 
158
  echo '
159
  </form>';
153
  */
154
  public function admin_footer( $submit = true, $show_sidebar = true ) {
155
  if ( $submit ) {
156
+ $settings_changed_listener = new WPSEO_Admin_Settings_Changed_Listener();
157
+ echo '<div id="wpseo-submit-container">';
158
+
159
+ echo '<div id="wpseo-submit-container-float" class="wpseo-admin-submit">';
160
+ submit_button( __( 'Save changes', 'wordpress-seo' ) );
161
+ $settings_changed_listener->show_success_message();
162
+ echo '</div>';
163
+
164
+ echo '<div id="wpseo-submit-container-fixed" class="wpseo-admin-submit wpseo-admin-submit-fixed" style="display: none;">';
165
  submit_button( __( 'Save changes', 'wordpress-seo' ) );
166
+ $settings_changed_listener->show_success_message();
167
+ echo '</div>';
168
+
169
+ echo '</div>';
170
 
171
  echo '
172
  </form>';
admin/class-yoast-input-validation.php CHANGED
@@ -40,8 +40,8 @@ class Yoast_Input_Validation {
40
  * @return string $admin_title The modified or original admin title.
41
  */
42
  public static function add_yoast_admin_document_title_errors( $admin_title ) {
43
- $errors = get_settings_errors();
44
- $error_count = 0;
45
 
46
  foreach ( $errors as $error ) {
47
  // For now, filter the admin title only in the Yoast SEO settings pages.
@@ -106,6 +106,11 @@ class Yoast_Input_Validation {
106
  esc_html__( 'Baidu verification codes can only contain letters, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
107
  self::get_dirty_value_message( 'baiduverify' )
108
  ),
 
 
 
 
 
109
  'fbadminapp' => sprintf(
110
  /* translators: %s: additional message with the submitted invalid value */
111
  esc_html__( 'The Facebook App ID you entered doesn\'t exist. %s', 'wordpress-seo' ),
@@ -116,11 +121,31 @@ class Yoast_Input_Validation {
116
  esc_html__( 'Google verification codes can only contain letters, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
117
  self::get_dirty_value_message( 'googleverify' )
118
  ),
 
 
 
 
 
 
 
 
 
 
119
  'msverify' => sprintf(
120
  /* translators: %s: additional message with the submitted invalid value */
121
  esc_html__( 'Bing confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
122
  self::get_dirty_value_message( 'msverify' )
123
  ),
 
 
 
 
 
 
 
 
 
 
124
  'pinterestverify' => sprintf(
125
  /* translators: %s: additional message with the submitted invalid value */
126
  esc_html__( 'Pinterest confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
@@ -131,11 +156,21 @@ class Yoast_Input_Validation {
131
  esc_html__( 'Twitter usernames can only contain letters, numbers, and underscores. %s', 'wordpress-seo' ),
132
  self::get_dirty_value_message( 'twitter_site' )
133
  ),
 
 
 
 
 
134
  'yandexverify' => sprintf(
135
  /* translators: %s: additional message with the submitted invalid value */
136
  esc_html__( 'Yandex confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
137
  self::get_dirty_value_message( 'yandexverify' )
138
  ),
 
 
 
 
 
139
  );
140
 
141
  $descriptions = wp_parse_args( $descriptions, $defaults );
40
  * @return string $admin_title The modified or original admin title.
41
  */
42
  public static function add_yoast_admin_document_title_errors( $admin_title ) {
43
+ $errors = get_settings_errors();
44
+ $error_count = 0;
45
 
46
  foreach ( $errors as $error ) {
47
  // For now, filter the admin title only in the Yoast SEO settings pages.
106
  esc_html__( 'Baidu verification codes can only contain letters, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
107
  self::get_dirty_value_message( 'baiduverify' )
108
  ),
109
+ 'facebook_site' => sprintf(
110
+ /* translators: %s: additional message with the submitted invalid value */
111
+ esc_html__( 'Please check the format of the Facebook Page URL you entered. %s', 'wordpress-seo' ),
112
+ self::get_dirty_value_message( 'facebook_site' )
113
+ ),
114
  'fbadminapp' => sprintf(
115
  /* translators: %s: additional message with the submitted invalid value */
116
  esc_html__( 'The Facebook App ID you entered doesn\'t exist. %s', 'wordpress-seo' ),
121
  esc_html__( 'Google verification codes can only contain letters, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
122
  self::get_dirty_value_message( 'googleverify' )
123
  ),
124
+ 'instagram_url' => sprintf(
125
+ /* translators: %s: additional message with the submitted invalid value */
126
+ esc_html__( 'Please check the format of the Instagram URL you entered. %s', 'wordpress-seo' ),
127
+ self::get_dirty_value_message( 'instagram_url' )
128
+ ),
129
+ 'linkedin_url' => sprintf(
130
+ /* translators: %s: additional message with the submitted invalid value */
131
+ esc_html__( 'Please check the format of the Linkedin URL you entered. %s', 'wordpress-seo' ),
132
+ self::get_dirty_value_message( 'linkedin_url' )
133
+ ),
134
  'msverify' => sprintf(
135
  /* translators: %s: additional message with the submitted invalid value */
136
  esc_html__( 'Bing confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
137
  self::get_dirty_value_message( 'msverify' )
138
  ),
139
+ 'myspace_url' => sprintf(
140
+ /* translators: %s: additional message with the submitted invalid value */
141
+ esc_html__( 'Please check the format of the MySpace URL you entered. %s', 'wordpress-seo' ),
142
+ self::get_dirty_value_message( 'myspace_url' )
143
+ ),
144
+ 'pinterest_url' => sprintf(
145
+ /* translators: %s: additional message with the submitted invalid value */
146
+ esc_html__( 'Please check the format of the Pinterest URL you entered. %s', 'wordpress-seo' ),
147
+ self::get_dirty_value_message( 'pinterest_url' )
148
+ ),
149
  'pinterestverify' => sprintf(
150
  /* translators: %s: additional message with the submitted invalid value */
151
  esc_html__( 'Pinterest confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
156
  esc_html__( 'Twitter usernames can only contain letters, numbers, and underscores. %s', 'wordpress-seo' ),
157
  self::get_dirty_value_message( 'twitter_site' )
158
  ),
159
+ 'wikipedia_url' => sprintf(
160
+ /* translators: %s: additional message with the submitted invalid value */
161
+ esc_html__( 'Please check the format of the Wikipedia URL you entered. %s', 'wordpress-seo' ),
162
+ self::get_dirty_value_message( 'wikipedia_url' )
163
+ ),
164
  'yandexverify' => sprintf(
165
  /* translators: %s: additional message with the submitted invalid value */
166
  esc_html__( 'Yandex confirmation codes can only contain letters from A to F, numbers, hyphens, and underscores. %s', 'wordpress-seo' ),
167
  self::get_dirty_value_message( 'yandexverify' )
168
  ),
169
+ 'youtube_url' => sprintf(
170
+ /* translators: %s: additional message with the submitted invalid value */
171
+ esc_html__( 'Please check the format of the Youtube URL you entered. %s', 'wordpress-seo' ),
172
+ self::get_dirty_value_message( 'youtube_url' )
173
+ ),
174
  );
175
 
176
  $descriptions = wp_parse_args( $descriptions, $defaults );
admin/import/plugins/class-import-rankmath.php ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * File with the class to handle data from RankMath.
4
+ *
5
+ * @package WPSEO\Admin\Import\Plugins
6
+ */
7
+
8
+ /**
9
+ * Class with functionality to import RankMath post metadata.
10
+ */
11
+ class WPSEO_Import_RankMath extends WPSEO_Plugin_Importer {
12
+
13
+ /**
14
+ * The plugin name.
15
+ *
16
+ * @var string
17
+ */
18
+ protected $plugin_name = 'RankMath';
19
+
20
+ /**
21
+ * Meta key, used in SQL LIKE clause for delete query.
22
+ *
23
+ * @var string
24
+ */
25
+ protected $meta_key = 'rank_math_%';
26
+
27
+ /**
28
+ * Array of meta keys to detect and import.
29
+ *
30
+ * @var array
31
+ */
32
+ protected $clone_keys = array(
33
+ array(
34
+ 'old_key' => 'rank_math_description',
35
+ 'new_key' => 'metadesc',
36
+ ),
37
+ array(
38
+ 'old_key' => 'rank_math_title',
39
+ 'new_key' => 'title',
40
+ ),
41
+ array(
42
+ 'old_key' => 'rank_math_canonical_url',
43
+ 'new_key' => 'canonical',
44
+ ),
45
+ array(
46
+ 'old_key' => 'rank_math_primary_category',
47
+ 'new_key' => 'primary_category',
48
+ ),
49
+ array(
50
+ 'old_key' => 'rank_math_facebook_title',
51
+ 'new_key' => 'opengraph-title',
52
+ ),
53
+ array(
54
+ 'old_key' => 'rank_math_facebook_description',
55
+ 'new_key' => 'opengraph-description',
56
+ ),
57
+ array(
58
+ 'old_key' => 'rank_math_facebook_image',
59
+ 'new_key' => 'opengraph-image',
60
+ ),
61
+ array(
62
+ 'old_key' => 'rank_math_facebook_image_id',
63
+ 'new_key' => 'opengraph-image-id',
64
+ ),
65
+ array(
66
+ 'old_key' => 'rank_math_twitter_title',
67
+ 'new_key' => 'twitter-title',
68
+ ),
69
+ array(
70
+ 'old_key' => 'rank_math_twitter_description',
71
+ 'new_key' => 'twitter-description',
72
+ ),
73
+ array(
74
+ 'old_key' => 'rank_math_twitter_image',
75
+ 'new_key' => 'twitter-image',
76
+ ),
77
+ array(
78
+ 'old_key' => 'rank_math_twitter_image_id',
79
+ 'new_key' => 'twitter-image-id',
80
+ ),
81
+ array(
82
+ 'old_key' => 'rank_math_focus_keyword',
83
+ 'new_key' => 'focuskw',
84
+ ),
85
+ );
86
+
87
+ /**
88
+ * Handles post meta data to import.
89
+ *
90
+ * @return bool Import success status.
91
+ */
92
+ protected function import() {
93
+ global $wpdb;
94
+ // Replace % with %% as their variables are the same except for that.
95
+ $wpdb->query( "UPDATE $wpdb->postmeta SET meta_value = REPLACE( meta_value, '%', '%%' ) WHERE meta_key IN ( 'rank_math_description', 'rank_math_title' )" );
96
+
97
+ $this->import_meta_robots();
98
+ $return = $this->meta_keys_clone( $this->clone_keys );
99
+
100
+ // Return %% to % so our import is non-destructive.
101
+ $wpdb->query( "UPDATE $wpdb->postmeta SET meta_value = REPLACE( meta_value, '%%', '%' ) WHERE meta_key IN ( 'rank_math_description', 'rank_math_title' )" );
102
+
103
+ if ( $return ) {
104
+ $this->import_settings();
105
+ }
106
+
107
+ return $return;
108
+ }
109
+
110
+ /**
111
+ * RankMath stores robots meta quite differently, so we have to parse it out.
112
+ */
113
+ private function import_meta_robots() {
114
+ global $wpdb;
115
+ $post_metas = $wpdb->get_results( "SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = 'rank_math_robots'" );
116
+ foreach ( $post_metas as $post_meta ) {
117
+ $robots_values = unserialize( $post_meta->meta_value );
118
+ foreach ( array( 'noindex', 'nofollow' ) as $directive ) {
119
+ $directive_key = array_search( $directive, $robots_values );
120
+ if ( $directive_key !== false ) {
121
+ update_post_meta( $post_meta->post_id, '_yoast_wpseo_meta-robots-' . $directive, 1 );
122
+ unset( $robots_values[ $directive_key ] );
123
+ }
124
+ }
125
+ if ( count( $robots_values ) > 0 ) {
126
+ $value = implode( ',', $robots_values );
127
+ update_post_meta( $post_meta->post_id, '_yoast_wpseo_meta-robots-adv', $value );
128
+ }
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Imports some of the RankMath settings.
134
+ */
135
+ private function import_settings() {
136
+ $settings = array(
137
+ 'title_separator' => 'separator',
138
+ 'homepage_title' => 'title-home-wpseo',
139
+ 'homepage_description' => 'metadesc-home-wpseo',
140
+ 'author_archive_title' => 'title-author-wpseo',
141
+ 'date_archive_title' => 'title-archive-wpseo',
142
+ 'search_title' => 'title-search-wpseo',
143
+ '404_title' => 'title-404-wpseo',
144
+ 'pt_post_title' => 'title-post',
145
+ 'pt_page_title' => 'title-page',
146
+ );
147
+ $options = get_option( 'rank-math-options-titles' );
148
+
149
+ foreach ( $settings as $import_setting_key => $setting_key ) {
150
+ if ( ! empty( $options[ $import_setting_key ] ) ) {
151
+ $value = $options[ $import_setting_key ];
152
+ // Make sure replace vars work.
153
+ $value = str_replace( '%', '%%', $value );
154
+ WPSEO_Options::set( $setting_key, $value );
155
+ }
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Removes the plugin data from the database.
161
+ *
162
+ * @return bool Cleanup status.
163
+ */
164
+ protected function cleanup() {
165
+ $return = parent::cleanup();
166
+ if ( $return ) {
167
+ global $wpdb;
168
+ $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE 'rank-math-%'" );
169
+ $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '%rank_math%'" );
170
+ }
171
+
172
+ return $return;
173
+ }
174
+ }
admin/import/plugins/class-importers.php CHANGED
@@ -25,6 +25,7 @@ class WPSEO_Plugin_Importers {
25
  'WPSEO_Import_WP_Meta_SEO',
26
  'WPSEO_Import_Platinum_SEO',
27
  'WPSEO_Import_Premium_SEO_Pack',
 
28
  'WPSEO_Import_SEOPressor',
29
  'WPSEO_Import_SEO_Framework',
30
  'WPSEO_Import_Smartcrawl_SEO',
25
  'WPSEO_Import_WP_Meta_SEO',
26
  'WPSEO_Import_Platinum_SEO',
27
  'WPSEO_Import_Premium_SEO_Pack',
28
+ 'WPSEO_Import_RankMath',
29
  'WPSEO_Import_SEOPressor',
30
  'WPSEO_Import_SEO_Framework',
31
  'WPSEO_Import_Smartcrawl_SEO',
admin/tracking/class-tracking-plugin-data.php CHANGED
@@ -55,12 +55,7 @@ class WPSEO_Tracking_Plugin_Data implements WPSEO_Collection {
55
  protected function format_plugin( array $plugin ) {
56
  return array(
57
  'name' => $plugin['Name'],
58
- 'url' => $plugin['PluginURI'],
59
  'version' => $plugin['Version'],
60
- 'author' => array(
61
- 'name' => wp_strip_all_tags( $plugin['Author'], true ),
62
- 'url' => $plugin['AuthorURI'],
63
- ),
64
  );
65
  }
66
  }
55
  protected function format_plugin( array $plugin ) {
56
  return array(
57
  'name' => $plugin['Name'],
 
58
  'version' => $plugin['Version'],
 
 
 
 
59
  );
60
  }
61
  }
admin/tracking/class-tracking-settings-data.php CHANGED
@@ -19,6 +19,7 @@ class WPSEO_Tracking_Settings_Data implements WPSEO_Collection {
19
  'googleverify',
20
  'msverify',
21
  'yandexverify',
 
22
  'website_name',
23
  'alternate_website_name',
24
  'company_logo',
@@ -31,6 +32,12 @@ class WPSEO_Tracking_Settings_Data implements WPSEO_Collection {
31
  'instagram_url',
32
  'linkedin_url',
33
  'myspace_url',
 
 
 
 
 
 
34
  'pinterest_url',
35
  'pinterestverify',
36
  'twitter_site',
@@ -39,15 +46,136 @@ class WPSEO_Tracking_Settings_Data implements WPSEO_Collection {
39
  'fbadminapp',
40
  );
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  /**
43
  * Returns the collection data.
44
  *
45
  * @return array The collection data.
46
  */
47
  public function get() {
 
 
 
 
 
 
 
 
 
 
48
 
49
  return array(
50
- 'settings' => $this->anonymize_settings( WPSEO_Options::get_all() ),
51
  );
52
  }
53
 
19
  'googleverify',
20
  'msverify',
21
  'yandexverify',
22
+ 'myyoast-oauth',
23
  'website_name',
24
  'alternate_website_name',
25
  'company_logo',
32
  'instagram_url',
33
  'linkedin_url',
34
  'myspace_url',
35
+ 'og_default_image',
36
+ 'og_default_image_id',
37
+ 'og_frontpage_title',
38
+ 'og_frontpage_desc',
39
+ 'og_frontpage_image',
40
+ 'og_frontpage_image_id',
41
  'pinterest_url',
42
  'pinterestverify',
43
  'twitter_site',
46
  'fbadminapp',
47
  );
48
 
49
+ /**
50
+ * @var array $include_list contains the option_names for the options we want to track.
51
+ */
52
+ private $include_list = array(
53
+ 'ms_defaults_set',
54
+ 'version',
55
+ 'disableadvanced_meta',
56
+ 'onpage_indexability',
57
+ 'baiduverify',
58
+ 'googleverify',
59
+ 'msverify',
60
+ 'yandexverify',
61
+ 'site_type',
62
+ 'has_multiple_authors',
63
+ 'environment_type',
64
+ 'content_analysis_active',
65
+ 'keyword_analysis_active',
66
+ 'enable_admin_bar_menu',
67
+ 'enable_cornerstone_content',
68
+ 'enable_xml_sitemap',
69
+ 'enable_text_link_counter',
70
+ 'show_onboarding_notice',
71
+ 'first_activated_on',
72
+ 'myyoast-oauth',
73
+ 'website_name',
74
+ 'alternate_website_name',
75
+ 'company_logo',
76
+ 'company_name',
77
+ 'company_or_person',
78
+ 'person_name',
79
+ 'title_test',
80
+ 'forcerewritetitle',
81
+ 'separator',
82
+ 'title-home-wpseo',
83
+ 'title-author-wpseo',
84
+ 'title-archive-wpseo',
85
+ 'title-search-wpseo',
86
+ 'title-404-wpseo',
87
+ 'metadesc-home-wpseo',
88
+ 'metadesc-author-wpseo',
89
+ 'metadesc-archive-wpseo',
90
+ 'rssbefore',
91
+ 'rssafter',
92
+ 'noindex-author-wpseo',
93
+ 'noindex-author-noposts-wpseo',
94
+ 'noindex-archive-wpseo',
95
+ 'disable-author',
96
+ 'disable-date',
97
+ 'disable-post_format',
98
+ 'disable-attachment',
99
+ 'is-media-purge-relevant',
100
+ 'breadcrumbs-404crumb',
101
+ 'breadcrumbs-display-blog-page',
102
+ 'breadcrumbs-boldlast',
103
+ 'breadcrumbs-archiveprefix',
104
+ 'breadcrumbs-enable',
105
+ 'breadcrumbs-home',
106
+ 'breadcrumbs-prefix',
107
+ 'breadcrumbs-searchprefix',
108
+ 'breadcrumbs-sep',
109
+ 'person_logo',
110
+ 'person_logo_id',
111
+ 'company_logo_id',
112
+ 'company_or_person_user_id',
113
+ 'stripcategorybase',
114
+ 'noindex-post',
115
+ 'showdate-post',
116
+ 'display-metabox-pt-post',
117
+ 'noindex-page',
118
+ 'showdate-page',
119
+ 'display-metabox-pt-page',
120
+ 'noindex-attachment',
121
+ 'showdate-attachment',
122
+ 'display-metabox-pt-attachment',
123
+ 'display-metabox-tax-category',
124
+ 'noindex-tax-category',
125
+ 'display-metabox-tax-post_tag',
126
+ 'noindex-tax-post_tag',
127
+ 'display-metabox-tax-post_format',
128
+ 'noindex-tax-post_format',
129
+ 'taxonomy-category-ptparent',
130
+ 'taxonomy-post_tag-ptparent',
131
+ 'taxonomy-post_format-ptparent',
132
+ 'breadcrumbs-blog-remove',
133
+ 'hideeditbox-post',
134
+ 'hideeditbox-page',
135
+ 'hideeditbox-attachment',
136
+ 'hideeditbox-tax-category',
137
+ 'hideeditbox-tax-post_tag',
138
+ 'hideeditbox-tax-post_format',
139
+ 'facebook_site',
140
+ 'instagram_url',
141
+ 'linkedin_url',
142
+ 'myspace_url',
143
+ 'og_default_image',
144
+ 'og_default_image_id',
145
+ 'og_frontpage_title',
146
+ 'og_frontpage_desc',
147
+ 'og_frontpage_image',
148
+ 'og_frontpage_image_id',
149
+ 'opengraph',
150
+ 'pinterest_url',
151
+ 'pinterestverify',
152
+ 'twitter',
153
+ 'twitter_site',
154
+ 'twitter_card_type',
155
+ 'youtube_url',
156
+ 'wikipedia_url',
157
+ 'fbadminapp',
158
+ );
159
+
160
  /**
161
  * Returns the collection data.
162
  *
163
  * @return array The collection data.
164
  */
165
  public function get() {
166
+ /**
167
+ * Filter: 'wpseo_tracking_settings_include_list' - Allow filtering the settings included in tracking.
168
+ *
169
+ * @api string $include_list the list with included setting names.
170
+ */
171
+ $this->include_list = apply_filters( 'wpseo_tracking_settings_include_list', $this->include_list );
172
+
173
+ $options = WPSEO_Options::get_all();
174
+ // Returns the settings of which the keys intersect with the values of the include list.
175
+ $options = array_intersect_key( $options, array_flip( $this->include_list ) );
176
 
177
  return array(
178
+ 'settings' => $this->anonymize_settings( $options ),
179
  );
180
  }
181
 
admin/views/form/select.php CHANGED
@@ -18,6 +18,7 @@ if ( ! defined( 'WPSEO_VERSION' ) ) {
18
  }
19
 
20
  ?>
 
21
  <select <?php echo $attributes; ?>name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $id ); ?>">
22
  <?php foreach ( $options as $option_attribute_value => $option_html_value ) : ?>
23
  <option value="<?php echo esc_attr( $option_attribute_value ); ?>"<?php echo selected( $selected, $option_attribute_value, false ); ?>><?php echo esc_html( $option_html_value ); ?></option>
18
  }
19
 
20
  ?>
21
+ <?php /* phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $attributes is properly escaped in parse_attribute via get_attributes in class-yoast-input-select.php. */ ?>
22
  <select <?php echo $attributes; ?>name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $id ); ?>">
23
  <?php foreach ( $options as $option_attribute_value => $option_html_value ) : ?>
24
  <option value="<?php echo esc_attr( $option_attribute_value ); ?>"<?php echo selected( $selected, $option_attribute_value, false ); ?>><?php echo esc_html( $option_html_value ); ?></option>
admin/views/sidebar.php CHANGED
@@ -37,6 +37,7 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
37
  <?php
38
  /* translators: %s expands to Yoast SEO Premium */
39
  printf( esc_html__( 'Get %s', 'wordpress-seo' ), 'Yoast SEO Premium' );
 
40
  echo $new_tab_message;
41
  echo '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>';
42
  ?>
@@ -51,7 +52,10 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
51
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/2oi' ); ?>" target="_blank">
52
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/SEO_for_beginners.svg' ); ?>" alt="">
53
  <strong><?php esc_html_e( 'SEO for Beginners training', 'wordpress-seo' ); ?></strong>
54
- <?php echo $new_tab_message; ?>
 
 
 
55
  </a><br>
56
  <?php esc_html_e( 'Get quick wins to make your site rank higher in search engines.', 'wordpress-seo' ); ?>
57
  </p>
@@ -67,7 +71,10 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
67
  printf( esc_html__( '%s for WordPress training', 'wordpress-seo' ), 'Yoast SEO' );
68
  ?>
69
  </strong>
70
- <?php echo $new_tab_message; ?>
 
 
 
71
  </a><br>
72
  <?php esc_html_e( 'Don’t waste time figuring out the best settings yourself.', 'wordpress-seo' ); ?>
73
  </p>
@@ -77,7 +84,10 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
77
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/3lj' ); ?>" target="_blank">
78
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/all-round-SEO.svg' ); ?>" alt="">
79
  <strong><?php esc_html_e( 'All-around SEO training', 'wordpress-seo' ); ?></strong>
80
- <?php echo $new_tab_message; ?>
 
 
 
81
  </a><br>
82
  <?php esc_html_e( 'Learn practical SEO skills to rank higher in Google.', 'wordpress-seo' ); ?>
83
  </p>
@@ -95,7 +105,10 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
95
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jq' ); ?>" target="_blank">
96
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Local_SEO_Icon.svg' ); ?>" alt="">
97
  <strong>Local SEO</strong>
98
- <?php echo $new_tab_message; ?>
 
 
 
99
  </a><br>
100
  <?php esc_html_e( 'Be found in Google Maps and local results.', 'wordpress-seo' ); ?>
101
  </p>
@@ -105,7 +118,10 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
105
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jo' ); ?>" target="_blank">
106
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Video_SEO_Icon.svg' ); ?>" alt="">
107
  <strong>Video SEO</strong>
108
- <?php echo $new_tab_message; ?>
 
 
 
109
  </a><br>
110
  <?php esc_html_e( 'Be found in Google Video search and enhance your video sharing on social media.', 'wordpress-seo' ); ?>
111
  </p>
@@ -115,7 +131,10 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
115
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jp' ); ?>" target="_blank">
116
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Woo_SEO_Icon.svg' ); ?>" alt="">
117
  <strong>WooCommerce SEO</strong>
118
- <?php echo $new_tab_message; ?>
 
 
 
119
  </a><br>
120
  <?php esc_html_e( 'Optimize your shop\'s SEO and sell more products!', 'wordpress-seo' ); ?>
121
  </p>
@@ -125,7 +144,10 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
125
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jr' ); ?>" target="_blank">
126
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/News_SEO_Icon.svg' ); ?>" alt="">
127
  <strong>News SEO</strong>
128
- <?php echo $new_tab_message; ?>
 
 
 
129
  </a><br>
130
  <?php esc_html_e( 'Optimize your site for Google News.', 'wordpress-seo' ); ?>
131
  </p>
@@ -139,6 +161,7 @@ $new_tab_message = WPSEO_Admin_Utils::get_new_tab_message();
139
  <?php
140
  /* translators: %s expands to Yoast SEO Premium */
141
  printf( esc_html__( 'Upgrade to %s', 'wordpress-seo' ), 'Yoast SEO Premium' );
 
142
  echo $new_tab_message;
143
  ?>
144
  </a>
37
  <?php
38
  /* translators: %s expands to Yoast SEO Premium */
39
  printf( esc_html__( 'Get %s', 'wordpress-seo' ), 'Yoast SEO Premium' );
40
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
41
  echo $new_tab_message;
42
  echo '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>';
43
  ?>
52
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/2oi' ); ?>" target="_blank">
53
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/SEO_for_beginners.svg' ); ?>" alt="">
54
  <strong><?php esc_html_e( 'SEO for Beginners training', 'wordpress-seo' ); ?></strong>
55
+ <?php
56
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
57
+ echo $new_tab_message;
58
+ ?>
59
  </a><br>
60
  <?php esc_html_e( 'Get quick wins to make your site rank higher in search engines.', 'wordpress-seo' ); ?>
61
  </p>
71
  printf( esc_html__( '%s for WordPress training', 'wordpress-seo' ), 'Yoast SEO' );
72
  ?>
73
  </strong>
74
+ <?php
75
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
76
+ echo $new_tab_message;
77
+ ?>
78
  </a><br>
79
  <?php esc_html_e( 'Don’t waste time figuring out the best settings yourself.', 'wordpress-seo' ); ?>
80
  </p>
84
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/3lj' ); ?>" target="_blank">
85
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/all-round-SEO.svg' ); ?>" alt="">
86
  <strong><?php esc_html_e( 'All-around SEO training', 'wordpress-seo' ); ?></strong>
87
+ <?php
88
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
89
+ echo $new_tab_message;
90
+ ?>
91
  </a><br>
92
  <?php esc_html_e( 'Learn practical SEO skills to rank higher in Google.', 'wordpress-seo' ); ?>
93
  </p>
105
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jq' ); ?>" target="_blank">
106
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Local_SEO_Icon.svg' ); ?>" alt="">
107
  <strong>Local SEO</strong>
108
+ <?php
109
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
110
+ echo $new_tab_message;
111
+ ?>
112
  </a><br>
113
  <?php esc_html_e( 'Be found in Google Maps and local results.', 'wordpress-seo' ); ?>
114
  </p>
118
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jo' ); ?>" target="_blank">
119
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Video_SEO_Icon.svg' ); ?>" alt="">
120
  <strong>Video SEO</strong>
121
+ <?php
122
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
123
+ echo $new_tab_message;
124
+ ?>
125
  </a><br>
126
  <?php esc_html_e( 'Be found in Google Video search and enhance your video sharing on social media.', 'wordpress-seo' ); ?>
127
  </p>
131
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jp' ); ?>" target="_blank">
132
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Woo_SEO_Icon.svg' ); ?>" alt="">
133
  <strong>WooCommerce SEO</strong>
134
+ <?php
135
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
136
+ echo $new_tab_message;
137
+ ?>
138
  </a><br>
139
  <?php esc_html_e( 'Optimize your shop\'s SEO and sell more products!', 'wordpress-seo' ); ?>
140
  </p>
144
  <a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jr' ); ?>" target="_blank">
145
  <img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/News_SEO_Icon.svg' ); ?>" alt="">
146
  <strong>News SEO</strong>
147
+ <?php
148
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
149
+ echo $new_tab_message;
150
+ ?>
151
  </a><br>
152
  <?php esc_html_e( 'Optimize your site for Google News.', 'wordpress-seo' ); ?>
153
  </p>
161
  <?php
162
  /* translators: %s expands to Yoast SEO Premium */
163
  printf( esc_html__( 'Upgrade to %s', 'wordpress-seo' ), 'Yoast SEO Premium' );
164
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: $new_tab_message is properly escaped.
165
  echo $new_tab_message;
166
  ?>
167
  </a>
css/dist/{admin-global-1220-rtl.min.css → admin-global-1230-rtl.min.css} RENAMED
@@ -1 +1 @@
1
- .wpseo-premium-indicator{width:1px;height:1px;display:inline-block}#adminmenu .wpseo-premium-indicator{margin:-2px 2px -3px 0;color:inherit}.wpseo-premium-indicator svg{height:100%;width:auto;display:none}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip:after{display:none;position:absolute;z-index:1000000;padding:6px 8px 5px;border-radius:3px;opacity:0;color:#fff;background:rgba(0,0,0,.8);text-shadow:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center;white-space:pre;text-decoration:none;letter-spacing:normal;text-transform:none;word-wrap:break-word;content:attr(aria-label);pointer-events:none;-webkit-font-smoothing:subpixel-antialiased}.yoast-tooltip-alt:after{content:attr(data-label)}.yoast-tooltip:before{display:none;position:absolute;z-index:1000001;width:0;height:0;border:5px solid transparent;opacity:0;color:rgba(0,0,0,.8);content:"\00a0";pointer-events:none}@keyframes yoast-tooltip-appear{0%{opacity:0}to{opacity:1}}.yoast-tooltip:active:after,.yoast-tooltip:active:before,.yoast-tooltip:focus:after,.yoast-tooltip:focus:before,.yoast-tooltip:hover:after,.yoast-tooltip:hover:before{display:inline-block;text-decoration:none;animation-name:yoast-tooltip-appear;animation-duration:.1s;animation-timing-function:ease-in;animation-delay:.4s;animation-fill-mode:forwards}.yoast-tooltip-no-delay:active:after,.yoast-tooltip-no-delay:active:before,.yoast-tooltip-no-delay:focus:after,.yoast-tooltip-no-delay:focus:before,.yoast-tooltip-no-delay:hover:after,.yoast-tooltip-no-delay:hover:before{opacity:1;animation:none}.yoast-tooltip-multiline:active:after,.yoast-tooltip-multiline:focus:after,.yoast-tooltip-multiline:hover:after{display:table-cell}.yoast-tooltip-s:after,.yoast-tooltip-se:after,.yoast-tooltip-sw:after{top:100%;left:50%;margin-top:5px}.yoast-tooltip-s:before,.yoast-tooltip-se:before,.yoast-tooltip-sw:before{top:auto;left:50%;bottom:-5px;margin-left:-5px;border-bottom-color:rgba(0,0,0,.8)}.yoast-tooltip-se:after{left:auto;right:50%;margin-right:-15px}.yoast-tooltip-sw:after{margin-left:-15px}.yoast-tooltip-n:after,.yoast-tooltip-ne:after,.yoast-tooltip-nw:after{left:50%;bottom:100%;margin-bottom:5px}.yoast-tooltip-n:before,.yoast-tooltip-ne:before,.yoast-tooltip-nw:before{top:-5px;left:50%;bottom:auto;margin-left:-5px;border-top-color:rgba(0,0,0,.8)}.yoast-tooltip-ne:after{left:auto;right:50%;margin-right:-15px}.yoast-tooltip-nw:after{margin-left:-15px}.yoast-tooltip-n:after,.yoast-tooltip-s:after{-ms-transform:translateX(-50%);transform:translateX(-50%)}.yoast-tooltip-w:after{left:100%;bottom:50%;margin-left:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-w:before{top:50%;bottom:50%;right:-5px;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.yoast-tooltip-e:after{bottom:50%;right:100%;margin-right:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-e:before{top:50%;left:-5px;bottom:50%;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.yoast-tooltip-multiline:after{width:250px;width:-webkit-max-content;width:max-content;max-width:250px;border-collapse:separate;white-space:pre-line;word-wrap:normal;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n:after,.yoast-tooltip-multiline.yoast-tooltip-s:after{left:auto;right:50%;-ms-transform:translateX(50%);transform:translateX(50%)}.yoast-tooltip-multiline.yoast-tooltip-e:after,.yoast-tooltip-multiline.yoast-tooltip-w:after{left:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline:after{width:250px}}.yoast-tooltip-sticky:after,.yoast-tooltip-sticky:before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline:after{display:table-cell}@media only screen and (-moz-min-device-pixel-ratio:2),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.yoast-tooltip-w:after{margin-left:4.5px}}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none}.yoast-measure{max-width:600px}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{margin:0 0 0 10px;font-size:14px;font-weight:600}.wpseo-help-center-sub-title,.wpseo-premium-popup-title{margin:1em 0!important;padding:0!important;font-size:1.3em!important;font-weight:600!important}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{max-width:100%;height:auto}.select2-search__field{margin:0}.select2-results__option,.select2-search--inline,.select2-selection__choice{margin-bottom:0}.select2-container .select2-search--inline .select2-search__field{margin-top:6px!important;line-height:inherit}.yoast-label-strong{font-weight:600}.yoast-video-container-max-width{max-width:560px}.yoast-video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.yoast-video-container iframe{position:absolute;top:0;right:0;width:100%;height:100%}.yoast-settings{margin-bottom:2em;padding-right:220px}.yoast-settings h2{margin-bottom:0;margin-right:-220px}.yoast-settings label{display:inline-block;width:200px;padding-top:4px;padding-left:10px;margin-left:6px;margin-right:-220px;font-size:14px;line-height:1.3;font-weight:600;color:#23282d;vertical-align:top}.yoast-settings fieldset,.yoast-settings input[type=text],.yoast-settings label,.yoast-settings select,.yoast-settings textarea,.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{margin-top:2em;margin-bottom:.5em}.yoast-settings__textarea--medium{width:100%;max-width:600px}.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{vertical-align:top;position:relative;top:1px}.yoast-settings__group--checkbox,.yoast-settings__group--radio{padding-top:1em}.yoast-settings__group--checkbox .yoast-settings__checkbox,.yoast-settings__group--radio .yoast-settings__radio{margin:0 0 10px 4px}.yoast-settings__checkbox+label,.yoast-settings__radio+label{width:auto;margin-right:0;margin-left:0;padding:0;max-width:calc(100% - 25px)}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{margin-top:0;margin-bottom:10px;font-weight:400}.yoast-settings legend{font-size:14px;font-weight:600;color:#23282d}.yoast-settings .description{margin-top:0;font-size:14px}td .wpseo-score-icon{display:inline-block;width:12px;height:12px;margin-right:5px;border-radius:50%;background:#888;line-height:16px;margin-top:3px}.fixed th.column-wpseo-linked,.fixed th.column-wpseo-links,.fixed th.column-wpseo-score,.fixed th.column-wpseo-score-readability{width:3em;padding:0}th.column-wpseo-linked a,th.column-wpseo-links a,th.column-wpseo-score-readability .yoast-tooltip,th.column-wpseo-score .yoast-tooltip{overflow:visible;display:inline-block;vertical-align:middle;padding:8px 0}th.column-wpseo-score-readability .yoast-tooltip,th.column-wpseo-score .yoast-tooltip{padding:8px 11px}.column-wpseo-links .yoast-tooltip-multiline:after{max-width:160px}.column-wpseo-linked .yoast-tooltip-multiline:after{max-width:170px}.yoast-column-header-has-tooltip{position:relative}.manage-column .yoast-column-header-has-tooltip:before{content:"";display:inline-block;width:20px;height:20px;padding:0;vertical-align:top;text-decoration:none!important;color:#444}.manage-column .yoast-linked-to:before{background:transparent url(../../images/link-out-icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-linked-from:before{background:transparent url(../../images/link-in-icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-column-seo-score:before{background:transparent url(../../images/Yoast_SEO_negative_icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-column-readability:before{background:transparent url(../../images/readability-icon.svg) no-repeat 100% 0;background-size:20px}td.column-wpseo-linked,td.column-wpseo-links{word-wrap:normal}@media screen and (max-width:782px){.yoast-settings{padding-right:0}.yoast-settings h2{margin-right:0}.yoast-settings label{width:auto;padding:0;margin-left:0;margin-right:0}.yoast-settings__radio+label,.yoast .yoast-settings__radio{margin-bottom:1em}.yoast-settings__checkbox+label,.yoast-settings__radio+label{max-width:calc(100% - 35px);padding-top:8px}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{padding-top:4px}.yoast-settings input[type=text],.yoast-settings select,.yoast-settings textarea{display:block;width:100%;margin-top:0;margin-bottom:0;padding:7px 10px;max-width:none;line-height:1.5;box-sizing:border-box}.screen-reader-text.wpseo-score-text{position:static!important;-webkit-clip-path:none;clip-path:none;width:auto;height:auto;margin:0}}#yoast-help-center-container{margin:16px 0 24px}.react-tabs__tab-panel{max-width:900px;margin:0 auto}.react-tabs__tab-panel li{max-width:none!important}.yoast-help-center-open #sidebar-container{display:none}.contact-premium-support{text-align:center}.contact-premium-support__content{margin:0 auto 1.5em;font-size:.9375rem;line-height:1.4}.contact-premium-support__content:nth-child(2){max-width:610px}.contact-premium-support__content:nth-child(3){max-width:560px}.contact-premium-support .contact-premium-support__button{margin-bottom:48px}.wpseo-premium-description{margin-top:.5em}.wpseo-premium-advantages-list{list-style:disc;padding-right:1.5em}.yoast_help.yoast-help-button{overflow:visible;position:relative;width:20px;height:20px;margin:0;padding:0;border:0;outline:none;color:#72777c;background:transparent;box-shadow:none;vertical-align:top;cursor:pointer}.yoast-section .yoast_help.yoast-help-button{float:left}.help-button-inline .yoast_help.yoast-help-button{margin-top:-4px}.yoast-section .yoast_help.yoast-help-button{margin-top:-44px}.wpseo-admin-page .yoast_help.yoast-help-button{margin-left:6px}.yoast_help .yoast-help-icon:before{position:absolute;top:0;right:0;padding:4px;content:"\f223"}.yoast_help.yoast-help-button:focus,.yoast_help.yoast-help-button:hover{color:#0073aa}.assessment-results__mark:focus,.yoast_help.yoast-help-button:focus .yoast-help-icon:before{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-help-panel{display:none;clear:both;max-width:30em!important;padding:0 0 1em;font-weight:400;white-space:normal}.wpseo-admin-page .yoast-help-panel{max-width:600px!important}.copy-home-meta-description .yoast-help-panel{max-width:400px!important}.yoast-modal_is-open{overflow:hidden}.yoast-alert .yoast-seo-icon{float:right;margin:20px 10px}.yoast-alert .yoast-seo-icon-wrap{margin:0 85px 0 0}.yoast-button-upsell{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;min-height:48px;padding:8px 1em;font-size:16px;line-height:1.5;font-family:Arial,sans-serif;color:#000;border-radius:4px;box-shadow:inset 0 -4px 0 rgba(0,0,0,.2);filter:drop-shadow(0 2px 4px rgba(0,0,0,.2));text-decoration:none;background-color:#fec228}.yoast-button-upsell:active,.yoast-button-upsell:focus,.yoast-button-upsell:hover{color:#000;background-color:#f2ae01}.yoast-button-upsell:focus{box-shadow:inset 0 -4px 0 rgba(0,0,0,.2),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-button-upsell:active{-ms-transform:translateY(1px);transform:translateY(1px);box-shadow:none;filter:none}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.yoast-button-upsell:after{display:inline-block;content:"";min-height:32px}}.yoast-button-upsell#wpseo-premium-button{color:#000}.yoast-button-upsell__caret{-ms-flex-negative:0;flex-shrink:0;width:8px;height:16px;margin:0 6px 0 -2px;background:transparent url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%20192%20512%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M%200%20384%2E662%20V%20127%2E338%20c%200%20%2D17%2E818%2021%2E543%20%2D26%2E741%2034%2E142%20%2D14%2E142%20l%20128%2E662%20128%2E662%20c%207%2E81%207%2E81%207%2E81%2020%2E474%200%2028%2E284%20L%2034%2E142%20398%2E804%20C%2021%2E543%20411%2E404%200%20402%2E48%200%20384%2E662%20Z%22%2F%3E%3C%2Fsvg%3E") 50% no-repeat}.rtl .yoast-button-upsell__caret{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%20192%20512%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M192%20127%2E338v257%2E324c0%2017%2E818%2D21%2E543%2026%2E741%2D34%2E142%2014%2E142L29%2E196%20270%2E142c%2D7%2E81%2D7%2E81%2D7%2E81%2D20%2E474%200%2D28%2E284l128%2E662%2D128%2E662c12%2E599%2D12%2E6%2034%2E142%2D3%2E676%2034%2E142%2014%2E142z%22%2F%3E%3C%2Fsvg%3E")}
1
+ .wpseo-premium-indicator{width:1px;height:1px;display:inline-block}#adminmenu .wpseo-premium-indicator{margin:-2px 2px -3px 0;color:inherit}.wpseo-premium-indicator svg{height:100%;width:auto;display:none}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip:after{display:none;position:absolute;z-index:1000000;padding:6px 8px 5px;border-radius:3px;opacity:0;color:#fff;background:rgba(0,0,0,.8);text-shadow:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center;white-space:pre;text-decoration:none;letter-spacing:normal;text-transform:none;word-wrap:break-word;content:attr(aria-label);pointer-events:none;-webkit-font-smoothing:subpixel-antialiased}.yoast-tooltip-alt:after{content:attr(data-label)}.yoast-tooltip:before{display:none;position:absolute;z-index:1000001;width:0;height:0;border:5px solid transparent;opacity:0;color:rgba(0,0,0,.8);content:"\00a0";pointer-events:none}@keyframes yoast-tooltip-appear{0%{opacity:0}to{opacity:1}}.yoast-tooltip:active:after,.yoast-tooltip:active:before,.yoast-tooltip:focus:after,.yoast-tooltip:focus:before,.yoast-tooltip:hover:after,.yoast-tooltip:hover:before{display:inline-block;text-decoration:none;animation-name:yoast-tooltip-appear;animation-duration:.1s;animation-timing-function:ease-in;animation-delay:.4s;animation-fill-mode:forwards}.yoast-tooltip-no-delay:active:after,.yoast-tooltip-no-delay:active:before,.yoast-tooltip-no-delay:focus:after,.yoast-tooltip-no-delay:focus:before,.yoast-tooltip-no-delay:hover:after,.yoast-tooltip-no-delay:hover:before{opacity:1;animation:none}.yoast-tooltip-multiline:active:after,.yoast-tooltip-multiline:focus:after,.yoast-tooltip-multiline:hover:after{display:table-cell}.yoast-tooltip-s:after,.yoast-tooltip-se:after,.yoast-tooltip-sw:after{top:100%;left:50%;margin-top:5px}.yoast-tooltip-s:before,.yoast-tooltip-se:before,.yoast-tooltip-sw:before{top:auto;left:50%;bottom:-5px;margin-left:-5px;border-bottom-color:rgba(0,0,0,.8)}.yoast-tooltip-se:after{left:auto;right:50%;margin-right:-15px}.yoast-tooltip-sw:after{margin-left:-15px}.yoast-tooltip-n:after,.yoast-tooltip-ne:after,.yoast-tooltip-nw:after{left:50%;bottom:100%;margin-bottom:5px}.yoast-tooltip-n:before,.yoast-tooltip-ne:before,.yoast-tooltip-nw:before{top:-5px;left:50%;bottom:auto;margin-left:-5px;border-top-color:rgba(0,0,0,.8)}.yoast-tooltip-ne:after{left:auto;right:50%;margin-right:-15px}.yoast-tooltip-nw:after{margin-left:-15px}.yoast-tooltip-n:after,.yoast-tooltip-s:after{-ms-transform:translateX(-50%);transform:translateX(-50%)}.yoast-tooltip-w:after{left:100%;bottom:50%;margin-left:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-w:before{top:50%;bottom:50%;right:-5px;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.yoast-tooltip-e:after{bottom:50%;right:100%;margin-right:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-e:before{top:50%;left:-5px;bottom:50%;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.yoast-tooltip-multiline:after{width:250px;width:-webkit-max-content;width:max-content;max-width:250px;border-collapse:separate;white-space:pre-line;word-wrap:normal;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n:after,.yoast-tooltip-multiline.yoast-tooltip-s:after{left:auto;right:50%;-ms-transform:translateX(50%);transform:translateX(50%)}.yoast-tooltip-multiline.yoast-tooltip-e:after,.yoast-tooltip-multiline.yoast-tooltip-w:after{left:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline:after{width:250px}}.yoast-tooltip-sticky:after,.yoast-tooltip-sticky:before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline:after{display:table-cell}@media only screen and (-moz-min-device-pixel-ratio:2),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.yoast-tooltip-w:after{margin-left:4.5px}}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none}.yoast-measure{max-width:600px}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{margin:0 0 0 10px;font-size:14px;font-weight:600}.wpseo-help-center-sub-title,.wpseo-premium-popup-title{margin:1em 0!important;padding:0!important;font-size:1.3em!important;font-weight:600!important}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{max-width:100%;height:auto}.select2-search__field{margin:0}.select2-results__option,.select2-search--inline,.select2-selection__choice{margin-bottom:0}.select2-container .select2-search--inline .select2-search__field{margin-top:6px!important;line-height:inherit}.yoast-label-strong{font-weight:600}.yoast-video-container-max-width{max-width:560px}.yoast-video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.yoast-video-container iframe{position:absolute;top:0;right:0;width:100%;height:100%}.yoast-settings{margin-bottom:2em;padding-right:220px}.yoast-settings h2{margin-bottom:0;margin-right:-220px}.yoast-settings label{display:inline-block;width:200px;padding-top:4px;padding-left:10px;margin-left:6px;margin-right:-220px;font-size:14px;line-height:1.3;font-weight:600;color:#23282d;vertical-align:top}.yoast-settings fieldset,.yoast-settings input[type=text],.yoast-settings label,.yoast-settings select,.yoast-settings textarea,.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{margin-top:2em;margin-bottom:.5em}.yoast-settings__textarea--medium{width:100%;max-width:600px}.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{vertical-align:top;position:relative;top:1px}.yoast-settings__group--checkbox,.yoast-settings__group--radio{padding-top:1em}.yoast-settings__group--checkbox .yoast-settings__checkbox,.yoast-settings__group--radio .yoast-settings__radio{margin:0 0 10px 4px}.yoast-settings__checkbox+label,.yoast-settings__radio+label{width:auto;margin-right:0;margin-left:0;padding:0;max-width:calc(100% - 25px)}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{margin-top:0;margin-bottom:10px;font-weight:400}.yoast-settings legend{font-size:14px;font-weight:600;color:#23282d}.yoast-settings .description{margin-top:0;font-size:14px}td .wpseo-score-icon{display:inline-block;width:12px;height:12px;margin-right:5px;border-radius:50%;background:#888;line-height:16px;margin-top:3px}.fixed th.column-wpseo-linked,.fixed th.column-wpseo-links,.fixed th.column-wpseo-score,.fixed th.column-wpseo-score-readability{width:3em;padding:0}th.column-wpseo-linked a,th.column-wpseo-links a,th.column-wpseo-score-readability .yoast-tooltip,th.column-wpseo-score .yoast-tooltip{overflow:visible;display:inline-block;vertical-align:middle;padding:8px 0}th.column-wpseo-score-readability .yoast-tooltip,th.column-wpseo-score .yoast-tooltip{padding:8px 11px}.column-wpseo-links .yoast-tooltip-multiline:after{max-width:160px}.column-wpseo-linked .yoast-tooltip-multiline:after{max-width:170px}.yoast-column-header-has-tooltip{position:relative}.manage-column .yoast-column-header-has-tooltip:before{content:"";display:inline-block;width:20px;height:20px;padding:0;vertical-align:top;text-decoration:none!important;color:#444}.manage-column .yoast-linked-to:before{background:transparent url(../../images/link-out-icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-linked-from:before{background:transparent url(../../images/link-in-icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-column-seo-score:before{background:transparent url(../../images/Yoast_SEO_negative_icon.svg) no-repeat 100% 0;background-size:20px}.manage-column .yoast-column-readability:before{background:transparent url(../../images/readability-icon.svg) no-repeat 100% 0;background-size:20px}td.column-wpseo-linked,td.column-wpseo-links{word-wrap:normal}@media screen and (max-width:782px){.yoast-settings{padding-right:0}.yoast-settings h2{margin-right:0}.yoast-settings label{width:auto;padding:0;margin-left:0;margin-right:0}.yoast-settings__radio+label,.yoast .yoast-settings__radio{margin-bottom:1em}.yoast-settings__checkbox+label,.yoast-settings__radio+label{max-width:calc(100% - 35px);padding-top:8px}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{padding-top:4px}.yoast-settings input[type=text],.yoast-settings select,.yoast-settings textarea{display:block;width:100%;margin-top:0;margin-bottom:0;padding:7px 10px;max-width:none;line-height:1.5;box-sizing:border-box}.screen-reader-text.wpseo-score-text{position:static!important;-webkit-clip-path:none;clip-path:none;width:auto;height:auto;margin:0}}#yoast-help-center-container{margin:16px 0 24px}.react-tabs__tab-panel{max-width:900px;margin:0 auto}.react-tabs__tab-panel li{max-width:none!important}.yoast-help-center-open #sidebar-container{display:none}.contact-premium-support{text-align:center}.contact-premium-support__content{margin:0 auto 1.5em;font-size:.9375rem;line-height:1.4}.contact-premium-support__content:nth-child(2){max-width:610px}.contact-premium-support__content:nth-child(3){max-width:560px}.contact-premium-support .contact-premium-support__button{margin-bottom:48px}.wpseo-premium-description{margin-top:.5em}.wpseo-premium-advantages-list{list-style:disc;padding-right:1.5em}.yoast_help.yoast-help-button{overflow:visible;position:relative;width:20px;height:20px;margin:0;padding:0;border:0;outline:none;color:#72777c;background:transparent;box-shadow:none;vertical-align:top;cursor:pointer}.yoast-section .yoast_help.yoast-help-button{float:left}.help-button-inline .yoast_help.yoast-help-button{margin-top:-4px}.yoast-section .yoast_help.yoast-help-button{margin-top:-44px}.wpseo-admin-page .yoast_help.yoast-help-button{margin-left:6px}.yoast_help .yoast-help-icon:before{position:absolute;top:0;right:0;padding:4px;content:"\f223"}.yoast_help.yoast-help-button:focus,.yoast_help.yoast-help-button:hover{color:#0073aa}.assessment-results__mark:focus,.yoast_help.yoast-help-button:focus .yoast-help-icon:before{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-help-panel{display:none;clear:both;max-width:30em!important;padding:0 0 1em;font-weight:400;white-space:normal}.wpseo-admin-page .yoast-help-panel{max-width:600px!important}.copy-home-meta-description .yoast-help-panel{max-width:400px!important}.yoast-modal_is-open{overflow:hidden}.yoast-alert .yoast-seo-icon{float:right;margin:20px 10px}.yoast-alert .yoast-seo-icon-wrap{margin:0 85px 0 0}.yoast-button-upsell{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;min-height:48px;padding:8px 1em;font-size:16px;line-height:1.5;font-family:Arial,sans-serif;color:#000;border-radius:4px;box-shadow:inset 0 -4px 0 rgba(0,0,0,.2);filter:drop-shadow(0 2px 4px rgba(0,0,0,.2));text-decoration:none;background-color:#fec228}.yoast-button-upsell:active,.yoast-button-upsell:focus,.yoast-button-upsell:hover{color:#000;background-color:#f2ae01}.yoast-button-upsell:focus{box-shadow:inset 0 -4px 0 rgba(0,0,0,.2),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-button-upsell:active{-ms-transform:translateY(1px);transform:translateY(1px);box-shadow:none;filter:none}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.yoast-button-upsell:after{display:inline-block;content:"";min-height:32px}}.yoast-button-upsell#wpseo-premium-button{color:#000}.yoast-button-upsell__caret{-ms-flex-negative:0;flex-shrink:0;width:8px;height:16px;margin:0 6px 0 -2px;background:transparent url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%20192%20512%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M%200%20384%2E662%20V%20127%2E338%20c%200%20%2D17%2E818%2021%2E543%20%2D26%2E741%2034%2E142%20%2D14%2E142%20l%20128%2E662%20128%2E662%20c%207%2E81%207%2E81%207%2E81%2020%2E474%200%2028%2E284%20L%2034%2E142%20398%2E804%20C%2021%2E543%20411%2E404%200%20402%2E48%200%20384%2E662%20Z%22%2F%3E%3C%2Fsvg%3E") 50% no-repeat}.rtl .yoast-button-upsell__caret{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%20192%20512%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M192%20127%2E338v257%2E324c0%2017%2E818%2D21%2E543%2026%2E741%2D34%2E142%2014%2E142L29%2E196%20270%2E142c%2D7%2E81%2D7%2E81%2D7%2E81%2D20%2E474%200%2D28%2E284l128%2E662%2D128%2E662c12%2E599%2D12%2E6%2034%2E142%2D3%2E676%2034%2E142%2014%2E142z%22%2F%3E%3C%2Fsvg%3E")}body.folded .wpseo-admin-submit-fixed{right:36px}@media screen and (max-width:782px){body.folded .wpseo-admin-submit-fixed{right:0}}.wpseo-admin-submit{z-index:5;display:-ms-flexbox;display:flex;padding:16px 0;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:baseline;align-items:baseline;margin:0}.wpseo-admin-submit.wpseo-admin-submit-fixed{padding:16px;position:fixed;bottom:0;right:160px;left:281px;background-color:#fff;max-width:800px;box-shadow:0 1px 8px 1px rgba(0,0,0,.5);margin:0 16px}@media screen and (max-width:1024px){.wpseo-admin-submit.wpseo-admin-submit-fixed{left:0}}@media only screen and (max-width:960px){.wpseo-admin-submit.wpseo-admin-submit-fixed{right:36px}}@media screen and (max-width:782px){.wpseo-admin-submit.wpseo-admin-submit-fixed{right:0;margin:0}}.wpseo-admin-submit p.submit{padding:0;margin:0}.wpseo-admin-submit p.wpseo-message{margin:0 0 0 16px;padding:0;color:#008a00}
css/dist/{admin-global-1220.min.css → admin-global-1230.min.css} RENAMED
@@ -1 +1 @@
1
- .wpseo-premium-indicator{width:1px;height:1px;display:inline-block}#adminmenu .wpseo-premium-indicator{margin:-2px 0 -3px 2px;color:inherit}.wpseo-premium-indicator svg{height:100%;width:auto;display:none}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip:after{display:none;position:absolute;z-index:1000000;padding:6px 8px 5px;border-radius:3px;opacity:0;color:#fff;background:rgba(0,0,0,.8);text-shadow:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center;white-space:pre;text-decoration:none;letter-spacing:normal;text-transform:none;word-wrap:break-word;content:attr(aria-label);pointer-events:none;-webkit-font-smoothing:subpixel-antialiased}.yoast-tooltip-alt:after{content:attr(data-label)}.yoast-tooltip:before{display:none;position:absolute;z-index:1000001;width:0;height:0;border:5px solid transparent;opacity:0;color:rgba(0,0,0,.8);content:"\00a0";pointer-events:none}@keyframes yoast-tooltip-appear{0%{opacity:0}to{opacity:1}}.yoast-tooltip:active:after,.yoast-tooltip:active:before,.yoast-tooltip:focus:after,.yoast-tooltip:focus:before,.yoast-tooltip:hover:after,.yoast-tooltip:hover:before{display:inline-block;text-decoration:none;animation-name:yoast-tooltip-appear;animation-duration:.1s;animation-timing-function:ease-in;animation-delay:.4s;animation-fill-mode:forwards}.yoast-tooltip-no-delay:active:after,.yoast-tooltip-no-delay:active:before,.yoast-tooltip-no-delay:focus:after,.yoast-tooltip-no-delay:focus:before,.yoast-tooltip-no-delay:hover:after,.yoast-tooltip-no-delay:hover:before{opacity:1;animation:none}.yoast-tooltip-multiline:active:after,.yoast-tooltip-multiline:focus:after,.yoast-tooltip-multiline:hover:after{display:table-cell}.yoast-tooltip-s:after,.yoast-tooltip-se:after,.yoast-tooltip-sw:after{top:100%;right:50%;margin-top:5px}.yoast-tooltip-s:before,.yoast-tooltip-se:before,.yoast-tooltip-sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.yoast-tooltip-se:after{right:auto;left:50%;margin-left:-15px}.yoast-tooltip-sw:after{margin-right:-15px}.yoast-tooltip-n:after,.yoast-tooltip-ne:after,.yoast-tooltip-nw:after{right:50%;bottom:100%;margin-bottom:5px}.yoast-tooltip-n:before,.yoast-tooltip-ne:before,.yoast-tooltip-nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.yoast-tooltip-ne:after{right:auto;left:50%;margin-left:-15px}.yoast-tooltip-nw:after{margin-right:-15px}.yoast-tooltip-n:after,.yoast-tooltip-s:after{-ms-transform:translateX(50%);transform:translateX(50%)}.yoast-tooltip-w:after{right:100%;bottom:50%;margin-right:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.yoast-tooltip-e:after{bottom:50%;left:100%;margin-left:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.yoast-tooltip-multiline:after{width:250px;width:-webkit-max-content;width:max-content;max-width:250px;border-collapse:separate;white-space:pre-line;word-wrap:normal;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n:after,.yoast-tooltip-multiline.yoast-tooltip-s:after{right:auto;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%)}.yoast-tooltip-multiline.yoast-tooltip-e:after,.yoast-tooltip-multiline.yoast-tooltip-w:after{right:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline:after{width:250px}}.yoast-tooltip-sticky:after,.yoast-tooltip-sticky:before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline:after{display:table-cell}@media only screen and (-moz-min-device-pixel-ratio:2),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.yoast-tooltip-w:after{margin-right:4.5px}}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none}.yoast-measure{max-width:600px}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{margin:0 10px 0 0;font-size:14px;font-weight:600}.wpseo-help-center-sub-title,.wpseo-premium-popup-title{margin:1em 0!important;padding:0!important;font-size:1.3em!important;font-weight:600!important}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{max-width:100%;height:auto}.select2-search__field{margin:0}.select2-results__option,.select2-search--inline,.select2-selection__choice{margin-bottom:0}.select2-container .select2-search--inline .select2-search__field{margin-top:6px!important;line-height:inherit}.yoast-label-strong{font-weight:600}.yoast-video-container-max-width{max-width:560px}.yoast-video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.yoast-video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.yoast-settings{margin-bottom:2em;padding-left:220px}.yoast-settings h2{margin-bottom:0;margin-left:-220px}.yoast-settings label{display:inline-block;width:200px;padding-top:4px;padding-right:10px;margin-right:6px;margin-left:-220px;font-size:14px;line-height:1.3;font-weight:600;color:#23282d;vertical-align:top}.yoast-settings fieldset,.yoast-settings input[type=text],.yoast-settings label,.yoast-settings select,.yoast-settings textarea,.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{margin-top:2em;margin-bottom:.5em}.yoast-settings__textarea--medium{width:100%;max-width:600px}.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{vertical-align:top;position:relative;top:1px}.yoast-settings__group--checkbox,.yoast-settings__group--radio{padding-top:1em}.yoast-settings__group--checkbox .yoast-settings__checkbox,.yoast-settings__group--radio .yoast-settings__radio{margin:0 4px 10px 0}.yoast-settings__checkbox+label,.yoast-settings__radio+label{width:auto;margin-left:0;margin-right:0;padding:0;max-width:calc(100% - 25px)}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{margin-top:0;margin-bottom:10px;font-weight:400}.yoast-settings legend{font-size:14px;font-weight:600;color:#23282d}.yoast-settings .description{margin-top:0;font-size:14px}td .wpseo-score-icon{display:inline-block;width:12px;height:12px;margin-left:5px;border-radius:50%;background:#888;line-height:16px;margin-top:3px}.fixed th.column-wpseo-linked,.fixed th.column-wpseo-links,.fixed th.column-wpseo-score,.fixed th.column-wpseo-score-readability{width:3em;padding:0}th.column-wpseo-linked a,th.column-wpseo-links a,th.column-wpseo-score-readability .yoast-tooltip,th.column-wpseo-score .yoast-tooltip{overflow:visible;display:inline-block;vertical-align:middle;padding:8px 0}th.column-wpseo-score-readability .yoast-tooltip,th.column-wpseo-score .yoast-tooltip{padding:8px 11px}.column-wpseo-links .yoast-tooltip-multiline:after{max-width:160px}.column-wpseo-linked .yoast-tooltip-multiline:after{max-width:170px}.yoast-column-header-has-tooltip{position:relative}.manage-column .yoast-column-header-has-tooltip:before{content:"";display:inline-block;width:20px;height:20px;padding:0;vertical-align:top;text-decoration:none!important;color:#444}.manage-column .yoast-linked-to:before{background:transparent url(../../images/link-out-icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-linked-from:before{background:transparent url(../../images/link-in-icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-column-seo-score:before{background:transparent url(../../images/Yoast_SEO_negative_icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-column-readability:before{background:transparent url(../../images/readability-icon.svg) no-repeat 0 0;background-size:20px}td.column-wpseo-linked,td.column-wpseo-links{word-wrap:normal}@media screen and (max-width:782px){.yoast-settings{padding-left:0}.yoast-settings h2{margin-left:0}.yoast-settings label{width:auto;padding:0;margin-right:0;margin-left:0}.yoast-settings__radio+label,.yoast .yoast-settings__radio{margin-bottom:1em}.yoast-settings__checkbox+label,.yoast-settings__radio+label{max-width:calc(100% - 35px);padding-top:8px}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{padding-top:4px}.yoast-settings input[type=text],.yoast-settings select,.yoast-settings textarea{display:block;width:100%;margin-top:0;margin-bottom:0;padding:7px 10px;max-width:none;line-height:1.5;box-sizing:border-box}.screen-reader-text.wpseo-score-text{position:static!important;-webkit-clip-path:none;clip-path:none;width:auto;height:auto;margin:0}}#yoast-help-center-container{margin:16px 0 24px}.react-tabs__tab-panel{max-width:900px;margin:0 auto}.react-tabs__tab-panel li{max-width:none!important}.yoast-help-center-open #sidebar-container{display:none}.contact-premium-support{text-align:center}.contact-premium-support__content{margin:0 auto 1.5em;font-size:.9375rem;line-height:1.4}.contact-premium-support__content:nth-child(2){max-width:610px}.contact-premium-support__content:nth-child(3){max-width:560px}.contact-premium-support .contact-premium-support__button{margin-bottom:48px}.wpseo-premium-description{margin-top:.5em}.wpseo-premium-advantages-list{list-style:disc;padding-left:1.5em}.yoast_help.yoast-help-button{overflow:visible;position:relative;width:20px;height:20px;margin:0;padding:0;border:0;outline:none;color:#72777c;background:transparent;box-shadow:none;vertical-align:top;cursor:pointer}.yoast-section .yoast_help.yoast-help-button{float:right}.help-button-inline .yoast_help.yoast-help-button{margin-top:-4px}.yoast-section .yoast_help.yoast-help-button{margin-top:-44px}.wpseo-admin-page .yoast_help.yoast-help-button{margin-right:6px}.yoast_help .yoast-help-icon:before{position:absolute;top:0;left:0;padding:4px;content:"\f223"}.yoast_help.yoast-help-button:focus,.yoast_help.yoast-help-button:hover{color:#0073aa}.assessment-results__mark:focus,.yoast_help.yoast-help-button:focus .yoast-help-icon:before{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-help-panel{display:none;clear:both;max-width:30em!important;padding:0 0 1em;font-weight:400;white-space:normal}.wpseo-admin-page .yoast-help-panel{max-width:600px!important}.copy-home-meta-description .yoast-help-panel{max-width:400px!important}.yoast-modal_is-open{overflow:hidden}.yoast-alert .yoast-seo-icon{float:left;margin:20px 10px}.yoast-alert .yoast-seo-icon-wrap{margin:0 0 0 85px}.yoast-button-upsell{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;min-height:48px;padding:8px 1em;font-size:16px;line-height:1.5;font-family:Arial,sans-serif;color:#000;border-radius:4px;box-shadow:inset 0 -4px 0 rgba(0,0,0,.2);filter:drop-shadow(0 2px 4px rgba(0,0,0,.2));text-decoration:none;background-color:#fec228}.yoast-button-upsell:active,.yoast-button-upsell:focus,.yoast-button-upsell:hover{color:#000;background-color:#f2ae01}.yoast-button-upsell:focus{box-shadow:inset 0 -4px 0 rgba(0,0,0,.2),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-button-upsell:active{-ms-transform:translateY(1px);transform:translateY(1px);box-shadow:none;filter:none}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.yoast-button-upsell:after{display:inline-block;content:"";min-height:32px}}.yoast-button-upsell#wpseo-premium-button{color:#000}.yoast-button-upsell__caret{-ms-flex-negative:0;flex-shrink:0;width:8px;height:16px;margin:0 -2px 0 6px;background:transparent url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%20192%20512%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M%200%20384%2E662%20V%20127%2E338%20c%200%20%2D17%2E818%2021%2E543%20%2D26%2E741%2034%2E142%20%2D14%2E142%20l%20128%2E662%20128%2E662%20c%207%2E81%207%2E81%207%2E81%2020%2E474%200%2028%2E284%20L%2034%2E142%20398%2E804%20C%2021%2E543%20411%2E404%200%20402%2E48%200%20384%2E662%20Z%22%2F%3E%3C%2Fsvg%3E") 50% no-repeat}.rtl .yoast-button-upsell__caret{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%20192%20512%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M192%20127%2E338v257%2E324c0%2017%2E818%2D21%2E543%2026%2E741%2D34%2E142%2014%2E142L29%2E196%20270%2E142c%2D7%2E81%2D7%2E81%2D7%2E81%2D20%2E474%200%2D28%2E284l128%2E662%2D128%2E662c12%2E599%2D12%2E6%2034%2E142%2D3%2E676%2034%2E142%2014%2E142z%22%2F%3E%3C%2Fsvg%3E")}
1
+ .wpseo-premium-indicator{width:1px;height:1px;display:inline-block}#adminmenu .wpseo-premium-indicator{margin:-2px 0 -3px 2px;color:inherit}.wpseo-premium-indicator svg{height:100%;width:auto;display:none}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip:after{display:none;position:absolute;z-index:1000000;padding:6px 8px 5px;border-radius:3px;opacity:0;color:#fff;background:rgba(0,0,0,.8);text-shadow:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center;white-space:pre;text-decoration:none;letter-spacing:normal;text-transform:none;word-wrap:break-word;content:attr(aria-label);pointer-events:none;-webkit-font-smoothing:subpixel-antialiased}.yoast-tooltip-alt:after{content:attr(data-label)}.yoast-tooltip:before{display:none;position:absolute;z-index:1000001;width:0;height:0;border:5px solid transparent;opacity:0;color:rgba(0,0,0,.8);content:"\00a0";pointer-events:none}@keyframes yoast-tooltip-appear{0%{opacity:0}to{opacity:1}}.yoast-tooltip:active:after,.yoast-tooltip:active:before,.yoast-tooltip:focus:after,.yoast-tooltip:focus:before,.yoast-tooltip:hover:after,.yoast-tooltip:hover:before{display:inline-block;text-decoration:none;animation-name:yoast-tooltip-appear;animation-duration:.1s;animation-timing-function:ease-in;animation-delay:.4s;animation-fill-mode:forwards}.yoast-tooltip-no-delay:active:after,.yoast-tooltip-no-delay:active:before,.yoast-tooltip-no-delay:focus:after,.yoast-tooltip-no-delay:focus:before,.yoast-tooltip-no-delay:hover:after,.yoast-tooltip-no-delay:hover:before{opacity:1;animation:none}.yoast-tooltip-multiline:active:after,.yoast-tooltip-multiline:focus:after,.yoast-tooltip-multiline:hover:after{display:table-cell}.yoast-tooltip-s:after,.yoast-tooltip-se:after,.yoast-tooltip-sw:after{top:100%;right:50%;margin-top:5px}.yoast-tooltip-s:before,.yoast-tooltip-se:before,.yoast-tooltip-sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.yoast-tooltip-se:after{right:auto;left:50%;margin-left:-15px}.yoast-tooltip-sw:after{margin-right:-15px}.yoast-tooltip-n:after,.yoast-tooltip-ne:after,.yoast-tooltip-nw:after{right:50%;bottom:100%;margin-bottom:5px}.yoast-tooltip-n:before,.yoast-tooltip-ne:before,.yoast-tooltip-nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.yoast-tooltip-ne:after{right:auto;left:50%;margin-left:-15px}.yoast-tooltip-nw:after{margin-right:-15px}.yoast-tooltip-n:after,.yoast-tooltip-s:after{-ms-transform:translateX(50%);transform:translateX(50%)}.yoast-tooltip-w:after{right:100%;bottom:50%;margin-right:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.yoast-tooltip-e:after{bottom:50%;left:100%;margin-left:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.yoast-tooltip-multiline:after{width:250px;width:-webkit-max-content;width:max-content;max-width:250px;border-collapse:separate;white-space:pre-line;word-wrap:normal;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n:after,.yoast-tooltip-multiline.yoast-tooltip-s:after{right:auto;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%)}.yoast-tooltip-multiline.yoast-tooltip-e:after,.yoast-tooltip-multiline.yoast-tooltip-w:after{right:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline:after{width:250px}}.yoast-tooltip-sticky:after,.yoast-tooltip-sticky:before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline:after{display:table-cell}@media only screen and (-moz-min-device-pixel-ratio:2),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.yoast-tooltip-w:after{margin-right:4.5px}}.yoast-tooltip.yoast-tooltip-hidden:after,.yoast-tooltip.yoast-tooltip-hidden:before{display:none}.yoast-measure{max-width:600px}#TB_window .wpseo_content_wrapper p{font-size:14px;font-style:normal}#TB_window .wpseo_content_wrapper label{margin:0 10px 0 0;font-size:14px;font-weight:600}.wpseo-help-center-sub-title,.wpseo-premium-popup-title{margin:1em 0!important;padding:0!important;font-size:1.3em!important;font-weight:600!important}.wpseo-premium-popup-icon{margin:10px}.edit-tags-php .column-description img{max-width:100%;height:auto}.select2-search__field{margin:0}.select2-results__option,.select2-search--inline,.select2-selection__choice{margin-bottom:0}.select2-container .select2-search--inline .select2-search__field{margin-top:6px!important;line-height:inherit}.yoast-label-strong{font-weight:600}.yoast-video-container-max-width{max-width:560px}.yoast-video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.yoast-video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.yoast-settings{margin-bottom:2em;padding-left:220px}.yoast-settings h2{margin-bottom:0;margin-left:-220px}.yoast-settings label{display:inline-block;width:200px;padding-top:4px;padding-right:10px;margin-right:6px;margin-left:-220px;font-size:14px;line-height:1.3;font-weight:600;color:#23282d;vertical-align:top}.yoast-settings fieldset,.yoast-settings input[type=text],.yoast-settings label,.yoast-settings select,.yoast-settings textarea,.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{margin-top:2em;margin-bottom:.5em}.yoast-settings__textarea--medium{width:100%;max-width:600px}.yoast .yoast-settings__checkbox,.yoast .yoast-settings__radio{vertical-align:top;position:relative;top:1px}.yoast-settings__group--checkbox,.yoast-settings__group--radio{padding-top:1em}.yoast-settings__group--checkbox .yoast-settings__checkbox,.yoast-settings__group--radio .yoast-settings__radio{margin:0 4px 10px 0}.yoast-settings__checkbox+label,.yoast-settings__radio+label{width:auto;margin-left:0;margin-right:0;padding:0;max-width:calc(100% - 25px)}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{margin-top:0;margin-bottom:10px;font-weight:400}.yoast-settings legend{font-size:14px;font-weight:600;color:#23282d}.yoast-settings .description{margin-top:0;font-size:14px}td .wpseo-score-icon{display:inline-block;width:12px;height:12px;margin-left:5px;border-radius:50%;background:#888;line-height:16px;margin-top:3px}.fixed th.column-wpseo-linked,.fixed th.column-wpseo-links,.fixed th.column-wpseo-score,.fixed th.column-wpseo-score-readability{width:3em;padding:0}th.column-wpseo-linked a,th.column-wpseo-links a,th.column-wpseo-score-readability .yoast-tooltip,th.column-wpseo-score .yoast-tooltip{overflow:visible;display:inline-block;vertical-align:middle;padding:8px 0}th.column-wpseo-score-readability .yoast-tooltip,th.column-wpseo-score .yoast-tooltip{padding:8px 11px}.column-wpseo-links .yoast-tooltip-multiline:after{max-width:160px}.column-wpseo-linked .yoast-tooltip-multiline:after{max-width:170px}.yoast-column-header-has-tooltip{position:relative}.manage-column .yoast-column-header-has-tooltip:before{content:"";display:inline-block;width:20px;height:20px;padding:0;vertical-align:top;text-decoration:none!important;color:#444}.manage-column .yoast-linked-to:before{background:transparent url(../../images/link-out-icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-linked-from:before{background:transparent url(../../images/link-in-icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-column-seo-score:before{background:transparent url(../../images/Yoast_SEO_negative_icon.svg) no-repeat 0 0;background-size:20px}.manage-column .yoast-column-readability:before{background:transparent url(../../images/readability-icon.svg) no-repeat 0 0;background-size:20px}td.column-wpseo-linked,td.column-wpseo-links{word-wrap:normal}@media screen and (max-width:782px){.yoast-settings{padding-left:0}.yoast-settings h2{margin-left:0}.yoast-settings label{width:auto;padding:0;margin-right:0;margin-left:0}.yoast-settings__radio+label,.yoast .yoast-settings__radio{margin-bottom:1em}.yoast-settings__checkbox+label,.yoast-settings__radio+label{max-width:calc(100% - 35px);padding-top:8px}.yoast-settings__group--checkbox .yoast-settings__checkbox+label,.yoast-settings__group--radio .yoast-settings__radio+label{padding-top:4px}.yoast-settings input[type=text],.yoast-settings select,.yoast-settings textarea{display:block;width:100%;margin-top:0;margin-bottom:0;padding:7px 10px;max-width:none;line-height:1.5;box-sizing:border-box}.screen-reader-text.wpseo-score-text{position:static!important;-webkit-clip-path:none;clip-path:none;width:auto;height:auto;margin:0}}#yoast-help-center-container{margin:16px 0 24px}.react-tabs__tab-panel{max-width:900px;margin:0 auto}.react-tabs__tab-panel li{max-width:none!important}.yoast-help-center-open #sidebar-container{display:none}.contact-premium-support{text-align:center}.contact-premium-support__content{margin:0 auto 1.5em;font-size:.9375rem;line-height:1.4}.contact-premium-support__content:nth-child(2){max-width:610px}.contact-premium-support__content:nth-child(3){max-width:560px}.contact-premium-support .contact-premium-support__button{margin-bottom:48px}.wpseo-premium-description{margin-top:.5em}.wpseo-premium-advantages-list{list-style:disc;padding-left:1.5em}.yoast_help.yoast-help-button{overflow:visible;position:relative;width:20px;height:20px;margin:0;padding:0;border:0;outline:none;color:#72777c;background:transparent;box-shadow:none;vertical-align:top;cursor:pointer}.yoast-section .yoast_help.yoast-help-button{float:right}.help-button-inline .yoast_help.yoast-help-button{margin-top:-4px}.yoast-section .yoast_help.yoast-help-button{margin-top:-44px}.wpseo-admin-page .yoast_help.yoast-help-button{margin-right:6px}.yoast_help .yoast-help-icon:before{position:absolute;top:0;left:0;padding:4px;content:"\f223"}.yoast_help.yoast-help-button:focus,.yoast_help.yoast-help-button:hover{color:#0073aa}.assessment-results__mark:focus,.yoast_help.yoast-help-button:focus .yoast-help-icon:before{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-help-panel{display:none;clear:both;max-width:30em!important;padding:0 0 1em;font-weight:400;white-space:normal}.wpseo-admin-page .yoast-help-panel{max-width:600px!important}.copy-home-meta-description .yoast-help-panel{max-width:400px!important}.yoast-modal_is-open{overflow:hidden}.yoast-alert .yoast-seo-icon{float:left;margin:20px 10px}.yoast-alert .yoast-seo-icon-wrap{margin:0 0 0 85px}.yoast-button-upsell{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;min-height:48px;padding:8px 1em;font-size:16px;line-height:1.5;font-family:Arial,sans-serif;color:#000;border-radius:4px;box-shadow:inset 0 -4px 0 rgba(0,0,0,.2);filter:drop-shadow(0 2px 4px rgba(0,0,0,.2));text-decoration:none;background-color:#fec228}.yoast-button-upsell:active,.yoast-button-upsell:focus,.yoast-button-upsell:hover{color:#000;background-color:#f2ae01}.yoast-button-upsell:focus{box-shadow:inset 0 -4px 0 rgba(0,0,0,.2),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-button-upsell:active{-ms-transform:translateY(1px);transform:translateY(1px);box-shadow:none;filter:none}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.yoast-button-upsell:after{display:inline-block;content:"";min-height:32px}}.yoast-button-upsell#wpseo-premium-button{color:#000}.yoast-button-upsell__caret{-ms-flex-negative:0;flex-shrink:0;width:8px;height:16px;margin:0 -2px 0 6px;background:transparent url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%20192%20512%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M%200%20384%2E662%20V%20127%2E338%20c%200%20%2D17%2E818%2021%2E543%20%2D26%2E741%2034%2E142%20%2D14%2E142%20l%20128%2E662%20128%2E662%20c%207%2E81%207%2E81%207%2E81%2020%2E474%200%2028%2E284%20L%2034%2E142%20398%2E804%20C%2021%2E543%20411%2E404%200%20402%2E48%200%20384%2E662%20Z%22%2F%3E%3C%2Fsvg%3E") 50% no-repeat}.rtl .yoast-button-upsell__caret{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%20192%20512%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23000%22%20d%3D%22M192%20127%2E338v257%2E324c0%2017%2E818%2D21%2E543%2026%2E741%2D34%2E142%2014%2E142L29%2E196%20270%2E142c%2D7%2E81%2D7%2E81%2D7%2E81%2D20%2E474%200%2D28%2E284l128%2E662%2D128%2E662c12%2E599%2D12%2E6%2034%2E142%2D3%2E676%2034%2E142%2014%2E142z%22%2F%3E%3C%2Fsvg%3E")}body.folded .wpseo-admin-submit-fixed{left:36px}@media screen and (max-width:782px){body.folded .wpseo-admin-submit-fixed{left:0}}.wpseo-admin-submit{z-index:5;display:-ms-flexbox;display:flex;padding:16px 0;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:baseline;align-items:baseline;margin:0}.wpseo-admin-submit.wpseo-admin-submit-fixed{padding:16px;position:fixed;bottom:0;left:160px;right:281px;background-color:#fff;max-width:800px;box-shadow:0 1px 8px 1px rgba(0,0,0,.5);margin:0 16px}@media screen and (max-width:1024px){.wpseo-admin-submit.wpseo-admin-submit-fixed{right:0}}@media only screen and (max-width:960px){.wpseo-admin-submit.wpseo-admin-submit-fixed{left:36px}}@media screen and (max-width:782px){.wpseo-admin-submit.wpseo-admin-submit-fixed{left:0;margin:0}}.wpseo-admin-submit p.submit{padding:0;margin:0}.wpseo-admin-submit p.wpseo-message{margin:0 16px 0 0;padding:0;color:#008a00}
css/dist/{adminbar-1220-rtl.min.css → adminbar-1230-rtl.min.css} RENAMED
File without changes
css/dist/{adminbar-1220.min.css → adminbar-1230.min.css} RENAMED
File without changes
css/dist/{alerts-1220-rtl.min.css → alerts-1230-rtl.min.css} RENAMED
File without changes
css/dist/{alerts-1220.min.css → alerts-1230.min.css} RENAMED
File without changes
css/dist/{dashboard-1220-rtl.min.css → dashboard-1230-rtl.min.css} RENAMED
File without changes
css/dist/{dashboard-1220.min.css → dashboard-1230.min.css} RENAMED
File without changes
css/dist/{edit-page-1220-rtl.min.css → edit-page-1230-rtl.min.css} RENAMED
File without changes
css/dist/{edit-page-1220.min.css → edit-page-1230.min.css} RENAMED
File without changes
css/dist/{featured-image-1220-rtl.min.css → featured-image-1230-rtl.min.css} RENAMED
File without changes
css/dist/{featured-image-1220.min.css → featured-image-1230.min.css} RENAMED
File without changes
css/dist/{filter-explanation-1220-rtl.min.css → filter-explanation-1230-rtl.min.css} RENAMED
File without changes
css/dist/{filter-explanation-1220.min.css → filter-explanation-1230.min.css} RENAMED
File without changes
css/dist/{inside-editor-1220-rtl.min.css → inside-editor-1230-rtl.min.css} RENAMED
File without changes
css/dist/{inside-editor-1220.min.css → inside-editor-1230.min.css} RENAMED
File without changes
css/dist/{metabox-1220-rtl.min.css → metabox-1230-rtl.min.css} RENAMED
File without changes
css/dist/{metabox-1220.min.css → metabox-1230.min.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1220-rtl.min.css → metabox-primary-category-1230-rtl.min.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1220.min.css → metabox-primary-category-1230.min.css} RENAMED
File without changes
css/dist/{search-appearance-1220-rtl.min.css → search-appearance-1230-rtl.min.css} RENAMED
File without changes
css/dist/{search-appearance-1220.min.css → search-appearance-1230.min.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1220-rtl.min.css → structured-data-blocks-1230-rtl.min.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1220.min.css → structured-data-blocks-1230.min.css} RENAMED
File without changes
css/dist/{toggle-switch-1220-rtl.min.css → toggle-switch-1230-rtl.min.css} RENAMED
File without changes
css/dist/{toggle-switch-1220.min.css → toggle-switch-1230.min.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1220-rtl.min.css → wpseo-dismissible-1230-rtl.min.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1220.min.css → wpseo-dismissible-1230.min.css} RENAMED
File without changes
css/dist/{yoast-components-1220-rtl.min.css → yoast-components-1230-rtl.min.css} RENAMED
File without changes
css/dist/{yoast-components-1220.min.css → yoast-components-1230.min.css} RENAMED
File without changes
css/dist/{yoast-extensions-1220-rtl.min.css → yoast-extensions-1230-rtl.min.css} RENAMED
File without changes
css/dist/{yoast-extensions-1220.min.css → yoast-extensions-1230.min.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1220-rtl.min.css → yst_plugin_tools-1230-rtl.min.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1220.min.css → yst_plugin_tools-1230.min.css} RENAMED
File without changes
css/dist/{yst_seo_score-1220-rtl.min.css → yst_seo_score-1230-rtl.min.css} RENAMED
File without changes
css/dist/{yst_seo_score-1220.min.css → yst_seo_score-1230.min.css} RENAMED
File without changes
{admin/metabox → deprecated/admin}/class-metabox-tab-section.php RENAMED
@@ -20,6 +20,9 @@ class WPSEO_Metabox_Tab_Section extends WPSEO_Abstract_Metabox_Tab_With_Sections
20
  /**
21
  * Constructor.
22
  *
 
 
 
23
  * @param string $name The name of the section, used as an identifier in the html.
24
  * Can only contain URL safe characters.
25
  * @param string $link_content The text content of the section link.
@@ -27,6 +30,8 @@ class WPSEO_Metabox_Tab_Section extends WPSEO_Abstract_Metabox_Tab_With_Sections
27
  * @param array $options Optional link attributes.
28
  */
29
  public function __construct( $name, $link_content, array $tabs = array(), array $options = array() ) {
 
 
30
  parent::__construct( $name, $link_content, $options );
31
 
32
  // Filter out invalid tab instances.
@@ -40,11 +45,16 @@ class WPSEO_Metabox_Tab_Section extends WPSEO_Abstract_Metabox_Tab_With_Sections
40
  /**
41
  * Determines whether the passed tab is considered valid.
42
  *
 
 
 
43
  * @param mixed $tab The potential tab that needs to be validated.
44
  *
45
  * @return bool Whether or not the tab is valid.
46
  */
47
  protected function is_valid_tab( $tab ) {
 
 
48
  if ( $tab instanceof WPSEO_Metabox_Tab && ! $tab instanceof WPSEO_Metabox_Null_Tab ) {
49
  return true;
50
  }
@@ -54,8 +64,13 @@ class WPSEO_Metabox_Tab_Section extends WPSEO_Abstract_Metabox_Tab_With_Sections
54
 
55
  /**
56
  * Outputs the section content if any tab has been added.
 
 
 
57
  */
58
  public function display_content() {
 
 
59
  if ( $this->has_sections() ) {
60
  $html = '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section">';
61
  $html .= '<div class="wpseo-metabox-tabs-div">';
@@ -63,10 +78,13 @@ class WPSEO_Metabox_Tab_Section extends WPSEO_Abstract_Metabox_Tab_With_Sections
63
  $html .= '</div></div>';
64
 
65
  printf(
 
66
  $html,
67
  esc_attr( $this->name ),
68
  esc_attr( 'wpseo-metabox-tab-' . $this->name ),
 
69
  $this->tab_links(),
 
70
  $this->tab_content()
71
  );
72
  }
@@ -75,27 +93,42 @@ class WPSEO_Metabox_Tab_Section extends WPSEO_Abstract_Metabox_Tab_With_Sections
75
  /**
76
  * Add a `WPSEO_Metabox_Tab` object to the tabs.
77
  *
 
 
 
78
  * @param WPSEO_Metabox_Tab $tab Tab to add.
79
  */
80
  public function add_tab( WPSEO_Metabox_Tab $tab ) {
 
 
81
  $this->tabs[] = $tab;
82
  }
83
 
84
  /**
85
  * Checks if any tabs have been added to the section.
86
  *
 
 
 
87
  * @return bool
88
  */
89
  protected function has_sections() {
 
 
90
  return ! empty( $this->tabs );
91
  }
92
 
93
  /**
94
  * Concatenates all tabs' links into one html string.
95
  *
 
 
 
96
  * @return string
97
  */
98
  private function tab_links() {
 
 
99
  $links = '';
100
  foreach ( $this->tabs as $tab ) {
101
  $links .= $tab->link();
@@ -106,9 +139,14 @@ class WPSEO_Metabox_Tab_Section extends WPSEO_Abstract_Metabox_Tab_With_Sections
106
  /**
107
  * Concatenates all tabs' content into one html string.
108
  *
 
 
 
109
  * @return string
110
  */
111
  private function tab_content() {
 
 
112
  $content = '';
113
  foreach ( $this->tabs as $tab ) {
114
  $content .= $tab->content();
@@ -119,9 +157,14 @@ class WPSEO_Metabox_Tab_Section extends WPSEO_Abstract_Metabox_Tab_With_Sections
119
  /**
120
  * Gets the name of the tab section.
121
  *
 
 
 
122
  * @return string The name of the tab section.
123
  */
124
  public function get_name() {
 
 
125
  return $this->name;
126
  }
127
  }
20
  /**
21
  * Constructor.
22
  *
23
+ * @deprecated 12.3
24
+ * @codeCoverageIgnore
25
+ *
26
  * @param string $name The name of the section, used as an identifier in the html.
27
  * Can only contain URL safe characters.
28
  * @param string $link_content The text content of the section link.
30
  * @param array $options Optional link attributes.
31
  */
32
  public function __construct( $name, $link_content, array $tabs = array(), array $options = array() ) {
33
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
34
+
35
  parent::__construct( $name, $link_content, $options );
36
 
37
  // Filter out invalid tab instances.
45
  /**
46
  * Determines whether the passed tab is considered valid.
47
  *
48
+ * @deprecated 12.3
49
+ * @codeCoverageIgnore
50
+ *
51
  * @param mixed $tab The potential tab that needs to be validated.
52
  *
53
  * @return bool Whether or not the tab is valid.
54
  */
55
  protected function is_valid_tab( $tab ) {
56
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
57
+
58
  if ( $tab instanceof WPSEO_Metabox_Tab && ! $tab instanceof WPSEO_Metabox_Null_Tab ) {
59
  return true;
60
  }
64
 
65
  /**
66
  * Outputs the section content if any tab has been added.
67
+ *
68
+ * @deprecated 12.3
69
+ * @codeCoverageIgnore
70
  */
71
  public function display_content() {
72
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
73
+
74
  if ( $this->has_sections() ) {
75
  $html = '<div role="tabpanel" id="wpseo-meta-section-%1$s" aria-labelledby="wpseo-meta-tab-%1$s" tabindex="0" class="wpseo-meta-section">';
76
  $html .= '<div class="wpseo-metabox-tabs-div">';
78
  $html .= '</div></div>';
79
 
80
  printf(
81
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: This is deprecated.
82
  $html,
83
  esc_attr( $this->name ),
84
  esc_attr( 'wpseo-metabox-tab-' . $this->name ),
85
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: This is deprecated.
86
  $this->tab_links(),
87
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: This is deprecated.
88
  $this->tab_content()
89
  );
90
  }
93
  /**
94
  * Add a `WPSEO_Metabox_Tab` object to the tabs.
95
  *
96
+ * @deprecated 12.3
97
+ * @codeCoverageIgnore
98
+ *
99
  * @param WPSEO_Metabox_Tab $tab Tab to add.
100
  */
101
  public function add_tab( WPSEO_Metabox_Tab $tab ) {
102
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
103
+
104
  $this->tabs[] = $tab;
105
  }
106
 
107
  /**
108
  * Checks if any tabs have been added to the section.
109
  *
110
+ * @deprecated 12.3
111
+ * @codeCoverageIgnore
112
+ *
113
  * @return bool
114
  */
115
  protected function has_sections() {
116
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
117
+
118
  return ! empty( $this->tabs );
119
  }
120
 
121
  /**
122
  * Concatenates all tabs' links into one html string.
123
  *
124
+ * @deprecated 12.3
125
+ * @codeCoverageIgnore
126
+ *
127
  * @return string
128
  */
129
  private function tab_links() {
130
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
131
+
132
  $links = '';
133
  foreach ( $this->tabs as $tab ) {
134
  $links .= $tab->link();
139
  /**
140
  * Concatenates all tabs' content into one html string.
141
  *
142
+ * @deprecated 12.3
143
+ * @codeCoverageIgnore
144
+ *
145
  * @return string
146
  */
147
  private function tab_content() {
148
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
149
+
150
  $content = '';
151
  foreach ( $this->tabs as $tab ) {
152
  $content .= $tab->content();
157
  /**
158
  * Gets the name of the tab section.
159
  *
160
+ * @deprecated 12.3
161
+ * @codeCoverageIgnore
162
+ *
163
  * @return string The name of the tab section.
164
  */
165
  public function get_name() {
166
+ _deprecated_function( __METHOD__, 'WPSEO 12.3' );
167
+
168
  return $this->name;
169
  }
170
  }
frontend/schema/class-schema-utils.php CHANGED
@@ -23,6 +23,9 @@ class WPSEO_Schema_Utils {
23
  public static function get_user_schema_id( $user_id, $context ) {
24
  $user = get_userdata( $user_id );
25
 
26
- return $context->site_url . WPSEO_Schema_IDs::PERSON_HASH . wp_hash( $user->user_login . $user_id );
 
 
 
27
  }
28
  }
23
  public static function get_user_schema_id( $user_id, $context ) {
24
  $user = get_userdata( $user_id );
25
 
26
+ if ( is_object( $user ) && isset( $user->user_login ) ) {
27
+ return $context->site_url . WPSEO_Schema_IDs::PERSON_HASH . wp_hash( $user->user_login . $user_id );
28
+ }
29
+ return $context->site_url . WPSEO_Schema_IDs::PERSON_HASH;
30
  }
31
  }
inc/class-upgrade.php CHANGED
@@ -137,6 +137,10 @@ class WPSEO_Upgrade {
137
  $this->clean_all_notifications();
138
  }
139
 
 
 
 
 
140
  // Since 3.7.
141
  $upsell_notice = new WPSEO_Product_Upsell_Notice();
142
  $upsell_notice->set_upgrade_notice();
@@ -686,6 +690,26 @@ class WPSEO_Upgrade {
686
  }
687
  }
688
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
689
  /**
690
  * Removes all notifications saved in the database under 'wp_yoast_notifications'.
691
  *
137
  $this->clean_all_notifications();
138
  }
139
 
140
+ if ( version_compare( $version, '12.3-RC0', '<' ) ) {
141
+ $this->upgrade_123();
142
+ }
143
+
144
  // Since 3.7.
145
  $upsell_notice = new WPSEO_Product_Upsell_Notice();
146
  $upsell_notice->set_upgrade_notice();
690
  }
691
  }
692
 
693
+ /**
694
+ * Removes the about notice when its still in the database.
695
+ */
696
+ private function upgrade_123() {
697
+ $plugins = array(
698
+ 'yoast-seo-premium',
699
+ 'video-seo-for-wordpress-seo-by-yoast',
700
+ 'yoast-news-seo',
701
+ 'local-seo-for-yoast-seo',
702
+ 'yoast-woocommerce-seo',
703
+ 'yoast-acf-analysis',
704
+ );
705
+
706
+ $center = Yoast_Notification_Center::get();
707
+ foreach ( $plugins as $plugin ) {
708
+ $center->remove_notification_by_id( 'wpseo-outdated-yoast-seo-plugin-' . $plugin );
709
+
710
+ }
711
+ }
712
+
713
  /**
714
  * Removes all notifications saved in the database under 'wp_yoast_notifications'.
715
  *
inc/health-check.php ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Internals
6
+ */
7
+
8
+ /**
9
+ * Represents the abstract class for the health check.
10
+ */
11
+ abstract class WPSEO_Health_Check {
12
+
13
+ const STATUS_GOOD = 'good';
14
+ const STATUS_RECOMMENDED = 'recommended';
15
+ const STATUS_CRITICAL = 'critical';
16
+
17
+ /**
18
+ * Name of the test.
19
+ *
20
+ * @var string
21
+ */
22
+ protected $name = '';
23
+
24
+ /**
25
+ * The value of the section header in the Health check.
26
+ *
27
+ * @var string
28
+ */
29
+ protected $label = '';
30
+
31
+ /**
32
+ * Section the result should be displayed in.
33
+ *
34
+ * @var string
35
+ */
36
+ protected $status = '';
37
+
38
+ /**
39
+ * What the badge should say with a color.
40
+ *
41
+ * @var array
42
+ */
43
+ protected $badge = array(
44
+ 'label' => '',
45
+ 'color' => '',
46
+ );
47
+
48
+ /**
49
+ * Additional details about the results of the test.
50
+ *
51
+ * @var string
52
+ */
53
+ protected $description = '';
54
+
55
+ /**
56
+ * A link or button to allow the end user to take action on the result.
57
+ *
58
+ * @var string
59
+ */
60
+ protected $actions = '';
61
+
62
+ /**
63
+ * The name of the test.
64
+ *
65
+ * @var string
66
+ */
67
+ protected $test = '';
68
+
69
+ /**
70
+ * Whether or not the test should be ran on AJAX as well.
71
+ *
72
+ * @var bool True when is async, default false.
73
+ */
74
+ protected $async = false;
75
+
76
+ /**
77
+ * Runs the test and returns the result.
78
+ *
79
+ * @return array The result.
80
+ */
81
+ abstract public function run();
82
+
83
+ /**
84
+ * Registers the test to WordPress.
85
+ */
86
+ public function register_test() {
87
+ if ( $this->async ) {
88
+ add_filter( 'site_status_tests', array( $this, 'add_async_test' ) );
89
+
90
+ add_action( 'wp_ajax_health-check-' . $this->get_test_name(), array( $this, 'get_async_test_result' ) );
91
+
92
+ return;
93
+ }
94
+
95
+ add_filter( 'site_status_tests', array( $this, 'add_test' ) );
96
+ }
97
+
98
+ /**
99
+ * Runs the test.
100
+ *
101
+ * @param array $tests Array with the current tests.
102
+ *
103
+ * @return array The extended array.
104
+ */
105
+ public function add_test( $tests ) {
106
+ $tests['direct'][ $this->name ] = array(
107
+ 'test' => array( $this, 'get_test_result' ),
108
+ 'name' => $this->name,
109
+ );
110
+
111
+ return $tests;
112
+ }
113
+
114
+ /**
115
+ * Runs the test in async mode.
116
+ *
117
+ * @param array $tests Array with the current tests.
118
+ *
119
+ * @return array The extended array.
120
+ */
121
+ public function add_async_test( $tests ) {
122
+ $tests['async'][ $this->name ] = array(
123
+ 'test' => $this->get_test_name(),
124
+ 'name' => $this->name,
125
+ );
126
+
127
+ return $tests;
128
+ }
129
+
130
+ /**
131
+ * Formats the test result as an array.
132
+ *
133
+ * @return array The formatted test result.
134
+ */
135
+ public function get_test_result() {
136