Yoast SEO - Version 14.0

Version Description

Release Date: April 28th, 2020

Today is a special day. Today, a project weve been working on for a year sees the light of day. Yoast SEO 14.0 rewrites the playbook on how a WordPress SEO plugin can work. Thanks to an approach we call indexables, we bring you a much faster experience and a new foundation that helps us get ready for an exciting future! Read more about this release in our release post!

Bugfixes:

  • Fixes a bug where the Open Graph image would be set as Twitter image when Open Graph was disabled.
  • Fixes a bug where the article:publisher meta tag would not contain the Person's Facebook account if the Knowledge Graph was set to Person.
  • Fixes a bug where no title meta tag would be output when no post or page-specific title was specified.
  • Fixes a bug where the date archive description from the Search Appearance settings would not be used for the og:description meta tag.
  • Fixes a bug where a notice would be thrown when a field in the FAQ or HowTo block was left empty.
  • Fixes a bug where the Help Scout beacon was aligned to the right on settings pages on installations with a right-to-left language.
  • Fixes a bug where UTF-8 encoded urls were not always readable in the snippet preview.
  • Fixes a bug where the embedding of posts on LinkedIn was broken.

Enhancements:

  • Adds a notification that appears when your content hasn't been fully indexed yet.
  • Adds a button to the SEO > Tools page to index all your content.
  • Adds a feature toggle to disable the headless REST routes.
  • No longer outputs the og:type meta tag on 404 pages.
  • No longer outputs a twitter:title, twitter:image and/or twitter:description meta tag when there is already an og:title, og:image and/or og:description meta tag specified in the frontend output and theyre not specifically set to something else.
  • No longer outputs an article:section and article:tag meta tag as none of the Open Graph consumers seems to use it.
  • No longer outputs an og:updated_time meta tag as it was the same as article:modified_time and all Open Graph consumers seem to prefer that.
  • No longer outputs an og:image:secure_url meta tag as it was the same as og:image and all Open Graph consumers seem to prefer that.
  • Strips all HTML tags from text fields in the schema output.
  • Adds Term hierarchy as a taxonomy snippet variable.
  • Uses the Gravatar image as a fallback for author archive's og:image and twitter:image.
  • Improves the way gallery images are retrieved . Props to stodorovic.
  • Bing has added support for the same opt-in meta robots values as Google has, see their announcement post. We have decided to opt-in users of Yoast SEO by default to Bingbot crawling.
  • No longer removes the default robots meta values.

Other:

  • Deprecates the wpseo_twitter_taxonomy_image and wpseo_twitter_metatag_key filters.
  • Deprecates the wp_seo_get_bc_ancestors filter. Developers should use the wpseo_breadcrumb_links filter instead to add and/or replace breadcrumbs.
  • Deprecates the wpseo_opengraph and wpseo_twitter actions.
  • Adds the following filters:
    • wpseo_debug_markers, which allows users to disable the debug markers.
    • wpseo_frontend_presenter_classes, which enables the filtering of presenters.
    • wpseo_frontend_presenters, which enables the filtering of presenter instances.
    • wpseo_googlebot, which enables the filtering of the googlebot meta output.
    • wpseo_og_article_publisher, which enables the filtering of the article publishers Facebook URL.
    • wpseo_og_locale, which enables the filtering of the Open Graph locale.
    • wpseo_post_indexation_limit, which enables the filtering of the amount of posts indexed during each indexing pass.
    • wpseo_post_type_archive_indexation_limit, which enables the filtering of the amount of post type archives indexed during each indexing pass.
    • wpseo_term_indexation_limit, which enables the filtering of the amount of terms indexed during each indexing pass.
    • wpseo_post_types_reset_permalinks, which enables the filtering of the post types to reset permalinks for.
    • wpseo_public_post_statuses, which enables the filtering of the list of public post statuses.
  • No longer calls the third-party thematic_doctitle and woo_title filters.
  • Adds the /wp-json/yoast/v1/get_head endpoint to get the our head for an URL. This endpoint takes a single parameter, url which should be the absolute URL of the page to get the head for.
  • Removes the minimum and maximum size requirements when outputting og:image meta tags.
Download this release

Release Info

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

Code changes from version 13.5 to 14.0

Files changed (113) hide show
  1. admin/class-admin-asset-manager.php +23 -3
  2. admin/class-admin-editor-specific-replace-vars.php +3 -3
  3. admin/class-admin-init.php +20 -0
  4. admin/class-admin-recommended-replace-vars.php +2 -2
  5. admin/class-admin.php +1 -0
  6. admin/class-gutenberg-compatibility.php +2 -2
  7. admin/metabox/class-metabox.php +1 -0
  8. admin/taxonomy/class-taxonomy.php +4 -3
  9. admin/tracking/class-tracking-settings-data.php +0 -1
  10. admin/tracking/class-tracking.php +8 -1
  11. admin/views/class-yoast-feature-toggles.php +10 -0
  12. config/dependency-injection/container-compiler.php +4 -0
  13. config/dependency-injection/custom-loader.php +0 -25
  14. config/dependency-injection/loader-pass.php +12 -13
  15. config/dependency-injection/services.php +19 -11
  16. css/dist/{admin-global-1350-rtl.css → admin-global-1400-rtl.css} +0 -0
  17. css/dist/{admin-global-1350.css → admin-global-1400.css} +0 -0
  18. css/dist/{adminbar-1350-rtl.css → adminbar-1400-rtl.css} +0 -0
  19. css/dist/{adminbar-1350.css → adminbar-1400.css} +0 -0
  20. css/dist/{alerts-1350-rtl.css → alerts-1400-rtl.css} +0 -0
  21. css/dist/{alerts-1350.css → alerts-1400.css} +0 -0
  22. css/dist/{dashboard-1350-rtl.css → dashboard-1400-rtl.css} +0 -0
  23. css/dist/{dashboard-1350.css → dashboard-1400.css} +0 -0
  24. css/dist/{edit-page-1350-rtl.css → edit-page-1400-rtl.css} +0 -0
  25. css/dist/{edit-page-1350.css → edit-page-1400.css} +0 -0
  26. css/dist/{featured-image-1350-rtl.css → featured-image-1400-rtl.css} +0 -0
  27. css/dist/{featured-image-1350.css → featured-image-1400.css} +0 -0
  28. css/dist/{filter-explanation-1350-rtl.css → filter-explanation-1400-rtl.css} +0 -0
  29. css/dist/{filter-explanation-1350.css → filter-explanation-1400.css} +0 -0
  30. css/dist/{inside-editor-1350-rtl.css → inside-editor-1400-rtl.css} +0 -0
  31. css/dist/{inside-editor-1350.css → inside-editor-1400.css} +0 -0
  32. css/dist/{metabox-1350-rtl.css → metabox-1400-rtl.css} +0 -0
  33. css/dist/{metabox-1350.css → metabox-1400.css} +0 -0
  34. css/dist/{metabox-primary-category-1350-rtl.css → metabox-primary-category-1400-rtl.css} +0 -0
  35. css/dist/{metabox-primary-category-1350.css → metabox-primary-category-1400.css} +0 -0
  36. css/dist/monorepo-1400-rtl.css +1 -0
  37. css/dist/monorepo-1400.css +1 -0
  38. css/dist/{search-appearance-1350-rtl.css → search-appearance-1400-rtl.css} +0 -0
  39. css/dist/{search-appearance-1350.css → search-appearance-1400.css} +0 -0
  40. css/dist/{structured-data-blocks-1350-rtl.css → structured-data-blocks-1400-rtl.css} +0 -0
  41. css/dist/{structured-data-blocks-1350.css → structured-data-blocks-1400.css} +0 -0
  42. css/dist/{toggle-switch-1350-rtl.css → toggle-switch-1400-rtl.css} +0 -0
  43. css/dist/{toggle-switch-1350.css → toggle-switch-1400.css} +0 -0
  44. css/dist/{wpseo-dismissible-1350-rtl.css → wpseo-dismissible-1400-rtl.css} +0 -0
  45. css/dist/{wpseo-dismissible-1350.css → wpseo-dismissible-1400.css} +0 -0
  46. css/dist/{yoast-components-1350-rtl.css → yoast-components-1400-rtl.css} +0 -0
  47. css/dist/{yoast-components-1350.css → yoast-components-1400.css} +0 -0
  48. css/dist/{yoast-extensions-1350-rtl.css → yoast-extensions-1400-rtl.css} +0 -0
  49. css/dist/{yoast-extensions-1350.css → yoast-extensions-1400.css} +0 -0
  50. css/dist/{yst_plugin_tools-1350-rtl.css → yst_plugin_tools-1400-rtl.css} +0 -0
  51. css/dist/{yst_plugin_tools-1350.css → yst_plugin_tools-1400.css} +0 -0
  52. css/dist/{yst_seo_score-1350-rtl.css → yst_seo_score-1400-rtl.css} +0 -0
  53. css/dist/{yst_seo_score-1350.css → yst_seo_score-1400.css} +0 -0
  54. deprecated/frontend/class-handle-404.php +46 -0
  55. deprecated/frontend/class-opengraph-image.php +38 -0
  56. deprecated/frontend/class-opengraph-oembed.php +46 -0
  57. deprecated/frontend/class-opengraph.php +314 -0
  58. deprecated/frontend/class-primary-category.php +39 -0
  59. deprecated/frontend/class-twitter.php +64 -0
  60. deprecated/frontend/schema/class-schema-article.php +87 -0
  61. deprecated/frontend/schema/class-schema-author.php +137 -0
  62. deprecated/frontend/schema/class-schema-breadcrumb.php +65 -0
  63. deprecated/frontend/schema/class-schema-faq-question-list.php +43 -0
  64. deprecated/frontend/schema/class-schema-faq-questions.php +69 -0
  65. {frontend → deprecated/frontend}/schema/class-schema-faq.php +40 -37
  66. deprecated/frontend/schema/class-schema-howto.php +122 -0
  67. {frontend → deprecated/frontend}/schema/class-schema-ids.php +2 -0
  68. deprecated/frontend/schema/class-schema-image.php +88 -0
  69. deprecated/frontend/schema/class-schema-main-image.php +115 -0
  70. deprecated/frontend/schema/class-schema-organization.php +63 -0
  71. deprecated/frontend/schema/class-schema-person.php +151 -0
  72. {frontend → deprecated/frontend}/schema/class-schema-utils.php +18 -19
  73. deprecated/frontend/schema/class-schema-webpage.php +102 -0
  74. deprecated/frontend/schema/class-schema-website.php +67 -0
  75. deprecated/frontend/schema/class-schema.php +54 -0
  76. {frontend → deprecated/frontend}/schema/interface-wpseo-graph-piece.php +2 -0
  77. frontend/class-breadcrumbs.php +0 -1050
  78. frontend/class-frontend.php +0 -1960
  79. frontend/class-handle-404.php +0 -92
  80. frontend/class-opengraph-image.php +0 -674
  81. frontend/class-opengraph-oembed.php +0 -72
  82. frontend/class-opengraph.php +0 -771
  83. frontend/class-primary-category.php +0 -71
  84. frontend/class-remove-reply-to-com.php +0 -83
  85. frontend/class-twitter.php +0 -676
  86. frontend/class-woocommerce-shop-page.php +19 -29
  87. frontend/schema/class-schema-article.php +0 -216
  88. frontend/schema/class-schema-author.php +0 -145
  89. frontend/schema/class-schema-breadcrumb.php +0 -153
  90. frontend/schema/class-schema-context.php +0 -243
  91. frontend/schema/class-schema-faq-question-list.php +0 -115
  92. frontend/schema/class-schema-faq-questions.php +0 -112
  93. frontend/schema/class-schema-howto.php +0 -244
  94. frontend/schema/class-schema-image.php +0 -156
  95. frontend/schema/class-schema-main-image.php +0 -146
  96. frontend/schema/class-schema-organization.php +0 -114
  97. frontend/schema/class-schema-webpage.php +0 -202
  98. frontend/schema/class-schema-website.php +0 -120
  99. frontend/schema/class-schema.php +0 -198
  100. inc/class-wpseo-admin-bar-menu.php +7 -1
  101. inc/class-wpseo-custom-fields.php +2 -4
  102. inc/class-wpseo-replace-vars.php +45 -70
  103. inc/class-wpseo-utils.php +24 -28
  104. inc/options/class-wpseo-option-ms.php +11 -10
  105. inc/options/class-wpseo-option-titles.php +0 -5
  106. inc/options/class-wpseo-option-wpseo.php +12 -8
  107. inc/sitemaps/class-sitemaps-renderer.php +0 -27
  108. inc/wpseo-functions-deprecated.php +12 -0
  109. inc/wpseo-functions.php +6 -12
  110. js/dist/{analysis-1350.js → analysis-1400.js} +0 -0
  111. js/dist/{babel-polyfill-1350.js → babel-polyfill-1400.js} +0 -0
  112. js/dist/{commons-1350.js → commons-1400.js} +0 -0
  113. js/dist/{components-1350.js → components-1400.js} +4 -4
admin/class-admin-asset-manager.php CHANGED
@@ -267,12 +267,13 @@ class WPSEO_Admin_Asset_Manager {
267
  ],
268
  ],
269
  [
270
- 'name' => 'admin-global-script',
271
- 'src' => 'wp-seo-admin-global-' . $flat_version,
272
- 'deps' => [
273
  'jquery',
274
  self::PREFIX . 'commons',
275
  ],
 
276
  ],
277
  [
278
  'name' => 'metabox',
@@ -436,6 +437,17 @@ class WPSEO_Admin_Asset_Manager {
436
  self::PREFIX . 'commons',
437
  ],
438
  ],
 
 
 
 
 
 
 
 
 
 
 
439
  [
440
  'name' => 'edit-page-script',
441
  'src' => 'wp-seo-edit-page-' . $flat_version,
@@ -631,6 +643,14 @@ class WPSEO_Admin_Asset_Manager {
631
  'name' => 'search-appearance',
632
  'src' => 'search-appearance-' . $flat_version,
633
  ],
 
 
 
 
 
 
 
 
634
  [
635
  'name' => 'structured-data-blocks',
636
  'src' => 'structured-data-blocks-' . $flat_version,
267
  ],
268
  ],
269
  [
270
+ 'name' => 'admin-global-script',
271
+ 'src' => 'wp-seo-admin-global-' . $flat_version,
272
+ 'deps' => [
273
  'jquery',
274
  self::PREFIX . 'commons',
275
  ],
276
+ 'in_footer' => false,
277
  ],
278
  [
279
  'name' => 'metabox',
437
  self::PREFIX . 'commons',
438
  ],
439
  ],
440
+ [
441
+ 'name' => 'indexation',
442
+ 'src' => 'wp-seo-indexation-' . $flat_version,
443
+ 'deps' => [
444
+ 'jquery',
445
+ 'jquery-ui-core',
446
+ 'jquery-ui-progressbar',
447
+ self::PREFIX . 'admin-global-script',
448
+ self::PREFIX . 'commons',
449
+ ],
450
+ ],
451
  [
452
  'name' => 'edit-page-script',
453
  'src' => 'wp-seo-edit-page-' . $flat_version,
643
  'name' => 'search-appearance',
644
  'src' => 'search-appearance-' . $flat_version,
645
  ],
646
+
647
+ /*
648
+ * Temporarily commented out to prevent unwanted monorepo styles seeping through.
649
+ * [
650
+ * 'name' => 'monorepo',
651
+ * 'src' => 'monorepo-' . $flat_version,
652
+ * ],
653
+ */
654
  [
655
  'name' => 'structured-data-blocks',
656
  'src' => 'structured-data-blocks-' . $flat_version,
admin/class-admin-editor-specific-replace-vars.php CHANGED
@@ -25,11 +25,11 @@ class WPSEO_Admin_Editor_Specific_Replace_Vars {
25
  'custom-post-type_archive' => [ 'pt_single', 'pt_plural' ],
26
 
27
  // Taxonomies.
28
- 'category' => [ 'term_title', 'term_description', 'category_description', 'parent_title' ],
29
  'post_tag' => [ 'term_title', 'term_description', 'tag_description' ],
30
  'post_format' => [],
31
  // Custom taxonomy.
32
- 'term-in-custom-taxonomy' => [ 'term_title', 'term_description', 'category_description', 'parent_title' ],
33
 
34
  // Settings - special pages.
35
  'search' => [ 'searchphrase' ],
@@ -45,7 +45,7 @@ class WPSEO_Admin_Editor_Specific_Replace_Vars {
45
  );
46
 
47
  $this->add_for_page_types(
48
- [ 'post', 'term-in-custom-taxonomies' ],
49
  WPSEO_Custom_Taxonomies::get_custom_taxonomies()
50
  );
51
  }
25
  'custom-post-type_archive' => [ 'pt_single', 'pt_plural' ],
26
 
27
  // Taxonomies.
28
+ 'category' => [ 'term_title', 'term_description', 'category_description', 'parent_title', 'term_hierarchy' ],
29
  'post_tag' => [ 'term_title', 'term_description', 'tag_description' ],
30
  'post_format' => [],
31
  // Custom taxonomy.
32
+ 'term-in-custom-taxonomy' => [ 'term_title', 'term_description', 'category_description', 'parent_title', 'term_hierarchy' ],
33
 
34
  // Settings - special pages.
35
  'search' => [ 'searchphrase' ],
45
  );
46
 
47
  $this->add_for_page_types(
48
+ [ 'post', 'term-in-custom-taxonomy' ],
49
  WPSEO_Custom_Taxonomies::get_custom_taxonomies()
50
  );
51
  }
admin/class-admin-init.php CHANGED
@@ -440,6 +440,26 @@ class WPSEO_Admin_Init {
440
  'version' => '9.4',
441
  'alternative' => null,
442
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
443
  ];
444
 
445
  // Determine which filters have been registered.
440
  'version' => '9.4',
441
  'alternative' => null,
442
  ],
443
+ 'wpseo_opengraph' => [
444
+ 'version' => '14.0',
445
+ 'alternative' => null,
446
+ ],
447
+ 'wpseo_twitter' => [
448
+ 'version' => '14.0',
449
+ 'alternative' => null,
450
+ ],
451
+ 'wpseo_twitter_taxonomy_image' => [
452
+ 'version' => '14.0',
453
+ 'alternative' => null,
454
+ ],
455
+ 'wpseo_twitter_metatag_key' => [
456
+ 'version' => '14.0',
457
+ 'alternative' => null,
458
+ ],
459
+ 'wp_seo_get_bc_ancestors' => [
460
+ 'version' => '14.0',
461
+ 'alternative' => 'wpseo_breadcrumb_links',
462
+ ],
463
  ];
464
 
465
  // Determine which filters have been registered.
admin/class-admin-recommended-replace-vars.php CHANGED
@@ -25,12 +25,12 @@ class WPSEO_Admin_Recommended_Replace_Vars {
25
  'custom_post_type' => [ 'sitename', 'title', 'sep' ],
26
 
27
  // Taxonomies.
28
- 'category' => [ 'sitename', 'term_title', 'sep' ],
29
  'post_tag' => [ 'sitename', 'term_title', 'sep' ],
30
  'post_format' => [ 'sitename', 'term_title', 'sep', 'page' ],
31
 
32
  // Custom taxonomy.
33
- 'term-in-custom-taxomomy' => [ 'sitename', 'term_title', 'sep' ],
34
 
35
  // Settings - archive pages.
36
  'author_archive' => [ 'sitename', 'title', 'sep', 'page' ],
25
  'custom_post_type' => [ 'sitename', 'title', 'sep' ],
26
 
27
  // Taxonomies.
28
+ 'category' => [ 'sitename', 'term_title', 'sep', 'term_hierarchy' ],
29
  'post_tag' => [ 'sitename', 'term_title', 'sep' ],
30
  'post_format' => [ 'sitename', 'term_title', 'sep', 'page' ],
31
 
32
  // Custom taxonomy.
33
+ 'term-in-custom-taxomomy' => [ 'sitename', 'term_title', 'sep', 'term_hierarchy' ],
34
 
35
  // Settings - archive pages.
36
  'author_archive' => [ 'sitename', 'title', 'sep', 'page' ],
admin/class-admin.php CHANGED
@@ -308,6 +308,7 @@ class WPSEO_Admin {
308
  */
309
  private function localize_admin_global_script() {
310
  return [
 
311
  'variable_warning' => sprintf(
312
  /* translators: %1$s: '%%term_title%%' variable used in titles and meta's template that's not compatible with the given template, %2$s: expands to 'HelpScout beacon' */
313
  __( 'Warning: the variable %1$s cannot be used in this template. See the %2$s for more info.', 'wordpress-seo' ),
308
  */
309
  private function localize_admin_global_script() {
310
  return [
311
+ 'isRtl' => is_rtl(),
312
  'variable_warning' => sprintf(
313
  /* translators: %1$s: '%%term_title%%' variable used in titles and meta's template that's not compatible with the given template, %2$s: expands to 'HelpScout beacon' */
314
  __( 'Warning: the variable %1$s cannot be used in this template. See the %2$s for more info.', 'wordpress-seo' ),
admin/class-gutenberg-compatibility.php CHANGED
@@ -15,14 +15,14 @@ class WPSEO_Gutenberg_Compatibility {
15
  *
16
  * @var string
17
  */
18
- const CURRENT_RELEASE = '7.8.1';
19
 
20
  /**
21
  * The minimally supported version of Gutenberg by the plugin.
22
  *
23
  * @var string
24
  */
25
- const MINIMUM_SUPPORTED = '7.8.1';
26
 
27
  /**
28
  * Holds the current version.
15
  *
16
  * @var string
17
  */
18
+ const CURRENT_RELEASE = '7.9.1';
19
 
20
  /**
21
  * The minimally supported version of Gutenberg by the plugin.
22
  *
23
  * @var string
24
  */
25
+ const MINIMUM_SUPPORTED = '7.9.1';
26
 
27
  /**
28
  * Holds the current version.
admin/metabox/class-metabox.php CHANGED
@@ -834,6 +834,7 @@ class WPSEO_Metabox extends WPSEO_Meta {
834
  $asset_manager->enqueue_style( 'metabox-css' );
835
  $asset_manager->enqueue_style( 'scoring' );
836
  $asset_manager->enqueue_style( 'select2' );
 
837
 
838
  $asset_manager->enqueue_script( 'metabox' );
839
  $asset_manager->enqueue_script( 'admin-media' );
834
  $asset_manager->enqueue_style( 'metabox-css' );
835
  $asset_manager->enqueue_style( 'scoring' );
836
  $asset_manager->enqueue_style( 'select2' );
837
+ $asset_manager->enqueue_style( 'monorepo' );
838
 
839
  $asset_manager->enqueue_script( 'metabox' );
840
  $asset_manager->enqueue_script( 'admin-media' );
admin/taxonomy/class-taxonomy.php CHANGED
@@ -125,6 +125,7 @@ class WPSEO_Taxonomy {
125
 
126
  $asset_manager = new WPSEO_Admin_Asset_Manager();
127
  $asset_manager->enqueue_style( 'scoring' );
 
128
 
129
  $tag_id = filter_input( INPUT_GET, 'tag_ID' );
130
  if (
@@ -377,6 +378,7 @@ class WPSEO_Taxonomy {
377
  'page',
378
  'term_title',
379
  'term_description',
 
380
  'category_description',
381
  'tag_description',
382
  'searchphrase',
@@ -434,9 +436,8 @@ class WPSEO_Taxonomy {
434
  * @return string Content with shortcodes filtered out.
435
  */
436
  public function custom_category_descriptions_add_shortcode_support( $desc ) {
437
- _deprecated_function( __FUNCTION__, 'WPSEO 7.9.0', 'WPSEO_Frontend::custom_category_descriptions_add_shortcode_support' );
438
 
439
- $frontend = WPSEO_Frontend::get_instance();
440
- return $frontend->custom_category_descriptions_add_shortcode_support( $desc );
441
  }
442
  }
125
 
126
  $asset_manager = new WPSEO_Admin_Asset_Manager();
127
  $asset_manager->enqueue_style( 'scoring' );
128
+ $asset_manager->enqueue_style( 'monorepo' );
129
 
130
  $tag_id = filter_input( INPUT_GET, 'tag_ID' );
131
  if (
378
  'page',
379
  'term_title',
380
  'term_description',
381
+ 'term_hierarchy',
382
  'category_description',
383
  'tag_description',
384
  'searchphrase',
436
  * @return string Content with shortcodes filtered out.
437
  */
438
  public function custom_category_descriptions_add_shortcode_support( $desc ) {
439
+ _deprecated_function( __FUNCTION__, 'WPSEO 7.9.0' );
440
 
441
+ return '';
 
442
  }
443
  }
admin/tracking/class-tracking-settings-data.php CHANGED
@@ -80,7 +80,6 @@ class WPSEO_Tracking_Settings_Data implements WPSEO_Collection {
80
  'company_name',
81
  'company_or_person',
82
  'person_name',
83
- 'title_test',
84
  'forcerewritetitle',
85
  'separator',
86
  'title-home-wpseo',
80
  'company_name',
81
  'company_or_person',
82
  'person_name',
 
83
  'forcerewritetitle',
84
  'separator',
85
  'title-home-wpseo',
admin/tracking/class-tracking.php CHANGED
@@ -105,9 +105,16 @@ class WPSEO_Tracking implements WPSEO_WordPress_Integration {
105
  return;
106
  }
107
 
 
 
 
 
 
 
 
108
  $collector = $this->get_collector();
109
 
110
- $request = new WPSEO_Remote_Request( $this->endpoint );
111
  $request->set_body( $collector->get_as_json() );
112
  $request->send();
113
 
105
  return;
106
  }
107
 
108
+ // Set a 'content-type' header of 'application/json'.
109
+ $tracking_request_args = [
110
+ 'headers' => [
111
+ 'content-type:' => 'application/json',
112
+ ],
113
+ ];
114
+
115
  $collector = $this->get_collector();
116
 
117
+ $request = new WPSEO_Remote_Request( $this->endpoint, $tracking_request_args );
118
  $request->set_body( $collector->get_as_json() );
119
  $request->send();
120
 
admin/views/class-yoast-feature-toggles.php CHANGED
@@ -143,6 +143,16 @@ class Yoast_Feature_Toggles {
143
  ),
144
  'order' => 90,
145
  ],
 
 
 
 
 
 
 
 
 
 
146
  ];
147
 
148
  /**
143
  ),
144
  'order' => 90,
145
  ],
146
+ (object) [
147
+ 'name' => __( 'REST API: Head endpoint', 'wordpress-seo' ),
148
+ 'setting' => 'enable_headless_rest_endpoints',
149
+ 'label' => sprintf(
150
+ /* translators: 1: Yoast SEO */
151
+ __( 'This %1$s REST API endpoint gives you all the metadata you need for a specific URL. This will make it very easy for headless WordPress sites to use %1$s for all their SEO meta output.', 'wordpress-seo' ),
152
+ 'Yoast SEO'
153
+ ),
154
+ 'order' => 100,
155
+ ],
156
  ];
157
 
158
  /**
config/dependency-injection/container-compiler.php CHANGED
@@ -30,6 +30,10 @@ class Container_Compiler {
30
  $cache = new ConfigCache( $file, $debug );
31
 
32
  if ( ! $cache->isFresh() ) {
 
 
 
 
33
  $container_builder = new ContainerBuilder();
34
  $container_builder->addCompilerPass( new Loader_Pass() );
35
  $loader = new Custom_Loader( $container_builder );
30
  $cache = new ConfigCache( $file, $debug );
31
 
32
  if ( ! $cache->isFresh() ) {
33
+ if ( ! defined( 'WPSEO_VERSION' ) ) {
34
+ define( 'WPSEO_VERSION', 'COMPILING' );
35
+ }
36
+
37
  $container_builder = new ContainerBuilder();
38
  $container_builder->addCompilerPass( new Loader_Pass() );
39
  $loader = new Custom_Loader( $container_builder );
config/dependency-injection/custom-loader.php CHANGED
@@ -105,31 +105,6 @@ class Custom_Loader extends PhpFileLoader {
105
  }
106
  }
107
 
108
- /**
109
- * Registers a definition in the container with its instanceof-conditionals.
110
- *
111
- * @param string $id The ID of the definition.
112
- * @param \Symfony\Component\DependencyInjection\Definition $definition The definition.
113
- *
114
- * @throws InvalidArgumentException If invalid arguments were supplied.
115
- *
116
- * @return void
117
- */
118
- protected function setDefinition( $id, Definition $definition ) {
119
- $this->container->removeBindings( $id );
120
-
121
- // @codingStandardsIgnoreLine WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar This is from an inherited class not abiding by that standard.
122
- if ( $this->isLoadingInstanceof ) {
123
- if ( ! $definition instanceof ChildDefinition ) {
124
- throw new InvalidArgumentException( \sprintf( 'Invalid type definition "%s": ChildDefinition expected, "%s" given.', $id, \get_class( $definition ) ) );
125
- }
126
- $this->instanceof[ $id ] = $definition;
127
- }
128
- else {
129
- $this->container->setDefinition( $id, ( $definition instanceof ChildDefinition ) ? $definition : $definition->setInstanceofConditionals( $this->instanceof ) );
130
- }
131
- }
132
-
133
  /**
134
  * Finds classes based on a given pattern and exclude pattern.
135
  *
105
  }
106
  }
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  /**
109
  * Finds classes based on a given pattern and exclude pattern.
110
  *
config/dependency-injection/loader-pass.php CHANGED
@@ -10,11 +10,11 @@ namespace Yoast\WP\SEO\Dependency_Injection;
10
  use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
11
  use Symfony\Component\DependencyInjection\ContainerBuilder;
12
  use Symfony\Component\DependencyInjection\Definition;
13
- use Symfony\Component\DependencyInjection\Reference;
14
- use Yoast\WP\SEO\Conditionals\Conditional;
 
15
  use Yoast\WP\SEO\Loader;
16
- use Yoast\WP\SEO\WordPress\Initializer;
17
- use Yoast\WP\SEO\WordPress\Integration;
18
 
19
  /**
20
  * A pass is a step in the compilation process of the container.
@@ -36,9 +36,6 @@ class Loader_Pass implements CompilerPassInterface {
36
  }
37
 
38
  $loader_definition = $container->getDefinition( Loader::class );
39
- $loader_definition->setArgument( 0, new Reference( 'service_container' ) );
40
- $loader_definition->setPublic( true );
41
-
42
  $definitions = $container->getDefinitions();
43
 
44
  foreach ( $definitions as $definition ) {
@@ -55,18 +52,20 @@ class Loader_Pass implements CompilerPassInterface {
55
  private function process_definition( Definition $definition, Definition $loader_definition ) {
56
  $class = $definition->getClass();
57
 
58
- if ( \is_subclass_of( $class, Initializer::class ) ) {
59
  $loader_definition->addMethodCall( 'register_initializer', [ $class ] );
60
- $definition->setPublic( true );
61
  }
62
 
63
- if ( \is_subclass_of( $class, Integration::class ) ) {
64
  $loader_definition->addMethodCall( 'register_integration', [ $class ] );
65
- $definition->setPublic( true );
66
  }
67
 
68
- if ( \is_subclass_of( $class, Conditional::class ) ) {
69
- $definition->setPublic( true );
 
 
 
 
70
  }
71
  }
72
  }
10
  use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
11
  use Symfony\Component\DependencyInjection\ContainerBuilder;
12
  use Symfony\Component\DependencyInjection\Definition;
13
+ use Yoast\WP\SEO\Commands\Command_Interface;
14
+ use Yoast\WP\SEO\Initializers\Initializer_Interface;
15
+ use Yoast\WP\SEO\Integrations\Integration_Interface;
16
  use Yoast\WP\SEO\Loader;
17
+ use Yoast\WP\SEO\Routes\Route_Interface;
 
18
 
19
  /**
20
  * A pass is a step in the compilation process of the container.
36
  }
37
 
38
  $loader_definition = $container->getDefinition( Loader::class );
 
 
 
39
  $definitions = $container->getDefinitions();
40
 
41
  foreach ( $definitions as $definition ) {
52
  private function process_definition( Definition $definition, Definition $loader_definition ) {
53
  $class = $definition->getClass();
54
 
55
+ if ( \is_subclass_of( $class, Initializer_Interface::class ) ) {
56
  $loader_definition->addMethodCall( 'register_initializer', [ $class ] );
 
57
  }
58
 
59
+ if ( \is_subclass_of( $class, Integration_Interface::class ) ) {
60
  $loader_definition->addMethodCall( 'register_integration', [ $class ] );
 
61
  }
62
 
63
+ if ( \is_subclass_of( $class, Route_Interface::class ) ) {
64
+ $loader_definition->addMethodCall( 'register_route', [ $class ] );
65
+ }
66
+
67
+ if ( \is_subclass_of( $class, Command_Interface::class ) ) {
68
+ $loader_definition->addMethodCall( 'register_command', [ $class ] );
69
  }
70
  }
71
  }
config/dependency-injection/services.php CHANGED
@@ -8,23 +8,28 @@
8
  namespace Yoast\WP\SEO\Dependency_Injection;
9
 
10
  use Symfony\Component\DependencyInjection\Definition;
11
- use Yoast\WP\SEO\Repositories\Indexable_Repository;
12
- use Yoast\WP\SEO\Repositories\Primary_Term_Repository;
13
- use Yoast\WP\SEO\Repositories\SEO_Links_Repository;
14
- use Yoast\WP\SEO\Repositories\SEO_Meta_Repository;
15
  use Yoast\WP\SEO\WordPress\Wrapper;
 
16
 
17
  /* @var $container \Symfony\Component\DependencyInjection\ContainerBuilder */
18
 
19
  // WordPress factory functions.
20
  $container->register( 'wpdb', 'wpdb' )->setFactory( [ Wrapper::class, 'get_wpdb' ] );
21
- $container->register( 'wp_query', 'WP_Query' )->setFactory( [ Wrapper::class, 'get_wp_query' ] );
22
 
23
- // Model repository factory functions.
24
- $container->register( Indexable_Repository::class, Indexable_Repository::class )->setFactory( [ Indexable_Repository::class, 'get_instance' ] )->setAutowired( true );
25
- $container->register( Primary_Term_Repository::class, Primary_Term_Repository::class )->setFactory( [ Primary_Term_Repository::class, 'get_instance' ] )->setAutowired( true );
26
- $container->register( SEO_Meta_Repository::class, SEO_Meta_Repository::class )->setFactory( [ SEO_Meta_Repository::class, 'get_instance' ] )->setAutowired( true );
27
- $container->register( SEO_Links_Repository::class, SEO_Links_Repository::class )->setFactory( [ SEO_Links_Repository::class, 'get_instance' ] )->setAutowired( true );
 
 
 
 
 
28
 
29
  $excluded_files = [
30
  'main.php',
@@ -36,6 +41,9 @@ $excluded_directories = [
36
  'wordpress',
37
  'generated',
38
  'orm',
 
 
 
39
  ];
40
 
41
  $excluded = \implode( ',', \array_merge( $excluded_directories, $excluded_files ) );
@@ -45,7 +53,7 @@ $base_definition = new Definition();
45
  $base_definition
46
  ->setAutowired( true )
47
  ->setAutoconfigured( true )
48
- ->setPublic( false );
49
 
50
  /* @var $loader \Yoast\WP\SEO\Dependency_Injection\Custom_Loader */
51
  $loader->registerClasses( $base_definition, 'Yoast\\WP\\SEO\\', 'src/*', 'src/{' . $excluded . '}' );
8
  namespace Yoast\WP\SEO\Dependency_Injection;
9
 
10
  use Symfony\Component\DependencyInjection\Definition;
11
+ use WPSEO_Admin_Asset_Manager;
12
+ use WPSEO_Breadcrumbs;
13
+ use WPSEO_Frontend;
14
+ use WPSEO_Replace_Vars;
15
  use Yoast\WP\SEO\WordPress\Wrapper;
16
+ use YoastSEO_Vendor\Symfony\Component\DependencyInjection\ContainerInterface;
17
 
18
  /* @var $container \Symfony\Component\DependencyInjection\ContainerBuilder */
19
 
20
  // WordPress factory functions.
21
  $container->register( 'wpdb', 'wpdb' )->setFactory( [ Wrapper::class, 'get_wpdb' ] );
 
22
 
23
+ // Legacy classes.
24
+ $container->register( WPSEO_Replace_Vars::class, WPSEO_Replace_Vars::class )->setFactory( [ Wrapper::class, 'get_replace_vars' ] )->setPublic( true );
25
+ $container->register( WPSEO_Admin_Asset_Manager::class, WPSEO_Admin_Asset_Manager::class )->setFactory( [ Wrapper::class, 'get_admin_asset_manager' ] )->setPublic( true );
26
+
27
+ // Backwards-compatibility classes in the global namespace.
28
+ $container->register( WPSEO_Breadcrumbs::class, WPSEO_Breadcrumbs::class )->setAutowired( true )->setPublic( true );
29
+ $container->register( WPSEO_Frontend::class, WPSEO_Frontend::class )->setAutowired( true )->setPublic( true );
30
+
31
+ // The container itself.
32
+ $container->setAlias( ContainerInterface::class, 'service_container' );
33
 
34
  $excluded_files = [
35
  'main.php',
41
  'wordpress',
42
  'generated',
43
  'orm',
44
+ 'backwards-compatibility',
45
+ 'surfaces/values',
46
+ 'presenters',
47
  ];
48
 
49
  $excluded = \implode( ',', \array_merge( $excluded_directories, $excluded_files ) );
53
  $base_definition
54
  ->setAutowired( true )
55
  ->setAutoconfigured( true )
56
+ ->setPublic( true );
57
 
58
  /* @var $loader \Yoast\WP\SEO\Dependency_Injection\Custom_Loader */
59
  $loader->registerClasses( $base_definition, 'Yoast\\WP\\SEO\\', 'src/*', 'src/{' . $excluded . '}' );
css/dist/{admin-global-1350-rtl.css → admin-global-1400-rtl.css} RENAMED
File without changes
css/dist/{admin-global-1350.css → admin-global-1400.css} RENAMED
File without changes
css/dist/{adminbar-1350-rtl.css → adminbar-1400-rtl.css} RENAMED
File without changes
css/dist/{adminbar-1350.css → adminbar-1400.css} RENAMED
File without changes
css/dist/{alerts-1350-rtl.css → alerts-1400-rtl.css} RENAMED
File without changes
css/dist/{alerts-1350.css → alerts-1400.css} RENAMED
File without changes
css/dist/{dashboard-1350-rtl.css → dashboard-1400-rtl.css} RENAMED
File without changes
css/dist/{dashboard-1350.css → dashboard-1400.css} RENAMED
File without changes
css/dist/{edit-page-1350-rtl.css → edit-page-1400-rtl.css} RENAMED
File without changes
css/dist/{edit-page-1350.css → edit-page-1400.css} RENAMED
File without changes
css/dist/{featured-image-1350-rtl.css → featured-image-1400-rtl.css} RENAMED
File without changes
css/dist/{featured-image-1350.css → featured-image-1400.css} RENAMED
File without changes
css/dist/{filter-explanation-1350-rtl.css → filter-explanation-1400-rtl.css} RENAMED
File without changes
css/dist/{filter-explanation-1350.css → filter-explanation-1400.css} RENAMED
File without changes
css/dist/{inside-editor-1350-rtl.css → inside-editor-1400-rtl.css} RENAMED
File without changes
css/dist/{inside-editor-1350.css → inside-editor-1400.css} RENAMED
File without changes
css/dist/{metabox-1350-rtl.css → metabox-1400-rtl.css} RENAMED
File without changes
css/dist/{metabox-1350.css → metabox-1400.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1350-rtl.css → metabox-primary-category-1400-rtl.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1350.css → metabox-primary-category-1400.css} RENAMED
File without changes
css/dist/monorepo-1400-rtl.css ADDED
@@ -0,0 +1 @@
 
1
+ .yoast .yoast-button{display:inline-block;position:relative;padding:10px 16px 12px;text-decoration:none;border-radius:4px;border:1px solid rgba(0,0,0,.2);box-shadow:inset 0 -2px 0 rgba(0,0,0,.3);transition:background-color .15s ease-out 0s;line-height:1.2;font-size:14px;cursor:pointer}.yoast .yoast-button:active{box-shadow:none;padding-bottom:12px;top:2px}.yoast .yoast-button--primary{color:var(--color-white);background-color:var(--color-primary);border:1px solid rgba(0,0,0,.2)}.yoast .yoast-button--primary:visited{color:var(--color-white);border:1px solid rgba(0,0,0,.2)}.yoast .yoast-button--primary:active,.yoast .yoast-button--primary:hover{color:var(--color-white);background-color:var(--color-primary-darker);border:1px solid rgba(0,0,0,.2)}.yoast-close{display:flex;justify-content:center;align-items:center;border:none;background:none;height:44px;width:44px;cursor:pointer;box-shadow:none;padding:0}.yoast-close svg{fill:var(--color-default);width:14px}@media screen and (max-width:782px){.yoast-close svg{width:10px}}.yoast-data-model{padding:0;list-style:none;width:275px}.yoast-data-model li{line-height:1.4;padding:0 8px;position:relative;z-index:2;font-weight:var(--font-weight-bold)}.yoast-data-model span{float:left;font-weight:var(--font-weight-default)}.yoast-data-model li+li{margin-top:9px}.yoast-data-model li:after{position:absolute;right:0;height:20px;background:#f5d6e6;content:"";width:var(--width);z-index:-1}.yoast-field-group,.yoast fieldset{position:relative;border:none;padding:0;margin:0 0 24px}.yoast-field-group__title{display:flex;align-items:center;font-weight:var(--font-weight-bold);margin:0 0 8px;color:var(--color-label);line-height:1.2;float:right;padding:0}.yoast-field-group__help{border-radius:50%;padding:4px;width:12px;height:12px;display:block;float:right;margin-top:-5px}.yoast-field-group__help+*{clear:both}.yoast-field-group__help-icon svg{width:12px;height:12px;fill:var(--color-label-help);transition:var(--transition-default)}.yoast-field-group__help:hover svg{fill:var(--color-link)}.yoast-field-group .description{margin:0}:root{--color-placeholder:#707070}.yoast-field-group__inputfield,.yoast-field-group__textarea,.yoast input,.yoast textarea{width:100%;font-size:var(--font-size-default);padding:8px;background:#fff;border:var(--border-default);box-shadow:inset 0 2px 4px rgba(0,0,0,.1);box-sizing:border-box}.yoast-field-group__inputfield,.yoast input{height:40px}.yoast-field-group__textarea,.yoast textarea{min-height:200px}.yoast-field-group .description+.yoast-field-group__inputfield,.yoast-field-group .description+input,.yoast-field-group__inputfield+.description,.yoast input+.description{margin-top:8px;margin-bottom:24px}::-ms-input-placeholder,::-webkit-input-placeholder,::placeholder{color:var(--color-placeholder)}.yoast-field-group__radiobutton{display:flex;align-items:center}.yoast-field-group__radiobutton--vertical:not(:last-of-type){margin-bottom:8px}.yoast-field-group__radiobutton label{cursor:pointer;margin-left:16px}.yoast-field-group__radiobutton input[type=radio],.yoast input[type=radio]{-webkit-appearance:none;-moz-appearance:none;width:18px;height:18px;padding:2px;margin:0 0 0 8px;border-radius:50%;transition:all .15s ease-out 0s;border:var(--border-default);box-shadow:inset 0 2px 4px rgba(0,0,0,.1);position:relative;overflow:hidden;cursor:pointer}.yoast-field-group__radiobutton input[type=radio]:checked,.yoast input[type=radio]:checked{border-color:var(--color-primary)}.yoast-field-group__radiobutton input[type=radio]:checked:after,.yoast input[type=radio]:checked:after{width:10px;height:10px;background:var(--color-primary);position:absolute;right:3px;top:3px;content:"";display:block;border-radius:50%}.yoast-field-group__select{display:flex;cursor:pointer;align-items:center}.select2-container--default,.yoast-field-group__select select,.yoast select{-webkit-appearance:none;-moz-appearance:none;width:100%;font-size:var(--font-size-default);padding:10px 8px 11px;background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 8"><path d="M1.4 0L6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z"/></svg>');background-position:left 15px center;background-repeat:no-repeat;background-size:10px auto;border-radius:0;border:var(--border-default);box-shadow:inset 0 2px 4px rgba(0,0,0,.1);position:relative;max-width:300px;display:block}.select2-container--default{background-image:none;padding:8px 8px 3px}.select2-container--default.select2-container--focus .select2-selection--multiple{outline:inherit;border:0}.select2-container--default .yoast-multiselect{border:0;min-height:0}.select2-container--default .yoast-multiselect ul{display:flex;margin:0;padding:0;list-style:none}.select2-container--default .yoast-multiselect .select2-selection__choice{background-color:var(--color-primary);border:0;border-radius:12px;color:var(--color-white);padding-top:0;padding-right:10px;padding-left:10px;margin-top:0;margin-left:8px;line-height:1.7;font-weight:500}.select2-container--default .yoast-multiselect .select2-selection__choice__remove{margin-left:8px;color:var(--color-white)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--color-white)}.select2-dropdown{border-color:var(--color-border--default);border-radius:0}.select2-container--open .select2-dropdown{top:-2px;right:-1px}.select2-results__option{padding:8px;border-top:var(--border-default)}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:var(--color-primary-lighter);color:var(--color-font-default)}.select2-container--default .select2-results__option[aria-selected=true]{background-color:var(--color-primary);color:var(--color-white)}.yoast-field-group__toggle{display:flex;align-items:center;width:600px;justify-content:space-between}.yoast-field-group__toggle input{position:absolute;right:0;opacity:0}.yoast-field-group__toggle label{position:relative;z-index:2;cursor:pointer}.yoast-field-group__toggle input:checked+label{color:var(--color-toggle-on)}.yoast-field-group__toggle input:not(:checked)+label{color:var(--color-toggle-off)}.yoast-field-group__toggle a{display:inline-block;width:34px;height:14px;border-radius:5px;background:#b6cf94;position:relative;margin:0 9px}.yoast-field-group__toggle input:first-of-type:checked~a{background:#9e9e9e}.yoast-field-group__toggle a:after{content:"";display:block;height:20px;width:20px;position:absolute;left:-2px;background:#6ea029;border-radius:50%;top:-3px;transition:all .1s ease-out}.yoast-field-group__toggle input:first-of-type:checked~a:after{left:calc(100% - 18px);background:#f1f1f1;box-shadow:0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.2),0 2px 1px -1px rgba(0,0,0,.12)}.yoast-field-group__checkbox{display:flex;cursor:pointer;align-items:center}.yoast-field-group__checkbox:not(.yoast-field-group__checkbox--horizontal)+.yoast-field-group__checkbox{margin-top:4px}.yoast-field-group__checkbox input[type=checkbox],.yoast input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;width:18px;height:18px;padding:2px;margin:2px 0 0 8px;border-radius:2px;transition:background-color .15s ease-out 0s;border:var(--border-default);box-shadow:inset 0 2px 4px rgba(0,0,0,.1);position:relative;overflow:hidden}.yoast label+input[type=checkbox]{margin-right:16px}.yoast-field-group__checkbox input[type=checkbox]:checked,.yoast input[type=checkbox]:checked{background:var(--checkmark--white) var(--color-primary) no-repeat 50%/13px;border:1px solid var(--color-primary);box-shadow:none}.yoast-modal__screen-overlay{position:fixed;top:0;left:0;bottom:0;right:0;background-color:rgba(164,40,106,.6);z-index:100000;animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards}.yoast-modal{background:#fff;display:flex;flex-direction:column;overflow:hidden;position:fixed;height:calc(100% - 96px);top:48px;bottom:48px;right:calc(50% - 440px);max-width:880px;width:100%}.yoast-tabs .yoast-modal__content{display:grid;grid-template-areas:"heading heading" "menu content" "menu footer";grid-template-rows:72px 1fr 89px;grid-template-columns:280px 1fr}.yoast-modal__heading{padding:13px 24px 14px;display:flex;align-items:center;border-bottom:var(--border-default);grid-area:heading;background:var(--color-white);height:72px}.yoast-modal__heading .yoast-close{position:absolute;left:16px}.yoast-modal__heading h1{font-size:20px}.yoast-modal__heading-icon{fill:var(--color-primary);margin-left:16px;width:19px;height:20px;flex-shrink:0}.yoast-modal__menu{grid-area:menu;border-left:var(--border-default);overflow-y:auto}.yoast-modal__menu ul{padding:0;margin:0;list-style:none}.yoast-modal__menu li{padding:12px 16px 11px;border-bottom:var(--border-default);font-size:16px;cursor:pointer;text-decoration:none;color:var(--color-default);display:block}.yoast-modal__menu li:hover{background-color:#edd4e1}.yoast-modal__menu li.yoast-tabs__tab--selected{background-color:var(--color-primary);border-bottom:var(--border-default);color:#fff}.yoast-modal__content,.yoast-modal__section{grid-area:content;overflow-y:auto;flex-grow:1;position:relative;display:flex;flex-direction:column}.yoast-modal__section *{max-width:600px}.yoast-modal__section-header{position:-webkit-sticky;position:sticky;top:0;background:var(--color-white);padding:24px 24px 0;z-index:10}.yoast-modal__section .yoast-h2{border-bottom:var(--border-default);padding-bottom:24px}.yoast-modal__footer{grid-area:footer;padding:24px 0;border-top:var(--border-default);display:flex;align-self:flex-end;align-items:center;justify-content:flex-end;position:-webkit-sticky;position:sticky;bottom:0;background:var(--color-white);margin:0 24px;z-index:10;height:89px;width:calc(100% - 48px)}.yoast-modal__settings-saved{position:relative;margin-left:16px;display:inline-flex;align-items:center}.yoast-modal__settings-saved:before{content:"";background:var(--checkmark--green) no-repeat 50%;height:13px;width:14px;display:inline-block;margin-left:8px}.yoast-modal__footer .yoast-button{display:block}.yoast-modal__section-content{padding:24px;flex-grow:1}@media screen and (max-width:880px){.yoast-modal{position:fixed;top:0;bottom:0;right:0;left:0}}@media screen and (max-width:782px){.yoast-modal{overflow-y:initial;height:auto;padding-bottom:72px}.yoast-modal__heading{padding:14px 16px 15px;position:fixed;top:0;width:100%;z-index:11;height:auto}.yoast-close svg{width:10px}.yoast-modal__heading-icon{height:15px;margin-left:8px}.yoast .yoast-close{left:3px}.yoast-modal__heading .yoast-h2{font-size:var(--font-size-default)}.yoast-modal__section{overflow:initial;flex-grow:0}.yoast-modal__section-content{padding:24px 0;margin:0 16px}.yoast-modal__section:first-of-type{margin-top:46px}.yoast-modal__section:last-of-type{margin-bottom:72px}.yoast-modal__section-header{top:46px;position:-webkit-sticky;position:sticky;padding:0;margin:0}.yoast-modal__section-open .yoast-modal__section-header{padding-right:0;padding-left:0;margin-right:16px;margin-left:16px}.yoast-modal__section-open{border-bottom:var(--border-default)}.yoast-modal__footer{margin:0;width:100%;position:fixed;z-index:11;height:72px;padding:24px 16px}.yoast-modal-collapsible .yoast-modal__section-content{padding:24px 16px;border-bottom:var(--border-default);margin:0}.yoast-collapsible__hidden{display:none}.yoast-collapsible__trigger{padding:16px;border:none;border-bottom:var(--border-default);cursor:pointer;justify-content:space-between;font-size:var(--font-size-default);width:100%;text-align:right;background:#fff;color:var(--color-primary)}.yoast-collapsible__trigger[aria-expanded=true] .yoast-collapsible__icon{transform:rotate(-180deg)}.yoast-collapsible__trigger[aria-expanded=true]{padding:16px 0;width:calc(100% - 32px);margin:0 16px}.yoast-collapsible__icon{background-color:var(--color-white);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='%23404040'%3E%3Cpath d='M1.4 0L6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:10px auto;width:19px;height:19px;border:none;display:block;float:left}.yoast-collapsible-block{width:100%;margin-top:46px}.yoast-collapsible-block+.yoast-collapsible-block{margin-top:0}}:root{--border-default:1px solid rgba(0,0,0,0.2);--color-default:#404040;--color-primary:#a4286a;--color-secondary:#f7f7f7;--color-white:#fff;--color-green:#6ea029;--color-primary-darker:#7b1e50;--color-primary-lighter:#f5d6e6;--color-secondary-darker:#d9d9d9;--color-button-upsell:#fec228;--color-button-upsell-hover:#f2ae01;--color-dark:#303030;--color-sale:#fec228;--color-label:#303030;--color-label-help:#707070;--color-toggle-on:#303030;--color-toggle-off:#707070;--transition-default:all 150ms ease-out;--color-link:#006dac;--color-border--default:rgba(0,0,0,0.2);--checkmark--white:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23FFF' viewBox='0 0 512 512'%3E%3Cpath d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3E%3C/svg%3E");--svg-icon-caret-right:url('data:image/svg+xml;charset=utf-8,<svg viewBox="0 0 192 512" xmlns="http://www.w3.org/2000/svg"><path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"/></svg>');--checkmark--green:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%236EA029' viewBox='0 0 512 512'%3E%3Cpath d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3E%3C/svg%3E");--exclamation-mark:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23DC3232' viewBox='0 0 512 512'%3E%3Cpath d='M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z'/%3E%3C/svg%3E")}[class*=yoast-]{box-sizing:border-box}[class*=yoast-]:focus{box-shadow:0 0 0 2px #007fff,0 0 0 5px #bfdfff;border-radius:0;outline:none}:root{--font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;--font-size-default:14px;--font-weight-default:400;--font-weight-bold:600;--color-font-default:#404040}.yoast-h1,.yoast-h2,.yoast-h3,.yoast h1,.yoast h2,.yoast h3{font-weight:400;color:var(--color-primary);line-height:1.2;margin:0}.yoast-h1 a,.yoast-h2 a,.yoast-h3 a{color:var(--color-primary);text-decoration:none}.yoast-h1,.yoast h1{font-size:24px}.yoast-h2,.yoast h2{font-size:20px}.yoast-h3,.yoast h4{font-size:16px}.yoast-paragraph,.yoast p{font-size:var(--font-size-default);margin-top:0}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}@media (max-width:782px){.yoast-show-on-mobile{display:initial!important}}@media (min-width:782px){.yoast-hide-on-desktop{display:none}}
css/dist/monorepo-1400.css ADDED
@@ -0,0 +1 @@
 
1
+ .yoast .yoast-button{display:inline-block;position:relative;padding:10px 16px 12px;text-decoration:none;border-radius:4px;border:1px solid rgba(0,0,0,.2);box-shadow:inset 0 -2px 0 rgba(0,0,0,.3);transition:background-color .15s ease-out 0s;line-height:1.2;font-size:14px;cursor:pointer}.yoast .yoast-button:active{box-shadow:none;padding-bottom:12px;top:2px}.yoast .yoast-button--primary{color:var(--color-white);background-color:var(--color-primary);border:1px solid rgba(0,0,0,.2)}.yoast .yoast-button--primary:visited{color:var(--color-white);border:1px solid rgba(0,0,0,.2)}.yoast .yoast-button--primary:active,.yoast .yoast-button--primary:hover{color:var(--color-white);background-color:var(--color-primary-darker);border:1px solid rgba(0,0,0,.2)}.yoast-close{display:flex;justify-content:center;align-items:center;border:none;background:none;height:44px;width:44px;cursor:pointer;box-shadow:none;padding:0}.yoast-close svg{fill:var(--color-default);width:14px}@media screen and (max-width:782px){.yoast-close svg{width:10px}}.yoast-data-model{padding:0;list-style:none;width:275px}.yoast-data-model li{line-height:1.4;padding:0 8px;position:relative;z-index:2;font-weight:var(--font-weight-bold)}.yoast-data-model span{float:right;font-weight:var(--font-weight-default)}.yoast-data-model li+li{margin-top:9px}.yoast-data-model li:after{position:absolute;left:0;height:20px;background:#f5d6e6;content:"";width:var(--width);z-index:-1}.yoast-field-group,.yoast fieldset{position:relative;border:none;padding:0;margin:0 0 24px}.yoast-field-group__title{display:flex;align-items:center;font-weight:var(--font-weight-bold);margin:0 0 8px;color:var(--color-label);line-height:1.2;float:left;padding:0}.yoast-field-group__help{border-radius:50%;padding:4px;width:12px;height:12px;display:block;float:left;margin-top:-5px}.yoast-field-group__help+*{clear:both}.yoast-field-group__help-icon svg{width:12px;height:12px;fill:var(--color-label-help);transition:var(--transition-default)}.yoast-field-group__help:hover svg{fill:var(--color-link)}.yoast-field-group .description{margin:0}:root{--color-placeholder:#707070}.yoast-field-group__inputfield,.yoast-field-group__textarea,.yoast input,.yoast textarea{width:100%;font-size:var(--font-size-default);padding:8px;background:#fff;border:var(--border-default);box-shadow:inset 0 2px 4px rgba(0,0,0,.1);box-sizing:border-box}.yoast-field-group__inputfield,.yoast input{height:40px}.yoast-field-group__textarea,.yoast textarea{min-height:200px}.yoast-field-group .description+.yoast-field-group__inputfield,.yoast-field-group .description+input,.yoast-field-group__inputfield+.description,.yoast input+.description{margin-top:8px;margin-bottom:24px}::-ms-input-placeholder,::-webkit-input-placeholder,::placeholder{color:var(--color-placeholder)}.yoast-field-group__radiobutton{display:flex;align-items:center}.yoast-field-group__radiobutton--vertical:not(:last-of-type){margin-bottom:8px}.yoast-field-group__radiobutton label{cursor:pointer;margin-right:16px}.yoast-field-group__radiobutton input[type=radio],.yoast input[type=radio]{-webkit-appearance:none;-moz-appearance:none;width:18px;height:18px;padding:2px;margin:0 8px 0 0;border-radius:50%;transition:all .15s ease-out 0s;border:var(--border-default);box-shadow:inset 0 2px 4px rgba(0,0,0,.1);position:relative;overflow:hidden;cursor:pointer}.yoast-field-group__radiobutton input[type=radio]:checked,.yoast input[type=radio]:checked{border-color:var(--color-primary)}.yoast-field-group__radiobutton input[type=radio]:checked:after,.yoast input[type=radio]:checked:after{width:10px;height:10px;background:var(--color-primary);position:absolute;left:3px;top:3px;content:"";display:block;border-radius:50%}.yoast-field-group__select{display:flex;cursor:pointer;align-items:center}.select2-container--default,.yoast-field-group__select select,.yoast select{-webkit-appearance:none;-moz-appearance:none;width:100%;font-size:var(--font-size-default);padding:10px 8px 11px;background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 8"><path d="M1.4 0L6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z"/></svg>');background-position:right 15px center;background-repeat:no-repeat;background-size:10px auto;border-radius:0;border:var(--border-default);box-shadow:inset 0 2px 4px rgba(0,0,0,.1);position:relative;max-width:300px;display:block}.select2-container--default{background-image:none;padding:8px 8px 3px}.select2-container--default.select2-container--focus .select2-selection--multiple{outline:inherit;border:0}.select2-container--default .yoast-multiselect{border:0;min-height:0}.select2-container--default .yoast-multiselect ul{display:flex;margin:0;padding:0;list-style:none}.select2-container--default .yoast-multiselect .select2-selection__choice{background-color:var(--color-primary);border:0;border-radius:12px;color:var(--color-white);padding-top:0;padding-left:10px;padding-right:10px;margin-top:0;margin-right:8px;line-height:1.7;font-weight:500}.select2-container--default .yoast-multiselect .select2-selection__choice__remove{margin-right:8px;color:var(--color-white)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:var(--color-white)}.select2-dropdown{border-color:var(--color-border--default);border-radius:0}.select2-container--open .select2-dropdown{top:-2px;left:-1px}.select2-results__option{padding:8px;border-top:var(--border-default)}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:var(--color-primary-lighter);color:var(--color-font-default)}.select2-container--default .select2-results__option[aria-selected=true]{background-color:var(--color-primary);color:var(--color-white)}.yoast-field-group__toggle{display:flex;align-items:center;width:600px;justify-content:space-between}.yoast-field-group__toggle input{position:absolute;left:0;opacity:0}.yoast-field-group__toggle label{position:relative;z-index:2;cursor:pointer}.yoast-field-group__toggle input:checked+label{color:var(--color-toggle-on)}.yoast-field-group__toggle input:not(:checked)+label{color:var(--color-toggle-off)}.yoast-field-group__toggle a{display:inline-block;width:34px;height:14px;border-radius:5px;background:#b6cf94;position:relative;margin:0 9px}.yoast-field-group__toggle input:first-of-type:checked~a{background:#9e9e9e}.yoast-field-group__toggle a:after{content:"";display:block;height:20px;width:20px;position:absolute;right:-2px;background:#6ea029;border-radius:50%;top:-3px;transition:all .1s ease-out}.yoast-field-group__toggle input:first-of-type:checked~a:after{right:calc(100% - 18px);background:#f1f1f1;box-shadow:0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.2),0 2px 1px -1px rgba(0,0,0,.12)}.yoast-field-group__checkbox{display:flex;cursor:pointer;align-items:center}.yoast-field-group__checkbox:not(.yoast-field-group__checkbox--horizontal)+.yoast-field-group__checkbox{margin-top:4px}.yoast-field-group__checkbox input[type=checkbox],.yoast input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;width:18px;height:18px;padding:2px;margin:2px 8px 0 0;border-radius:2px;transition:background-color .15s ease-out 0s;border:var(--border-default);box-shadow:inset 0 2px 4px rgba(0,0,0,.1);position:relative;overflow:hidden}.yoast label+input[type=checkbox]{margin-left:16px}.yoast-field-group__checkbox input[type=checkbox]:checked,.yoast input[type=checkbox]:checked{background:var(--checkmark--white) var(--color-primary) no-repeat 50%/13px;border:1px solid var(--color-primary);box-shadow:none}.yoast-modal__screen-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(164,40,106,.6);z-index:100000;animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards}.yoast-modal{background:#fff;display:flex;flex-direction:column;overflow:hidden;position:fixed;height:calc(100% - 96px);top:48px;bottom:48px;left:calc(50% - 440px);max-width:880px;width:100%}.yoast-tabs .yoast-modal__content{display:grid;grid-template-areas:"heading heading" "menu content" "menu footer";grid-template-rows:72px 1fr 89px;grid-template-columns:280px 1fr}.yoast-modal__heading{padding:13px 24px 14px;display:flex;align-items:center;border-bottom:var(--border-default);grid-area:heading;background:var(--color-white);height:72px}.yoast-modal__heading .yoast-close{position:absolute;right:16px}.yoast-modal__heading h1{font-size:20px}.yoast-modal__heading-icon{fill:var(--color-primary);margin-right:16px;width:19px;height:20px;flex-shrink:0}.yoast-modal__menu{grid-area:menu;border-right:var(--border-default);overflow-y:auto}.yoast-modal__menu ul{padding:0;margin:0;list-style:none}.yoast-modal__menu li{padding:12px 16px 11px;border-bottom:var(--border-default);font-size:16px;cursor:pointer;text-decoration:none;color:var(--color-default);display:block}.yoast-modal__menu li:hover{background-color:#edd4e1}.yoast-modal__menu li.yoast-tabs__tab--selected{background-color:var(--color-primary);border-bottom:var(--border-default);color:#fff}.yoast-modal__content,.yoast-modal__section{grid-area:content;overflow-y:auto;flex-grow:1;position:relative;display:flex;flex-direction:column}.yoast-modal__section *{max-width:600px}.yoast-modal__section-header{position:-webkit-sticky;position:sticky;top:0;background:var(--color-white);padding:24px 24px 0;z-index:10}.yoast-modal__section .yoast-h2{border-bottom:var(--border-default);padding-bottom:24px}.yoast-modal__footer{grid-area:footer;padding:24px 0;border-top:var(--border-default);display:flex;align-self:flex-end;align-items:center;justify-content:flex-end;position:-webkit-sticky;position:sticky;bottom:0;background:var(--color-white);margin:0 24px;z-index:10;height:89px;width:calc(100% - 48px)}.yoast-modal__settings-saved{position:relative;margin-right:16px;display:inline-flex;align-items:center}.yoast-modal__settings-saved:before{content:"";background:var(--checkmark--green) no-repeat 50%;height:13px;width:14px;display:inline-block;margin-right:8px}.yoast-modal__footer .yoast-button{display:block}.yoast-modal__section-content{padding:24px;flex-grow:1}@media screen and (max-width:880px){.yoast-modal{position:fixed;top:0;bottom:0;left:0;right:0}}@media screen and (max-width:782px){.yoast-modal{overflow-y:initial;height:auto;padding-bottom:72px}.yoast-modal__heading{padding:14px 16px 15px;position:fixed;top:0;width:100%;z-index:11;height:auto}.yoast-close svg{width:10px}.yoast-modal__heading-icon{height:15px;margin-right:8px}.yoast .yoast-close{right:3px}.yoast-modal__heading .yoast-h2{font-size:var(--font-size-default)}.yoast-modal__section{overflow:initial;flex-grow:0}.yoast-modal__section-content{padding:24px 0;margin:0 16px}.yoast-modal__section:first-of-type{margin-top:46px}.yoast-modal__section:last-of-type{margin-bottom:72px}.yoast-modal__section-header{top:46px;position:-webkit-sticky;position:sticky;padding:0;margin:0}.yoast-modal__section-open .yoast-modal__section-header{padding-left:0;padding-right:0;margin-left:16px;margin-right:16px}.yoast-modal__section-open{border-bottom:var(--border-default)}.yoast-modal__footer{margin:0;width:100%;position:fixed;z-index:11;height:72px;padding:24px 16px}.yoast-modal-collapsible .yoast-modal__section-content{padding:24px 16px;border-bottom:var(--border-default);margin:0}.yoast-collapsible__hidden{display:none}.yoast-collapsible__trigger{padding:16px;border:none;border-bottom:var(--border-default);cursor:pointer;justify-content:space-between;font-size:var(--font-size-default);width:100%;text-align:left;background:#fff;color:var(--color-primary)}.yoast-collapsible__trigger[aria-expanded=true] .yoast-collapsible__icon{transform:rotate(180deg)}.yoast-collapsible__trigger[aria-expanded=true]{padding:16px 0;width:calc(100% - 32px);margin:0 16px}.yoast-collapsible__icon{background-color:var(--color-white);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='%23404040'%3E%3Cpath d='M1.4 0L6 4.6 10.6 0 12 1.4 6 7.5 0 1.4z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:10px auto;width:19px;height:19px;border:none;display:block;float:right}.yoast-collapsible-block{width:100%;margin-top:46px}.yoast-collapsible-block+.yoast-collapsible-block{margin-top:0}}:root{--border-default:1px solid rgba(0,0,0,0.2);--color-default:#404040;--color-primary:#a4286a;--color-secondary:#f7f7f7;--color-white:#fff;--color-green:#6ea029;--color-primary-darker:#7b1e50;--color-primary-lighter:#f5d6e6;--color-secondary-darker:#d9d9d9;--color-button-upsell:#fec228;--color-button-upsell-hover:#f2ae01;--color-dark:#303030;--color-sale:#fec228;--color-label:#303030;--color-label-help:#707070;--color-toggle-on:#303030;--color-toggle-off:#707070;--transition-default:all 150ms ease-out;--color-link:#006dac;--color-border--default:rgba(0,0,0,0.2);--checkmark--white:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23FFF' viewBox='0 0 512 512'%3E%3Cpath d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3E%3C/svg%3E");--svg-icon-caret-right:url('data:image/svg+xml;charset=utf-8,<svg viewBox="0 0 192 512" xmlns="http://www.w3.org/2000/svg"><path d="M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"/></svg>');--checkmark--green:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%236EA029' viewBox='0 0 512 512'%3E%3Cpath d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3E%3C/svg%3E");--exclamation-mark:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23DC3232' viewBox='0 0 512 512'%3E%3Cpath d='M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z'/%3E%3C/svg%3E")}[class*=yoast-]{box-sizing:border-box}[class*=yoast-]:focus{box-shadow:0 0 0 2px #007fff,0 0 0 5px #bfdfff;border-radius:0;outline:none}:root{--font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;--font-size-default:14px;--font-weight-default:400;--font-weight-bold:600;--color-font-default:#404040}.yoast-h1,.yoast-h2,.yoast-h3,.yoast h1,.yoast h2,.yoast h3{font-weight:400;color:var(--color-primary);line-height:1.2;margin:0}.yoast-h1 a,.yoast-h2 a,.yoast-h3 a{color:var(--color-primary);text-decoration:none}.yoast-h1,.yoast h1{font-size:24px}.yoast-h2,.yoast h2{font-size:20px}.yoast-h3,.yoast h4{font-size:16px}.yoast-paragraph,.yoast p{font-size:var(--font-size-default);margin-top:0}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}@media (max-width:782px){.yoast-show-on-mobile{display:initial!important}}@media (min-width:782px){.yoast-hide-on-desktop{display:none}}
css/dist/{search-appearance-1350-rtl.css → search-appearance-1400-rtl.css} RENAMED
File without changes
css/dist/{search-appearance-1350.css → search-appearance-1400.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1350-rtl.css → structured-data-blocks-1400-rtl.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1350.css → structured-data-blocks-1400.css} RENAMED
File without changes
css/dist/{toggle-switch-1350-rtl.css → toggle-switch-1400-rtl.css} RENAMED
File without changes
css/dist/{toggle-switch-1350.css → toggle-switch-1400.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1350-rtl.css → wpseo-dismissible-1400-rtl.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1350.css → wpseo-dismissible-1400.css} RENAMED
File without changes
css/dist/{yoast-components-1350-rtl.css → yoast-components-1400-rtl.css} RENAMED
File without changes
css/dist/{yoast-components-1350.css → yoast-components-1400.css} RENAMED
File without changes
css/dist/{yoast-extensions-1350-rtl.css → yoast-extensions-1400-rtl.css} RENAMED
File without changes
css/dist/{yoast-extensions-1350.css → yoast-extensions-1400.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1350-rtl.css → yst_plugin_tools-1400-rtl.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1350.css → yst_plugin_tools-1400.css} RENAMED
File without changes
css/dist/{yst_seo_score-1350-rtl.css → yst_seo_score-1400-rtl.css} RENAMED
File without changes
css/dist/{yst_seo_score-1350.css → yst_seo_score-1400.css} RENAMED
File without changes
deprecated/frontend/class-handle-404.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Frontend
6
+ */
7
+
8
+ /**
9
+ * Class WPSEO_Handle_404
10
+ *
11
+ * Handles intercepting requests.
12
+ *
13
+ * @deprecated 14.0
14
+ *
15
+ * @since 9.4
16
+ */
17
+ class WPSEO_Handle_404 implements WPSEO_WordPress_Integration {
18
+
19
+ /**
20
+ * Registers all hooks to WordPress.
21
+ *
22
+ * @codeCoverageIgnore
23
+ * @deprecated 14.0
24
+ *
25
+ * @return void
26
+ */
27
+ public function register_hooks() {
28
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
29
+ }
30
+
31
+ /**
32
+ * Handle the 404 status code.
33
+ *
34
+ * @codeCoverageIgnore
35
+ * @deprecated 14.0
36
+ *
37
+ * @param bool $handled Whether we've handled the request.
38
+ *
39
+ * @return bool True if it's 404.
40
+ */
41
+ public function handle_404( $handled ) {
42
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
43
+
44
+ return $handled;
45
+ }
46
+ }
deprecated/frontend/class-opengraph-image.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Frontend
6
+ */
7
+
8
+ use Yoast\WP\SEO\Values\Open_Graph\Images;
9
+
10
+ _deprecated_file( basename( __FILE__ ), 'WPSEO 14.0' );
11
+
12
+ /**
13
+ * Class WPSEO_OpenGraph_Image.
14
+ *
15
+ * @deprecated 14.0
16
+ */
17
+ class WPSEO_OpenGraph_Image extends Images {
18
+
19
+ /**
20
+ * The image ID used when the image is external.
21
+ *
22
+ * @var string
23
+ */
24
+ const EXTERNAL_IMAGE_ID = '-1';
25
+
26
+ /**
27
+ * Constructor.
28
+ *
29
+ * @deprecated 14.0
30
+ * @codeCoverageIgnore
31
+ *
32
+ * @param null|string $image Optional. The Image to use.
33
+ * @param WPSEO_OpenGraph $opengraph Optional. The OpenGraph object.
34
+ */
35
+ public function __construct( $image = null, WPSEO_OpenGraph $opengraph = null ) {
36
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
37
+ }
38
+ }
deprecated/frontend/class-opengraph-oembed.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Frontend
6
+ */
7
+
8
+ /**
9
+ * Class WPSEO_OpenGraph_OEmbed.
10
+ *
11
+ * @deprecated 14.0
12
+ */
13
+ class WPSEO_OpenGraph_OEmbed implements WPSEO_WordPress_Integration {
14
+
15
+ /**
16
+ * @inheritDoc
17
+ *
18
+ * @codeCoverageIgnore
19
+ * @deprecated 14.0
20
+ */
21
+ public function register_hooks() {
22
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
23
+ }
24
+
25
+ /**
26
+ * Callback function to pass to the oEmbed's response data that will enable
27
+ * support for using the image and title set by the WordPress SEO plugin's fields. This
28
+ * address the concern where some social channels/subscribed use oEmebed data over OpenGraph data
29
+ * if both are present.
30
+ *
31
+ * @codeCoverageIgnore
32
+ * @deprecated 14.0
33
+ *
34
+ * @param array $data The oEmbed data.
35
+ * @param WP_Post $post The current Post object.
36
+ *
37
+ * @link https://developer.wordpress.org/reference/hooks/oembed_response_data/ for hook info.
38
+ *
39
+ * @return array An array of oEmbed data with modified values where appropriate.
40
+ */
41
+ public function set_oembed_data( $data, $post ) {
42
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
43
+
44
+ return $data;
45
+ }
46
+ }
deprecated/frontend/class-opengraph.php ADDED
@@ -0,0 +1,314 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Frontend
6
+ */
7
+
8
+ /**
9
+ * This code adds the OpenGraph output.
10
+ *
11
+ * @deprecated 14.0
12
+ */
13
+ class WPSEO_OpenGraph {
14
+
15
+ /* ********************* DEPRECATED METHODS ********************* */
16
+
17
+ /**
18
+ * Class constructor.
19
+ *
20
+ * @deprecated 14.0
21
+ * @codeCoverageIgnore
22
+ */
23
+ public function __construct() {
24
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
25
+ }
26
+
27
+ /**
28
+ * Main OpenGraph output.
29
+ *
30
+ * @deprecated 14.0
31
+ * @codeCoverageIgnore
32
+ */
33
+ public function opengraph() {
34
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
35
+ }
36
+
37
+ /**
38
+ * Internal function to output FB tags. This also adds an output filter to each bit of output based on the property.
39
+ *
40
+ * @deprecated 14.0
41
+ * @codeCoverageIgnore
42
+ *
43
+ * @param string $property Property attribute value.
44
+ * @param string $content Content attribute value.
45
+ *
46
+ * @return boolean
47
+ */
48
+ public function og_tag( $property, $content ) {
49
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
50
+
51
+ /**
52
+ * Filter: 'wpseo_og_' . $og_property - Allow developers to change the content of specific OG meta tags.
53
+ *
54
+ * @deprecated 14.0
55
+ *
56
+ * @api string $content The content of the property.
57
+ */
58
+ $content = apply_filters_deprecated( 'wpseo_og_' . $og_property, $content, 'WPSEO 14.0');
59
+
60
+ return true;
61
+ }
62
+
63
+ /**
64
+ * Outputs the site owner.
65
+ *
66
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
67
+ *
68
+ * @return void
69
+ *
70
+ * @deprecated 7.1
71
+ * @codeCoverageIgnore
72
+ */
73
+ public function site_owner() {
74
+ // As this is a frontend method, we want to make sure it is not displayed for non-logged in users.
75
+ if ( function_exists( 'wp_get_current_user' ) && current_user_can( 'manage_options' ) ) {
76
+ _deprecated_function( __METHOD__, '7.1', null );
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Fallback method for plugins using image_output.
82
+ *
83
+ * @param string|bool $image Image URL.
84
+ *
85
+ * @deprecated 7.4
86
+ * @codeCoverageIgnore
87
+ */
88
+ public function image_output( $image = false ) {
89
+ _deprecated_function( __METHOD__, '7.4', 'WPSEO_OpenGraph::image' );
90
+ }
91
+
92
+ /**
93
+ * Outputs the canonical URL as OpenGraph URL, which consolidates likes and shares.
94
+ *
95
+ * @deprecated 14.0
96
+ * @codeCoverageIgnore
97
+ *
98
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
99
+ *
100
+ * @return boolean
101
+ */
102
+ public function url() {
103
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
104
+
105
+ return false;
106
+ }
107
+
108
+ /**
109
+ * Outputs the SEO title as OpenGraph title.
110
+ *
111
+ * @deprecated 14.0
112
+ * @codeCoverageIgnore
113
+ *
114
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
115
+ *
116
+ * @param bool $echo Whether or not to echo the output.
117
+ *
118
+ * @return string|boolean
119
+ */
120
+ public function og_title( $echo = true ) {
121
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
122
+
123
+ return false;
124
+ }
125
+
126
+ /**
127
+ * Outputs the OpenGraph description, specific OG description first, if not, grabs the meta description.
128
+ *
129
+ * @deprecated 14.0
130
+ * @codeCoverageIgnore
131
+ *
132
+ * @param bool $echo Whether to echo or return the description.
133
+ *
134
+ * @return string $ogdesc
135
+ */
136
+ public function description( $echo = true ) {
137
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
138
+
139
+ return '';
140
+ }
141
+
142
+ /**
143
+ * Outputs the author's FB page.
144
+ *
145
+ * @deprecated 14.0
146
+ * @codeCoverageIgnore
147
+ *
148
+ * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/
149
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
150
+ *
151
+ * @return boolean
152
+ */
153
+ public function article_author_facebook() {
154
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
155
+
156
+ return false;
157
+ }
158
+
159
+ /**
160
+ * Outputs the website's FB page.
161
+ *
162
+ * @deprecated 14.0
163
+ * @codeCoverageIgnore
164
+ *
165
+ * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/
166
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
167
+ *
168
+ * @return boolean
169
+ */
170
+ public function website_facebook() {
171
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
172
+
173
+ return false;
174
+ }
175
+
176
+ /**
177
+ * Outputs the OpenGraph type.
178
+ *
179
+ * @deprecated 14.0
180
+ * @codeCoverageIgnore
181
+ *
182
+ * @param boolean $echo Whether to echo or return the type.
183
+ *
184
+ * @return string $type
185
+ */
186
+ public function type( $echo = true ) {
187
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
188
+
189
+ return '';
190
+ }
191
+
192
+ /**
193
+ * Outputs the locale, doing some conversions to make sure the proper Facebook locale is output.
194
+ *
195
+ * Last update/compare with FB list done on 2015-03-16 by Rarst.
196
+ *
197
+ * @deprecated 14.0
198
+ * @codeCoverageIgnore
199
+ *
200
+ * @link http://www.facebook.com/translations/FacebookLocales.xml for the list of supported locales.
201
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
202
+ *
203
+ * @param bool $echo Whether to echo or return the locale.
204
+ *
205
+ * @return string $locale
206
+ */
207
+ public function locale( $echo = true ) {
208
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
209
+
210
+ return '';
211
+ }
212
+
213
+ /**
214
+ * Filters the Facebook plugins metadata.
215
+ *
216
+ * @deprecated 14.0
217
+ * @codeCoverageIgnore
218
+ *
219
+ * @param array $meta_tags The array to fix.
220
+ *
221
+ * @return array $meta_tags
222
+ */
223
+ public function facebook_filter( $meta_tags ) {
224
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
225
+
226
+ return array();
227
+ }
228
+
229
+ /**
230
+ * Outputs the site name straight from the blog info.
231
+ *
232
+ * @deprecated 14.0
233
+ * @codeCoverageIgnore
234
+ *
235
+ * @return void
236
+ */
237
+ public function site_name() {
238
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
239
+ }
240
+
241
+ /**
242
+ * Outputs the article publish and last modification date.
243
+ *
244
+ * @deprecated 14.0
245
+ * @codeCoverageIgnore
246
+ *
247
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
248
+ *
249
+ * @return boolean;
250
+ */
251
+ public function publish_date() {
252
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
253
+
254
+ return true;
255
+ }
256
+
257
+ /**
258
+ * Creates new WPSEO_OpenGraph_Image class and get the images to set the og:image.
259
+ *
260
+ * @deprecated 14.0
261
+ * @codeCoverageIgnore
262
+
263
+ * @param string|bool $image Optional. Image URL.
264
+ *
265
+ * @return void
266
+ */
267
+ public function image( $image = false ) {
268
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
269
+ }
270
+
271
+ /**
272
+ * Outputs the Facebook app_id.
273
+ *
274
+ * @deprecated 14.0
275
+ * @codeCoverageIgnore
276
+ *
277
+ * @return void
278
+ */
279
+ public function app_id() {
280
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
281
+ }
282
+
283
+ /**
284
+ * Outputs the article tags as article:tag tags.
285
+ *
286
+ * @deprecated 14.0
287
+ * @codeCoverageIgnore
288
+ *
289
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
290
+ *
291
+ * @return boolean
292
+ */
293
+ public function tags() {
294
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
295
+
296
+ return false;
297
+ }
298
+
299
+ /**
300
+ * Outputs the article category as an article:section tag.
301
+ *
302
+ * @deprecated 14.0
303
+ * @codeCoverageIgnore
304
+ *
305
+ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
306
+ *
307
+ * @return boolean;
308
+ */
309
+ public function category() {
310
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
311
+
312
+ return false;
313
+ }
314
+ } /* End of class */
deprecated/frontend/class-primary-category.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Frontend
6
+ */
7
+
8
+ /**
9
+ * Adds customizations to the front end for the primary category.
10
+ *
11
+ * @deprecated 14.0
12
+ */
13
+ class WPSEO_Frontend_Primary_Category implements WPSEO_WordPress_Integration {
14
+
15
+ /**
16
+ * Registers the hooks necessary for correct primary category behaviour.
17
+ */
18
+ public function register_hooks() {
19
+ add_filter( 'post_link_category', array( $this, 'post_link_category' ), 10, 3 );
20
+ }
21
+
22
+ /**
23
+ * Filters post_link_category to change the category to the chosen category by the user.
24
+ *
25
+ * @param stdClass $category The category that is now used for the post link.
26
+ * @param array $categories This parameter is not used.
27
+ * @param WP_Post $post The post in question.
28
+ *
29
+ * @codeCoverageIgnore
30
+ * @deprecated 14.0
31
+ *
32
+ * @return array|null|object|WP_Error The category we want to use for the post link.
33
+ */
34
+ public function post_link_category( $category, $categories = null, $post = null ) {
35
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
36
+
37
+ return $category;
38
+ }
39
+ }
deprecated/frontend/class-twitter.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Frontend
6
+ */
7
+
8
+ /**
9
+ * This class handles the Twitter card functionality.
10
+ *
11
+ * @deprecated 14.0
12
+ *
13
+ * @link https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/abouts-cards
14
+ */
15
+ class WPSEO_Twitter {
16
+
17
+ /**
18
+ * Instance of this class.
19
+ *
20
+ * @var object
21
+ */
22
+ public static $instance;
23
+
24
+ /**
25
+ * Images.
26
+ *
27
+ * @var array
28
+ */
29
+ public $shown_images = array();
30
+
31
+ /**
32
+ * Class constructor.
33
+ *
34
+ * @deprecated 14.0
35
+ * @codeCoverageIgnore
36
+ */
37
+ public function __construct() {
38
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
39
+ }
40
+
41
+ /**
42
+ * Outputs the Twitter Card code on singular pages.
43
+ *
44
+ * @deprecated 14.0
45
+ * @codeCoverageIgnore
46
+ */
47
+ public function twitter() {
48
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
49
+ }
50
+
51
+ /**
52
+ * Get the singleton instance of this class.
53
+ *
54
+ * @deprecated 14.0
55
+ * @codeCoverageIgnore
56
+ *
57
+ * @return object
58
+ */
59
+ public static function get_instance() {
60
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
61
+
62
+ return null;
63
+ }
64
+ } /* End of class */
deprecated/frontend/schema/class-schema-article.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Frontend\Schema
6
+ */
7
+
8
+ use Yoast\WP\SEO\Generators\Schema\Article;
9
+ use Yoast\WP\SEO\Memoizers\Meta_Tags_Context_Memoizer;
10
+
11
+ /**
12
+ * Returns schema Article data.
13
+ *
14
+ * @deprecated 14.0
15
+ *
16
+ * @since 10.2
17
+ */
18
+ class WPSEO_Schema_Article extends Article implements WPSEO_Graph_Piece {
19
+
20
+ /**
21
+ * The date helper.
22
+ *
23
+ * @var WPSEO_Date_Helper
24
+ */
25
+ protected $date;
26
+
27
+ /**
28
+ * WPSEO_Schema_Article constructor.
29
+ *
30
+ * @param array $context The context. No longer used but present for BC.
31
+ *
32
+ * @codeCoverageIgnore
33
+ * @deprecated 14.0
34
+ */
35
+ public function __construct( $context = null ) {
36
+ _deprecated_function( __METHOD__, 'WPSEO 14.0', 'Yoast\WP\SEO\Generators\Schema\Article' );
37
+
38
+ $memoizer = YoastSEO()->classes->get( Meta_Tags_Context_Memoizer::class );
39
+ $this->context = $memoizer->for_current_page();
40
+ $this->helpers = YoastSEO()->helpers;
41
+ $this->date = new WPSEO_Date_Helper();
42
+ }
43
+
44
+ /**
45
+ * Determines whether or not a piece should be added to the graph.
46
+ *
47
+ * @codeCoverageIgnore
48
+ * @deprecated 14.0
49
+ *
50
+ * @return bool
51
+ */
52
+ public function is_needed() {
53
+ _deprecated_function( __METHOD__, 'WPSEO 14.0', 'Yoast\WP\SEO\Generators\Schema\Article::is_needed' );
54
+
55
+ return parent::is_needed();
56
+ }
57
+
58
+ /**
59
+ * Returns Article data.
60
+ *
61
+ * @codeCoverageIgnore
62
+ * @deprecated 14.0
63
+ *
64
+ * @return array $data Article data.
65
+ */
66
+ public function generate() {
67
+ _deprecated_function( __METHOD__, 'WPSEO 14.0', 'Yoast\WP\SEO\Generators\Schema\Article::generate' );
68
+
69
+ return parent::generate();
70
+ }
71
+
72
+ /**
73
+ * Determines whether a given post type should have Article schema.
74
+ *
75
+ * @codeCoverageIgnore
76
+ * @deprecated 14.0
77
+ *
78
+ * @param string $post_type Post type to check.
79
+ *
80
+ * @return bool True if it has article schema, false if not.
81
+ */
82
+ public static function is_article_post_type( $post_type = null ) {
83
+ _deprecated_function( __METHOD__, 'WPSEO 14.0', 'YoastSEO()->helpers->schema->article->is_article_post_type' );
84
+
85
+ return YoastSEO()->helpers->schema->article->is_article_post_type( $post_type );
86
+ }
87
+ }
deprecated/frontend/schema/class-schema-author.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WPSEO plugin file.
4
+ *
5
+ * @package WPSEO\Frontend\Schema
6
+ */
7
+
8
+ use Yoast\WP\SEO\Config\Schema_IDs;
9
+ use Yoast\WP\SEO\Generators\Schema\Author;
10
+ use Yoast\WP\SEO\Memoizers\Meta_Tags_Context_Memoizer;
11
+
12
+ /**
13
+ * Returns schema Person data.
14
+ *
15
+ * @deprecated 14.0
16
+ *
17
+ * @since 10.2
18
+ */
19
+ class WPSEO_Schema_Author extends Author implements WPSEO_Graph_Piece {
20
+
21
+ /**
22
+ * The hash used for images.
23
+ *
24
+ * @var string
25
+ */
26
+ protected $image_hash = Schema_IDs::AUTHOR_LOGO_HASH;
27
+
28
+ /**
29
+ * The Schema type we use for this class.
30
+ *
31
+ * @var string[]
32
+ */
33
+ protected $type = [ 'Person' ];
34
+
35
+ /**
36
+ * WPSEO_Schema_Author constructor.
37
+ *
38
+ * @param null $context The context. No longer used but present for BC.
39
+ *
40
+ * @codeCoverageIgnore
41
+ * @deprecated 14.0
42
+ */
43
+ public function __construct( $context = null ) {
44
+ _deprecated_function( __METHOD__, 'WPSEO 14.0', 'Yoast\WP\SEO\Generators\Schema\Author' );
45
+
46
+ $memoizer = YoastSEO()->classes->get( Meta_Tags_Context_Memoizer::class );
47
+ $this->context = $memoizer->for_current_page();
48
+ $this->helpers = YoastSEO()->helpers;
49
+ }
50
+
51
+ /**
52
+ * Determine whether we should return Person schema.
53
+ *
54
+ * @codeCoverageIgnore
55
+ * @deprecated 14.0
56
+ *
57
+ * @return bool
58
+ */
59
+ public function is_needed() {
60
+ _deprecated_function( __METHOD__, 'WPSEO 14.0', 'Yoast\WP\SEO\Generators\Schema\Author::is_needed' );
61
+
62
+ if ( $this->context->indexable->object_type === 'user' ) {
63
+ return true;
64
+ }
65
+
66
+ // This call to `is_post_author` is why this whole block could not be replaced with a `parent::is_needed()` call.
67
+ if ( $this->is_post_author() ) {
68
+ // If the author is the user the site represents, no need for an extra author block.
69
+ if ( parent::is_needed() ) {
70
+ return (int) $this->context->post->post_author !== $this->context->site_user_id;
71
+ }
72
+
73
+ return true;
74
+ }
75
+
76
+ return false;
77
+ }
78
+
79
+ /**
80
+ * Returns Person Schema data.
81
+ *
82
+ * @codeCoverageIgnore
83
+ * @deprecated 14.0
84
+ *
85
+ * @return bool|array Person data on success, false on failure.
86
+ */
87
+ public function generate() {
88
+ _deprecated_function( __METHOD__, 'WPSEO 14.0', 'Yoast\WP\SEO\Generators\Schema\Author::generate' );
89
+
90
+ return parent::generate();
91
+ }
92
+
93
+ /**
94
+ * Gets the Schema type we use for this class.
95
+ *
96
+ * @codeCoverageIgnore
97
+ * @deprecated 14.0
98
+ *
99
+ * @return string[] The schema type.
100
+ */
101
+ public static function get_type() {
102
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
103
+
104
+ return [ 'Person' ];
105
+ }
106
+
107
+ /**
108
+ * Determine whether the current URL is worthy of Article schema.
109
+ *
110
+ * @codeCoverageIgnore
111
+ * @deprecated 14.0
112
+ *
113
+ * @return bool
114
+ */
115
+ protected function is_post_author() {
116
+ _deprecated_function( __METHOD__, 'WPSEO 14.0' );
117
+
118
+ return (
119
+ $this->context->indexable->object_type === 'post' &&
120
+ $this->helpers->schema->article->is_article_post_type( $this->context->indexable->object_sub_type )
121
+ );
122
+ }
123
+
124
+ /**
125
+ * Determines a User ID for the Person data.
126
+ *
127
+ * @codeCoverageIgnore
128
+ * @deprecated 14.0
129
+ *
130
+ * @return bool|int User ID or false upon return.
131
+ */
132
+ protected function determine_user_id() {
133
+ _deprecated_function( __METHOD__, 'WPSEO 14.0', 'Yoast\WP\SEO\Generators\Schema\Author::determine_user_id' );
134
+
135
+ return parent::determine_user_id();
136
+ }
137
+ }
deprecated/frontend/schema/class-schema-breadcrumb.php ADDED
@@ -0,0 +1,65 @@