Yoast SEO - Version 8.1

Version Description

Download this release

Release Info

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

Code changes from version 8.0 to 8.1

Files changed (123) hide show
  1. admin/capabilities/class-capability-manager-factory.php +1 -0
  2. admin/capabilities/class-capability-manager-vip.php +1 -0
  3. admin/capabilities/class-capability-manager-wp.php +1 -0
  4. admin/capabilities/class-capability-manager.php +1 -0
  5. admin/capabilities/class-capability-utils.php +1 -0
  6. admin/capabilities/class-register-capabilities.php +1 -0
  7. admin/class-admin-asset-analysis-worker-location.php +56 -0
  8. admin/class-admin-asset-manager.php +16 -2
  9. admin/class-admin-asset-yoast-components-l10n.php +1 -0
  10. admin/class-admin-init.php +1 -27
  11. admin/class-admin-user-profile.php +1 -0
  12. admin/class-admin-utils.php +5 -8
  13. admin/class-admin.php +2 -49
  14. admin/class-bulk-editor-list-table.php +0 -10
  15. admin/class-customizer.php +0 -1
  16. admin/class-export.php +0 -1
  17. admin/class-expose-shortlinks.php +31 -5
  18. admin/class-extension.php +0 -1
  19. admin/class-gutenberg-compatibility.php +1 -1
  20. admin/class-premium-benefits-for-synonyms-list.php +0 -54
  21. admin/class-premium-benefits-list.php +0 -53
  22. admin/class-primary-term-admin.php +91 -21
  23. admin/class-unsupported-php-message.php +0 -70
  24. admin/class-yoast-form.php +0 -1
  25. admin/class-yoast-plugin-conflict.php +0 -2
  26. admin/config-ui/class-configuration-page.php +0 -3
  27. admin/config-ui/components/interface-component.php +1 -0
  28. admin/config-ui/fields/class-field-connect-google-search-console.php +1 -0
  29. admin/config-ui/fields/class-field-environment.php +1 -0
  30. admin/config-ui/fields/class-field-mailchimp-signup.php +0 -1
  31. admin/config-ui/fields/class-field-multiple-authors.php +1 -0
  32. admin/formatter/class-metabox-formatter.php +0 -3
  33. admin/formatter/interface-metabox-formatter.php +0 -1
  34. admin/google_search_console/class-gsc-issues.php +1 -0
  35. admin/google_search_console/class-gsc.php +0 -1
  36. admin/import/plugins/class-import-platinum-seo-pack.php +0 -1
  37. admin/import/plugins/class-import-premium-seo-pack.php +0 -1
  38. admin/import/plugins/class-import-woothemes-seo.php +0 -1
  39. admin/interface-collection.php +0 -1
  40. admin/metabox/class-metabox-keyword-synonyms-config.php +0 -3
  41. admin/metabox/class-metabox-multiple-keywords-config.php +0 -3
  42. admin/metabox/class-metabox-null-tab.php +1 -0
  43. admin/metabox/class-metabox.php +16 -10
  44. admin/notifiers/class-post-type-archive-notification-handler.php +1 -1
  45. admin/onpage/class-onpage.php +1 -1
  46. admin/recalculate/class-recalculate.php +0 -1
  47. admin/roles/class-register-roles.php +1 -0
  48. admin/roles/class-role-manager-factory.php +1 -0
  49. admin/roles/class-role-manager-vip.php +1 -0
  50. admin/roles/class-role-manager.php +1 -0
  51. admin/statistics/class-statistics-integration.php +1 -0
  52. admin/taxonomy/class-taxonomy-columns.php +0 -2
  53. admin/taxonomy/class-taxonomy.php +8 -0
  54. admin/views/js-templates-primary-term.php +0 -9
  55. admin/views/tabs/metas/paper-content/post-type-content.php +1 -1
  56. admin/views/tabs/metas/paper-content/post_type/woocommerce-shop-page.php +1 -0
  57. css/dist/{admin-global-800-rtl.min.css → admin-global-810-rtl.min.css} +0 -0
  58. css/dist/{admin-global-800.min.css → admin-global-810.min.css} +0 -0
  59. css/dist/{adminbar-800-rtl.min.css → adminbar-810-rtl.min.css} +0 -0
  60. css/dist/{adminbar-800.min.css → adminbar-810.min.css} +0 -0
  61. css/dist/{alerts-800-rtl.min.css → alerts-810-rtl.min.css} +1 -1
  62. css/dist/{alerts-800.min.css → alerts-810.min.css} +1 -1
  63. css/dist/{dashboard-800-rtl.min.css → dashboard-810-rtl.min.css} +0 -0
  64. css/dist/{dashboard-800.min.css → dashboard-810.min.css} +0 -0
  65. css/dist/{edit-page-800-rtl.min.css → edit-page-810-rtl.min.css} +0 -0
  66. css/dist/{edit-page-800.min.css → edit-page-810.min.css} +0 -0
  67. css/dist/{featured-image-800-rtl.min.css → featured-image-810-rtl.min.css} +0 -0
  68. css/dist/{featured-image-800.min.css → featured-image-810.min.css} +0 -0
  69. css/dist/{filter-explanation-800-rtl.min.css → filter-explanation-810-rtl.min.css} +0 -0
  70. css/dist/{filter-explanation-800.min.css → filter-explanation-810.min.css} +0 -0
  71. css/dist/{inside-editor-800-rtl.min.css → inside-editor-810-rtl.min.css} +0 -0
  72. css/dist/{inside-editor-800.min.css → inside-editor-810.min.css} +0 -0
  73. css/dist/metabox-800-rtl.min.css +0 -1
  74. css/dist/metabox-800.min.css +0 -1
  75. css/dist/metabox-810-rtl.min.css +1 -0
  76. css/dist/metabox-810.min.css +1 -0
  77. css/dist/{metabox-primary-category-800-rtl.min.css → metabox-primary-category-810-rtl.min.css} +0 -0
  78. css/dist/{metabox-primary-category-800.min.css → metabox-primary-category-810.min.css} +0 -0
  79. css/dist/{search-appearance-800-rtl.min.css → search-appearance-810-rtl.min.css} +0 -0
  80. css/dist/{search-appearance-800.min.css → search-appearance-810.min.css} +0 -0
  81. css/dist/structured-data-blocks-800-rtl.min.css +0 -1
  82. css/dist/structured-data-blocks-800.min.css +0 -1
  83. css/dist/structured-data-blocks-810-rtl.min.css +1 -0
  84. css/dist/structured-data-blocks-810.min.css +1 -0
  85. css/dist/{toggle-switch-800-rtl.min.css → toggle-switch-810-rtl.min.css} +0 -0
  86. css/dist/{toggle-switch-800.min.css → toggle-switch-810.min.css} +0 -0
  87. css/dist/{wpseo-dismissible-800-rtl.min.css → wpseo-dismissible-810-rtl.min.css} +0 -0
  88. css/dist/{wpseo-dismissible-800.min.css → wpseo-dismissible-810.min.css} +0 -0
  89. css/dist/{yoast-components-800-rtl.min.css → yoast-components-810-rtl.min.css} +1 -1
  90. css/dist/{yoast-components-800.min.css → yoast-components-810.min.css} +1 -1
  91. css/dist/{yoast-extensions-800-rtl.min.css → yoast-extensions-810-rtl.min.css} +0 -0
  92. css/dist/{yoast-extensions-800.min.css → yoast-extensions-810.min.css} +0 -0
  93. css/dist/{yst_plugin_tools-800-rtl.min.css → yst_plugin_tools-810-rtl.min.css} +0 -0
  94. css/dist/{yst_plugin_tools-800.min.css → yst_plugin_tools-810.min.css} +0 -0
  95. css/dist/{yst_seo_score-800-rtl.min.css → yst_seo_score-810-rtl.min.css} +0 -0
  96. css/dist/{yst_seo_score-800.min.css → yst_seo_score-810.min.css} +0 -0
  97. frontend/class-breadcrumbs.php +0 -4
  98. frontend/class-opengraph-image.php +0 -1
  99. frontend/class-opengraph.php +1 -3
  100. frontend/class-twitter.php +0 -2
  101. {admin → inc}/class-structured-data-blocks.php +15 -1
  102. inc/class-upgrade.php +1 -0
  103. inc/class-wpseo-admin-bar-menu.php +20 -5
  104. inc/class-wpseo-content-images.php +1 -0
  105. inc/class-wpseo-custom-fields.php +2 -1
  106. inc/class-wpseo-image-utils.php +1 -2
  107. inc/class-wpseo-meta.php +0 -11
  108. inc/class-wpseo-replace-vars.php +1 -19
  109. inc/class-wpseo-shortlinker.php +1 -0
  110. inc/class-wpseo-utils.php +0 -1
  111. inc/language-utils.php +1 -0
  112. inc/options/class-wpseo-option-ms.php +0 -7
  113. inc/options/class-wpseo-option-social.php +0 -2
  114. inc/options/class-wpseo-option-titles.php +0 -3
  115. inc/options/class-wpseo-option-wpseo.php +0 -3
  116. inc/options/class-wpseo-option.php +0 -14
  117. inc/options/class-wpseo-options.php +1 -1
  118. inc/options/class-wpseo-taxonomy-meta.php +0 -7
  119. inc/sitemaps/class-sitemap-timezone.php +1 -0
  120. inc/sitemaps/class-sitemaps-cache.php +0 -1
  121. inc/structured-data-blocks/class-faq-block.php +124 -0
  122. inc/structured-data-blocks/class-how-to-block.php +115 -0
  123. js/dist/analysis-800.min.js +0 -13
admin/capabilities/class-capability-manager-factory.php CHANGED
@@ -9,6 +9,7 @@
9
  * Capability Manager Factory.
10
  */
11
  class WPSEO_Capability_Manager_Factory {
 
12
  /**
13
  * Returns the Manager to use.
14
  *
9
  * Capability Manager Factory.
10
  */
11
  class WPSEO_Capability_Manager_Factory {
12
+
13
  /**
14
  * Returns the Manager to use.
15
  *
admin/capabilities/class-capability-manager-vip.php CHANGED
@@ -9,6 +9,7 @@
9
  * VIP implementation of the Capability Manager.
10
  */
11
  final class WPSEO_Capability_Manager_VIP extends WPSEO_Abstract_Capability_Manager {
 
12
  /**
13
  * Adds the registered capabilities to the system.
14
  *
9
  * VIP implementation of the Capability Manager.
10
  */
11
  final class WPSEO_Capability_Manager_VIP extends WPSEO_Abstract_Capability_Manager {
12
+
13
  /**
14
  * Adds the registered capabilities to the system.
15
  *
admin/capabilities/class-capability-manager-wp.php CHANGED
@@ -9,6 +9,7 @@
9
  * Default WordPress capability manager implementation.
10
  */
11
  final class WPSEO_Capability_Manager_WP extends WPSEO_Abstract_Capability_Manager {
 
12
  /**
13
  * Adds the capabilities to the roles.
14
  *
9
  * Default WordPress capability manager implementation.
10
  */
11
  final class WPSEO_Capability_Manager_WP extends WPSEO_Abstract_Capability_Manager {
12
+
13
  /**
14
  * Adds the capabilities to the roles.
15
  *
admin/capabilities/class-capability-manager.php CHANGED
@@ -9,6 +9,7 @@
9
  * Capability Manager interface.
10
  */
11
  interface WPSEO_Capability_Manager {
 
12
  /**
13
  * Registers a capability.
14
  *
9
  * Capability Manager interface.
10
  */
11
  interface WPSEO_Capability_Manager {
12
+
13
  /**
14
  * Registers a capability.
15
  *
admin/capabilities/class-capability-utils.php CHANGED
@@ -9,6 +9,7 @@
9
  * Capability Utils collection.
10
  */
11
  class WPSEO_Capability_Utils {
 
12
  /**
13
  * Checks if the user has the proper capabilities.
14
  *
9
  * Capability Utils collection.
10
  */
11
  class WPSEO_Capability_Utils {
12
+
13
  /**
14
  * Checks if the user has the proper capabilities.
15
  *
admin/capabilities/class-register-capabilities.php CHANGED
@@ -9,6 +9,7 @@
9
  * Capabilities registration class.
10
  */
11
  class WPSEO_Register_Capabilities implements WPSEO_WordPress_Integration {
 
12
  /**
13
  * Registers the hooks.
14
  *
9
  * Capabilities registration class.
10
  */
11
  class WPSEO_Register_Capabilities implements WPSEO_WordPress_Integration {
12
+
13
  /**
14
  * Registers the hooks.
15
  *
admin/class-admin-asset-analysis-worker-location.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Admin
6
+ */
7
+
8
+ /**
9
+ * Represents a way to determine the analysis worker asset location.
10
+ */
11
+ final class WPSEO_Admin_Asset_Analysis_Worker_Location implements WPSEO_Admin_Asset_Location {
12
+
13
+ /**
14
+ * @var WPSEO_Admin_Asset_Location $asset_location.
15
+ */
16
+ protected $asset_location;
17
+
18
+ /**
19
+ * @var WPSEO_Admin_Asset $asset.
20
+ */
21
+ protected $asset;
22
+
23
+ /**
24
+ * Constructs the location of the analysis worker asset.
25
+ *
26
+ * @param string $flat_version The flat version of the asset.
27
+ * @param string $name The name of the analysis worker asset.
28
+ */
29
+ public function __construct( $flat_version = '', $name = 'analysis-worker' ) {
30
+ if ( $flat_version === '' ) {
31
+ $asset_manager = new WPSEO_Admin_Asset_Manager();
32
+ $flat_version = $asset_manager->flatten_version( WPSEO_VERSION );
33
+ }
34
+
35
+ $this->asset_location = WPSEO_Admin_Asset_Manager::create_default_location();
36
+ $this->asset = new WPSEO_Admin_Asset( array(
37
+ 'name' => $name,
38
+ 'src' => 'wp-seo-' . $name . '-' . $flat_version,
39
+ ) );
40
+ }
41
+
42
+ /**
43
+ * Determines the URL of the asset on the dev server.
44
+ *
45
+ * @param WPSEO_Admin_Asset $asset The asset to determine the URL for.
46
+ * @param string $type The type of asset. Usually JS or CSS.
47
+ *
48
+ * @return string The URL of the asset.
49
+ */
50
+ public function get_url( WPSEO_Admin_Asset $asset = null, $type = WPSEO_Admin_Asset::TYPE_JS ) {
51
+ if ( $asset === null ) {
52
+ $asset = $this->asset;
53
+ }
54
+ return $this->asset_location->get_url( $asset, $type );
55
+ }
56
+ }
admin/class-admin-asset-manager.php CHANGED
@@ -217,8 +217,8 @@ class WPSEO_Admin_Asset_Manager {
217
  }
218
  else {
219
  if ( ! wp_script_is( self::PREFIX . 'lodash', 'registered' ) ) {
220
- wp_register_script( self::PREFIX . 'lodash', plugins_url( 'js/vendor/lodash.min.js', WPSEO_FILE ) );
221
- wp_add_inline_script( self::PREFIX . 'lodash', 'window.lodash = _.noConflict();', 'after' );
222
  }
223
  $backport_wp_dependencies[] = self::PREFIX . 'lodash';
224
  }
@@ -246,6 +246,7 @@ class WPSEO_Admin_Asset_Manager {
246
  'deps' => array(
247
  'jquery',
248
  self::PREFIX . 'wp-globals-backport',
 
249
  ),
250
  ),
251
  array(
@@ -254,6 +255,7 @@ class WPSEO_Admin_Asset_Manager {
254
  'deps' => array(
255
  'jquery',
256
  self::PREFIX . 'wp-globals-backport',
 
257
  ),
258
  ),
259
  array(
@@ -335,6 +337,7 @@ class WPSEO_Admin_Asset_Manager {
335
  self::PREFIX . 'wp-globals-backport',
336
  self::PREFIX . 'analysis',
337
  self::PREFIX . 'react-dependencies',
 
338
  ),
339
  ),
340
  array(
@@ -344,6 +347,7 @@ class WPSEO_Admin_Asset_Manager {
344
  self::PREFIX . 'replacevar-plugin',
345
  self::PREFIX . 'wp-globals-backport',
346
  self::PREFIX . 'analysis',
 
347
  ),
348
  ),
349
  array(
@@ -352,6 +356,7 @@ class WPSEO_Admin_Asset_Manager {
352
  'deps' => array(
353
  self::PREFIX . 'react-dependencies',
354
  self::PREFIX . 'analysis',
 
355
  ),
356
  ),
357
  array(
@@ -407,6 +412,7 @@ class WPSEO_Admin_Asset_Manager {
407
  'deps' => array(
408
  'jquery',
409
  self::PREFIX . 'wp-globals-backport',
 
410
  ),
411
  ),
412
  array(
@@ -452,6 +458,7 @@ class WPSEO_Admin_Asset_Manager {
452
  self::PREFIX . 'api',
453
  'jquery',
454
  self::PREFIX . 'wp-globals-backport',
 
455
  ),
456
  ),
457
  array(
@@ -466,6 +473,10 @@ class WPSEO_Admin_Asset_Manager {
466
  'name' => 'analysis',
467
  'src' => 'analysis-' . $flat_version,
468
  ),
 
 
 
 
469
  array(
470
  'name' => 'structured-data-blocks',
471
  'src' => 'wp-seo-structured-data-blocks-' . $flat_version,
@@ -559,6 +570,9 @@ class WPSEO_Admin_Asset_Manager {
559
  array(
560
  'name' => 'search-appearance',
561
  'src' => 'search-appearance-' . $flat_version,
 
 
 
562
  ),
563
  array(
564
  'name' => 'structured-data-blocks',
217
  }
218
  else {
219
  if ( ! wp_script_is( self::PREFIX . 'lodash', 'registered' ) ) {
220
+ wp_register_script( self::PREFIX . 'lodash-base', plugins_url( 'js/vendor/lodash.min.js', WPSEO_FILE ), array(), false, true );
221
+ wp_register_script( self::PREFIX . 'lodash', plugins_url( 'js/vendor/lodash-noconflict.js', WPSEO_FILE ), array( self::PREFIX . 'lodash-base' ), false, true );
222
  }
223
  $backport_wp_dependencies[] = self::PREFIX . 'lodash';
224
  }
246
  'deps' => array(
247
  'jquery',
248
  self::PREFIX . 'wp-globals-backport',
249
+ self::PREFIX . 'components',
250
  ),
251
  ),
252
  array(
255
  'deps' => array(
256
  'jquery',
257
  self::PREFIX . 'wp-globals-backport',
258
+ self::PREFIX . 'components',
259
  ),
260
  ),
261
  array(
337
  self::PREFIX . 'wp-globals-backport',
338
  self::PREFIX . 'analysis',
339
  self::PREFIX . 'react-dependencies',
340
+ self::PREFIX . 'components',
341
  ),
342
  ),
343
  array(
347
  self::PREFIX . 'replacevar-plugin',
348
  self::PREFIX . 'wp-globals-backport',
349
  self::PREFIX . 'analysis',
350
+ self::PREFIX . 'components',
351
  ),
352
  ),
353
  array(
356
  'deps' => array(
357
  self::PREFIX . 'react-dependencies',
358
  self::PREFIX . 'analysis',
359
+ self::PREFIX . 'components',
360
  ),
361
  ),
362
  array(
412
  'deps' => array(
413
  'jquery',
414
  self::PREFIX . 'wp-globals-backport',
415
+ self::PREFIX . 'components',
416
  ),
417
  ),
418
  array(
458
  self::PREFIX . 'api',
459
  'jquery',
460
  self::PREFIX . 'wp-globals-backport',
461
+ self::PREFIX . 'components',
462
  ),
463
  ),
464
  array(
473
  'name' => 'analysis',
474
  'src' => 'analysis-' . $flat_version,
475
  ),
476
+ array(
477
+ 'name' => 'components',
478
+ 'src' => 'components-' . $flat_version,
479
+ ),
480
  array(
481
  'name' => 'structured-data-blocks',
482
  'src' => 'wp-seo-structured-data-blocks-' . $flat_version,
570
  array(
571
  'name' => 'search-appearance',
572
  'src' => 'search-appearance-' . $flat_version,
573
+ 'deps' => array(
574
+ self::PREFIX . 'components',
575
+ ),
576
  ),
577
  array(
578
  'name' => 'structured-data-blocks',
admin/class-admin-asset-yoast-components-l10n.php CHANGED
@@ -7,6 +7,7 @@
7
  * Localizes JavaScript files.
8
  */
9
  final class WPSEO_Admin_Asset_Yoast_Components_L10n {
 
10
  /**
11
  * Localizes the given script with the JavaScript translations.
12
  *
7
  * Localizes JavaScript files.
8
  */
9
  final class WPSEO_Admin_Asset_Yoast_Components_L10n {
10
+
11
  /**
12
  * Localizes the given script with the JavaScript translations.
13
  *
admin/class-admin-init.php CHANGED
@@ -445,34 +445,8 @@ class WPSEO_Admin_Init {
445
  * @return void
446
  */
447
  public function unsupported_php_notice() {
448
- $info_message = sprintf(
449
- /* translators: 1: The strong opening tag; 2: The strong closing tag; 3: the Yoast SEO version that is dropping support; 4: The release date of the version of Yoast SEO that is dropping support; 5: The PHP version no longer being supported; */
450
- __( '%1$sAction is needed%2$s: As of version %3$s, due to be released on %4$s, Yoast SEO will no longer work with PHP %5$s. Unfortunately, your site is running on PHP %5$s right now, so action is needed. Thankfully, you can update your PHP yourself.', 'wordpress-seo' ),
451
- '<strong>',
452
- '</strong>',
453
- '7.7',
454
- date_i18n( get_option( 'date_format' ), strtotime( '11-06-2018' ) ),
455
- '5.2'
456
- );
457
-
458
- $unsupported_php_notification = new Yoast_Notification(
459
- $info_message,
460
- array(
461
- 'type' => Yoast_Notification::ERROR,
462
- 'id' => 'wpseo-dismiss-unsupported-php',
463
- 'capabilities' => 'wpseo_manage_options',
464
- )
465
- );
466
-
467
  $notification_center = Yoast_Notification_Center::get();
468
-
469
- if ( WPSEO_Admin_Utils::is_supported_php_version_installed() === false ) {
470
- $notification_center->add_notification( $unsupported_php_notification );
471
-
472
- return;
473
- }
474
-
475
- $notification_center->remove_notification( $unsupported_php_notification );
476
  }
477
 
478
  /**
445
  * @return void
446
  */
447
  public function unsupported_php_notice() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
448
  $notification_center = Yoast_Notification_Center::get();
449
+ $notification_center->remove_notification_by_id( 'wpseo-dismiss-unsupported-php' );
 
 
 
 
 
 
 
450
  }
451
 
452
  /**
admin/class-admin-user-profile.php CHANGED
@@ -10,6 +10,7 @@
10
  * Customizes user profile.
11
  */
12
  class WPSEO_Admin_User_Profile {
 
13
  /**
14
  * Class constructor.
15
  */
10
  * Customizes user profile.
11
  */
12
  class WPSEO_Admin_User_Profile {
13
+
14
  /**
15
  * Class constructor.
16
  */
admin/class-admin-utils.php CHANGED
@@ -54,7 +54,7 @@ class WPSEO_Admin_Utils {
54
  * @return string The link to the plugin install. Returns the title if the plugin is deemed a Premium product.
55
  */
56
  public static function get_install_link( $plugin ) {
57
- $install_url = WPSEO_Admin_Utils::get_install_url( $plugin['slug'] );
58
 
59
  if ( $install_url === '' || ( isset( $plugin['premium'] ) && $plugin['premium'] === true ) ) {
60
  return $plugin['title'];
@@ -65,20 +65,17 @@ class WPSEO_Admin_Utils {
65
  $install_url,
66
  $plugin['title']
67
  );
68
-
69
  }
70
 
71
  /**
72
  * Determines whether or not the user has an invalid version of PHP installed.
73
  *
 
 
74
  * @return bool Whether or not PHP 5.2 or lower is installed.
75
  */
76
  public static function is_supported_php_version_installed() {
77
- $checker = new Whip_RequirementsChecker( array( 'php' => PHP_VERSION ) );
78
-
79
- $checker->addRequirement( Whip_VersionRequirement::fromCompareString( 'php', '>=5.3' ) );
80
- $checker->check();
81
-
82
- return $checker->hasMessages() === false;
83
  }
84
  }
54
  * @return string The link to the plugin install. Returns the title if the plugin is deemed a Premium product.
55
  */
56
  public static function get_install_link( $plugin ) {
57
+ $install_url = self::get_install_url( $plugin['slug'] );
58
 
59
  if ( $install_url === '' || ( isset( $plugin['premium'] ) && $plugin['premium'] === true ) ) {
60
  return $plugin['title'];
65
  $install_url,
66
  $plugin['title']
67
  );
 
68
  }
69
 
70
  /**
71
  * Determines whether or not the user has an invalid version of PHP installed.
72
  *
73
+ * @deprecated 8.1
74
+ *
75
  * @return bool Whether or not PHP 5.2 or lower is installed.
76
  */
77
  public static function is_supported_php_version_installed() {
78
+ // Intentionally left blank.
79
+ return true;
 
 
 
 
80
  }
81
  }
admin/class-admin.php CHANGED
@@ -49,9 +49,6 @@ class WPSEO_Admin {
49
 
50
  if ( WPSEO_Metabox::is_post_overview( $pagenow ) || WPSEO_Metabox::is_post_edit( $pagenow ) ) {
51
  $this->admin_features['primary_category'] = new WPSEO_Primary_Term_Admin();
52
- if ( defined( 'YOAST_FEATURE_GUTENBERG_STRUCTURED_DATA_BLOCKS' ) ) {
53
- $this->admin_features['structured_data_blocks'] = new WPSEO_Structured_Data_Blocks();
54
- }
55
  }
56
 
57
  if ( filter_input( INPUT_GET, 'page' ) === 'wpseo_tools' && filter_input( INPUT_GET, 'tool' ) === null ) {
@@ -74,8 +71,6 @@ class WPSEO_Admin {
74
 
75
  add_action( 'admin_init', array( $this, 'map_manage_options_cap' ) );
76
 
77
- add_action( 'admin_init', array( $this, 'check_php_version' ) );
78
-
79
  WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'wpseo' );
80
  WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'home' );
81
 
@@ -323,54 +318,12 @@ class WPSEO_Admin {
323
  /**
324
  * Initializes Whip to show a notice for outdated PHP versions.
325
  *
326
- * @todo Deprecate this method when WordPress 5.1 is our currently minimal supported version.
327
  *
328
  * @return void
329
  */
330
  public function check_php_version() {
331
- // If the user isn't an admin, don't display anything.
332
- if ( ! current_user_can( 'manage_options' ) ) {
333
- return;
334
- }
335
-
336
- // Check if the user is running PHP 5.2.
337
- if ( WPSEO_Admin_Utils::is_supported_php_version_installed() === false ) {
338
- $this->show_unsupported_php_message();
339
-
340
- return;
341
- }
342
-
343
- /*
344
- * The Whip message shouldn't be shown from WordPress 5.0.0 and higher because
345
- * that version introduces Serve Happy which is almost similar to Whip.
346
- */
347
- $minimal_wp_version = '5.0.0';
348
- if ( version_compare( $GLOBALS['wp_version'], $minimal_wp_version, '>=' ) ) {
349
- return;
350
- }
351
-
352
- if ( ! $this->on_dashboard_page() ) {
353
- return;
354
- }
355
-
356
- whip_wp_check_versions( array(
357
- 'php' => '>=5.4',
358
- ) );
359
- }
360
-
361
- /**
362
- * Creates a new message to display regarding the usage of PHP 5.2 (or lower).
363
- *
364
- * @return void
365
- */
366
- protected function show_unsupported_php_message() {
367
- $presenter = new Whip_WPMessagePresenter(
368
- new WPSEO_Unsupported_PHP_Message(),
369
- new Whip_MessageDismisser( time(), ( WEEK_IN_SECONDS * 4 ), new Whip_WPDismissOption() ),
370
- __( 'Remind me again in 4 weeks.', 'wordpress-seo' )
371
- );
372
-
373
- $presenter->register_hooks();
374
  }
375
 
376
  /**
49
 
50
  if ( WPSEO_Metabox::is_post_overview( $pagenow ) || WPSEO_Metabox::is_post_edit( $pagenow ) ) {
51
  $this->admin_features['primary_category'] = new WPSEO_Primary_Term_Admin();
 
 
 
52
  }
53
 
54
  if ( filter_input( INPUT_GET, 'page' ) === 'wpseo_tools' && filter_input( INPUT_GET, 'tool' ) === null ) {
71
 
72
  add_action( 'admin_init', array( $this, 'map_manage_options_cap' ) );
73
 
 
 
74
  WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'wpseo' );
75
  WPSEO_Sitemaps_Cache::register_clear_on_option_update( 'home' );
76
 
318
  /**
319
  * Initializes Whip to show a notice for outdated PHP versions.
320
  *
321
+ * @deprecated 8.1
322
  *
323
  * @return void
324
  */
325
  public function check_php_version() {
326
+ // Intentionally left empty.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
  }
328
 
329
  /**
admin/class-bulk-editor-list-table.php CHANGED
@@ -122,7 +122,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
122
  $this->page_url = "&nonce={$this->nonce}&type={$this->page_type}#top#{$this->page_type}";
123
 
124
  $this->populate_editable_post_types();
125
-
126
  }
127
 
128
  /**
@@ -207,7 +206,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
207
  }
208
  }
209
 
210
-
211
  /**
212
  * Will shown the navigation for the table like pagenavigation and pagefilter;
213
  *
@@ -278,7 +276,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
278
  return $subquery;
279
  }
280
 
281
-
282
  /**
283
  * @return array
284
  */
@@ -364,7 +361,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
364
  return $status_links;
365
  }
366
 
367
-
368
  /**
369
  * @param string $which Table nav location (such as top).
370
  */
@@ -488,7 +484,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
488
  $_GET['post_status'] = $current_status;
489
  $_GET['orderby'] = $current_order['orderby'];
490
  $_GET['order'] = $current_order['order'];
491
-
492
  }
493
 
494
  /**
@@ -513,7 +508,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
513
 
514
  // Get the metadata for the current items ($this->items).
515
  $this->get_meta_data();
516
-
517
  }
518
 
519
  /**
@@ -605,7 +599,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
605
  'per_page' => $per_page,
606
  'offset' => ( $paged - 1 ) * $per_page,
607
  );
608
-
609
  }
610
 
611
  /**
@@ -845,7 +838,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
845
  $return .= $this->row_actions( $actions );
846
 
847
  return $return;
848
-
849
  }
850
 
851
  /**
@@ -942,7 +934,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
942
 
943
  // Little housekeeping.
944
  unset( $post_ids, $meta_data );
945
-
946
  }
947
 
948
  /**
@@ -992,7 +983,6 @@ class WPSEO_Bulk_List_Table extends WP_List_Table {
992
  foreach ( $meta_data as $row ) {
993
  $this->meta_data[ $row->post_id ][ $row->meta_key ] = $row->meta_value;
994
  }
995
-
996
  }
997
 
998
  /**
122
  $this->page_url = "&nonce={$this->nonce}&type={$this->page_type}#top#{$this->page_type}";
123
 
124
  $this->populate_editable_post_types();
 
125
  }
126
 
127
  /**
206
  }
207
  }
208
 
 
209
  /**
210
  * Will shown the navigation for the table like pagenavigation and pagefilter;
211
  *
276
  return $subquery;
277
  }
278
 
 
279
  /**
280
  * @return array
281
  */
361
  return $status_links;
362
  }
363
 
 
364
  /**
365
  * @param string $which Table nav location (such as top).
366
  */
484
  $_GET['post_status'] = $current_status;
485
  $_GET['orderby'] = $current_order['orderby'];
486
  $_GET['order'] = $current_order['order'];
 
487
  }
488
 
489
  /**
508
 
509
  // Get the metadata for the current items ($this->items).
510
  $this->get_meta_data();
 
511
  }
512
 
513
  /**
599
  'per_page' => $per_page,
600
  'offset' => ( $paged - 1 ) * $per_page,
601
  );
 
602
  }
603
 
604
  /**
838
  $return .= $this->row_actions( $actions );
839
 
840
  return $return;
 
841
  }
842
 
843
  /**
934
 
935
  // Little housekeeping.
936
  unset( $post_ids, $meta_data );
 
937
  }
938
 
939
  /**
983
  foreach ( $meta_data as $row ) {
984
  $this->meta_data[ $row->post_id ][ $row->meta_key ] = $row->meta_value;
985
  }
 
986
  }
987
 
988
  /**
admin/class-customizer.php CHANGED
@@ -56,7 +56,6 @@ class WPSEO_Customizer {
56
  'active_callback' => array( $this, 'breadcrumbs_active_callback' ),
57
  )
58
  );
59
-
60
  }
61
 
62
  /**
56
  'active_callback' => array( $this, 'breadcrumbs_active_callback' ),
57
  )
58
  );
 
59
  }
60
 
61
  /**
admin/class-export.php CHANGED
@@ -50,7 +50,6 @@ class WPSEO_Export {
50
  */
51
  private $dir = array();
52
 
53
-
54
  /**
55
  * Class constructor
56
  *
50
  */
51
  private $dir = array();
52
 
 
53
  /**
54
  * Class constructor
55
  *
admin/class-expose-shortlinks.php CHANGED
@@ -11,21 +11,47 @@
11
  class WPSEO_Expose_Shortlinks implements WPSEO_WordPress_Integration {
12
 
13
  /**
14
- * Registers all hooks to WordPress
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  */
16
  public function register_hooks() {
17
  add_filter( 'wpseo_admin_l10n', array( $this, 'expose_shortlinks' ) );
18
  }
19
 
20
  /**
 
 
21
  * @param array $input The array to add shortlinks to.
22
  *
23
- * @return array
24
  */
25
  public function expose_shortlinks( $input ) {
26
- $input['shortlinks.focus_keyword_info'] = WPSEO_Shortlinker::get( 'https://yoa.st/focus-keyword' );
27
- $input['shortlinks.snippet_preview_info'] = WPSEO_Shortlinker::get( 'https://yoa.st/snippet-preview' );
28
- $input['shortlinks.cornerstone_content_info'] = WPSEO_Shortlinker::get( 'https://yoa.st/1i9' );
29
 
30
  return $input;
31
  }
11
  class WPSEO_Expose_Shortlinks implements WPSEO_WordPress_Integration {
12
 
13
  /**
14
+ * @var array Array containing the keys and shortlinks.
15
+ */
16
+ private $shortlinks = array(
17
+ 'shortlinks.focus_keyword_info' => 'https://yoa.st/focus-keyword',
18
+ 'shortlinks.snippet_preview_info' => 'https://yoa.st/snippet-preview',
19
+ 'shortlinks.cornerstone_content_info' => 'https://yoa.st/1i9',
20
+ 'shortlinks.upsell.sidebar.focus_keyword_synonyms_link' => 'https://yoa.st/textlink-synonyms-popup-sidebar',
21
+ 'shortlinks.upsell.sidebar.focus_keyword_synonyms_button' => 'https://yoa.st/keyword-synonyms-popup-sidebar',
22
+ 'shortlinks.upsell.sidebar.focus_keyword_additional_link' => 'https://yoa.st/textlink-keywords-popup-sidebar',
23
+ 'shortlinks.upsell.sidebar.focus_keyword_additional_button' => 'https://yoa.st/add-keywords-popup-sidebar',
24
+ 'shortlinks.upsell.sidebar.additional_link' => 'https://yoa.st/textlink-keywords-sidebar',
25
+ 'shortlinks.upsell.sidebar.additional_button' => 'https://yoa.st/add-keywords-sidebar',
26
+ 'shortlinks.upsell.metabox.go_premium' => 'https://yoa.st/pe-premium-page',
27
+ 'shortlinks.upsell.metabox.focus_keyword_synonyms_link' => 'https://yoa.st/textlink-synonyms-popup-metabox',
28
+ 'shortlinks.upsell.metabox.focus_keyword_synonyms_button' => 'https://yoa.st/keyword-synonyms-popup',
29
+ 'shortlinks.upsell.metabox.focus_keyword_additional_link' => 'https://yoa.st/textlink-keywords-popup-metabox',
30
+ 'shortlinks.upsell.metabox.focus_keyword_additional_button' => 'https://yoa.st/add-keywords-popup',
31
+ 'shortlinks.upsell.metabox.additional_link' => 'https://yoa.st/textlink-keywords-metabox',
32
+ 'shortlinks.upsell.metabox.additional_button' => 'https://yoa.st/add-keywords-metabox',
33
+ );
34
+
35
+ /**
36
+ * Registers all hooks to WordPress.
37
+ *
38
+ * @return void
39
  */
40
  public function register_hooks() {
41
  add_filter( 'wpseo_admin_l10n', array( $this, 'expose_shortlinks' ) );
42
  }
43
 
44
  /**
45
+ * Adds shortlinks to the passed array.
46
+ *
47
  * @param array $input The array to add shortlinks to.
48
  *
49
+ * @return array The passed array with the additional shortlinks.
50
  */
51
  public function expose_shortlinks( $input ) {
52
+ foreach ( $this->shortlinks as $key => $shortlink ) {
53
+ $input[ $key ] = WPSEO_Shortlinker::get( $shortlink );
54
+ }
55
 
56
  return $input;
57
  }
admin/class-extension.php CHANGED
@@ -69,7 +69,6 @@ class WPSEO_Extension {
69
  }
70
 
71
  return $this->get_title();
72
-
73
  }
74
 
75
  /**
69
  }
70
 
71
  return $this->get_title();
 
72
  }
73
 
74
  /**
admin/class-gutenberg-compatibility.php CHANGED
@@ -18,7 +18,7 @@ class WPSEO_Gutenberg_Compatibility {
18
  /**
19
  * The minimally supported version of Gutenberg by the plugin.
20
  */
21
- const MINIMUM_SUPPORTED = '2.8.0';
22
 
23
  /**
24
  * @var string
18
  /**
19
  * The minimally supported version of Gutenberg by the plugin.
20
  */
21
+ const MINIMUM_SUPPORTED = '3.5.0';
22
 
23
  /**
24
  * @var string
admin/class-premium-benefits-for-synonyms-list.php DELETED
@@ -1,54 +0,0 @@
1
- <?php
2
- /**
3
- * @package WPSEO\Admin
4
- */
5
-
6
- /**
7
- * Class to print out a list of Premium benefits specific for the keyword synonyms.
8
- */
9
- class WPSEO_Premium_Benefits_For_Synonyms_List {
10
-
11
- /**
12
- * Returns the translations for the Premium benefits list.
13
- *
14
- * @return array Translated text strings for the Premium benefits list.
15
- */
16
- public function get_translations() {
17
- return array(
18
- '<strong>' . __( 'Rank for up to 5 focus keywords per page', 'wordpress-seo' ) . '</strong>',
19
- sprintf(
20
- /* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */
21
- __( '%1$sNo more dead links%2$s: easy redirect manager', 'wordpress-seo' ),
22
- '<strong>', '</strong>'
23
- ),
24
- '<strong>' . __( 'Superfast internal links suggestions', 'wordpress-seo' ) . '</strong>',
25
- sprintf(
26
- /* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */
27
- __( '%1$sSocial media preview%2$s: Facebook & Twitter', 'wordpress-seo' ),
28
- '<strong>', '</strong>'
29
- ),
30
- '<strong>' . __( '24/7 support', 'wordpress-seo' ) . '</strong>',
31
- '<strong>' . __( 'No ads!', 'wordpress-seo' ) . '</strong>',
32
- );
33
- }
34
-
35
- /**
36
- * Passes translations to JS for the Add Keyword JS component Premium benefits list.
37
- *
38
- * @return array Translated text strings for the Premium benefits list component.
39
- */
40
- public function get_translations_for_js() {
41
- $translations = $this->get_translations();
42
- return array(
43
- 'locale' => WPSEO_Utils::get_user_locale(),
44
- 'intl' => $translations,
45
- );
46
- }
47
-
48
- /**
49
- * Prints the localized Premium benefits translations for JS.
50
- */
51
- public function enqueue_translations() {
52
- wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-global-script', 'yoastPremiumBenefitsForSynonymsL10n', $this->get_translations_for_js() );
53
- }
54
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/class-premium-benefits-list.php DELETED
@@ -1,53 +0,0 @@
1
- <?php
2
- /**
3
- * @package WPSEO\Admin
4
- */
5
-
6
- /**
7
- * Class to print out a list of Premium benefits.
8
- */
9
- class WPSEO_Premium_Benefits_List {
10
-
11
- /**
12
- * Returns the translations for the Premium benefits list.
13
- *
14
- * @return array Translated text strings for the Premium benefits list.
15
- */
16
- public function get_translations() {
17
- return array(
18
- sprintf(
19
- /* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */
20
- __( '%1$sNo more dead links%2$s: easy redirect manager', 'wordpress-seo' ),
21
- '<strong>', '</strong>'
22
- ),
23
- '<strong>' . __( 'Superfast internal links suggestions', 'wordpress-seo' ) . '</strong>',
24
- sprintf(
25
- /* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */
26
- __( '%1$sSocial media preview%2$s: Facebook & Twitter', 'wordpress-seo' ),
27
- '<strong>', '</strong>'
28
- ),
29
- '<strong>' . __( '24/7 support', 'wordpress-seo' ) . '</strong>',
30
- '<strong>' . __( 'No ads!', 'wordpress-seo' ) . '</strong>',
31
- );
32
- }
33
-
34
- /**
35
- * Pass tanslations to JS for the Add Keyword JS component Premium benefits list.
36
- *
37
- * @return array Translated text strings for the Premium benefits list component.
38
- */
39
- public function get_translations_for_js() {
40
- $translations = $this->get_translations();
41
- return array(
42
- 'locale' => WPSEO_Utils::get_user_locale(),
43
- 'intl' => $translations,
44
- );
45
- }
46
-
47
- /**
48
- * Prints the localized Premium benefits translations for JS.
49
- */
50
- public function enqueue_translations() {
51
- wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-global-script', 'yoastPremiumBenefitsL10n', $this->get_translations_for_js() );
52
- }
53
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/class-primary-term-admin.php CHANGED
@@ -6,14 +6,15 @@
6
  */
7
 
8
  /**
9
- * Adds the UI to change the primary term for a post
10
  */
11
  class WPSEO_Primary_Term_Admin {
12
-
13
  /**
14
  * Constructor.
15
  */
16
  public function __construct() {
 
 
17
  add_action( 'admin_footer', array( $this, 'wp_footer' ), 10 );
18
 
19
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
@@ -25,7 +26,7 @@ class WPSEO_Primary_Term_Admin {
25
  }
26
 
27
  /**
28
- * Get the current post ID.
29
  *
30
  * @return integer The post ID.
31
  */
@@ -39,7 +40,62 @@ class WPSEO_Primary_Term_Admin {
39
  }
40
 
41
  /**
42
- * Add primary term templates
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  */
44
  public function wp_footer() {
45
  $taxonomies = $this->get_primary_term_taxonomies();
@@ -72,10 +128,10 @@ class WPSEO_Primary_Term_Admin {
72
  $asset_manager->enqueue_style( 'primary-category' );
73
  $asset_manager->enqueue_script( 'primary-category' );
74
 
75
- $taxonomies = array_map( array( $this, 'map_taxonomies_for_js' ), $taxonomies );
76
 
77
  $data = array(
78
- 'taxonomies' => $taxonomies,
79
  );
80
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'primary-category', 'wpseoPrimaryCategoryL10n', $data );
81
  }
@@ -99,8 +155,7 @@ class WPSEO_Primary_Term_Admin {
99
  }
100
 
101
  /**
102
- * /**
103
- * Get the id of the primary term
104
  *
105
  * @param string $taxonomy_name Taxonomy name for the term.
106
  *
@@ -119,7 +174,6 @@ class WPSEO_Primary_Term_Admin {
119
  * @return array
120
  */
121
  protected function get_primary_term_taxonomies( $post_id = null ) {
122
-
123
  if ( null === $post_id ) {
124
  $post_id = $this->get_current_id();
125
  }
@@ -137,14 +191,14 @@ class WPSEO_Primary_Term_Admin {
137
  }
138
 
139
  /**
140
- * Include templates file
141
  */
142
  protected function include_js_templates() {
143
  include_once WPSEO_PATH . 'admin/views/js-templates-primary-term.php';
144
  }
145
 
146
  /**
147
- * Save the primary term for a specific taxonomy
148
  *
149
  * @param int $post_id Post ID to save primary term for.
150
  * @param WP_Term $taxonomy Taxonomy to save primary term for.
@@ -160,7 +214,7 @@ class WPSEO_Primary_Term_Admin {
160
  }
161
 
162
  /**
163
- * Generate the primary term taxonomies.
164
  *
165
  * @param int $post_id ID of the post.
166
  *
@@ -186,11 +240,22 @@ class WPSEO_Primary_Term_Admin {
186
  }
187
 
188
  /**
189
- * Returns an array suitable for use in the javascript
 
 
 
 
 
 
 
 
 
 
 
190
  *
191
  * @param stdClass $taxonomy The taxonomy to map.
192
  *
193
- * @return array
194
  */
195
  private function map_taxonomies_for_js( $taxonomy ) {
196
  $primary_term = $this->get_primary_term( $taxonomy->name );
@@ -199,20 +264,25 @@ class WPSEO_Primary_Term_Admin {
199
  $primary_term = '';
200
  }
201
 
 
 
202
  return array(
203
- 'title' => $taxonomy->labels->singular_name,
204
- 'name' => $taxonomy->name,
205
- 'primary' => $primary_term,
206
- 'terms' => array_map( array( $this, 'map_terms_for_js' ), get_terms( $taxonomy->name ) ),
 
 
 
207
  );
208
  }
209
 
210
  /**
211
- * Returns an array suitable for use in the javascript
212
  *
213
  * @param stdClass $term The term to map.
214
  *
215
- * @return array
216
  */
217
  private function map_terms_for_js( $term ) {
218
  return array(
@@ -222,7 +292,7 @@ class WPSEO_Primary_Term_Admin {
222
  }
223
 
224
  /**
225
- * Returns whether or not a taxonomy is hierarchical
226
  *
227
  * @param stdClass $taxonomy Taxonomy object.
228
  *
6
  */
7
 
8
  /**
9
+ * Adds the UI to change the primary term for a post.
10
  */
11
  class WPSEO_Primary_Term_Admin {
 
12
  /**
13
  * Constructor.
14
  */
15
  public function __construct() {
16
+ add_filter( 'wpseo_content_meta_section_content', array( $this, 'add_input_fields' ) );
17
+
18
  add_action( 'admin_footer', array( $this, 'wp_footer' ), 10 );
19
 
20
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
26
  }
27
 
28
  /**
29
+ * Gets the current post ID.
30
  *
31
  * @return integer The post ID.
32
  */
40
  }
41
 
42
  /**
43
+ * Adds hidden fields for primary taxonomies.
44
+ *
45
+ * @param string $content The metabox content.
46
+ *
47
+ * @return string The HTML content.
48
+ */
49
+ public function add_input_fields( $content ) {
50
+ $taxonomies = $this->get_primary_term_taxonomies();
51
+
52
+ foreach ( $taxonomies as $taxonomy ) {
53
+ $content .= $this->primary_term_field( $taxonomy->name );
54
+ $content .= wp_nonce_field( 'save-primary-term', WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy->name . '_nonce', false, false );
55
+ }
56
+ return $content;
57
+ }
58
+
59
+ /**
60
+ * Generates the HTML for a hidden field for a primary taxonomy.
61
+ *
62
+ * @param string $taxonomy_name The taxonomy's slug.
63
+ *
64
+ * @return string The HTML for a hidden primary taxonomy field.
65
+ */
66
+ protected function primary_term_field( $taxonomy_name ) {
67
+ return sprintf(
68
+ '<input class="yoast-wpseo-primary-term" type="hidden" id="%1$s" name="%2$s" value="%3$s" />',
69
+ esc_attr( $this->generate_field_id( $taxonomy_name ) ),
70
+ esc_attr( $this->generate_field_name( $taxonomy_name ) ),
71
+ esc_attr( $this->get_primary_term( $taxonomy_name ) )
72
+ );
73
+ }
74
+
75
+ /**
76
+ * Generates an id for a primary taxonomy's hidden field.
77
+ *
78
+ * @param string $taxonomy_name The taxonomy's slug.
79
+ *
80
+ * @return string The field id.
81
+ */
82
+ protected function generate_field_id( $taxonomy_name ) {
83
+ return 'yoast-wpseo-primary-' . $taxonomy_name;
84
+ }
85
+
86
+ /**
87
+ * Generates a name for a primary taxonomy's hidden field.
88
+ *
89
+ * @param string $taxonomy_name The taxonomy's slug.
90
+ *
91
+ * @return string The field id.
92
+ */
93
+ protected function generate_field_name( $taxonomy_name ) {
94
+ return WPSEO_Meta::$form_prefix . 'primary_' . $taxonomy_name . '_term';
95
+ }
96
+
97
+ /**
98
+ * Adds primary term templates.
99
  */
100
  public function wp_footer() {
101
  $taxonomies = $this->get_primary_term_taxonomies();
128
  $asset_manager->enqueue_style( 'primary-category' );
129
  $asset_manager->enqueue_script( 'primary-category' );
130
 
131
+ $mapped_taxonomies = $this->get_mapped_taxonomies_for_js( $taxonomies );
132
 
133
  $data = array(
134
+ 'taxonomies' => $mapped_taxonomies,
135
  );
136
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'primary-category', 'wpseoPrimaryCategoryL10n', $data );
137
  }
155
  }
156
 
157
  /**
158
+ * Gets the id of the primary term
 
159
  *
160
  * @param string $taxonomy_name Taxonomy name for the term.
161
  *
174
  * @return array
175
  */
176
  protected function get_primary_term_taxonomies( $post_id = null ) {
 
177
  if ( null === $post_id ) {
178
  $post_id = $this->get_current_id();
179
  }
191
  }
192
 
193
  /**
194
+ * Includes templates file.
195
  */
196
  protected function include_js_templates() {
197
  include_once WPSEO_PATH . 'admin/views/js-templates-primary-term.php';
198
  }
199
 
200
  /**
201
+ * Saves the primary term for a specific taxonomy.
202
  *
203
  * @param int $post_id Post ID to save primary term for.
204
  * @param WP_Term $taxonomy Taxonomy to save primary term for.
214
  }
215
 
216
  /**
217
+ * Generates the primary term taxonomies.
218
  *
219
  * @param int $post_id ID of the post.
220
  *
240
  }
241
 
242
  /**
243
+ * Creates a map of taxonomies for localization.
244
+ *
245
+ * @param array $taxonomies The taxononmies that should be mapped.
246
+ *
247
+ * @return array The mapped taxonomies.
248
+ */
249
+ protected function get_mapped_taxonomies_for_js( $taxonomies ) {
250
+ return array_map( array( $this, 'map_taxonomies_for_js' ), $taxonomies );
251
+ }
252
+
253
+ /**
254
+ * Returns an array suitable for use in the javascript.
255
  *
256
  * @param stdClass $taxonomy The taxonomy to map.
257
  *
258
+ * @return array The mapped taxonomy.
259
  */
260
  private function map_taxonomies_for_js( $taxonomy ) {
261
  $primary_term = $this->get_primary_term( $taxonomy->name );
264
  $primary_term = '';
265
  }
266
 
267
+ $terms = get_terms( $taxonomy->name );
268
+
269
  return array(
270
+ 'title' => $taxonomy->labels->singular_name,
271
+ 'name' => $taxonomy->name,
272
+ 'primary' => $primary_term,
273
+ 'singularLabel' => $taxonomy->labels->singular_name,
274
+ 'fieldId' => $this->generate_field_id( $taxonomy->name ),
275
+ 'restBase' => ( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name,
276
+ 'terms' => array_map( array( $this, 'map_terms_for_js' ), $terms ),
277
  );
278
  }
279
 
280
  /**
281
+ * Returns an array suitable for use in the javascript.
282
  *
283
  * @param stdClass $term The term to map.
284
  *
285
+ * @return array The mapped terms.
286
  */
287
  private function map_terms_for_js( $term ) {
288
  return array(
292
  }
293
 
294
  /**
295
+ * Returns whether or not a taxonomy is hierarchical.
296
  *
297
  * @param stdClass $taxonomy Taxonomy object.
298
  *
admin/class-unsupported-php-message.php DELETED
@@ -1,70 +0,0 @@
1
- <?php
2
- /**
3
- * WPSEO plugin file.
4
- *
5
- * @package WPSEO\Admin
6
- */
7
-
8
- /**
9
- * Class that creates the PHP 5.2 support message.
10
- */
11
- class WPSEO_Unsupported_PHP_Message implements Whip_Message {
12
-
13
- /**
14
- * Composes the body of the message to display.
15
- *
16
- * @return string The message to display.
17
- */
18
- public function body() {
19
- $message = array();
20
-
21
- $message[] = Whip_MessageFormatter::strongParagraph( __( 'PHP update required.', 'wordpress-seo' ) ) . '<br />';
22
- $message[] = Whip_MessageFormatter::paragraph(
23
- sprintf(
24
- /* translators: 1: The strong opening tag; 2: The strong closing tag; 3: the Yoast SEO version that is dropping support; 4: The release date of the version of Yoast SEO that is dropping support; 5: The PHP version no longer being supported; */
25
- __( '%1$sAction is needed%2$s: As of version %3$s, due to be released on %4$s, Yoast SEO will no longer work with PHP %5$s. Unfortunately, your site is running on PHP %5$s right now, so action is needed. Thankfully, you can update your PHP yourself.', 'wordpress-seo' ),
26
- '<strong>',
27
- '</strong>',
28
- '7.7',
29
- date_i18n( get_option( 'date_format' ), strtotime( '11-06-2018' ) ),
30
- '5.2'
31
- )
32
- ) . '<br />';
33
-
34
- $message[] = Whip_MessageFormatter::strongParagraph( __( 'Why?', 'wordpress-seo' ) ) . '<br />';
35
- $message[] = Whip_MessageFormatter::paragraph(
36
- sprintf(
37
- /* translators: 1: the PHP version that will no longer be supported; 2: The year the unsupported PHP version was released; 3: The minimal PHP version that will be supported; 4: The year the minimally supported version of PHP was released; */
38
- __( 'PHP is the programming language WordPress is developed in and your site runs on. PHP %1$s was released in %2$s and was replaced by PHP %3$s in %4$s. Newer versions of PHP are both faster and more secure, so updating will have a positive effect on your site. Plus, it it enables our developers to use the latest technologies to make Yoast SEO even better.', 'wordpress-seo' ),
39
- '5.2',
40
- '2006',
41
- '5.3',
42
- '2009'
43
- )
44
- ) . '<br />';
45
-
46
- $message[] = Whip_MessageFormatter::strongParagraph( __( 'How?', 'wordpress-seo' ) ) . '<br />';
47
- $message[] = Whip_MessageFormatter::paragraph(
48
- sprintf(
49
- /* translators: 1: The link tag to the WordPress instructions page for upgrading to newer versions of PHP; 2: The link closing tag; 3: The recommended PHP version; 4: The Yoast article about testing plugin compatibility with newer PHP versions; */
50
- __( 'For any questions you may have about updating your PHP version, WordPress %1$shas a great page with instructions here%2$s. We recommend going up to version %3$s. Not all plugins may be ready for PHP 7 though, so %4$swe wrote an article on how to test them before you update here%2$s.', 'wordpress-seo' ),
51
- '<a href="https://wordpress.org/support/upgrade-php/" target="_blank" rel="noopener noreferrer">',
52
- '</a>',
53
- '7.2',
54
- '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/wg' ) . '" target="_blank">'
55
- )
56
- ) . '<br />';
57
-
58
- $message[] = Whip_MessageFormatter::paragraph(
59
- sprintf(
60
- /* translators: 1: The link tag to email examples page; 2: The link closing tag; 3: The link tag for the list of recommended WordPress hosting partners; */
61
- __( 'If you cannot update your PHP yourself, you can send an email to your host. We have %1$sexamples%2$s here. If they don\'t want to upgrade your PHP version, we recommend switching hosts. Take a look at our list of %3$srecommended WordPress hosting partners%2$s, they\'ve been vetted by the Yoast support team and offer all the features a modern host should have.', 'wordpress-seo' ),
62
- '<a href="' . WPSEO_Shortlinker::get( 'https://yoa.st/wh' ) . '" target="_blank">',
63
- '</a>',
64
- sprintf( '<a href="%1$s" target="_blank">', esc_url( Whip_Host::hostingPageUrl() ) )
65
- )
66
- ) . '<br />';
67
-
68
- return implode( $message, "\n" );
69
- }
70
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/class-yoast-form.php CHANGED
@@ -552,7 +552,6 @@ class Yoast_Form {
552
  echo '</fieldset>';
553
  }
554
 
555
-
556
  /**
557
  * Create a toggle switch input field using two radio buttons.
558
  *
552
  echo '</fieldset>';
553
  }
554
 
 
555
  /**
556
  * Create a toggle switch input field using two radio buttons.
557
  *
admin/class-yoast-plugin-conflict.php CHANGED
@@ -256,7 +256,6 @@ class Yoast_Plugin_Conflict {
256
  }
257
  }
258
 
259
-
260
  /**
261
  * Check if given plugin exists in array with all_active_plugins
262
  *
@@ -304,7 +303,6 @@ class Yoast_Plugin_Conflict {
304
  return $plugin_section;
305
  }
306
  }
307
-
308
  }
309
 
310
  /**
256
  }
257
  }
258
 
 
259
  /**
260
  * Check if given plugin exists in array with all_active_plugins
261
  *
303
  return $plugin_section;
304
  }
305
  }
 
306
  }
307
 
308
  /**
admin/config-ui/class-configuration-page.php CHANGED
@@ -48,7 +48,6 @@ class WPSEO_Configuration_Page {
48
  exit;
49
  }
50
 
51
-
52
  /**
53
  * Registers the page for the wizard.
54
  */
@@ -157,7 +156,6 @@ class WPSEO_Configuration_Page {
157
  </body>
158
  </html>
159
  <?php
160
-
161
  }
162
 
163
  /**
@@ -267,5 +265,4 @@ class WPSEO_Configuration_Page {
267
  private function remove_notification_option() {
268
  WPSEO_Options::set( 'show_onboarding_notice', false );
269
  }
270
-
271
  }
48
  exit;
49
  }
50
 
 
51
  /**
52
  * Registers the page for the wizard.
53
  */
156
  </body>
157
  </html>
158
  <?php
 
159
  }
160
 
161
  /**
265
  private function remove_notification_option() {
266
  WPSEO_Options::set( 'show_onboarding_notice', false );
267
  }
 
268
  }
admin/config-ui/components/interface-component.php CHANGED
@@ -9,6 +9,7 @@
9
  * Config Component interface
10
  */
11
  interface WPSEO_Config_Component {
 
12
  /**
13
  * @return string
14
  */
9
  * Config Component interface
10
  */
11
  interface WPSEO_Config_Component {
12
+
13
  /**
14
  * @return string
15
  */
admin/config-ui/fields/class-field-connect-google-search-console.php CHANGED
@@ -9,6 +9,7 @@
9
  * Class WPSEO_Config_Field_Connect_Google_Search_Console
10
  */
11
  class WPSEO_Config_Field_Connect_Google_Search_Console extends WPSEO_Config_Field {
 
12
  /**
13
  * WPSEO_Config_Field_Connect_Google_Search_Console constructor.
14
  */
9
  * Class WPSEO_Config_Field_Connect_Google_Search_Console
10
  */
11
  class WPSEO_Config_Field_Connect_Google_Search_Console extends WPSEO_Config_Field {
12
+
13
  /**
14
  * WPSEO_Config_Field_Connect_Google_Search_Console constructor.
15
  */
admin/config-ui/fields/class-field-environment.php CHANGED
@@ -9,6 +9,7 @@
9
  * Class WPSEO_Config_Field_Environment
10
  */
11
  class WPSEO_Config_Field_Environment extends WPSEO_Config_Field_Choice {
 
12
  /**
13
  * WPSEO_Config_Field_Environment constructor.
14
  */
9
  * Class WPSEO_Config_Field_Environment
10
  */
11
  class WPSEO_Config_Field_Environment extends WPSEO_Config_Field_Choice {
12
+
13
  /**
14
  * WPSEO_Config_Field_Environment constructor.
15
  */
admin/config-ui/fields/class-field-mailchimp-signup.php CHANGED
@@ -51,7 +51,6 @@ class WPSEO_Config_Field_Mailchimp_Signup extends WPSEO_Config_Field {
51
  return array(
52
  'hasSignup' => $this->has_mailchimp_signup(),
53
  );
54
-
55
  }
56
 
57
  /**
51
  return array(
52
  'hasSignup' => $this->has_mailchimp_signup(),
53
  );
 
54
  }
55
 
56
  /**
admin/config-ui/fields/class-field-multiple-authors.php CHANGED
@@ -9,6 +9,7 @@
9
  * Class WPSEO_Config_Field_Multiple_Authors
10
  */
11
  class WPSEO_Config_Field_Multiple_Authors extends WPSEO_Config_Field_Choice {
 
12
  /**
13
  * WPSEO_Config_Field_Multiple_Authors constructor.
14
  */
9
  * Class WPSEO_Config_Field_Multiple_Authors
10
  */
11
  class WPSEO_Config_Field_Multiple_Authors extends WPSEO_Config_Field_Choice {
12
+
13
  /**
14
  * WPSEO_Config_Field_Multiple_Authors constructor.
15
  */
admin/formatter/class-metabox-formatter.php CHANGED
@@ -45,9 +45,6 @@ class WPSEO_Metabox_Formatter {
45
  $analysis_seo = new WPSEO_Metabox_Analysis_SEO();
46
  $analysis_readability = new WPSEO_Metabox_Analysis_Readability();
47
 
48
- $premium_benefits = new WPSEO_Premium_Benefits_List();
49
- $premium_benefits->enqueue_translations();
50
-
51
  return array(
52
  'language' => WPSEO_Language_Utils::get_site_language_name(),
53
  'settings_link' => $this->get_settings_link(),
45
  $analysis_seo = new WPSEO_Metabox_Analysis_SEO();
46
  $analysis_readability = new WPSEO_Metabox_Analysis_Readability();
47
 
 
 
 
48
  return array(
49
  'language' => WPSEO_Language_Utils::get_site_language_name(),
50
  'settings_link' => $this->get_settings_link(),
admin/formatter/interface-metabox-formatter.php CHANGED
@@ -16,5 +16,4 @@ interface WPSEO_Metabox_Formatter_Interface {
16
  * @return array
17
  */
18
  public function get_values();
19
-
20
  }
16
  * @return array
17
  */
18
  public function get_values();
 
19
  }
admin/google_search_console/class-gsc-issues.php CHANGED
@@ -44,6 +44,7 @@ class WPSEO_GSC_Issues {
44
  $this->save_fetched_issues( $fetched_issues );
45
  }
46
  }
 
47
  /**
48
  * Getting the issues from the options.
49
  *
44
  $this->save_fetched_issues( $fetched_issues );
45
  }
46
  }
47
+
48
  /**
49
  * Getting the issues from the options.
50
  *
admin/google_search_console/class-gsc.php CHANGED
@@ -235,7 +235,6 @@ class WPSEO_GSC {
235
  // Do the redirect.
236
  wp_redirect( $url );
237
  exit;
238
-
239
  }
240
 
241
  /**
235
  // Do the redirect.
236
  wp_redirect( $url );
237
  exit;
 
238
  }
239
 
240
  /**
admin/import/plugins/class-import-platinum-seo-pack.php CHANGED
@@ -134,5 +134,4 @@ class WPSEO_Import_Platinum_SEO extends WPSEO_Plugin_Importer {
134
  }
135
  return $posts;
136
  }
137
-
138
  }
134
  }
135
  return $posts;
136
  }
 
137
  }
admin/import/plugins/class-import-premium-seo-pack.php CHANGED
@@ -35,5 +35,4 @@ class WPSEO_Import_Premium_SEO_Pack extends WPSEO_Import_Squirrly {
35
  protected function retrieve_posts_query() {
36
  return "SELECT URL AS identifier FROM {$this->table_name} WHERE blog_id = %d";
37
  }
38
-
39
  }
35
  protected function retrieve_posts_query() {
36
  return "SELECT URL AS identifier FROM {$this->table_name} WHERE blog_id = %d";
37
  }
 
38
  }
admin/import/plugins/class-import-woothemes-seo.php CHANGED
@@ -134,5 +134,4 @@ class WPSEO_Import_WooThemes_SEO extends WPSEO_Plugin_Importer {
134
  );
135
  return $wpdb->__get( 'result' );
136
  }
137
-
138
  }
134
  );
135
  return $wpdb->__get( 'result' );
136
  }
 
137
  }
admin/interface-collection.php CHANGED
@@ -16,5 +16,4 @@ interface WPSEO_Collection {
16
  * @return array The collection data.
17
  */
18
  public function get();
19
-
20
  }
16
  * @return array The collection data.
17
  */
18
  public function get();
 
19
  }
admin/metabox/class-metabox-keyword-synonyms-config.php CHANGED
@@ -36,9 +36,6 @@ class WPSEO_Metabox_Keyword_Synonyms_Config {
36
  $translations = new WPSEO_Keyword_Synonyms_Modal();
37
  $translations->enqueue_translations();
38
 
39
- $benefits = new WPSEO_Premium_Benefits_For_Synonyms_List();
40
- $benefits->enqueue_translations();
41
-
42
  Yoast_Modal::add( $keyword_synonyms_modal_config );
43
  }
44
  }
36
  $translations = new WPSEO_Keyword_Synonyms_Modal();
37
  $translations->enqueue_translations();
38
 
 
 
 
39
  Yoast_Modal::add( $keyword_synonyms_modal_config );
40
  }
41
  }
admin/metabox/class-metabox-multiple-keywords-config.php CHANGED
@@ -36,9 +36,6 @@ class WPSEO_Metabox_Multiple_Keywords_Config {
36
  $translations = new WPSEO_Multiple_Keywords_Modal();
37
  $translations->enqueue_translations();
38
 
39
- $benefits = new WPSEO_Premium_Benefits_List();
40
- $benefits->enqueue_translations();
41
-
42
  Yoast_Modal::add( $multiple_keywords_modal_config );
43
  }
44
  }
36
  $translations = new WPSEO_Multiple_Keywords_Modal();
37
  $translations->enqueue_translations();
38
 
 
 
 
39
  Yoast_Modal::add( $multiple_keywords_modal_config );
40
  }
41
  }
admin/metabox/class-metabox-null-tab.php CHANGED
@@ -9,6 +9,7 @@
9
  * Generates the HTML for a metabox tab.
10
  */
11
  class WPSEO_Metabox_Null_Tab implements WPSEO_Metabox_Tab {
 
12
  /**
13
  * Returns the html for the tab link.
14
  *
9
  * Generates the HTML for a metabox tab.
10
  */
11
  class WPSEO_Metabox_Null_Tab implements WPSEO_Metabox_Tab {
12
+
13
  /**
14
  * Returns the html for the tab link.
15
  *
admin/metabox/class-metabox.php CHANGED
@@ -371,6 +371,13 @@ class WPSEO_Metabox extends WPSEO_Meta {
371
  private function get_content_meta_section() {
372
  $content = $this->get_tab_content( 'general' );
373
 
 
 
 
 
 
 
 
374
  return new WPSEO_Metabox_Section_React(
375
  'content',
376
  '<span class="screen-reader-text">' . __( 'Content optimization', 'wordpress-seo' ) . '</span><span class="yst-traffic-light-container">' . WPSEO_Utils::traffic_light_svg() . '</span>',
@@ -416,7 +423,7 @@ class WPSEO_Metabox extends WPSEO_Meta {
416
  * @return string
417
  */
418
  private function get_buy_premium_link() {
419
- return sprintf( '<div class="%1$s"><a target="_blank" rel="noopener noreferrer" href="%2$s" class="wpseo-meta-section-link"><span class="dashicons dashicons-star-filled wpseo-buy-premium"></span>%3$s</a></div>',
420
  'wpseo-metabox-buy-premium',
421
  esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/pe-premium-page' ) ),
422
  __( 'Go Premium', 'wordpress-seo' )
@@ -509,14 +516,6 @@ class WPSEO_Metabox extends WPSEO_Meta {
509
  $description = '<p id="' . $esc_form_key . '-desc" class="yoast-metabox__description">' . $meta_field_def['description'] . '</p>';
510
  }
511
 
512
- if ( WPSEO_Utils::is_yoast_seo_premium() === false ) {
513
- $button = new WPSEO_Metabox_Keyword_Synonyms_Config();
514
- $button->enqueue_translations();
515
-
516
- $multiple_keywords_button = new WPSEO_Metabox_Multiple_Keywords_Config();
517
- $multiple_keywords_button->enqueue_translations();
518
- }
519
-
520
  switch ( $meta_field_def['type'] ) {
521
  case 'text':
522
  $ac = '';
@@ -787,6 +786,14 @@ class WPSEO_Metabox extends WPSEO_Meta {
787
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper', 'wpseoPostScraperL10n', $this->localize_post_scraper_script() );
788
  $yoast_components_l10n = new WPSEO_Admin_Asset_Yoast_Components_L10n();
789
  $yoast_components_l10n->localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper' );
 
 
 
 
 
 
 
 
790
  /**
791
  * Remove the emoji script as it is incompatible with both React and any
792
  * contenteditable fields.
@@ -841,7 +848,6 @@ class WPSEO_Metabox extends WPSEO_Meta {
841
  return array();
842
  }
843
 
844
-
845
  /**
846
  * Returns an array with shortcode tags for all registered shortcodes.
847
  *
371
  private function get_content_meta_section() {
372
  $content = $this->get_tab_content( 'general' );
373
 
374
+ /**
375
+ * Filter: 'wpseo_content_meta_section_content' - Allow filtering the metabox content before outputting.
376
+ *
377
+ * @api string $post_content The metabox content string.
378
+ */
379
+ $content = apply_filters( 'wpseo_content_meta_section_content', $content );
380
+
381
  return new WPSEO_Metabox_Section_React(
382
  'content',
383
  '<span class="screen-reader-text">' . __( 'Content optimization', 'wordpress-seo' ) . '</span><span class="yst-traffic-light-container">' . WPSEO_Utils::traffic_light_svg() . '</span>',
423
  * @return string
424
  */
425
  private function get_buy_premium_link() {
426
+ return sprintf( '<div class="%1$s"><a target="_blank" rel="noopener noreferrer" href="%2$s"><span class="dashicons dashicons-star-filled wpseo-buy-premium"></span>%3$s</a></div>',
427
  'wpseo-metabox-buy-premium',
428
  esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/pe-premium-page' ) ),
429
  __( 'Go Premium', 'wordpress-seo' )
516
  $description = '<p id="' . $esc_form_key . '-desc" class="yoast-metabox__description">' . $meta_field_def['description'] . '</p>';
517
  }
518
 
 
 
 
 
 
 
 
 
519
  switch ( $meta_field_def['type'] ) {
520
  case 'text':
521
  $ac = '';
786
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper', 'wpseoPostScraperL10n', $this->localize_post_scraper_script() );
787
  $yoast_components_l10n = new WPSEO_Admin_Asset_Yoast_Components_L10n();
788
  $yoast_components_l10n->localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper' );
789
+
790
+ $analysis_worker_location = new WPSEO_Admin_Asset_Analysis_Worker_Location( $asset_manager->flatten_version( WPSEO_VERSION ) );
791
+ $used_keywords_assessment_location = new WPSEO_Admin_Asset_Analysis_Worker_Location( $asset_manager->flatten_version( WPSEO_VERSION ), 'used-keywords-assessment' );
792
+ wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper', 'wpseoAnalysisWorkerL10n', array(
793
+ 'url' => $analysis_worker_location->get_url(),
794
+ 'keywords_assessment_url' => $used_keywords_assessment_location->get_url(),
795
+ ) );
796
+
797
  /**
798
  * Remove the emoji script as it is incompatible with both React and any
799
  * contenteditable fields.
848
  return array();
849
  }
850
 
 
851
  /**
852
  * Returns an array with shortcode tags for all registered shortcodes.
853
  *
admin/notifiers/class-post-type-archive-notification-handler.php CHANGED
@@ -95,8 +95,8 @@ class WPSEO_Post_Type_Archive_Notification_Handler implements WPSEO_Listener, WP
95
  );
96
  $message .= PHP_EOL . PHP_EOL;
97
  $message .= sprintf(
 
98
  _n(
99
- /* translators: %1$s is the archive template link start tag, %2$s is the link closing tag, %3$s is a comma separated string with content types. */
100
  'Please check the %1$sarchive template%2$s for the following content type: %3$s.',
101
  ' Please check the %1$sarchive templates%2$s for the following content types: %3$s.',
102
  count( $post_types ),
95
  );
96
  $message .= PHP_EOL . PHP_EOL;
97
  $message .= sprintf(
98
+ /* translators: %1$s is the archive template link start tag, %2$s is the link closing tag, %3$s is a comma separated string with content types. */
99
  _n(
 
100
  'Please check the %1$sarchive template%2$s for the following content type: %3$s.',
101
  ' Please check the %1$sarchive templates%2$s for the following content types: %3$s.',
102
  count( $post_types ),
admin/onpage/class-onpage.php CHANGED
@@ -229,7 +229,7 @@ class WPSEO_OnPage implements WPSEO_WordPress_Integration {
229
  * Let's start showing the notices to all admins by removing the hide-notice meta data for each admin resulting
230
  * in popping up the notice again.
231
  */
232
- delete_metadata( 'user', 0, WPSEO_OnPage::USER_META_KEY, '', true );
233
  }
234
 
235
  /**
229
  * Let's start showing the notices to all admins by removing the hide-notice meta data for each admin resulting
230
  * in popping up the notice again.
231
  */
232
+ delete_metadata( 'user', 0, self::USER_META_KEY, '', true );
233
  }
234
 
235
  /**
admin/recalculate/class-recalculate.php CHANGED
@@ -40,7 +40,6 @@ abstract class WPSEO_Recalculate {
40
  */
41
  abstract protected function item_to_response( $item );
42
 
43
-
44
  /**
45
  * Gets the items to recalculate
46
  *
40
  */
41
  abstract protected function item_to_response( $item );
42
 
 
43
  /**
44
  * Gets the items to recalculate
45
  *
admin/roles/class-register-roles.php CHANGED
@@ -9,6 +9,7 @@
9
  * Role registration class.
10
  */
11
  class WPSEO_Register_Roles implements WPSEO_WordPress_Integration {
 
12
  /**
13
  * Adds hooks.
14
  *
9
  * Role registration class.
10
  */
11
  class WPSEO_Register_Roles implements WPSEO_WordPress_Integration {
12
+
13
  /**
14
  * Adds hooks.
15
  *
admin/roles/class-role-manager-factory.php CHANGED
@@ -9,6 +9,7 @@
9
  * Role Manager Factory.
10
  */
11
  class WPSEO_Role_Manager_Factory {
 
12
  /**
13
  * Retrieves the Role manager to use.
14
  *
9
  * Role Manager Factory.
10
  */
11
  class WPSEO_Role_Manager_Factory {
12
+
13
  /**
14
  * Retrieves the Role manager to use.
15
  *
admin/roles/class-role-manager-vip.php CHANGED
@@ -9,6 +9,7 @@
9
  * VIP implementation of the Role Manager.
10
  */
11
  final class WPSEO_Role_Manager_VIP extends WPSEO_Abstract_Role_Manager {
 
12
  /**
13
  * Adds a role to the system.
14
  *
9
  * VIP implementation of the Role Manager.
10
  */
11
  final class WPSEO_Role_Manager_VIP extends WPSEO_Abstract_Role_Manager {
12
+
13
  /**
14
  * Adds a role to the system.
15
  *
admin/roles/class-role-manager.php CHANGED
@@ -9,6 +9,7 @@
9
  * Role Manager interface.
10
  */
11
  interface WPSEO_Role_Manager {
 
12
  /**
13
  * Registers a role.
14
  *
9
  * Role Manager interface.
10
  */
11
  interface WPSEO_Role_Manager {
12
+
13
  /**
14
  * Registers a role.
15
  *
admin/statistics/class-statistics-integration.php CHANGED
@@ -9,6 +9,7 @@
9
  * Class WPSEO_Statistic_Integration
10
  */
11
  class WPSEO_Statistic_Integration implements WPSEO_WordPress_Integration {
 
12
  /**
13
  * Adds hooks to clear the cache.
14
  *
9
  * Class WPSEO_Statistic_Integration
10
  */
11
  class WPSEO_Statistic_Integration implements WPSEO_WordPress_Integration {
12
+
13
  /**
14
  * Adds hooks to clear the cache.
15
  *
admin/taxonomy/class-taxonomy-columns.php CHANGED
@@ -244,6 +244,4 @@ class WPSEO_Taxonomy_Columns {
244
 
245
  return WPSEO_Utils::is_metabox_active( $taxonomy, 'taxonomy' );
246
  }
247
-
248
-
249
  }
244
 
245
  return WPSEO_Utils::is_metabox_active( $taxonomy, 'taxonomy' );
246
  }
 
 
247
  }
admin/taxonomy/class-taxonomy.php CHANGED
@@ -107,6 +107,14 @@ class WPSEO_Taxonomy {
107
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper', 'wpseoTermScraperL10n', $this->localize_term_scraper_script() );
108
  $yoast_components_l10n = new WPSEO_Admin_Asset_Yoast_Components_L10n();
109
  $yoast_components_l10n->localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper' );
 
 
 
 
 
 
 
 
110
  /**
111
  * Remove the emoji script as it is incompatible with both React and any
112
  * contenteditable fields.
107
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper', 'wpseoTermScraperL10n', $this->localize_term_scraper_script() );
108
  $yoast_components_l10n = new WPSEO_Admin_Asset_Yoast_Components_L10n();
109
  $yoast_components_l10n->localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper' );
110
+
111
+ $analysis_worker_location = new WPSEO_Admin_Asset_Analysis_Worker_Location( $asset_manager->flatten_version( WPSEO_VERSION ) );
112
+ $used_keywords_assessment_location = new WPSEO_Admin_Asset_Analysis_Worker_Location( $asset_manager->flatten_version( WPSEO_VERSION ), 'used-keywords-assessment' );
113
+ wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'term-scraper', 'wpseoAnalysisWorkerL10n', array(
114
+ 'url' => $analysis_worker_location->get_url(),
115
+ 'keywords_assessment_url' => $used_keywords_assessment_location->get_url(),
116
+ ) );
117
+
118
  /**
119
  * Remove the emoji script as it is incompatible with both React and any
120
  * contenteditable fields.
admin/views/js-templates-primary-term.php CHANGED
@@ -12,15 +12,6 @@ if ( ! defined( 'WPSEO_VERSION' ) ) {
12
  }
13
  ?>
14
 
15
- <script type="text/html" id="tmpl-primary-term-input">
16
- <input type="hidden" class="yoast-wpseo-primary-term"
17
- id="yoast-wpseo-primary-{{data.taxonomy.name}}"
18
- name="<?php echo esc_attr( WPSEO_Meta::$form_prefix ); ?>primary_{{data.taxonomy.name}}_term"
19
- value="{{data.taxonomy.primary}}">
20
-
21
- <?php wp_nonce_field( 'save-primary-term', WPSEO_Meta::$form_prefix . 'primary_{{data.taxonomy.name}}_nonce' ); ?>
22
- </script>
23
-
24
  <script type="text/html" id="tmpl-primary-term-ui">
25
  <?php
26
  printf(
12
  }
13
  ?>
14
 
 
 
 
 
 
 
 
 
 
15
  <script type="text/html" id="tmpl-primary-term-ui">
16
  <?php
17
  printf(
admin/views/tabs/metas/paper-content/post-type-content.php CHANGED
@@ -28,7 +28,7 @@ if ( $wpseo_post_type->name === 'product' && WPSEO_Utils::is_woocommerce_active(
28
  if ( WPSEO_Post_Type::has_archive( $wpseo_post_type ) ) {
29
  $plural_label = $wpseo_post_type->labels->name;
30
 
31
- // translators: %s is the plural version of the post type's name.
32
  echo '<h3>' . esc_html( sprintf( __( 'Settings for %s archive', 'wordpress-seo' ), $plural_label ) ) . '</h3>';
33
 
34
  $custom_post_type_archive_help = $view_utils->search_results_setting_help( $wpseo_post_type, 'archive' );
28
  if ( WPSEO_Post_Type::has_archive( $wpseo_post_type ) ) {
29
  $plural_label = $wpseo_post_type->labels->name;
30
 
31
+ /* translators: %s is the plural version of the post type's name. */
32
  echo '<h3>' . esc_html( sprintf( __( 'Settings for %s archive', 'wordpress-seo' ), $plural_label ) ) . '</h3>';
33
 
34
  $custom_post_type_archive_help = $view_utils->search_results_setting_help( $wpseo_post_type, 'archive' );
admin/views/tabs/metas/paper-content/post_type/woocommerce-shop-page.php CHANGED
@@ -19,5 +19,6 @@ if ( $woocommerce_shop_page->get_shop_page_id() !== -1 ) {
19
  );
20
  }
21
 
 
22
  echo '<h3>' . esc_html( sprintf( __( 'Settings for %s archive', 'wordpress-seo' ), $wpseo_post_type->labels->name ) ) . '</h3>';
23
  echo '<p>' . $description . '</p>';
19
  );
20
  }
21
 
22
+ /* translators: %s expands to the post type name. */
23
  echo '<h3>' . esc_html( sprintf( __( 'Settings for %s archive', 'wordpress-seo' ), $wpseo_post_type->labels->name ) ) . '</h3>';
24
  echo '<p>' . $description . '</p>';
css/dist/{admin-global-800-rtl.min.css → admin-global-810-rtl.min.css} RENAMED
File without changes
css/dist/{admin-global-800.min.css → admin-global-810.min.css} RENAMED
File without changes
css/dist/{adminbar-800-rtl.min.css → adminbar-810-rtl.min.css} RENAMED
File without changes
css/dist/{adminbar-800.min.css → adminbar-810.min.css} RENAMED
File without changes
css/dist/{alerts-800-rtl.min.css → alerts-810-rtl.min.css} RENAMED
@@ -1 +1 @@
1
- .screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px;padding:0;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}body{margin:0;padding:0}#container{max-width:1660px;margin:0 auto}.yoast-wizard-body{box-sizing:border-box;width:80%;max-width:60em;margin:1rem auto 4rem}@media screen and (max-width:768px){.yoast-wizard-body{width:auto;margin:0}}.yoast-wizard__logo{display:block;margin:0 auto}.yoast-wizard{box-sizing:border-box;width:100%;min-height:20px;padding:2em;background:#fff;text-align:right}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}}.yoast-wizard--header{text-align:center}.yoast-wizard--header--page-title{margin:0 0 -16px;padding:0 8px;color:#a4286a;font-size:1.25em;font-weight:400;line-height:2.5;letter-spacing:.03em}.yoast-wizard--navigation{width:100%;text-align:left}.yoast-wizard--button{margin-top:1em}.yoast-wizard--button__next{margin-right:1em}.yoast-wizard--button__next button:focus,.yoast-wizard--button__next button:hover{background-color:#6c2548!important}.yoast-wizard--button__next button:focus div,.yoast-wizard--button__next button:hover div{background-color:transparent!important}.yoast-wizard--button__previous button:focus{background:#ddd!important}.yoast-wizard--button__previous button:focus:active{background:0 0!important}.yoast-wizard--button__previous button:focus>div>span,.yoast-wizard--button__previous button:hover>div>span{color:#000!important}.yoast-wizard--step__inactive div{pointer-events:none}@media screen and (max-width:768px){.yoast-wizard--header--page-title{font-size:1.5em;line-height:1.25}.yoast-wizard--step__active{overflow:hidden;width:38px}.yoast-wizard--step__active div{display:inline-block!important;vertical-align:middle}.yoast-wizard--step__active div>span>span{display:block!important;margin-right:-7px;padding-left:99px!important}.yoast-wizard--step__inactive{display:none!important}}.yoast-wizard--step--container:focus{outline:0}.yoast-wizard--step--container h1{margin:0;color:#a4286a;font-size:2.25em;font-weight:100;line-height:3.68rem;letter-spacing:.03em}@media screen and (max-width:768px){.yoast-wizard--step--container h1{font-size:2em;line-height:1.25}}.yoast-wizard--step--container h2{color:#a4286a;font-size:1.375em;font-weight:100}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{position:absolute;z-index:10;top:0;right:0;width:100%;height:100%;opacity:.2;color:#fff;background-color:#000;text-align:center}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{position:relative;min-height:20px;border:1px solid #ccc;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px;text-align:right}.yoast-wizard-container--no-navigation{margin-top:40px}.yoast-wizard-container--no-navigation .yoast-wizard{padding-top:3em}@media screen and (max-width:768px){.yoast-wizard-container{box-shadow:none}}.yoast-wizard-container fieldset{margin:1em 0;border:0}.yoast-wizard-text-input{padding-bottom:.5em;font-size:14px}.yoast-wizard-text-input-label{display:block;margin:.5em 0 0;font-size:14px;font-weight:700;cursor:pointer}.yoast-wizard-text-input [type=text]{box-sizing:border-box;width:100%;max-width:450px}.yoast-video-container-max-width,.yoast-wizard-content-container{max-width:560px}.yoast-wizard-field-description{font-weight:700}.yoast-wizard input{margin:.5em 0;padding:5px;font-size:14px;line-height:140%}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em 0 .3em .7em;vertical-align:middle}.yoast-wizard-input__explanation{margin-top:0;color:#555;font-style:italic}.yoast-wizard-input-radio{font-size:14px}.yoast-wizard-input-radio-option label{padding-top:2px}.yoast-wizard-input-radio-separator{padding:0}.yoast-wizard-input-radio-separator input{position:absolute;right:-9999em;width:1px;height:1px}.yoast-wizard-input-radio-separator input+label{float:right;width:30px!important;margin:0 0 5px 5px!important;padding:6px 3px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;text-align:center;cursor:pointer}.yoast-wizard-input-radio-separator input:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}.yoast-wizard-input-radio-separator input:checked+label,.yoast-wizard-input-radio-separator input:focus+label{border-radius:10px 10px 10px 0}.yoast-video-container{overflow:hidden;position:relative;height:0;padding-bottom:56.25%}.yoast-video-container iframe{position:absolute;top:0;right:0;width:100%;height:100%}.yoast-wizard-notice__error{margin-bottom:15px;padding:12px;border-right:4px solid #dc3232;background:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.yoast-wizard-content-container.yoast-wizard-content-container__is-full-width{max-width:none}@keyframes heartbeat{0%{opacity:.4;transform:scale(.7)}80%{opacity:1}100%{opacity:1;transform:scale(.95)}}.yoast-loader{animation:heartbeat 1.15s infinite;animation-timing-function:cubic-bezier(.96,.02,.63,.86);animation-direction:alternate}.yoast-alert{padding:0 12px;border-right:4px solid #fff;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2)}.yoast-alerts .yoast-alert-holder{margin-bottom:.8em}.yoast-alerts .yoast-alert{width:100%}.yoast-container__alert .yoast-alert{border-right-color:#dc3232}#yoast-alerts-dismissed .yoast-alert{border-right-color:#d93f69}.yoast-container__warning .yoast-alert{border-right-color:#5d237a}#yoast-warnings-dismissed .yoast-alert{border-right-color:#0075b3}.yoast-container{position:relative;max-width:1280px;margin:20px 0 1px;padding:20px 20px 0;border:1px solid #e5e5e5;background-color:#fdfdfd;box-shadow:0 1px 1px rgba(0,0,0,.04)}.yoast-alerts>h2:first-child{margin:0;padding:9px 0 4px;font-size:23px;font-weight:400;line-height:29px}.yoast-alerts .yoast-container h3{margin:-20px -20px 0;padding:1em;border-bottom:1px solid #ccc;background-color:#fdfdfd;font-size:1.4em}h3 .dashicons-warning{color:#dc3232}.yoast-container .container{max-width:980px}.yoast-container .yoast-alert-holder{display:-ms-flexbox;display:flex}.dismiss .dashicons,.restore .dashicons{width:24px;height:24px;font-size:24px}.yoast-bottom-spacing{margin-bottom:20px}.yoast-alerts .button.dismiss,.yoast-alerts .button.restore{width:45px;height:45px;margin-right:10px;padding:0;outline:0;line-height:inherit;cursor:pointer;-ms-flex:0 0 45px;flex:0 0 45px}.yoast-alerts .button.dismiss:focus,.yoast-alerts .button.dismiss:hover,.yoast-alerts .button.restore:focus,.yoast-alerts .button.restore:hover{background:0 0}.yoast-container .separator{margin-top:1em;margin-bottom:1em;border-top:1px solid #ddd}.yoast-container .dashicons-yes{color:#77b227}.yoast-container__warning .dashicons-flag{color:#5d237a}.yoast-container-disabled{display:table-cell;position:absolute;top:0;left:0;bottom:0;right:0;border-radius:4px;background-color:rgba(232,232,232,.7)}.yoast-no-issues{padding:1em 16px 1em 1em;color:#666}.yoast-muted-title{overflow:hidden;font-weight:600;font-style:italic}.yoast-muted-title:after{display:inline-block;width:100%;height:.5em;margin-left:-100%;margin-right:10px;border-top:1px solid #ddd;vertical-align:bottom;content:""}.yoast-alerts .yoast-container__configuration-wizard{display:-ms-flexbox;display:flex;min-height:0;margin-bottom:15px;padding-bottom:20px;background-color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);align-items:center;-ms-flex-align:center}.yoast-alerts .yoast-container__configuration-wizard--content{margin:12px;padding:0;-ms-flex:1 1 auto;flex:1 1 auto}.yoast-alerts .yoast-container__configuration-wizard--content h3{margin:0 0 4px;padding:0;border-bottom:0;background:0 0;font-size:1.4em;line-height:1}.yoast-alerts .yoast-container__configuration-wizard--content p{margin:1em 0 0}.yoast-alerts .yoast-container__configuration-wizard--content p:last-child{margin:0}.yoast-alerts .yoast-container__configuration-wizard--dismiss{text-align:center}@media screen and (max-width:768px){.yoast-alerts .yoast-container__configuration-wizard img{display:none}.yoast-alerts .yoast-container__configuration-wizard--content{display:block;position:relative;padding:16px}.yoast-alerts .yoast-container__configuration-wizard--dismiss{position:absolute;top:5px;left:5px;width:40px;margin:0}}.yoast-alerts .yoast-container__configuration-wizard--dismiss .dashicons{margin-top:11px;text-decoration:none}
1
+ .screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px;padding:0;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}body{margin:0;padding:0}#container{max-width:1660px;margin:0 auto}.yoast-wizard-body{box-sizing:border-box;width:80%;max-width:60em;margin:1rem auto 4rem}@media screen and (max-width:768px){.yoast-wizard-body{width:auto;margin:0}}.yoast-wizard__logo{display:block;margin:0 auto}.yoast-wizard{box-sizing:border-box;width:100%;min-height:20px;padding:2em;background:#fff;text-align:right}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}}.yoast-wizard--header{text-align:center}.yoast-wizard--header--page-title{margin:0 0 -16px;padding:0 8px;color:#a4286a;font-size:1.25em;font-weight:400;line-height:2.5;letter-spacing:.03em}.yoast-wizard--navigation{width:100%;text-align:left}.yoast-wizard--button{margin-top:1em}.yoast-wizard--button__next{margin-right:1em}.yoast-wizard--button__next button:focus,.yoast-wizard--button__next button:hover{background-color:#6c2548!important}.yoast-wizard--button__next button:focus div,.yoast-wizard--button__next button:hover div{background-color:transparent!important}.yoast-wizard--button__previous button:focus{background:#ddd!important}.yoast-wizard--button__previous button:focus:active{background:0 0!important}.yoast-wizard--button__previous button:focus>div>span,.yoast-wizard--button__previous button:hover>div>span{color:#000!important}.yoast-wizard--step__inactive div{pointer-events:none}@media screen and (max-width:768px){.yoast-wizard--header--page-title{font-size:1.5em;line-height:1.25}.yoast-wizard--step__active{overflow:hidden;width:38px}.yoast-wizard--step__active div{display:inline-block!important;vertical-align:middle}.yoast-wizard--step__active div>span>span{display:block!important;margin-right:-7px;padding-left:99px!important}.yoast-wizard--step__inactive{display:none!important}}.yoast-wizard--step--container:focus{outline:0}.yoast-wizard--step--container h1{margin:0;color:#a4286a;font-size:2.25em;font-weight:100;line-height:3.68rem;letter-spacing:.03em}@media screen and (max-width:768px){.yoast-wizard--step--container h1{font-size:2em;line-height:1.25}}.yoast-wizard--step--container h2{color:#a4286a;font-size:1.375em;font-weight:100}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{position:absolute;z-index:10;top:0;right:0;width:100%;height:100%;opacity:.2;color:#fff;background-color:#000;text-align:center}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{position:relative;min-height:20px;border:1px solid #ccc;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px;text-align:right}.yoast-wizard-container--no-navigation{margin-top:40px}.yoast-wizard-container--no-navigation .yoast-wizard{padding-top:3em}@media screen and (max-width:768px){.yoast-wizard-container{box-shadow:none}}.yoast-wizard-container fieldset{margin:1em 0;border:0}.yoast-wizard-text-input{padding-bottom:.5em;font-size:14px}.yoast-wizard-text-input-label{display:block;margin:.5em 0 0;font-size:14px;font-weight:700;cursor:pointer}.yoast-wizard-text-input [type=text]{box-sizing:border-box;width:100%;max-width:450px}.yoast-video-container-max-width,.yoast-wizard-content-container{max-width:560px}.yoast-wizard-field-description{font-weight:700}.yoast-wizard input{margin:.5em 0;padding:5px;font-size:14px;line-height:140%}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em 0 .3em .7em;vertical-align:middle}.yoast-wizard-input__explanation{margin-top:0;color:#555;font-style:italic}.yoast-wizard-input-radio{font-size:14px}.yoast-wizard-input-radio-option label{padding-top:2px}.yoast-wizard-input-radio-separator{padding:0}.yoast-wizard-input-radio-separator input{position:absolute;right:-9999em;width:1px;height:1px}.yoast-wizard-input-radio-separator input+label{float:right;width:30px!important;margin:0 0 5px 5px!important;padding:6px 3px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;text-align:center;cursor:pointer}.yoast-wizard-input-radio-separator input:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}.yoast-wizard-input-radio-separator input:checked+label,.yoast-wizard-input-radio-separator input:focus+label{border-radius:10px 10px 10px 0}.yoast-video-container{overflow:hidden;position:relative;height:0;padding-bottom:56.25%}.yoast-video-container iframe{position:absolute;top:0;right:0;width:100%;height:100%}.yoast-wizard-notice__error{margin-bottom:15px;padding:12px;border-right:4px solid #dc3232;background:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.yoast-wizard-content-container.yoast-wizard-content-container__is-full-width{max-width:none}@keyframes heartbeat{0%{opacity:.4;transform:scale(.7)}80%{opacity:1}100%{opacity:1;transform:scale(.95)}}.yoast-loader{animation:heartbeat 1.15s infinite;animation-timing-function:cubic-bezier(.96,.02,.63,.86);animation-direction:alternate}.yoast-svg-icon-loading-spinner{animation:rotator 1.4s linear infinite}@keyframes rotator{0%{transform:rotate(0)}100%{transform:rotate(-270deg)}}.path{-ms-transform-origin:center;transform-origin:center;animation:dash 1.4s ease-in-out infinite,colors 5.6s ease-in-out infinite;stroke-dasharray:187;stroke-dashoffset:0}@keyframes colors{0%,100%,25%,50%,75%{stroke:#64a60a}}@keyframes dash{0%{stroke-dashoffset:187}50%{transform:rotate(-135deg);stroke-dashoffset:46.75}100%{transform:rotate(-450deg);stroke-dashoffset:187}}.yoast-alert{padding:0 12px;border-right:4px solid #fff;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2)}.yoast-alerts .yoast-alert-holder{margin-bottom:.8em}.yoast-alerts .yoast-alert{width:100%}.yoast-container__alert .yoast-alert{border-right-color:#dc3232}#yoast-alerts-dismissed .yoast-alert{border-right-color:#d93f69}.yoast-container__warning .yoast-alert{border-right-color:#5d237a}#yoast-warnings-dismissed .yoast-alert{border-right-color:#0075b3}.yoast-container{position:relative;max-width:1280px;margin:20px 0 1px;padding:20px 20px 0;border:1px solid #e5e5e5;background-color:#fdfdfd;box-shadow:0 1px 1px rgba(0,0,0,.04)}.yoast-alerts>h2:first-child{margin:0;padding:9px 0 4px;font-size:23px;font-weight:400;line-height:29px}.yoast-alerts .yoast-container h3{margin:-20px -20px 0;padding:1em;border-bottom:1px solid #ccc;background-color:#fdfdfd;font-size:1.4em}h3 .dashicons-warning{color:#dc3232}.yoast-container .container{max-width:980px}.yoast-container .yoast-alert-holder{display:-ms-flexbox;display:flex}.dismiss .dashicons,.restore .dashicons{width:24px;height:24px;font-size:24px}.yoast-bottom-spacing{margin-bottom:20px}.yoast-alerts .button.dismiss,.yoast-alerts .button.restore{width:45px;height:45px;margin-right:10px;padding:0;outline:0;line-height:inherit;cursor:pointer;-ms-flex:0 0 45px;flex:0 0 45px}.yoast-alerts .button.dismiss:focus,.yoast-alerts .button.dismiss:hover,.yoast-alerts .button.restore:focus,.yoast-alerts .button.restore:hover{background:0 0}.yoast-container .separator{margin-top:1em;margin-bottom:1em;border-top:1px solid #ddd}.yoast-container .dashicons-yes{color:#77b227}.yoast-container__warning .dashicons-flag{color:#5d237a}.yoast-container-disabled{display:table-cell;position:absolute;top:0;left:0;bottom:0;right:0;border-radius:4px;background-color:rgba(232,232,232,.7)}.yoast-no-issues{padding:1em 16px 1em 1em;color:#666}.yoast-muted-title{overflow:hidden;font-weight:600;font-style:italic}.yoast-muted-title:after{display:inline-block;width:100%;height:.5em;margin-left:-100%;margin-right:10px;border-top:1px solid #ddd;vertical-align:bottom;content:""}.yoast-alerts .yoast-container__configuration-wizard{display:-ms-flexbox;display:flex;min-height:0;margin-bottom:15px;padding-bottom:20px;background-color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);align-items:center;-ms-flex-align:center}.yoast-alerts .yoast-container__configuration-wizard--content{margin:12px;padding:0;-ms-flex:1 1 auto;flex:1 1 auto}.yoast-alerts .yoast-container__configuration-wizard--content h3{margin:0 0 4px;padding:0;border-bottom:0;background:0 0;font-size:1.4em;line-height:1}.yoast-alerts .yoast-container__configuration-wizard--content p{margin:1em 0 0}.yoast-alerts .yoast-container__configuration-wizard--content p:last-child{margin:0}.yoast-alerts .yoast-container__configuration-wizard--dismiss{text-align:center}@media screen and (max-width:768px){.yoast-alerts .yoast-container__configuration-wizard img{display:none}.yoast-alerts .yoast-container__configuration-wizard--content{display:block;position:relative;padding:16px}.yoast-alerts .yoast-container__configuration-wizard--dismiss{position:absolute;top:5px;left:5px;width:40px;margin:0}}.yoast-alerts .yoast-container__configuration-wizard--dismiss .dashicons{margin-top:11px;text-decoration:none}
css/dist/{alerts-800.min.css → alerts-810.min.css} RENAMED
@@ -1 +1 @@
1
- .screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px;padding:0;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}body{margin:0;padding:0}#container{max-width:1660px;margin:0 auto}.yoast-wizard-body{box-sizing:border-box;width:80%;max-width:60em;margin:1rem auto 4rem}@media screen and (max-width:768px){.yoast-wizard-body{width:auto;margin:0}}.yoast-wizard__logo{display:block;margin:0 auto}.yoast-wizard{box-sizing:border-box;width:100%;min-height:20px;padding:2em;background:#fff;text-align:left}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}}.yoast-wizard--header{text-align:center}.yoast-wizard--header--page-title{margin:0 0 -16px;padding:0 8px;color:#a4286a;font-size:1.25em;font-weight:400;line-height:2.5;letter-spacing:.03em}.yoast-wizard--navigation{width:100%;text-align:right}.yoast-wizard--button{margin-top:1em}.yoast-wizard--button__next{margin-left:1em}.yoast-wizard--button__next button:focus,.yoast-wizard--button__next button:hover{background-color:#6c2548!important}.yoast-wizard--button__next button:focus div,.yoast-wizard--button__next button:hover div{background-color:transparent!important}.yoast-wizard--button__previous button:focus{background:#ddd!important}.yoast-wizard--button__previous button:focus:active{background:0 0!important}.yoast-wizard--button__previous button:focus>div>span,.yoast-wizard--button__previous button:hover>div>span{color:#000!important}.yoast-wizard--step__inactive div{pointer-events:none}@media screen and (max-width:768px){.yoast-wizard--header--page-title{font-size:1.5em;line-height:1.25}.yoast-wizard--step__active{overflow:hidden;width:38px}.yoast-wizard--step__active div{display:inline-block!important;vertical-align:middle}.yoast-wizard--step__active div>span>span{display:block!important;margin-left:-7px;padding-right:99px!important}.yoast-wizard--step__inactive{display:none!important}}.yoast-wizard--step--container:focus{outline:0}.yoast-wizard--step--container h1{margin:0;color:#a4286a;font-size:2.25em;font-weight:100;line-height:3.68rem;letter-spacing:.03em}@media screen and (max-width:768px){.yoast-wizard--step--container h1{font-size:2em;line-height:1.25}}.yoast-wizard--step--container h2{color:#a4286a;font-size:1.375em;font-weight:100}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{position:absolute;z-index:10;top:0;left:0;width:100%;height:100%;opacity:.2;color:#fff;background-color:#000;text-align:center}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{position:relative;min-height:20px;border:1px solid #ccc;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px;text-align:left}.yoast-wizard-container--no-navigation{margin-top:40px}.yoast-wizard-container--no-navigation .yoast-wizard{padding-top:3em}@media screen and (max-width:768px){.yoast-wizard-container{box-shadow:none}}.yoast-wizard-container fieldset{margin:1em 0;border:0}.yoast-wizard-text-input{padding-bottom:.5em;font-size:14px}.yoast-wizard-text-input-label{display:block;margin:.5em 0 0;font-size:14px;font-weight:700;cursor:pointer}.yoast-wizard-text-input [type=text]{box-sizing:border-box;width:100%;max-width:450px}.yoast-video-container-max-width,.yoast-wizard-content-container{max-width:560px}.yoast-wizard-field-description{font-weight:700}.yoast-wizard input{margin:.5em 0;padding:5px;font-size:14px;line-height:140%}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em .7em .3em 0;vertical-align:middle}.yoast-wizard-input__explanation{margin-top:0;color:#555;font-style:italic}.yoast-wizard-input-radio{font-size:14px}.yoast-wizard-input-radio-option label{padding-top:2px}.yoast-wizard-input-radio-separator{padding:0}.yoast-wizard-input-radio-separator input{position:absolute;left:-9999em;width:1px;height:1px}.yoast-wizard-input-radio-separator input+label{float:left;width:30px!important;margin:0 5px 5px 0!important;padding:6px 3px;border:1px solid #ccc;font-family:Arial,Helvetica,sans-serif!important;font-size:18px!important;line-height:24px;text-align:center;cursor:pointer}.yoast-wizard-input-radio-separator input:checked+label{border:1px solid #a4286a;background-color:#fff;box-shadow:inset 0 0 0 2px #a4286a}.yoast-wizard-input-radio-separator input:checked+label,.yoast-wizard-input-radio-separator input:focus+label{border-radius:10px 10px 0}.yoast-video-container{overflow:hidden;position:relative;height:0;padding-bottom:56.25%}.yoast-video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.yoast-wizard-notice__error{margin-bottom:15px;padding:12px;border-left:4px solid #dc3232;background:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.yoast-wizard-content-container.yoast-wizard-content-container__is-full-width{max-width:none}@keyframes heartbeat{0%{opacity:.4;transform:scale(.7)}80%{opacity:1}100%{opacity:1;transform:scale(.95)}}.yoast-loader{animation:heartbeat 1.15s infinite;animation-timing-function:cubic-bezier(.96,.02,.63,.86);animation-direction:alternate}.yoast-alert{padding:0 12px;border-left:4px solid #fff;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2)}.yoast-alerts .yoast-alert-holder{margin-bottom:.8em}.yoast-alerts .yoast-alert{width:100%}.yoast-container__alert .yoast-alert{border-left-color:#dc3232}#yoast-alerts-dismissed .yoast-alert{border-left-color:#d93f69}.yoast-container__warning .yoast-alert{border-left-color:#5d237a}#yoast-warnings-dismissed .yoast-alert{border-left-color:#0075b3}.yoast-container{position:relative;max-width:1280px;margin:20px 0 1px;padding:20px 20px 0;border:1px solid #e5e5e5;background-color:#fdfdfd;box-shadow:0 1px 1px rgba(0,0,0,.04)}.yoast-alerts>h2:first-child{margin:0;padding:9px 0 4px;font-size:23px;font-weight:400;line-height:29px}.yoast-alerts .yoast-container h3{margin:-20px -20px 0;padding:1em;border-bottom:1px solid #ccc;background-color:#fdfdfd;font-size:1.4em}h3 .dashicons-warning{color:#dc3232}.yoast-container .container{max-width:980px}.yoast-container .yoast-alert-holder{display:-ms-flexbox;display:flex}.dismiss .dashicons,.restore .dashicons{width:24px;height:24px;font-size:24px}.yoast-bottom-spacing{margin-bottom:20px}.yoast-alerts .button.dismiss,.yoast-alerts .button.restore{width:45px;height:45px;margin-left:10px;padding:0;outline:0;line-height:inherit;cursor:pointer;-ms-flex:0 0 45px;flex:0 0 45px}.yoast-alerts .button.dismiss:focus,.yoast-alerts .button.dismiss:hover,.yoast-alerts .button.restore:focus,.yoast-alerts .button.restore:hover{background:0 0}.yoast-container .separator{margin-top:1em;margin-bottom:1em;border-top:1px solid #ddd}.yoast-container .dashicons-yes{color:#77b227}.yoast-container__warning .dashicons-flag{color:#5d237a}.yoast-container-disabled{display:table-cell;position:absolute;top:0;right:0;bottom:0;left:0;border-radius:4px;background-color:rgba(232,232,232,.7)}.yoast-no-issues{padding:1em 1em 1em 16px;color:#666}.yoast-muted-title{overflow:hidden;font-weight:600;font-style:italic}.yoast-muted-title:after{display:inline-block;width:100%;height:.5em;margin-right:-100%;margin-left:10px;border-top:1px solid #ddd;vertical-align:bottom;content:""}.yoast-alerts .yoast-container__configuration-wizard{display:-ms-flexbox;display:flex;min-height:0;margin-bottom:15px;padding-bottom:20px;background-color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);align-items:center;-ms-flex-align:center}.yoast-alerts .yoast-container__configuration-wizard--content{margin:12px;padding:0;-ms-flex:1 1 auto;flex:1 1 auto}.yoast-alerts .yoast-container__configuration-wizard--content h3{margin:0 0 4px;padding:0;border-bottom:0;background:0 0;font-size:1.4em;line-height:1}.yoast-alerts .yoast-container__configuration-wizard--content p{margin:1em 0 0}.yoast-alerts .yoast-container__configuration-wizard--content p:last-child{margin:0}.yoast-alerts .yoast-container__configuration-wizard--dismiss{text-align:center}@media screen and (max-width:768px){.yoast-alerts .yoast-container__configuration-wizard img{display:none}.yoast-alerts .yoast-container__configuration-wizard--content{display:block;position:relative;padding:16px}.yoast-alerts .yoast-container__configuration-wizard--dismiss{position:absolute;top:5px;right:5px;width:40px;margin:0}}.yoast-alerts .yoast-container__configuration-wizard--dismiss .dashicons{margin-top:11px;text-decoration:none}
1
+ .screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px;padding:0;border