Yoast SEO - Version 11.2

Version Description

Download this release

Release Info

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

Code changes from version 11.1.1 to 11.2

Files changed (89) hide show
  1. admin/capabilities/class-capability-manager-integration.php +3 -3
  2. admin/class-admin-asset-manager.php +2 -0
  3. admin/class-admin-init.php +2 -2
  4. admin/class-admin.php +1 -1
  5. admin/class-config.php +2 -2
  6. admin/class-help-center.php +6 -6
  7. admin/class-plugin-conflict.php +2 -2
  8. admin/class-product-upsell-notice.php +1 -6
  9. admin/class-schema-person-upgrade-notification.php +4 -4
  10. admin/class-yoast-form.php +4 -4
  11. admin/config-ui/class-configuration-page.php +7 -7
  12. admin/config-ui/components/class-component-suggestions.php +3 -3
  13. admin/formatter/class-metabox-formatter.php +1 -0
  14. admin/google_search_console/class-gsc-category-filters.php +6 -6
  15. admin/links/class-link-columns.php +1 -1
  16. admin/metabox/class-metabox.php +4 -0
  17. admin/notifiers/class-post-type-archive-notification-handler.php +1 -6
  18. admin/taxonomy/class-taxonomy-columns.php +1 -1
  19. admin/taxonomy/class-taxonomy.php +1 -0
  20. admin/views/js-templates-primary-term.php +9 -7
  21. admin/views/licenses.php +8 -5
  22. admin/views/tabs/metas/paper-content/general/knowledge-graph.php +1 -1
  23. admin/views/tabs/social/accounts.php +11 -2
  24. admin/views/tabs/social/pinterest.php +1 -1
  25. css/dist/{admin-global-1111-rtl.min.css → admin-global-1120-rtl.min.css} +0 -0
  26. css/dist/{admin-global-1111.min.css → admin-global-1120.min.css} +0 -0
  27. css/dist/{adminbar-1111-rtl.min.css → adminbar-1120-rtl.min.css} +0 -0
  28. css/dist/{adminbar-1111.min.css → adminbar-1120.min.css} +0 -0
  29. css/dist/{alerts-1111-rtl.min.css → alerts-1120-rtl.min.css} +0 -0
  30. css/dist/{alerts-1111.min.css → alerts-1120.min.css} +0 -0
  31. css/dist/{dashboard-1111-rtl.min.css → dashboard-1120-rtl.min.css} +0 -0
  32. css/dist/{dashboard-1111.min.css → dashboard-1120.min.css} +0 -0
  33. css/dist/{edit-page-1111-rtl.min.css → edit-page-1120-rtl.min.css} +0 -0
  34. css/dist/{edit-page-1111.min.css → edit-page-1120.min.css} +0 -0
  35. css/dist/{featured-image-1111-rtl.min.css → featured-image-1120-rtl.min.css} +0 -0
  36. css/dist/{featured-image-1111.min.css → featured-image-1120.min.css} +0 -0
  37. css/dist/{filter-explanation-1111-rtl.min.css → filter-explanation-1120-rtl.min.css} +0 -0
  38. css/dist/{filter-explanation-1111.min.css → filter-explanation-1120.min.css} +0 -0
  39. css/dist/{inside-editor-1111-rtl.min.css → inside-editor-1120-rtl.min.css} +0 -0
  40. css/dist/{inside-editor-1111.min.css → inside-editor-1120.min.css} +0 -0
  41. css/dist/{metabox-1111-rtl.min.css → metabox-1120-rtl.min.css} +0 -0
  42. css/dist/{metabox-1111.min.css → metabox-1120.min.css} +0 -0
  43. css/dist/{metabox-primary-category-1111-rtl.min.css → metabox-primary-category-1120-rtl.min.css} +0 -0
  44. css/dist/{metabox-primary-category-1111.min.css → metabox-primary-category-1120.min.css} +0 -0
  45. css/dist/{search-appearance-1111-rtl.min.css → search-appearance-1120-rtl.min.css} +0 -0
  46. css/dist/{search-appearance-1111.min.css → search-appearance-1120.min.css} +0 -0
  47. css/dist/{structured-data-blocks-1111-rtl.min.css → structured-data-blocks-1120-rtl.min.css} +0 -0
  48. css/dist/{structured-data-blocks-1111.min.css → structured-data-blocks-1120.min.css} +0 -0
  49. css/dist/{toggle-switch-1111-rtl.min.css → toggle-switch-1120-rtl.min.css} +0 -0
  50. css/dist/{toggle-switch-1111.min.css → toggle-switch-1120.min.css} +0 -0
  51. css/dist/{wpseo-dismissible-1111-rtl.min.css → wpseo-dismissible-1120-rtl.min.css} +0 -0
  52. css/dist/{wpseo-dismissible-1111.min.css → wpseo-dismissible-1120.min.css} +0 -0
  53. css/dist/yoast-components-1111-rtl.min.css +0 -1
  54. css/dist/yoast-components-1111.min.css +0 -1
  55. css/dist/yoast-components-1120-rtl.min.css +1 -0
  56. css/dist/yoast-components-1120.min.css +1 -0
  57. css/dist/{yoast-extensions-1111-rtl.min.css → yoast-extensions-1120-rtl.min.css} +0 -0
  58. css/dist/{yoast-extensions-1111.min.css → yoast-extensions-1120.min.css} +0 -0
  59. css/dist/{yst_plugin_tools-1111-rtl.min.css → yst_plugin_tools-1120-rtl.min.css} +0 -0
  60. css/dist/{yst_plugin_tools-1111.min.css → yst_plugin_tools-1120.min.css} +0 -0
  61. css/dist/{yst_seo_score-1111-rtl.min.css → yst_seo_score-1120-rtl.min.css} +0 -0
  62. css/dist/{yst_seo_score-1111.min.css → yst_seo_score-1120.min.css} +0 -0
  63. frontend/class-frontend.php +1 -0
  64. frontend/class-opengraph-image.php +5 -11
  65. frontend/class-opengraph.php +6 -42
  66. frontend/class-twitter.php +2 -8
  67. frontend/schema/class-schema-article.php +26 -7
  68. frontend/schema/class-schema-author.php +1 -2
  69. frontend/schema/class-schema-breadcrumb.php +7 -4
  70. frontend/schema/class-schema-image.php +0 -2
  71. frontend/schema/class-schema-person.php +29 -14
  72. frontend/schema/class-schema-webpage.php +50 -8
  73. frontend/schema/class-schema.php +10 -2
  74. frontend/schema/interface-wpseo-graph-piece.php +1 -0
  75. inc/class-addon-manager.php +0 -1
  76. inc/class-wpseo-image-utils.php +25 -0
  77. inc/class-wpseo-meta.php +25 -26
  78. inc/class-wpseo-utils.php +41 -8
  79. inc/options/class-wpseo-option-wpseo.php +1 -1
  80. inc/options/class-wpseo-option.php +1 -1
  81. inc/sitemaps/class-post-type-sitemap-provider.php +14 -10
  82. inc/sitemaps/class-sitemaps-renderer.php +27 -17
  83. inc/sitemaps/class-sitemaps-router.php +3 -3
  84. inc/sitemaps/class-sitemaps.php +44 -11
  85. inc/sitemaps/class-taxonomy-sitemap-provider.php +3 -1
  86. inc/structured-data-blocks/class-faq-block.php +13 -4
  87. inc/structured-data-blocks/class-how-to-block.php +13 -4
  88. inc/wpseo-functions.php +1 -1
  89. js/dist/analysis-1111.min.js +0 -21
admin/capabilities/class-capability-manager-integration.php CHANGED
@@ -60,7 +60,7 @@ class WPSEO_Capability_Manager_Integration implements WPSEO_WordPress_Integratio
60
  /**
61
  * Add capabilities to its own group in the Members plugin.
62
  *
63
- * @see members_register_cap_group()
64
  */
65
  public function action_members_register_cap_group() {
66
  if ( ! function_exists( 'members_register_cap_group' ) ) {
@@ -80,7 +80,7 @@ class WPSEO_Capability_Manager_Integration implements WPSEO_WordPress_Integratio
80
  /**
81
  * Adds Yoast SEO capability group in the User Role Editor plugin.
82
  *
83
- * @see URE_Capabilities_Groups_Manager::get_groups_tree()
84
  *
85
  * @param array $groups Current groups.
86
  *
@@ -101,7 +101,7 @@ class WPSEO_Capability_Manager_Integration implements WPSEO_WordPress_Integratio
101
  /**
102
  * Adds capabilities to the Yoast SEO group in the User Role Editor plugin.
103
  *
104
- * @see URE_Capabilities_Groups_Manager::get_cap_groups()
105
  *
106
  * @param array $groups Current capability groups.
107
  * @param string $cap_id Capability identifier.
60
  /**
61
  * Add capabilities to its own group in the Members plugin.
62
  *
63
+ * @see members_register_cap_group()
64
  */
65
  public function action_members_register_cap_group() {
66
  if ( ! function_exists( 'members_register_cap_group' ) ) {
80
  /**
81
  * Adds Yoast SEO capability group in the User Role Editor plugin.
82
  *
83
+ * @see URE_Capabilities_Groups_Manager::get_groups_tree()
84
  *
85
  * @param array $groups Current groups.
86
  *
101
  /**
102
  * Adds capabilities to the Yoast SEO group in the User Role Editor plugin.
103
  *
104
+ * @see URE_Capabilities_Groups_Manager::get_cap_groups()
105
  *
106
  * @param array $groups Current capability groups.
107
  * @param string $cap_id Capability identifier.
admin/class-admin-asset-manager.php CHANGED
@@ -452,6 +452,7 @@ class WPSEO_Admin_Asset_Manager {
452
  'deps' => array(
453
  'wp-util',
454
  'wp-api',
 
455
  'wp-element',
456
  'wp-i18n',
457
  'wp-data',
@@ -469,6 +470,7 @@ class WPSEO_Admin_Asset_Manager {
469
  'name' => 'term-scraper',
470
  'src' => 'wp-seo-term-scraper-' . $flat_version,
471
  'deps' => array(
 
472
  'wp-element',
473
  'wp-i18n',
474
  'wp-data',
452
  'deps' => array(
453
  'wp-util',
454
  'wp-api',
455
+ 'wp-sanitize',
456
  'wp-element',
457
  'wp-i18n',
458
  'wp-data',
470
  'name' => 'term-scraper',
471
  'src' => 'wp-seo-term-scraper-' . $flat_version,
472
  'deps' => array(
473
+ 'wp-sanitize',
474
  'wp-element',
475
  'wp-i18n',
476
  'wp-data',
admin/class-admin-init.php CHANGED
@@ -346,7 +346,7 @@ class WPSEO_Admin_Init {
346
  $type = ( $plugin['active'] ) ? Yoast_Notification::ERROR : Yoast_Notification::WARNING;
347
  $notification = $this->get_yoast_seo_compatibility_notification( $name, $plugin, $type );
348
 
349
- if ( $plugin['compatible'] === false ) {
350
  $notification_center->add_notification( $notification );
351
 
352
  continue;
@@ -602,7 +602,7 @@ class WPSEO_Admin_Init {
602
  public function show_hook_deprecation_warnings() {
603
  global $wp_filter;
604
 
605
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
606
  return;
607
  }
608
 
346
  $type = ( $plugin['active'] ) ? Yoast_Notification::ERROR : Yoast_Notification::WARNING;
347
  $notification = $this->get_yoast_seo_compatibility_notification( $name, $plugin, $type );
348
 
349
+ if ( $plugin['active'] && $plugin['compatible'] === false ) {
350
  $notification_center->add_notification( $notification );
351
 
352
  continue;
602
  public function show_hook_deprecation_warnings() {
603
  global $wp_filter;
604
 
605
+ if ( wp_doing_ajax() ) {
606
  return;
607
  }
608
 
admin/class-admin.php CHANGED
@@ -276,7 +276,7 @@ class WPSEO_Admin {
276
  $contactmethods['tumblr'] = __( 'Tumblr profile URL', 'wordpress-seo' );
277
  $contactmethods['twitter'] = __( 'Twitter username (without @)', 'wordpress-seo' );
278
  $contactmethods['youtube'] = __( 'YouTube profile URL', 'wordpress-seo' );
279
- $contactmethods['wikipedia'] = __( 'Wikipedia page about you', 'wordpress-seo' ) . '<br/><small>' . __( '(if one exists)', 'wordpress-seo' ) . '</small>';
280
 
281
  return $contactmethods;
282
  }
276
  $contactmethods['tumblr'] = __( 'Tumblr profile URL', 'wordpress-seo' );
277
  $contactmethods['twitter'] = __( 'Twitter username (without @)', 'wordpress-seo' );
278
  $contactmethods['youtube'] = __( 'YouTube profile URL', 'wordpress-seo' );
279
+ $contactmethods['wikipedia'] = __( 'Wikipedia page about you', 'wordpress-seo' ) . '<br/><small>' . __( '(if one exists)', 'wordpress-seo' ) . '</small>';
280
 
281
  return $contactmethods;
282
  }
admin/class-config.php CHANGED
@@ -158,8 +158,8 @@ class WPSEO_Admin_Pages {
158
  private function should_show_local_seo_upsell() {
159
  $addon_manager = new WPSEO_Addon_Manager();
160
 
161
- return ! WPSEO_Utils::is_yoast_seo_premium() &&
162
- ! $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::LOCAL_SLUG );
163
  }
164
 
165
  /**
158
  private function should_show_local_seo_upsell() {
159
  $addon_manager = new WPSEO_Addon_Manager();
160
 
161
+ return ! WPSEO_Utils::is_yoast_seo_premium()
162
+ && ! $addon_manager->has_valid_subscription( WPSEO_Addon_Manager::LOCAL_SLUG );
163
  }
164
 
165
  /**
admin/class-help-center.php CHANGED
@@ -200,8 +200,8 @@ class WPSEO_Help_Center {
200
  /* translators: %s: expands to 'Yoast SEO Premium'. */
201
  $popup_title = sprintf( __( 'Email support is a %s feature', 'wordpress-seo' ), 'Yoast SEO Premium' );
202
  $popup_content = '<p class="yoast-measure">' . __( 'Go Premium and our experts will be there for you to answer any questions you might have about the setup and use of the plugin.', 'wordpress-seo' ) . '</p>';
203
- /* translators: %1$s: expands to 'Yoast SEO Premium'. */
204
- $popup_content .= '<p>' . sprintf( __( 'Other benefits of %1$s for you:', 'wordpress-seo' ), 'Yoast SEO Premium' ) . '</p>';
205
  $popup_content .= '<ul class="wpseo-premium-advantages-list">';
206
  $popup_content .= '<li>' . sprintf(
207
  // We don't use strong text here, but we do use it in the "Add keyword" popup, this is just to have the same translatable strings.
@@ -210,11 +210,11 @@ class WPSEO_Help_Center {
210
  '',
211
  ''
212
  ) . '</li>';
213
- $popup_content .= '<li>' . __( 'Superfast internal links suggestions', 'wordpress-seo' ) . '</li>';
214
  $popup_content .= '<li>' . sprintf(
215
  // We don't use strong text here, but we do use it in the "Add keyword" popup, this is just to have the same translatable strings.
216
  /* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */
217
- __( '%1$sSocial media preview%2$s: Facebook &amp; Twitter', 'wordpress-seo' ),
218
  '',
219
  ''
220
  ) . '</li>';
@@ -260,8 +260,8 @@ class WPSEO_Help_Center {
260
  'searchResultDetail.searchResult' => __( 'Search result', 'wordpress-seo' ),
261
  'searchResult.noResultsText' => __( 'No results found.', 'wordpress-seo' ),
262
  'searchResult.foundResultsText' => sprintf(
263
- /* translators: %s expands to the number of results found . */
264
- __( 'Number of results found: %s', 'wordpress-seo' ),
265
  '{ resultsCount }'
266
  ),
267
  'searchResult.searchResultsHeading' => __( 'Search results', 'wordpress-seo' ),
200
  /* translators: %s: expands to 'Yoast SEO Premium'. */
201
  $popup_title = sprintf( __( 'Email support is a %s feature', 'wordpress-seo' ), 'Yoast SEO Premium' );
202
  $popup_content = '<p class="yoast-measure">' . __( 'Go Premium and our experts will be there for you to answer any questions you might have about the setup and use of the plugin.', 'wordpress-seo' ) . '</p>';
203
+ /* translators: %s: expands to 'Yoast SEO Premium'. */
204
+ $popup_content .= '<p>' . sprintf( __( 'Other benefits of %s for you:', 'wordpress-seo' ), 'Yoast SEO Premium' ) . '</p>';
205
  $popup_content .= '<ul class="wpseo-premium-advantages-list">';
206
  $popup_content .= '<li>' . sprintf(
207
  // We don't use strong text here, but we do use it in the "Add keyword" popup, this is just to have the same translatable strings.
210
  '',
211
  ''
212
  ) . '</li>';
213
+ $popup_content .= '<li>' . __( 'Superfast internal linking suggestions', 'wordpress-seo' ) . '</li>';
214
  $popup_content .= '<li>' . sprintf(
215
  // We don't use strong text here, but we do use it in the "Add keyword" popup, this is just to have the same translatable strings.
216
  /* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */
217
+ __( '%1$sSocial media preview%2$s: Facebook & Twitter', 'wordpress-seo' ),
218
  '',
219
  ''
220
  ) . '</li>';
260
  'searchResultDetail.searchResult' => __( 'Search result', 'wordpress-seo' ),
261
  'searchResult.noResultsText' => __( 'No results found.', 'wordpress-seo' ),
262
  'searchResult.foundResultsText' => sprintf(
263
+ /* translators: %d expands to the number of results found . */
264
+ __( 'Number of results found: %d', 'wordpress-seo' ),
265
  '{ resultsCount }'
266
  ),
267
  'searchResult.searchResultsHeading' => __( 'Search results', 'wordpress-seo' ),
admin/class-plugin-conflict.php CHANGED
@@ -139,11 +139,11 @@ class WPSEO_Plugin_Conflict extends Yoast_Plugin_Conflict {
139
  // Only check for open graph problems when they are enabled.
140
  if ( WPSEO_Options::get( 'opengraph' ) ) {
141
  /* translators: %1$s expands to Yoast SEO, %2$s: 'Facebook' plugin name of possibly conflicting plugin with regard to creating OpenGraph output. */
142
- $plugin_sections['open_graph'] = __( 'Both %1$s and %2$s create OpenGraph output, which might make Facebook, Twitter, LinkedIn and other social networks use the wrong texts and images when your pages are being shared.', 'wordpress-seo' )
143
  . '<br/><br/>'
144
  . '<a class="button" href="' . admin_url( 'admin.php?page=wpseo_social#top#facebook' ) . '">'
145
  /* translators: %1$s expands to Yoast SEO. */
146
- . sprintf( __( 'Configure %1$s\'s OpenGraph settings', 'wordpress-seo' ), 'Yoast SEO' )
147
  . '</a>';
148
  }
149
 
139
  // Only check for open graph problems when they are enabled.
140
  if ( WPSEO_Options::get( 'opengraph' ) ) {
141
  /* translators: %1$s expands to Yoast SEO, %2$s: 'Facebook' plugin name of possibly conflicting plugin with regard to creating OpenGraph output. */
142
+ $plugin_sections['open_graph'] = __( 'Both %1$s and %2$s create Open Graph output, which might make Facebook, Twitter, LinkedIn and other social networks use the wrong texts and images when your pages are being shared.', 'wordpress-seo' )
143
  . '<br/><br/>'
144
  . '<a class="button" href="' . admin_url( 'admin.php?page=wpseo_social#top#facebook' ) . '">'
145
  /* translators: %1$s expands to Yoast SEO. */
146
+ . sprintf( __( 'Configure %1$s\'s Open Graph settings', 'wordpress-seo' ), 'Yoast SEO' )
147
  . '</a>';
148
  }
149
 
admin/class-product-upsell-notice.php CHANGED
@@ -149,12 +149,7 @@ class WPSEO_Product_Upsell_Notice {
149
 
150
  $message .= $this->get_premium_upsell_section() . "\n\n";
151
 
152
- $message .= sprintf(
153
- /* translators: %1$s is the notification dismissal link start tag, %2$s is the link closing tag. */
154
- __( '%1$sPlease don\'t show me this notification anymore%2$s', 'wordpress-seo' ),
155
- '<a class="button" href="' . admin_url( '?page=' . WPSEO_Admin::PAGE_IDENTIFIER . '&yoast_dismiss=upsell' ) . '">',
156
- '</a>'
157
- );
158
 
159
  $notification = new Yoast_Notification(
160
  $message,
149
 
150
  $message .= $this->get_premium_upsell_section() . "\n\n";
151
 
152
+ $message .= '<a class="button" href="' . admin_url( '?page=' . WPSEO_Admin::PAGE_IDENTIFIER . '&yoast_dismiss=upsell' ) . '">' . __( 'Please don\'t show me this notification anymore', 'wordpress-seo' ) . '</a>';
 
 
 
 
 
153
 
154
  $notification = new Yoast_Notification(
155
  $message,
admin/class-schema-person-upgrade-notification.php CHANGED
@@ -55,11 +55,11 @@ class WPSEO_Schema_Person_Upgrade_Notification implements WPSEO_WordPress_Integr
55
  */
56
  protected function get_notification() {
57
  $message = sprintf(
58
- /* translators: %1$s is a link start tag to the Configuration Wizard, %2$s is the link closing tag. */
59
- __( 'You have previously set your site to represent a person. We’ve improved our functionality around Schema and the Knowledge Graph, so you should go in and %1$scomplete those settings%2$s.', 'wordpress-seo' ),
60
- '<a href="' . admin_url( 'admin.php?page=wpseo_titles' ) . '">',
61
  '</a>'
62
- );
63
 
64
  $notification = new Yoast_Notification(
65
  $message,
55
  */
56
  protected function get_notification() {
57
  $message = sprintf(
58
+ /* translators: %1$s is a link start tag to the Configuration Wizard, %2$s is the link closing tag. */
59
+ __( 'You have previously set your site to represent a person. We’ve improved our functionality around Schema and the Knowledge Graph, so you should go in and %1$scomplete those settings%2$s.', 'wordpress-seo' ),
60
+ '<a href="' . esc_url( admin_url( 'admin.php?page=wpseo_titles' ) ) . '">',
61
  '</a>'
62
+ );
63
 
64
  $notification = new Yoast_Notification(
65
  $message,
admin/class-yoast-form.php CHANGED
@@ -343,17 +343,17 @@ class Yoast_Form {
343
  public function textinput( $var, $label, $attr = array() ) {
344
  if ( ! is_array( $attr ) ) {
345
  $attr = array(
346
- 'class' => $attr,
347
  'disabled' => false,
348
  );
349
  }
350
 
351
- $defaults = array(
352
  'placeholder' => '',
353
  'class' => '',
354
  );
355
- $attr = wp_parse_args( $attr, $defaults );
356
- $val = isset( $this->options[ $var ] ) ? $this->options[ $var ] : '';
357
  $attributes = isset( $attr['autocomplete'] ) ? ' autocomplete="' . esc_attr( $attr['autocomplete'] ) . '"' : '';
358
  if ( isset( $attr['disabled'] ) && $attr['disabled'] ) {
359
  $attributes .= ' disabled';
343
  public function textinput( $var, $label, $attr = array() ) {
344
  if ( ! is_array( $attr ) ) {
345
  $attr = array(
346
+ 'class' => $attr,
347
  'disabled' => false,
348
  );
349
  }
350
 
351
+ $defaults = array(
352
  'placeholder' => '',
353
  'class' => '',
354
  );
355
+ $attr = wp_parse_args( $attr, $defaults );
356
+ $val = isset( $this->options[ $var ] ) ? $this->options[ $var ] : '';
357
  $attributes = isset( $attr['autocomplete'] ) ? ' autocomplete="' . esc_attr( $attr['autocomplete'] ) . '"' : '';
358
  if ( isset( $attr['disabled'] ) && $attr['disabled'] ) {
359
  $attributes .= ' disabled';
admin/config-ui/class-configuration-page.php CHANGED
@@ -101,6 +101,11 @@ class WPSEO_Configuration_Page {
101
  public function show_wizard() {
102
  $this->enqueue_assets();
103
  $dashboard_url = admin_url( '/admin.php?page=wpseo_dashboard' );
 
 
 
 
 
104
  ?>
105
  <!DOCTYPE html>
106
  <!--[if IE 9]>
@@ -112,12 +117,7 @@ class WPSEO_Configuration_Page {
112
  <head>
113
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
114
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
115
- <title><?php
116
- printf(
117
- /* translators: %s expands to Yoast SEO. */
118
- esc_html__( '%s &rsaquo; Configuration Wizard', 'wordpress-seo' ),
119
- 'Yoast SEO' );
120
- ?></title>
121
  <?php
122
  wp_print_head_scripts();
123
  wp_print_styles( 'yoast-seo-yoast-components' );
@@ -138,7 +138,7 @@ class WPSEO_Configuration_Page {
138
  <a class="button yoast-wizard-return-link" href="<?php echo esc_url( $dashboard_url ); ?>">
139
  <span aria-hidden="true" class="dashicons dashicons-no"></span>
140
  <?php
141
- esc_html_e( 'Close wizard', 'wordpress-seo' );
142
  ?>
143
  </a>
144
  </div>
101
  public function show_wizard() {
102
  $this->enqueue_assets();
103
  $dashboard_url = admin_url( '/admin.php?page=wpseo_dashboard' );
104
+ $wizard_title = sprintf(
105
+ /* translators: %s expands to Yoast SEO. */
106
+ __( '%s &rsaquo; Configuration Wizard', 'wordpress-seo' ),
107
+ 'Yoast SEO'
108
+ );
109
  ?>
110
  <!DOCTYPE html>
111
  <!--[if IE 9]>
117
  <head>
118
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
119
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
120
+ <title><?php echo esc_html( $wizard_title ); ?></title>
 
 
 
 
 
121
  <?php
122
  wp_print_head_scripts();
123
  wp_print_styles( 'yoast-seo-yoast-components' );
138
  <a class="button yoast-wizard-return-link" href="<?php echo esc_url( $dashboard_url ); ?>">
139
  <span aria-hidden="true" class="dashicons dashicons-no"></span>
140
  <?php
141
+ esc_html_e( 'Close the Wizard', 'wordpress-seo' );
142
  ?>
143
  </a>
144
  </div>
admin/config-ui/components/class-component-suggestions.php CHANGED
@@ -37,7 +37,7 @@ class WPSEO_Config_Component_Suggestions implements WPSEO_Config_Component {
37
  array(
38
  'label' => __( 'Upgrade to Premium', 'wordpress-seo' ),
39
  'type' => 'primary',
40
- 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/wizard-suggestion-premium' ),
41
  ),
42
  array(
43
  'url' => WPSEO_Shortlinker::get( 'https://yoa.st/video-yoast-seo-premium' ),
@@ -60,7 +60,7 @@ class WPSEO_Config_Component_Suggestions implements WPSEO_Config_Component {
60
  array(
61
  'label' => 'Keyword research training',
62
  'type' => 'link',
63
- 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/3lg' ),
64
  ),
65
  array(
66
  'url' => WPSEO_Shortlinker::get( 'https://yoa.st/3lf' ),
@@ -80,7 +80,7 @@ class WPSEO_Config_Component_Suggestions implements WPSEO_Config_Component {
80
  array(
81
  'label' => 'Yoast SEO plugin training',
82
  'type' => 'link',
83
- 'url' => WPSEO_Shortlinker::get( 'https://yoa.st/wizard-suggestion-plugin-course' ),
84
  ),
85
  array(
86
  'url' => WPSEO_Shortlinker::get( 'https://yoa.st/video-plugin-course' ),
37
  array(
38
  'label' => __( 'Upgrade to Premium', 'wordpress-seo' ),
39
  'type' => 'primary',
40
+ 'href' => WPSEO_Shortlinker::get( 'https://yoa.st/wizard-suggestion-premium' ),
41
  ),
42
  array(
43
  'url' => WPSEO_Shortlinker::get( 'https://yoa.st/video-yoast-seo-premium' ),
60
  array(
61
  'label' => 'Keyword research training',
62
  'type' => 'link',
63
+ 'href' => WPSEO_Shortlinker::get( 'https://yoa.st/3lg' ),
64
  ),
65
  array(
66
  'url' => WPSEO_Shortlinker::get( 'https://yoa.st/3lf' ),
80
  array(
81
  'label' => 'Yoast SEO plugin training',
82
  'type' => 'link',
83
+ 'href' => WPSEO_Shortlinker::get( 'https://yoa.st/wizard-suggestion-plugin-course' ),
84
  ),
85
  array(
86
  'url' => WPSEO_Shortlinker::get( 'https://yoa.st/video-plugin-course' ),
admin/formatter/class-metabox-formatter.php CHANGED
@@ -67,6 +67,7 @@ class WPSEO_Metabox_Formatter {
67
  'cornerstoneActive' => WPSEO_Options::get( 'enable_cornerstone_content', false ) ? 1 : 0,
68
  'intl' => $this->get_content_analysis_component_translations(),
69
  'isRtl' => is_rtl(),
 
70
  'addKeywordUpsell' => $this->get_add_keyword_upsell_translations(),
71
  'wordFormRecognitionActive' => ( WPSEO_Language_Utils::get_language( get_locale() ) === 'en' ),
72
 
67
  'cornerstoneActive' => WPSEO_Options::get( 'enable_cornerstone_content', false ) ? 1 : 0,
68
  'intl' => $this->get_content_analysis_component_translations(),
69
  'isRtl' => is_rtl(),
70
+ 'isPremium' => WPSEO_Utils::is_yoast_seo_premium(),
71
  'addKeywordUpsell' => $this->get_add_keyword_upsell_translations(),
72
  'wordFormRecognitionActive' => ( WPSEO_Language_Utils::get_language( get_locale() ) === 'en' ),
73
 
admin/google_search_console/class-gsc-category-filters.php CHANGED
@@ -113,15 +113,15 @@ class WPSEO_GSC_Category_Filters {
113
  * Setting the values for the filter.
114
  */
115
  private function set_filter_values() {
116
- $this->set_filter_value( 'access_denied', __( 'Access denied', 'wordpress-seo' ), __( 'Server requires authentication or is blocking Googlebot from accessing the site.', 'wordpress-seo' ), __( 'Show information about errors in category \'Access Denied\'', 'wordpress-seo' ) );
117
  $this->set_filter_value( 'faulty_redirects', __( 'Faulty redirects', 'wordpress-seo' ) );
118
  $this->set_filter_value( 'not_followed', __( 'Not followed', 'wordpress-seo' ) );
119
- $this->set_filter_value( 'not_found', __( 'Not found', 'wordpress-seo' ), __( 'URL points to a non-existent page.', 'wordpress-seo' ), __( 'Show information about errors in category \'Not Found\'', 'wordpress-seo' ) );
120
- $this->set_filter_value( 'other', __( 'Other', 'wordpress-seo' ), __( 'Google was unable to crawl this URL due to an undetermined issue.', 'wordpress-seo' ), __( 'Show information about errors in category \'Other\'', 'wordpress-seo' ) );
121
  /* Translators: %1$s: expands to '<code>robots.txt</code>'. */
122
- $this->set_filter_value( 'roboted', __( 'Blocked', 'wordpress-seo' ), sprintf( __( 'Googlebot could access your site, but certain URLs are blocked for Googlebot in your %1$s file. This block could either be for all Googlebots or even specifically for Googlebot-mobile.', 'wordpress-seo' ), '<code>robots.txt</code>' ), __( 'Show information about errors in category \'Blocked\'', 'wordpress-seo' ) );
123
- $this->set_filter_value( 'server_error', __( 'Server Error', 'wordpress-seo' ), __( 'Request timed out or site is blocking Google.', 'wordpress-seo' ), __( 'Show information about errors in category \'Server\'', 'wordpress-seo' ) );
124
- $this->set_filter_value( 'soft_404', __( 'Soft 404', 'wordpress-seo' ), __( "The target URL doesn't exist, but your server is not returning a 404 (file not found) error.", 'wordpress-seo' ), __( 'Show information about errors in category \'Soft 404\'', 'wordpress-seo' ) );
125
  }
126
 
127
  /**
113
  * Setting the values for the filter.
114
  */
115
  private function set_filter_values() {
116
+ $this->set_filter_value( 'access_denied', __( 'Access denied', 'wordpress-seo' ), __( 'Server requires authentication or is blocking Googlebot from accessing the site.', 'wordpress-seo' ), sprintf( __( 'Show information about errors in category %s', 'wordpress-seo' ), __( 'Access denied', 'wordpress-seo' ) ) );
117
  $this->set_filter_value( 'faulty_redirects', __( 'Faulty redirects', 'wordpress-seo' ) );
118
  $this->set_filter_value( 'not_followed', __( 'Not followed', 'wordpress-seo' ) );
119
+ $this->set_filter_value( 'not_found', __( 'Not found', 'wordpress-seo' ), __( 'URL points to a non-existent page.', 'wordpress-seo' ), sprintf( __( 'Show information about errors in category %s', 'wordpress-seo' ), __( 'Not found', 'wordpress-seo' ) ) );
120
+ $this->set_filter_value( 'other', __( 'Other', 'wordpress-seo' ), __( 'Google was unable to crawl this URL due to an undetermined issue.', 'wordpress-seo' ), sprintf( __( 'Show information about errors in category %s', 'wordpress-seo' ), __( 'Other', 'wordpress-seo' ) ) );
121
  /* Translators: %1$s: expands to '<code>robots.txt</code>'. */
122
+ $this->set_filter_value( 'roboted', __( 'Blocked', 'wordpress-seo' ), sprintf( __( 'Googlebot could access your site, but certain URLs are blocked for Googlebot in your %1$s file. This block could either be for all Googlebots or even specifically for Googlebot-mobile.', 'wordpress-seo' ), '<code>robots.txt</code>' ), sprintf( __( 'Show information about errors in category %s', 'wordpress-seo' ), __( 'Blocked', 'wordpress-seo' ) ) );
123
+ $this->set_filter_value( 'server_error', __( 'Server Error', 'wordpress-seo' ), __( 'Request timed out or site is blocking Google.', 'wordpress-seo' ), sprintf( __( 'Show information about errors in category %s', 'wordpress-seo' ), __( 'Server', 'wordpress-seo' ) ) );
124
+ $this->set_filter_value( 'soft_404', __( 'Soft 404', 'wordpress-seo' ), __( "The target URL doesn't exist, but your server is not returning a 404 (file not found) error.", 'wordpress-seo' ), sprintf( __( 'Show information about errors in category %s', 'wordpress-seo' ), __( 'Soft 404', 'wordpress-seo' ) ) );
125
  }
126
 
127
  /**
admin/links/class-link-columns.php CHANGED
@@ -57,7 +57,7 @@ class WPSEO_Link_Columns {
57
  */
58
  public function register_hooks() {
59
  global $pagenow;
60
- $is_ajax_request = defined( 'DOING_AJAX' ) && DOING_AJAX;
61
 
62
  if ( ! WPSEO_Metabox::is_post_overview( $pagenow ) && ! $is_ajax_request ) {
63
  return;
57
  */
58
  public function register_hooks() {
59
  global $pagenow;
60
+ $is_ajax_request = wp_doing_ajax();
61
 
62
  if ( ! WPSEO_Metabox::is_post_overview( $pagenow ) && ! $is_ajax_request ) {
63
  return;
admin/metabox/class-metabox.php CHANGED
@@ -778,6 +778,8 @@ class WPSEO_Metabox extends WPSEO_Meta {
778
  'url' => $analysis_worker_location->get_url( $analysis_worker_location->get_asset(), WPSEO_Admin_Asset::TYPE_JS ),
779
  'keywords_assessment_url' => $used_keywords_assessment_location->get_url( $used_keywords_assessment_location->get_asset(), WPSEO_Admin_Asset::TYPE_JS ),
780
  'log_level' => WPSEO_Utils::get_analysis_worker_log_level(),
 
 
781
  );
782
  wp_localize_script(
783
  WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper',
@@ -797,6 +799,8 @@ class WPSEO_Metabox extends WPSEO_Meta {
797
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() );
798
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Language_Utils::get_language( WPSEO_Language_Utils::get_user_locale() ) );
799
 
 
 
800
  if ( post_type_supports( get_post_type(), 'thumbnail' ) ) {
801
  $asset_manager->enqueue_style( 'featured-image' );
802
 
778
  'url' => $analysis_worker_location->get_url( $analysis_worker_location->get_asset(), WPSEO_Admin_Asset::TYPE_JS ),
779
  'keywords_assessment_url' => $used_keywords_assessment_location->get_url( $used_keywords_assessment_location->get_asset(), WPSEO_Admin_Asset::TYPE_JS ),
780
  'log_level' => WPSEO_Utils::get_analysis_worker_log_level(),
781
+ // We need to make the feature flags separately available inside of the analysis web worker.
782
+ 'enabled_features' => WPSEO_Utils::retrieve_enabled_features(),
783
  );
784
  wp_localize_script(
785
  WPSEO_Admin_Asset_Manager::PREFIX . 'post-scraper',
799
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() );
800
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Language_Utils::get_language( WPSEO_Language_Utils::get_user_locale() ) );
801
 
802
+ wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoFeaturesL10n', WPSEO_Utils::retrieve_enabled_features() );
803
+
804
  if ( post_type_supports( get_post_type(), 'thumbnail' ) ) {
805
  $asset_manager->enqueue_style( 'featured-image' );
806
 
admin/notifiers/class-post-type-archive-notification-handler.php CHANGED
@@ -73,12 +73,7 @@ class WPSEO_Post_Type_Archive_Notification_Handler extends WPSEO_Dismissible_Not
73
  implode( ', ', $post_types )
74
  );
75
  $message .= PHP_EOL . PHP_EOL;
76
- $message .= sprintf(
77
- /* translators: %1$s is the notification dismissal link start tag, %2$s is the link closing tag. */
78
- __( '%1$sRemove this message%2$s', 'wordpress-seo' ),
79
- '<a class="button" href="' . admin_url( '?page=' . WPSEO_Admin::PAGE_IDENTIFIER . '&yoast_dismiss=' . $this->notification_identifier ) . '">',
80
- '</a>'
81
- );
82
 
83
  $notification_options = array(
84
  'type' => Yoast_Notification::WARNING,
73
  implode( ', ', $post_types )
74
  );
75
  $message .= PHP_EOL . PHP_EOL;
76
+ $message .= '<a class="button" href="' . admin_url( '?page=' . WPSEO_Admin::PAGE_IDENTIFIER . '&yoast_dismiss=' . $this->notification_identifier ) . '">' . __( 'Remove this message', 'wordpress-seo' ) . '</a>';
 
 
 
 
 
77
 
78
  $notification_options = array(
79
  'type' => Yoast_Notification::WARNING,
admin/taxonomy/class-taxonomy-columns.php CHANGED
@@ -109,7 +109,7 @@ class WPSEO_Taxonomy_Columns {
109
  * @return string|null
110
  */
111
  private function get_taxonomy() {
112
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX === true ) {
113
  return FILTER_INPUT( INPUT_POST, 'taxonomy' );
114
  }
115
 
109
  * @return string|null
110
  */
111
  private function get_taxonomy() {
112
+ if ( wp_doing_ajax() ) {
113
  return FILTER_INPUT( INPUT_POST, 'taxonomy' );
114
  }
115
 
admin/taxonomy/class-taxonomy.php CHANGED
@@ -137,6 +137,7 @@ class WPSEO_Taxonomy {
137
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'replacevar-plugin', 'wpseoReplaceVarsL10n', $this->localize_replace_vars_script() );
138
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Language_Utils::get_language( WPSEO_Language_Utils::get_user_locale() ) );
139
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() );
 
140
 
141
  $asset_manager->enqueue_script( 'admin-media' );
142
 
137
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'replacevar-plugin', 'wpseoReplaceVarsL10n', $this->localize_replace_vars_script() );
138
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoSelect2Locale', WPSEO_Language_Utils::get_language( WPSEO_Language_Utils::get_user_locale() ) );
139
  wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoAdminL10n', WPSEO_Utils::get_admin_l10n() );
140
+ wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'metabox', 'wpseoFeaturesL10n', WPSEO_Utils::retrieve_enabled_features() );
141
 
142
  $asset_manager->enqueue_script( 'admin-media' );
143
 
admin/views/js-templates-primary-term.php CHANGED
@@ -33,11 +33,13 @@ if ( ! defined( 'WPSEO_VERSION' ) ) {
33
  </script>
34
 
35
  <script type="text/html" id="tmpl-primary-term-screen-reader">
36
- <span class="screen-reader-text wpseo-primary-category-label"><?php
37
- printf(
38
- /* translators: %s is the taxonomy title. This will be shown to screenreaders */
39
- '(' . esc_html__( 'Primary %s', 'wordpress-seo' ) . ')',
40
- '{{data.taxonomy.title}}'
41
- );
42
- ?></span>
 
 
43
  </script>
33
  </script>
34
 
35
  <script type="text/html" id="tmpl-primary-term-screen-reader">
36
+ <?php
37
+ /* translators: %s is the taxonomy title. This will be shown to screenreaders */
38
+ $yoast_free_js_taxonomy_title = __( 'Primary %s', 'wordpress-seo' );
39
+ $yoast_free_js_taxonomy_title = sprintf(
40
+ '(' . $yoast_free_js_taxonomy_title . ')',
41
+ '{{data.taxonomy.title}}'
42
+ );
43
+ ?>
44
+ <span class="screen-reader-text wpseo-primary-category-label"><?php echo esc_html( $yoast_free_js_taxonomy_title ); ?></span>
45
  </script>
admin/views/licenses.php CHANGED
@@ -155,7 +155,8 @@ $new_tab_message = '<span class="screen-reader-text">' . esc_html__( '(O
155
  <?php if ( $has_valid_premium_subscription ) : ?>
156
  <div class="yoast-button yoast-button--noarrow yoast-button--extension yoast-button--extension-activated"><?php esc_html_e( 'Activated', 'wordpress-seo' ); ?></div>
157
  <a target="_blank" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/13k' ); ?>"
158
- class="yoast-link--license"><?php
 
159
  /* translators: %s expands to the extension title */
160
  printf( esc_html( 'Manage your %s subscription on MyYoast', 'wordpress-seo' ), $premium_extension->get_title() );
161
  echo $new_tab_message;
@@ -178,8 +179,8 @@ $new_tab_message = '<span class="screen-reader-text">' . esc_html__( '(O
178
  <a target="_blank" href="<?php echo esc_url( $premium_extension->get_buy_url() ); ?>"
179
  class="yoast-button-upsell">
180
  <?php
181
- /* translators: $1$s expands to Yoast SEO Premium */
182
- printf( esc_html__( 'Buy %1$s', 'wordpress-seo' ), $premium_extension->get_title() );
183
  echo $new_tab_message;
184
  echo '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>';
185
  ?>
@@ -209,14 +210,16 @@ $new_tab_message = '<span class="screen-reader-text">' . esc_html__( '(O
209
  <hr class="yoast-hr" aria-hidden="true"/>
210
 
211
  <section class="yoast-promo-extensions">
212
- <h2><?php
 
213
  /* translators: %1$s expands to Yoast SEO */
214
  $yoast_seo_extensions = sprintf( __( '%1$s extensions', 'wordpress-seo' ), 'Yoast SEO' );
215
  $yoast_seo_extensions = '<span class="yoast-heading-highlight">' . $yoast_seo_extensions . '</span>';
216
 
217
  /* translators: %1$s expands to Yoast SEO extensions */
218
  printf( esc_html__( '%1$s to optimize your site even further', 'wordpress-seo' ), $yoast_seo_extensions );
219
- ?></h2>
 
220
 
221
  <?php foreach ( $extensions as $slug => $extension ) : ?>
222
  <section class="yoast-promoblock secondary yoast-promo-extension">
155
  <?php if ( $has_valid_premium_subscription ) : ?>
156
  <div class="yoast-button yoast-button--noarrow yoast-button--extension yoast-button--extension-activated"><?php esc_html_e( 'Activated', 'wordpress-seo' ); ?></div>
157
  <a target="_blank" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/13k' ); ?>"
158
+ class="yoast-link--license">
159
+ <?php
160
  /* translators: %s expands to the extension title */
161
  printf( esc_html( 'Manage your %s subscription on MyYoast', 'wordpress-seo' ), $premium_extension->get_title() );
162
  echo $new_tab_message;
179
  <a target="_blank" href="<?php echo esc_url( $premium_extension->get_buy_url() ); ?>"
180
  class="yoast-button-upsell">
181
  <?php
182
+ /* translators: $s expands to Yoast SEO Premium */
183
+ printf( esc_html__( 'Buy %s', 'wordpress-seo' ), $premium_extension->get_title() );
184
  echo $new_tab_message;
185
  echo '<span aria-hidden="true" class="yoast-button-upsell__caret"></span>';
186
  ?>
210
  <hr class="yoast-hr" aria-hidden="true"/>
211
 
212
  <section class="yoast-promo-extensions">
213
+ <h2>
214
+ <?php
215
  /* translators: %1$s expands to Yoast SEO */
216
  $yoast_seo_extensions = sprintf( __( '%1$s extensions', 'wordpress-seo' ), 'Yoast SEO' );
217
  $yoast_seo_extensions = '<span class="yoast-heading-highlight">' . $yoast_seo_extensions . '</span>';
218
 
219
  /* translators: %1$s expands to Yoast SEO extensions */
220
  printf( esc_html__( '%1$s to optimize your site even further', 'wordpress-seo' ), $yoast_seo_extensions );
221
+ ?>
222
+ </h2>
223
 
224
  <?php foreach ( $extensions as $slug => $extension ) : ?>
225
  <section class="yoast-promoblock secondary yoast-promo-extension">
admin/views/tabs/metas/paper-content/general/knowledge-graph.php CHANGED
@@ -11,7 +11,7 @@ $knowledge_graph_help = new WPSEO_Admin_Help_Panel(
11
  'search-appearance-knowledge-graph',
12
  __( 'Learn more about the knowledge graph setting', 'wordpress-seo' ),
13
  sprintf(
14
- /* translators: %1$s opens the link to the Yoast.com article about Google's Knowledge Graph, %2$s closes the link, */
15
  __( 'This data is shown as metadata in your site. It is intended to appear in %1$sGoogle\'s Knowledge Graph%2$s. You can be either an organization, or a person.', 'wordpress-seo' ),
16
  '<a href="' . esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/1-p' ) ) . '" target="_blank" rel="noopener noreferrer">',
17
  '</a>'
11
  'search-appearance-knowledge-graph',
12
  __( 'Learn more about the knowledge graph setting', 'wordpress-seo' ),
13
  sprintf(
14
+ /* translators: %1$s opens the link to the Yoast.com article about Google's Knowledge Graph, %2$s closes the link, */
15
  __( 'This data is shown as metadata in your site. It is intended to appear in %1$sGoogle\'s Knowledge Graph%2$s. You can be either an organization, or a person.', 'wordpress-seo' ),
16
  '<a href="' . esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/1-p' ) ) . '" target="_blank" rel="noopener noreferrer">',
17
  '</a>'
admin/views/tabs/social/accounts.php CHANGED
@@ -69,9 +69,18 @@ if ( $company_or_person === 'person' ) {
69
  echo '<p>';
70
  $user_id = WPSEO_Options::get( 'company_or_person_user_id', '' );
71
  $person = get_userdata( $user_id );
72
- printf( esc_html__( 'To change the social accounts used for your site, update the details for %1$s.', 'wordpress-seo' ), '<a href="' . admin_url( 'user-edit.php?user_id=' . $user_id ) . '">' . $person->display_name . '</a>' );
 
 
 
 
73
  echo ' ';
74
- printf( esc_html__( 'To make your site represent a Company or Organization go to %1$sSearch Appearance%2$s and set Organization or Person to "Organization".', 'wordpress-seo' ), '<a href="' . admin_url( 'admin.php?page=wpseo_titles' ) . '">', '</a>' );
 
 
 
 
 
75
  echo '</p></div>';
76
 
77
  // Organization social fields should still be rendered, because other wise the values are lost on save.
69
  echo '<p>';
70
  $user_id = WPSEO_Options::get( 'company_or_person_user_id', '' );
71
  $person = get_userdata( $user_id );
72
+ printf(
73
+ /* translators: 1: link to edit user page. */
74
+ esc_html__( 'To change the social accounts used for your site, update the details for %1$s.', 'wordpress-seo' ),
75
+ '<a href="' . esc_url( admin_url( 'user-edit.php?user_id=' . $user_id ) ) . '">' . esc_html( $person->display_name ) . '</a>'
76
+ );
77
  echo ' ';
78
+ printf(
79
+ /* translators: 1: link tag to the relevant WPSEO admin page; 2: link close tag. */
80
+ esc_html__( 'To make your site represent a Company or Organization go to %1$sSearch Appearance%2$s and set Organization or Person to "Organization".', 'wordpress-seo' ),
81
+ '<a href="' . esc_url( admin_url( 'admin.php?page=wpseo_titles' ) ) . '">',
82
+ '</a>'
83
+ );
84
  echo '</p></div>';
85
 
86
  // Organization social fields should still be rendered, because other wise the values are lost on save.
admin/views/tabs/social/pinterest.php CHANGED
@@ -28,7 +28,7 @@ echo '<p>';
28
  printf(
29
  /* translators: %1$s / %2$s expands to a link to pinterest.com's help page. */
30
  esc_html__( 'To %1$sconfirm your site with Pinterest%2$s, add the meta tag here:', 'wordpress-seo' ),
31
- '<a target="_blank" href="https://pinterest.com/settings/#claimWebsite">',
32
  '</a>'
33
  );
34
  echo '</p>';
28
  printf(
29
  /* translators: %1$s / %2$s expands to a link to pinterest.com's help page. */
30
  esc_html__( 'To %1$sconfirm your site with Pinterest%2$s, add the meta tag here:', 'wordpress-seo' ),
31
+ '<a target="_blank" href="https://www.pinterest.com/settings/claim">',
32
  '</a>'
33
  );
34
  echo '</p>';
css/dist/{admin-global-1111-rtl.min.css → admin-global-1120-rtl.min.css} RENAMED
File without changes
css/dist/{admin-global-1111.min.css → admin-global-1120.min.css} RENAMED
File without changes
css/dist/{adminbar-1111-rtl.min.css → adminbar-1120-rtl.min.css} RENAMED
File without changes
css/dist/{adminbar-1111.min.css → adminbar-1120.min.css} RENAMED
File without changes
css/dist/{alerts-1111-rtl.min.css → alerts-1120-rtl.min.css} RENAMED
File without changes
css/dist/{alerts-1111.min.css → alerts-1120.min.css} RENAMED
File without changes
css/dist/{dashboard-1111-rtl.min.css → dashboard-1120-rtl.min.css} RENAMED
File without changes
css/dist/{dashboard-1111.min.css → dashboard-1120.min.css} RENAMED
File without changes
css/dist/{edit-page-1111-rtl.min.css → edit-page-1120-rtl.min.css} RENAMED
File without changes
css/dist/{edit-page-1111.min.css → edit-page-1120.min.css} RENAMED
File without changes
css/dist/{featured-image-1111-rtl.min.css → featured-image-1120-rtl.min.css} RENAMED
File without changes
css/dist/{featured-image-1111.min.css → featured-image-1120.min.css} RENAMED
File without changes
css/dist/{filter-explanation-1111-rtl.min.css → filter-explanation-1120-rtl.min.css} RENAMED
File without changes
css/dist/{filter-explanation-1111.min.css → filter-explanation-1120.min.css} RENAMED
File without changes
css/dist/{inside-editor-1111-rtl.min.css → inside-editor-1120-rtl.min.css} RENAMED
File without changes
css/dist/{inside-editor-1111.min.css → inside-editor-1120.min.css} RENAMED
File without changes
css/dist/{metabox-1111-rtl.min.css → metabox-1120-rtl.min.css} RENAMED
File without changes
css/dist/{metabox-1111.min.css → metabox-1120.min.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1111-rtl.min.css → metabox-primary-category-1120-rtl.min.css} RENAMED
File without changes
css/dist/{metabox-primary-category-1111.min.css → metabox-primary-category-1120.min.css} RENAMED
File without changes
css/dist/{search-appearance-1111-rtl.min.css → search-appearance-1120-rtl.min.css} RENAMED
File without changes
css/dist/{search-appearance-1111.min.css → search-appearance-1120.min.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1111-rtl.min.css → structured-data-blocks-1120-rtl.min.css} RENAMED
File without changes
css/dist/{structured-data-blocks-1111.min.css → structured-data-blocks-1120.min.css} RENAMED
File without changes
css/dist/{toggle-switch-1111-rtl.min.css → toggle-switch-1120-rtl.min.css} RENAMED
File without changes
css/dist/{toggle-switch-1111.min.css → toggle-switch-1120.min.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1111-rtl.min.css → wpseo-dismissible-1120-rtl.min.css} RENAMED
File without changes
css/dist/{wpseo-dismissible-1111.min.css → wpseo-dismissible-1120.min.css} RENAMED
File without changes
css/dist/yoast-components-1111-rtl.min.css DELETED
@@ -1 +0,0 @@
1
- .yoast-wizard--step--container:focus,a{outline:0}.screen-reader-text{position:absolute!important;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);width:1px;height:1px;border:0;padding:0;overflow:hidden;word-wrap:normal!important}body{background:#f1f1f1;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.375;margin:0;padding:0}a{color:#0073aa;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-wizard-body{box-sizing:border-box;width:80%;margin:1rem auto 4rem}@media screen and (max-width:768px){.yoast-wizard-body{width:auto;margin:0}}.yoast-wizard__logo{margin:0 auto;display:block}.yoast-wizard{text-align:right;min-height:20px;background:#fff;padding:2em;box-sizing:border-box;width:100%}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}}.yoast-wizard--header{text-align:center}.yoast-wizard--header--page-title{color:#a4286a;margin:0 0 -16px;font-size:1.25em;letter-spacing:.03em;line-height:2.5;font-weight:400;padding:0 8px}@media screen and (max-width:768px){.yoast-wizard--header--page-title{font-size:1.5em;line-height:1.25}}.yoast-wizard--navigation{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.yoast-wizard--button{margin-top:1em;background:0 0;color:#0073aa;border:none;padding:0;font:inherit;border-bottom:1px solid #0073aa;cursor:pointer}.yoast-wizard--step__inactive div{pointer-events:none}@media screen and (max-width:768px){.yoast-wizard--step__active{width:38px;overflow:hidden}.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 h1{color:#a4286a;margin:0;font-size:2.25em;letter-spacing:.03em;line-height:3.68rem;font-weight:100}@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--emphasis,.yoast-wizard-field-description{font-weight:700}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{z-index:10;opacity:.2;background-color:#000;position:absolute;top:0;right:0;height:100%;color:#fff;text-align:center;width:100%}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{border:1px solid #ccc;text-align:right;min-height:20px;position:relative;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px}.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{border:0;margin:1em 0}.yoast-wizard-text-input{font-size:14px;padding-bottom:.5em}.yoast-wizard-text-input-label{cursor:pointer;display:block;margin:.5em 0 0;font-weight:700;font-size:14px}.yoast-wizard-text-input [type=text]{width:100%;max-width:450px;box-sizing:border-box}.yoast-video-container-max-width,.yoast-wizard-content-container{max-width:560px}.yoast-wizard input{line-height:140%;font-size:14px;margin:.5em 0;padding:5px}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em 0 .3em .7em;vertical-align:middle}.yoast-wizard-input__explanation{color:#555;margin-top:0;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 .5em 5px!important;padding:9px 6px;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:3px solid #a4286a;background-color:#fff;padding:7px 4px}.yoast-wizard-input-radio-separator input:focus+label{outline:#5b9dd9 solid 2px}.yoast-video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.yoast-video-container iframe{position:absolute;top:0;right:0;width:100%;height:100%}.yoast-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}#wizard{overflow:hidden}.yoast-wizard{padding-top:2em}.yoast-wizard input[type=text],.yoast-wizard input[type=email]{min-width:250px}.yoast-wizard #gsc_authorization_code,.yoast-wizard input[type=text]+div,.yoast-wizard input[type=email]+div{margin-left:1em}.yoast-wizard-body{max-width:80em}.yoast-wizard-return-link-container{text-align:center}.wp-core-ui .yoast-wizard-return-link.button{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;height:36px;border-color:transparent;margin:0 0 1em;padding:0 10px 0 16px;border-radius:2px;background:#fff;color:#646d78;text-align:center;text-transform:uppercase;box-shadow:rgba(0,0,0,.12) 0 1px 6px,rgba(0,0,0,.12) 0 1px 4px;transition:all 450ms cubic-bezier(.23,1,.32,1) 0s}.wp-core-ui .yoast-wizard-return-link.button:hover{background:#ebebeb;border-color:transparent}.wp-core-ui .yoast-wizard-return-link.button:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .yoast-wizard-return-link.button:active{background:#ebebeb;box-shadow:rgba(0,0,0,.16) 0 3px 10px,rgba(0,0,0,.23) 0 3px 10px;-ms-transform:none;transform:none}.wp-core-ui .yoast-wizard-return-link.button .dashicons{margin-left:8px}.yoast-wizard-mailchimp-message-error{color:#dc3232}.yoast-wizard-mailchimp-message-success{color:#008a00}.yoast-wizard-input{padding-bottom:.5em}.yoast-wizard-input__select{margin:1em 0;font-size:14px}.yoast-wizard--columns>div,.yoast-wizard-image-upload-container-buttons__remove{margin-right:1em}.yoast-wizard-image-upload-container__image{max-width:151px}.yoast-wizard-image-upload-container-buttons{margin-top:1em}.yoast-wizard-image-upload-container-description{display:block}.yoast-wizard--navigation{margin-top:2em;padding-top:1em;border-top:1px solid #a4286a}.yoast-wizard--rows{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.yoast-wizard--columns{display:-ms-flexbox;display:flex}.yoast-wizard--columns .yoast-wizard-text-input-field{max-width:100%}.yoast-wizard--columns__even>div{-ms-flex-preferred-size:50%;flex-basis:50%}.yoast-wizard--columns>div:first-child{margin-right:0}.yoast-wizard--columns .yoast-wizard--heading{margin:0;color:#a4286a}.yoast-wizard--columns>.yoast-wizard--column__push_right{-ms-flex-order:2;order:2}.yoast-wizard--columns>.yoast-wizard--column__push_left{-ms-flex-order:1;order:1;margin-right:0;margin-left:1em}.yoast-wizard--choice>.yoast-wizard--rows{height:100%}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.yoast-wizard--choice>.yoast-wizard--rows{width:100%}}.yoast-wizard--choice div{-ms-flex-item-align:start;align-self:flex-start}.yoast-wizard--choice p{margin-top:.3em;height:100%}.yoast-wizard--box{border:1px solid #a4286a;padding:1em}.yoast-wizard--box>div:first-child{-ms-flex-preferred-size:100px;flex-basis:100px}.yoast-wizard-newsletter--header svg{fill:#a4286a;top:4px;position:relative;margin-left:6px}.yoast-wizard-newsletter--decoration{width:100%;max-width:490px}.yoast-wizard-newsletter--decoration img{width:490px;max-width:100%;margin-top:-3em}.yoast-wizard--video-frame iframe{border:none}@media screen and (max-width:80em) and (-ms-high-contrast:active){.yoast-wizard--columns>div{width:95.5%}}@media screen and (max-width:80em){.yoast-wizard--columns{display:block}.yoast-wizard--columns>div{margin-right:0}.yoast-wizard--columns>.yoast-wizard--column__push_left{margin-left:0;margin-top:2em}.yoast-wizard--box{display:-ms-flexbox;display:flex;margin-top:1em}.yoast-wizard--box:first-child{margin-top:0}.yoast-wizard--box>div{margin-right:1em}.yoast-wizard .hide-on-tablet{display:none}}.yoast-wizard--suggestion{border-top:1px solid #a4286a;padding-top:2em;margin-bottom:2em}.yoast-wizard--suggestion:first-child{border-top:none;padding-top:0}@media screen and (max-width:50rem){.yoast-wizard .hide-on-mobile{display:none}.yoast-wizard--box{display:block}.yoast-wizard--box>div{margin-right:0}.yoast-wizard--video-frame{position:relative;padding-bottom:56.25%;height:0}.yoast-wizard--video-frame iframe{position:absolute;top:0;right:0;width:100%;height:100%}}.ie9 .yoast-wizard--stepper{display:none}
 
css/dist/yoast-components-1111.min.css DELETED
@@ -1 +0,0 @@
1
- .yoast-wizard--step--container:focus,a{outline:0}.screen-reader-text{position:absolute!important;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);width:1px;height:1px;border:0;padding:0;overflow:hidden;word-wrap:normal!important}body{background:#f1f1f1;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.375;margin:0;padding:0}a{color:#0073aa;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-wizard-body{box-sizing:border-box;width:80%;margin:1rem auto 4rem}@media screen and (max-width:768px){.yoast-wizard-body{width:auto;margin:0}}.yoast-wizard__logo{margin:0 auto;display:block}.yoast-wizard{text-align:left;min-height:20px;background:#fff;padding:2em;box-sizing:border-box;width:100%}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}}.yoast-wizard--header{text-align:center}.yoast-wizard--header--page-title{color:#a4286a;margin:0 0 -16px;font-size:1.25em;letter-spacing:.03em;line-height:2.5;font-weight:400;padding:0 8px}@media screen and (max-width:768px){.yoast-wizard--header--page-title{font-size:1.5em;line-height:1.25}}.yoast-wizard--navigation{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.yoast-wizard--button{margin-top:1em;background:0 0;color:#0073aa;border:none;padding:0;font:inherit;border-bottom:1px solid #0073aa;cursor:pointer}.yoast-wizard--step__inactive div{pointer-events:none}@media screen and (max-width:768px){.yoast-wizard--step__active{width:38px;overflow:hidden}.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 h1{color:#a4286a;margin:0;font-size:2.25em;letter-spacing:.03em;line-height:3.68rem;font-weight:100}@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--emphasis,.yoast-wizard-field-description{font-weight:700}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{z-index:10;opacity:.2;background-color:#000;position:absolute;top:0;left:0;height:100%;color:#fff;text-align:center;width:100%}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{border:1px solid #ccc;text-align:left;min-height:20px;position:relative;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px}.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{border:0;margin:1em 0}.yoast-wizard-text-input{font-size:14px;padding-bottom:.5em}.yoast-wizard-text-input-label{cursor:pointer;display:block;margin:.5em 0 0;font-weight:700;font-size:14px}.yoast-wizard-text-input [type=text]{width:100%;max-width:450px;box-sizing:border-box}.yoast-video-container-max-width,.yoast-wizard-content-container{max-width:560px}.yoast-wizard input{line-height:140%;font-size:14px;margin:.5em 0;padding:5px}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em .7em .3em 0;vertical-align:middle}.yoast-wizard-input__explanation{color:#555;margin-top:0;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 .5em 0!important;padding:9px 6px;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:3px solid #a4286a;background-color:#fff;padding:7px 4px}.yoast-wizard-input-radio-separator input:focus+label{outline:#5b9dd9 solid 2px}.yoast-video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.yoast-video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.yoast-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}#wizard{overflow:hidden}.yoast-wizard{padding-top:2em}.yoast-wizard input[type=text],.yoast-wizard input[type=email]{min-width:250px}.yoast-wizard #gsc_authorization_code,.yoast-wizard input[type=text]+div,.yoast-wizard input[type=email]+div{margin-right:1em}.yoast-wizard-body{max-width:80em}.yoast-wizard-return-link-container{text-align:center}.wp-core-ui .yoast-wizard-return-link.button{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;height:36px;border-color:transparent;margin:0 0 1em;padding:0 16px 0 10px;border-radius:2px;background:#fff;color:#646d78;text-align:center;text-transform:uppercase;box-shadow:rgba(0,0,0,.12) 0 1px 6px,rgba(0,0,0,.12) 0 1px 4px;transition:all 450ms cubic-bezier(.23,1,.32,1) 0s}.wp-core-ui .yoast-wizard-return-link.button:hover{background:#ebebeb;border-color:transparent}.wp-core-ui .yoast-wizard-return-link.button:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .yoast-wizard-return-link.button:active{background:#ebebeb;box-shadow:rgba(0,0,0,.16) 0 3px 10px,rgba(0,0,0,.23) 0 3px 10px;-ms-transform:none;transform:none}.wp-core-ui .yoast-wizard-return-link.button .dashicons{margin-right:8px}.yoast-wizard-mailchimp-message-error{color:#dc3232}.yoast-wizard-mailchimp-message-success{color:#008a00}.yoast-wizard-input{padding-bottom:.5em}.yoast-wizard-input__select{margin:1em 0;font-size:14px}.yoast-wizard--columns>div,.yoast-wizard-image-upload-container-buttons__remove{margin-left:1em}.yoast-wizard-image-upload-container__image{max-width:151px}.yoast-wizard-image-upload-container-buttons{margin-top:1em}.yoast-wizard-image-upload-container-description{display:block}.yoast-wizard--navigation{margin-top:2em;padding-top:1em;border-top:1px solid #a4286a}.yoast-wizard--rows{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.yoast-wizard--columns{display:-ms-flexbox;display:flex}.yoast-wizard--columns .yoast-wizard-text-input-field{max-width:100%}.yoast-wizard--columns__even>div{-ms-flex-preferred-size:50%;flex-basis:50%}.yoast-wizard--columns>div:first-child{margin-left:0}.yoast-wizard--columns .yoast-wizard--heading{margin:0;color:#a4286a}.yoast-wizard--columns>.yoast-wizard--column__push_right{-ms-flex-order:2;order:2}.yoast-wizard--columns>.yoast-wizard--column__push_left{-ms-flex-order:1;order:1;margin-left:0;margin-right:1em}.yoast-wizard--choice>.yoast-wizard--rows{height:100%}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.yoast-wizard--choice>.yoast-wizard--rows{width:100%}}.yoast-wizard--choice div{-ms-flex-item-align:start;align-self:flex-start}.yoast-wizard--choice p{margin-top:.3em;height:100%}.yoast-wizard--box{border:1px solid #a4286a;padding:1em}.yoast-wizard--box>div:first-child{-ms-flex-preferred-size:100px;flex-basis:100px}.yoast-wizard-newsletter--header svg{fill:#a4286a;top:4px;position:relative;margin-right:6px}.yoast-wizard-newsletter--decoration{width:100%;max-width:490px}.yoast-wizard-newsletter--decoration img{width:490px;max-width:100%;margin-top:-3em}.yoast-wizard--video-frame iframe{border:none}@media screen and (max-width:80em) and (-ms-high-contrast:active){.yoast-wizard--columns>div{width:95.5%}}@media screen and (max-width:80em){.yoast-wizard--columns{display:block}.yoast-wizard--columns>div{margin-left:0}.yoast-wizard--columns>.yoast-wizard--column__push_left{margin-right:0;margin-top:2em}.yoast-wizard--box{display:-ms-flexbox;display:flex;margin-top:1em}.yoast-wizard--box:first-child{margin-top:0}.yoast-wizard--box>div{margin-left:1em}.yoast-wizard .hide-on-tablet{display:none}}.yoast-wizard--suggestion{border-top:1px solid #a4286a;padding-top:2em;margin-bottom:2em}.yoast-wizard--suggestion:first-child{border-top:none;padding-top:0}@media screen and (max-width:50rem){.yoast-wizard .hide-on-mobile{display:none}.yoast-wizard--box{display:block}.yoast-wizard--box>div{margin-left:0}.yoast-wizard--video-frame{position:relative;padding-bottom:56.25%;height:0}.yoast-wizard--video-frame iframe{position:absolute;top:0;left:0;width:100%;height:100%}}.ie9 .yoast-wizard--stepper{display:none}
 
css/dist/yoast-components-1120-rtl.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .screen-reader-text{position:absolute!important;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);width:1px;height:1px;border:0;padding:0;overflow:hidden;word-wrap:normal!important}body{background:#f1f1f1;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.375;margin:0;padding:0}a{color:#0073aa;outline:0;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-wizard-body{box-sizing:border-box;width:80%;margin:1rem auto 4rem}@media screen and (max-width:768px){.yoast-wizard-body{width:auto;margin:0}}.yoast-wizard__logo{margin:0 auto;display:block}.yoast-wizard{text-align:right;min-height:20px;background:#fff;padding:2em;box-sizing:border-box;width:100%}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}}.yoast-wizard--header{text-align:center}.yoast-wizard--header--page-title{color:#a4286a;margin:0 0 -16px;font-size:1.25em;letter-spacing:.03em;line-height:2.5;font-weight:400;padding:0 8px}@media screen and (max-width:768px){.yoast-wizard--header--page-title{font-size:1.5em;line-height:1.25}}.yoast-wizard--navigation{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.yoast-wizard--button{margin:1em -8px 0;padding:8px;background:0 0;color:#0073aa;border:none;font:inherit;cursor:pointer}.yoast-wizard--button:after{content:"";display:block;height:0;border-bottom:1px solid #0073aa}.yoast-wizard--button:focus{outline:#5b9dd9 solid 1px;box-shadow:0 0 2px 1px rgba(30,140,190,.8)}.yoast-wizard--step__inactive div{pointer-events:none}@media screen and (max-width:768px){.yoast-wizard--step__active{width:38px;overflow:hidden}.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{color:#a4286a;margin:0;font-size:2.25em;letter-spacing:.03em;line-height:3.68rem;font-weight:100}@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--emphasis,.yoast-wizard-field-description{font-weight:700}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{z-index:10;opacity:.2;background-color:#000;position:absolute;top:0;right:0;height:100%;color:#fff;text-align:center;width:100%}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{border:1px solid #ccc;text-align:right;min-height:20px;position:relative;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px}.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{border:0;margin:1em 0}.yoast-wizard-text-input{font-size:14px;padding-bottom:.5em}.yoast-wizard-text-input-label{cursor:pointer;display:block;margin:.5em 0 0;font-weight:700;font-size:14px}.yoast-wizard-text-input [type=text]{width:100%;max-width:450px;box-sizing:border-box}.yoast-video-container-max-width,.yoast-wizard-content-container{max-width:560px}.yoast-wizard input{line-height:140%;font-size:14px;margin:.5em 0;padding:5px}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em 0 .3em .7em;vertical-align:middle}.yoast-wizard-input__explanation{color:#555;margin-top:0;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 .5em 5px!important;padding:9px 6px;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:3px solid #a4286a;background-color:#fff;padding:7px 4px}.yoast-wizard-input-radio-separator input:focus+label{outline:#5b9dd9 solid 2px}.yoast-video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.yoast-video-container iframe{position:absolute;top:0;right:0;width:100%;height:100%}.yoast-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}#wizard{overflow:hidden}.yoast-wizard{padding-top:2em}.yoast-wizard input[type=text],.yoast-wizard input[type=email]{min-width:250px}.yoast-wizard #gsc_authorization_code,.yoast-wizard input[type=text]+div,.yoast-wizard input[type=email]+div{margin-left:1em}.yoast-wizard-body{max-width:80em}.yoast-wizard-return-link-container{text-align:center}.wp-core-ui .yoast-wizard-return-link.button{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;height:36px;border-color:transparent;margin:0 0 1em;padding:0 10px 0 16px;border-radius:2px;background:#fff;color:#646d78;text-align:center;text-transform:uppercase;box-shadow:rgba(0,0,0,.12) 0 1px 6px,rgba(0,0,0,.12) 0 1px 4px;transition:all 450ms cubic-bezier(.23,1,.32,1) 0s}.wp-core-ui .yoast-wizard-return-link.button:hover{background:#ebebeb;border-color:transparent}.wp-core-ui .yoast-wizard-return-link.button:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .yoast-wizard-return-link.button:active{background:#ebebeb;box-shadow:rgba(0,0,0,.16) 0 3px 10px,rgba(0,0,0,.23) 0 3px 10px;-ms-transform:none;transform:none}.wp-core-ui .yoast-wizard-return-link.button .dashicons{margin-left:8px}.yoast-wizard-mailchimp-message-error{color:#dc3232}.yoast-wizard-mailchimp-message-success{color:#008a00}.yoast-wizard-input{padding-bottom:.5em}.yoast-wizard-input__select{margin:1em 0;font-size:14px}.yoast-wizard--columns>div,.yoast-wizard-image-upload-container-buttons__remove{margin-right:1em}.yoast-wizard-image-upload-container__image{max-width:151px}.yoast-wizard-image-upload-container-buttons{margin-top:1em}.yoast-wizard-image-upload-container-description{display:block}.yoast-wizard--navigation{margin-top:2em;padding-top:1em;border-top:1px solid #a4286a}.yoast-wizard--rows{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.yoast-wizard--columns{display:-ms-flexbox;display:flex}.yoast-wizard--columns .yoast-wizard-text-input-field{max-width:100%}.yoast-wizard--columns__even>div{-ms-flex-preferred-size:50%;flex-basis:50%}.yoast-wizard--columns>div:first-child{margin-right:0}.yoast-wizard--columns .yoast-wizard--heading{margin:0;color:#a4286a}.yoast-wizard--columns>.yoast-wizard--column__push_right{-ms-flex-order:2;order:2}.yoast-wizard--columns>.yoast-wizard--column__push_left{-ms-flex-order:1;order:1;margin-right:0;margin-left:1em}.yoast-wizard--choice>.yoast-wizard--rows{height:100%}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.yoast-wizard--choice>.yoast-wizard--rows{width:100%}}.yoast-wizard--choice div{-ms-flex-item-align:start;align-self:flex-start}.yoast-wizard--choice p{margin-top:.3em;height:100%}.yoast-wizard--box{border:1px solid #a4286a;padding:1em}.yoast-wizard--box>div:first-child{-ms-flex-preferred-size:100px;flex-basis:100px}.yoast-wizard-newsletter--header svg{fill:#a4286a;top:4px;position:relative;margin-left:6px}.yoast-wizard-newsletter--decoration{width:100%;max-width:490px}.yoast-wizard-newsletter--decoration img{width:490px;max-width:100%;margin-top:-3em}.yoast-wizard--video-frame iframe{border:none}@media screen and (max-width:80em) and (-ms-high-contrast:active){.yoast-wizard--columns>div{width:95.5%}}@media screen and (max-width:80em){.yoast-wizard--columns{display:block}.yoast-wizard--columns>div{margin-right:0}.yoast-wizard--columns>.yoast-wizard--column__push_left{margin-left:0;margin-top:2em}.yoast-wizard--box{display:-ms-flexbox;display:flex;margin-top:1em}.yoast-wizard--box:first-child{margin-top:0}.yoast-wizard--box>div{margin-right:1em}.yoast-wizard .hide-on-tablet{display:none}}.yoast-wizard--suggestion{border-top:1px solid #a4286a;padding-top:2em;margin-bottom:2em}.yoast-wizard--suggestion:first-child{border-top:none;padding-top:0}@media screen and (max-width:50rem){.yoast-wizard .hide-on-mobile{display:none}.yoast-wizard--box{display:block}.yoast-wizard--box>div{margin-right:0}.yoast-wizard--video-frame{position:relative;padding-bottom:56.25%;height:0}.yoast-wizard--video-frame iframe{position:absolute;top:0;right:0;width:100%;height:100%}}.ie9 .yoast-wizard--stepper{display:none}
css/dist/yoast-components-1120.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .screen-reader-text{position:absolute!important;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);width:1px;height:1px;border:0;padding:0;overflow:hidden;word-wrap:normal!important}body{background:#f1f1f1;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.375;margin:0;padding:0}a{color:#0073aa;outline:0;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.yoast-wizard-body{box-sizing:border-box;width:80%;margin:1rem auto 4rem}@media screen and (max-width:768px){.yoast-wizard-body{width:auto;margin:0}}.yoast-wizard__logo{margin:0 auto;display:block}.yoast-wizard{text-align:left;min-height:20px;background:#fff;padding:2em;box-sizing:border-box;width:100%}@media screen and (max-width:768px){.yoast-wizard{padding:1em 1em 2em}}.yoast-wizard--header{text-align:center}.yoast-wizard--header--page-title{color:#a4286a;margin:0 0 -16px;font-size:1.25em;letter-spacing:.03em;line-height:2.5;font-weight:400;padding:0 8px}@media screen and (max-width:768px){.yoast-wizard--header--page-title{font-size:1.5em;line-height:1.25}}.yoast-wizard--navigation{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.yoast-wizard--button{margin:1em -8px 0;padding:8px;background:0 0;color:#0073aa;border:none;font:inherit;cursor:pointer}.yoast-wizard--button:after{content:"";display:block;height:0;border-bottom:1px solid #0073aa}.yoast-wizard--button:focus{outline:#5b9dd9 solid 1px;box-shadow:0 0 2px 1px rgba(30,140,190,.8)}.yoast-wizard--step__inactive div{pointer-events:none}@media screen and (max-width:768px){.yoast-wizard--step__active{width:38px;overflow:hidden}.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{color:#a4286a;margin:0;font-size:2.25em;letter-spacing:.03em;line-height:3.68rem;font-weight:100}@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--emphasis,.yoast-wizard-field-description{font-weight:700}.yoast-wizard--stepper{width:100%;margin:auto}.yoast-wizard-overlay{z-index:10;opacity:.2;background-color:#000;position:absolute;top:0;left:0;height:100%;color:#fff;text-align:center;width:100%}.yoast-wizard-overlay-loader{position:relative}.yoast-wizard-container{border:1px solid #ccc;text-align:left;min-height:20px;position:relative;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.2) 0 3px 10px}.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{border:0;margin:1em 0}.yoast-wizard-text-input{font-size:14px;padding-bottom:.5em}.yoast-wizard-text-input-label{cursor:pointer;display:block;margin:.5em 0 0;font-weight:700;font-size:14px}.yoast-wizard-text-input [type=text]{width:100%;max-width:450px;box-sizing:border-box}.yoast-video-container-max-width,.yoast-wizard-content-container{max-width:560px}.yoast-wizard input{line-height:140%;font-size:14px;margin:.5em 0;padding:5px}.yoast-wizard label{cursor:pointer}.yoast-wizard input[type=radio]{margin:.3em .7em .3em 0;vertical-align:middle}.yoast-wizard-input__explanation{color:#555;margin-top:0;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 .5em 0!important;padding:9px 6px;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:3px solid #a4286a;background-color:#fff;padding:7px 4px}.yoast-wizard-input-radio-separator input:focus+label{outline:#5b9dd9 solid 2px}.yoast-video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.yoast-video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.yoast-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}#wizard{overflow:hidden}.yoast-wizard{padding-top:2em}.yoast-wizard input[type=text],.yoast-wizard input[type=email]{min-width:250px}.yoast-wizard #gsc_authorization_code,.yoast-wizard input[type=text]+div,.yoast-wizard input[type=email]+div{margin-right:1em}.yoast-wizard-body{max-width:80em}.yoast-wizard-return-link-container{text-align:center}.wp-core-ui .yoast-wizard-return-link.button{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;height:36px;border-color:transparent;margin:0 0 1em;padding:0 16px 0 10px;border-radius:2px;background:#fff;color:#646d78;text-align:center;text-transform:uppercase;box-shadow:rgba(0,0,0,.12) 0 1px 6px,rgba(0,0,0,.12) 0 1px 4px;transition:all 450ms cubic-bezier(.23,1,.32,1) 0s}.wp-core-ui .yoast-wizard-return-link.button:hover{background:#ebebeb;border-color:transparent}.wp-core-ui .yoast-wizard-return-link.button:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .yoast-wizard-return-link.button:active{background:#ebebeb;box-shadow:rgba(0,0,0,.16) 0 3px 10px,rgba(0,0,0,.23) 0 3px 10px;-ms-transform:none;transform:none}.wp-core-ui .yoast-wizard-return-link.button .dashicons{margin-right:8px}.yoast-wizard-mailchimp-message-error{color:#dc3232}.yoast-wizard-mailchimp-message-success{color:#008a00}.yoast-wizard-input{padding-bottom:.5em}.yoast-wizard-input__select{margin:1em 0;font-size:14px}.yoast-wizard--columns>div,.yoast-wizard-image-upload-container-buttons__remove{margin-left:1em}.yoast-wizard-image-upload-container__image{max-width:151px}.yoast-wizard-image-upload-container-buttons{margin-top:1em}.yoast-wizard-image-upload-container-description{display:block}.yoast-wizard--navigation{margin-top:2em;padding-top:1em;border-top:1px solid #a4286a}.yoast-wizard--rows{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.yoast-wizard--columns{display:-ms-flexbox;display:flex}.yoast-wizard--columns .yoast-wizard-text-input-field{max-width:100%}.yoast-wizard--columns__even>div{-ms-flex-preferred-size:50%;flex-basis:50%}.yoast-wizard--columns>div:first-child{margin-left:0}.yoast-wizard--columns .yoast-wizard--heading{margin:0;color:#a4286a}.yoast-wizard--columns>.yoast-wizard--column__push_right{-ms-flex-order:2;order:2}.yoast-wizard--columns>.yoast-wizard--column__push_left{-ms-flex-order:1;order:1;margin-left:0;margin-right:1em}.yoast-wizard--choice>.yoast-wizard--rows{height:100%}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.yoast-wizard--choice>.yoast-wizard--rows{width:100%}}.yoast-wizard--choice div{-ms-flex-item-align:start;align-self:flex-start}.yoast-wizard--choice p{margin-top:.3em;height:100%}.yoast-wizard--box{border:1px solid #a4286a;padding:1em}.yoast-wizard--box>div:first-child{-ms-flex-preferred-size:100px;flex-basis:100px}.yoast-wizard-newsletter--header svg{fill:#a4286a;top:4px;position:relative;margin-right:6px}.yoast-wizard-newsletter--decoration{width:100%;max-width:490px}.yoast-wizard-newsletter--decoration img{width:490px;max-width:100%;margin-top:-3em}.yoast-wizard--video-frame iframe{border:none}@media screen and (max-width:80em) and (-ms-high-contrast:active){.yoast-wizard--columns>div{width:95.5%}}@media screen and (max-width:80em){.yoast-wizard--columns{display:block}.yoast-wizard--columns>div{margin-left:0}.yoast-wizard--columns>.yoast-wizard--column__push_left{margin-right:0;margin-top:2em}.yoast-wizard--box{display:-ms-flexbox;display:flex;margin-top:1em}.yoast-wizard--box:first-child{margin-top:0}.yoast-wizard--box>div{margin-left:1em}.yoast-wizard .hide-on-tablet{display:none}}.yoast-wizard--suggestion{border-top:1px solid #a4286a;padding-top:2em;margin-bottom:2em}.yoast-wizard--suggestion:first-child{border-top:none;padding-top:0}@media screen and (max-width:50rem){.yoast-wizard .hide-on-mobile{display:none}.yoast-wizard--box{display:block}.yoast-wizard--box>div{margin-left:0}.yoast-wizard--video-frame{position:relative;padding-bottom:56.25%;height:0}.yoast-wizard--video-frame iframe{position:absolute;top:0;left:0;width:100%;height:100%}}.ie9 .yoast-wizard--stepper{display:none}
css/dist/{yoast-extensions-1111-rtl.min.css → yoast-extensions-1120-rtl.min.css} RENAMED
File without changes
css/dist/{yoast-extensions-1111.min.css → yoast-extensions-1120.min.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1111-rtl.min.css → yst_plugin_tools-1120-rtl.min.css} RENAMED
File without changes
css/dist/{yst_plugin_tools-1111.min.css → yst_plugin_tools-1120.min.css} RENAMED
File without changes
css/dist/{yst_seo_score-1111-rtl.min.css → yst_seo_score-1120-rtl.min.css} RENAMED
File without changes
css/dist/{yst_seo_score-1111.min.css → yst_seo_score-1120.min.css} RENAMED
File without changes
frontend/class-frontend.php CHANGED
@@ -1914,6 +1914,7 @@ class WPSEO_Frontend {
1914
  * Output the rel=publisher code on every page of the site.
1915
  *
1916
  * @deprecated 10.1.3
 
1917
  *
1918
  * @return boolean Boolean indicating whether the publisher link was printed.
1919
  */
1914
  * Output the rel=publisher code on every page of the site.
1915
  *
1916
  * @deprecated 10.1.3
1917
+ * @codeCoverageIgnore
1918
  *
1919
  * @return boolean Boolean indicating whether the publisher link was printed.
1920
  */
frontend/class-opengraph-image.php CHANGED
@@ -317,7 +317,7 @@ class WPSEO_OpenGraph_Image {
317
  return;
318
  }
319
 
320
- $this->add_first_usable_content_image( get_post( $post_id ) );
321
  }
322
 
323
  /**
@@ -685,20 +685,14 @@ class WPSEO_OpenGraph_Image {
685
  /**
686
  * Adds the first usable attachment image from the post content.
687
  *
688
- * @param WP_Post $post The post object.
689
  *
690
  * @return void
691
  */
692
- private function add_first_usable_content_image( $post ) {
693
- $image_finder = new WPSEO_Content_Images();
694
- $images = $image_finder->get_images( $post->ID, $post );
695
 
696
- if ( ! is_array( $images ) || $images === array() ) {
697
- return;
698
- }
699
-
700
- $image_url = reset( $images );
701
- if ( ! $image_url ) {
702
  return;
703
  }
704
 
317
  return;
318
  }
319
 
320
+ $this->add_first_usable_content_image( $post_id );
321
  }
322
 
323
  /**
685
  /**
686
  * Adds the first usable attachment image from the post content.
687
  *
688
+ * @param int $post_id The post id.
689
  *
690
  * @return void
691
  */
692
+ private function add_first_usable_content_image( $post_id ) {
693
+ $image_url = WPSEO_Image_Utils::get_first_usable_content_image_for_post( $post_id );
 
694
 
695
+ if ( $image_url === null || empty( $image_url ) ) {
 
 
 
 
 
696
  return;
697
  }
698
 
frontend/class-opengraph.php CHANGED
@@ -23,8 +23,6 @@ class WPSEO_OpenGraph {
23
  add_filter( 'fb_meta_tags', array( $this, 'facebook_filter' ), 10, 1 );
24
  }
25
  else {
26
- add_filter( 'language_attributes', array( $this, 'add_opengraph_namespace' ), 15 );
27
-
28
  add_action( 'wpseo_opengraph', array( $this, 'locale' ), 1 );
29
  add_action( 'wpseo_opengraph', array( $this, 'type' ), 5 );
30
  add_action( 'wpseo_opengraph', array( $this, 'og_title' ), 10 );
@@ -107,45 +105,6 @@ class WPSEO_OpenGraph {
107
  return $meta_tags;
108
  }
109
 
110
- /**
111
- * Filter for the namespace, adding the OpenGraph namespace.
112
- *
113
- * @link https://developers.facebook.com/docs/web/tutorials/scrumptious/open-graph-object/
114
- *
115
- * @param string $input The input namespace string.
116
- *
117
- * @return string
118
- */
119
- public function add_opengraph_namespace( $input ) {
120
- $namespaces = array(
121
- 'og: http://ogp.me/ns#',
122
- );
123
-
124
- /**
125
- * Allow for adding additional namespaces to the <html> prefix attributes.
126
- *
127
- * @since 3.9.0
128
- *
129
- * @param array $namespaces Currently registered namespaces which are to be
130
- * added to the prefix attribute.
131
- * Namespaces are strings and have the following syntax:
132
- * ns: http://url.to.namespace/definition
133
- */
134
- $namespaces = apply_filters( 'wpseo_html_namespaces', $namespaces );
135
- $namespace_string = implode( ' ', array_unique( $namespaces ) );
136
-
137
- if ( strpos( $input, ' prefix=' ) !== false ) {
138
- $regex = '`prefix=([\'"])(.+?)\1`';
139
- $replace = 'prefix="$2 ' . $namespace_string . '"';
140
- $input = preg_replace( $regex, $replace, $input );
141
- }
142
- else {
143
- $input .= ' prefix="' . $namespace_string . '"';
144
- }
145
-
146
- return $input;
147
- }
148
-
149
  /**
150
  * Outputs the authors FB page.
151
  *
@@ -180,6 +139,7 @@ class WPSEO_OpenGraph {
180
  *
181
  * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/
182
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
 
183
  * @return boolean
184
  */
185
  public function website_facebook() {
@@ -262,6 +222,7 @@ class WPSEO_OpenGraph {
262
  * Outputs the canonical URL as OpenGraph URL, which consolidates likes and shares.
263
  *
264
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
 
265
  * @return boolean
266
  */
267
  public function url() {
@@ -298,7 +259,6 @@ class WPSEO_OpenGraph {
298
  * Last update/compare with FB list done on 2015-03-16 by Rarst.
299
  *
300
  * @link http://www.facebook.com/translations/FacebookLocales.xml for the list of supported locales.
301
- *
302
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
303
  *
304
  * @param bool $echo Whether to echo or return the locale.
@@ -664,6 +624,7 @@ class WPSEO_OpenGraph {
664
  * Output the article tags as article:tag tags.
665
  *
666
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
 
667
  * @return boolean
668
  */
669
  public function tags() {
@@ -688,6 +649,7 @@ class WPSEO_OpenGraph {
688
  * Output the article category as an article:section tag.
689
  *
690
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
 
691
  * @return boolean;
692
  */
693
  public function category() {
@@ -727,6 +689,7 @@ class WPSEO_OpenGraph {
727
  * Output the article publish and last modification date.
728
  *
729
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
 
730
  * @return boolean;
731
  */
732
  public function publish_date() {
@@ -778,6 +741,7 @@ class WPSEO_OpenGraph {
778
  * Outputs the site owner.
779
  *
780
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
 
781
  * @return void
782
  *
783
  * @deprecated 7.1
23
  add_filter( 'fb_meta_tags', array( $this, 'facebook_filter' ), 10, 1 );
24
  }
25
  else {
 
 
26
  add_action( 'wpseo_opengraph', array( $this, 'locale' ), 1 );
27
  add_action( 'wpseo_opengraph', array( $this, 'type' ), 5 );
28
  add_action( 'wpseo_opengraph', array( $this, 'og_title' ), 10 );
105
  return $meta_tags;
106
  }
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  /**
109
  * Outputs the authors FB page.
110
  *
139
  *
140
  * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/
141
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
142
+ *
143
  * @return boolean
144
  */
145
  public function website_facebook() {
222
  * Outputs the canonical URL as OpenGraph URL, which consolidates likes and shares.
223
  *
224
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
225
+ *
226
  * @return boolean
227
  */
228
  public function url() {
259
  * Last update/compare with FB list done on 2015-03-16 by Rarst.
260
  *
261
  * @link http://www.facebook.com/translations/FacebookLocales.xml for the list of supported locales.
 
262
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
263
  *
264
  * @param bool $echo Whether to echo or return the locale.
624
  * Output the article tags as article:tag tags.
625
  *
626
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
627
+ *
628
  * @return boolean
629
  */
630
  public function tags() {
649
  * Output the article category as an article:section tag.
650
  *
651
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
652
+ *
653
  * @return boolean;
654
  */
655
  public function category() {
689
  * Output the article publish and last modification date.
690
  *
691
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
692
+ *
693
  * @return boolean;
694
  */
695
  public function publish_date() {
741
  * Outputs the site owner.
742
  *
743
  * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/
744
+ *
745
  * @return void
746
  *
747
  * @deprecated 7.1
frontend/class-twitter.php CHANGED
@@ -630,15 +630,9 @@ class WPSEO_Twitter {
630
  * @return bool True when images output succeeded.
631
  */
632
  private function image_from_content_output( $post_id ) {
633
- $image_finder = new WPSEO_Content_Images();
634
- $images = $image_finder->get_images( $post_id );
635
 
636
- if ( ! is_array( $images ) || $images === array() ) {
637
- return false;
638
- }
639
-
640
- $image_url = reset( $images );
641
- if ( ! $image_url ) {
642
  return false;
643
  }
644
 
630
  * @return bool True when images output succeeded.
631
  */
632
  private function image_from_content_output( $post_id ) {
633
+ $image_url = WPSEO_Image_Utils::get_first_usable_content_image_for_post( $post_id );
 
634
 
635
+ if ( $image_url === null || empty( $image_url ) ) {
 
 
 
 
 
636
  return false;
637
  }
638
 
frontend/schema/class-schema-article.php CHANGED
@@ -33,14 +33,11 @@ class WPSEO_Schema_Article implements WPSEO_Graph_Piece {
33
  * @return bool
34
  */
35
  public function is_needed() {
36
- /**
37
- * Filter: 'wpseo_schema_article_post_types' - Allow changing for which post types we output Article schema.
38
- *
39
- * @api string[] $post_types The post types for which we output Article.
40
- */
41
- $post_types = apply_filters( 'wpseo_schema_article_post_types', array( 'post' ) );
42
 
43
- return is_singular( $post_types );
44
  }
45
 
46
  /**
@@ -74,6 +71,28 @@ class WPSEO_Schema_Article implements WPSEO_Graph_Piece {
74
  return $data;
75
  }
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  /**
78
  * Determine the proper author URL.
79
  *
33
  * @return bool
34
  */
35
  public function is_needed() {
36
+ if ( ! is_singular() ) {
37
+ return false;
38
+ }
 
 
 
39
 
40
+ return self::is_article_post_type( get_post_type() );
41
  }
42
 
43
  /**
71
  return $data;
72
  }
73
 
74
+ /**
75
+ * Determines whether a given post type should have Article schema.
76
+ *
77
+ * @param string $post_type Post type to check.
78
+ *
79
+ * @return bool True if it has article schema, false if not.
80
+ */
81
+ public static function is_article_post_type( $post_type = null ) {
82
+ if ( is_null( $post_type ) ) {
83
+ $post_type = get_post_type();
84
+ }
85
+
86
+ /**
87
+ * Filter: 'wpseo_schema_article_post_types' - Allow changing for which post types we output Article schema.
88
+ *
89
+ * @api string[] $post_types The post types for which we output Article.
90
+ */
91
+ $post_types = apply_filters( 'wpseo_schema_article_post_types', array( 'post' ) );
92
+
93
+ return in_array( $post_type, $post_types );
94
+ }
95
+
96
  /**
97
  * Determine the proper author URL.
98
  *
frontend/schema/class-schema-author.php CHANGED
@@ -54,7 +54,6 @@ class WPSEO_Schema_Author extends WPSEO_Schema_Person implements WPSEO_Graph_Pie
54
  return false;
55
  }
56
 
57
-
58
  /**
59
  * Builds our array of Schema Person data for a given user ID.
60
  *
@@ -105,7 +104,7 @@ class WPSEO_Schema_Author extends WPSEO_Schema_Person implements WPSEO_Graph_Pie
105
  $user_id = get_queried_object_id();
106
  break;
107
  default:
108
- $post = get_post( $this->context->id );
109
  $user_id = (int) $post->post_author;
110
  break;
111
  }
54
  return false;
55
  }
56
 
 
57
  /**
58
  * Builds our array of Schema Person data for a given user ID.
59
  *
104
  $user_id = get_queried_object_id();
105
  break;
106
  default:
107
+ $post = get_post( $this->context->id );
108
  $user_id = (int) $post->post_author;
109
  break;
110
  }
frontend/schema/class-schema-breadcrumb.php CHANGED
@@ -140,9 +140,12 @@ class WPSEO_Schema_Breadcrumb implements WPSEO_Graph_Piece {
140
  */
141
  private function add_paginated_state() {
142
  $this->index++;
143
- return $this->add_breadcrumb( $this->index, array(
144
- 'url' => $this->context->canonical,
145
- 'text' => $this->context->title,
146
- ) );
 
 
 
147
  }
148
  }
140
  */
141
  private function add_paginated_state() {
142
  $this->index++;
143
+ return $this->add_breadcrumb(
144
+ $this->index,
145
+ array(
146
+ 'url' => $this->context->canonical,
147
+ 'text' => $this->context->title,
148
+ )
149
+ );
150
  }
151
  }
frontend/schema/class-schema-image.php CHANGED
@@ -123,8 +123,6 @@ class WPSEO_Schema_Image {
123
  if ( ! empty( $caption ) ) {
124
  $this->data['caption'] = $caption;
125
  }
126
-
127
- return;
128
  }
129
 
130
  /**
123
  if ( ! empty( $caption ) ) {
124
  $this->data['caption'] = $caption;
125
  }
 
 
126
  }
127
 
128
  /**
frontend/schema/class-schema-person.php CHANGED
@@ -19,7 +19,25 @@ class WPSEO_Schema_Person implements WPSEO_Graph_Piece {
19
  private $context;
20
 
21
  /**
22
- * WPSEO_Schema_Breadcrumb constructor.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  *
24
  * @param WPSEO_Schema_Context $context A value object with context variables.
25
  */
@@ -77,21 +95,18 @@ class WPSEO_Schema_Person implements WPSEO_Graph_Piece {
77
  *
78
  * @param int $user_id User ID.
79
  *
80
- * @return array $output A list of social profiles.
81
  */
82
  protected function get_social_profiles( $user_id ) {
83
- $social_profiles = array(
84
- 'facebook',
85
- 'instagram',
86
- 'linkedin',
87
- 'pinterest',
88
- 'twitter',
89
- 'myspace',
90
- 'youtube',
91
- 'soundcloud',
92
- 'tumblr',
93
- 'wikipedia',
94
- );
95
  $output = array();
96
  foreach ( $social_profiles as $profile ) {
97
  $social_url = $this->url_social_site( $profile, $user_id );
19
  private $context;
20
 
21
  /**
22
+ * Array of the social profiles we display for a Person.
23
+ *
24
+ * @var string[]
25
+ */
26
+ private $social_profiles = array(
27
+ 'facebook',
28
+ 'instagram',
29
+ 'linkedin',
30
+ 'pinterest',
31
+ 'twitter',
32
+ 'myspace',
33
+ 'youtube',
34
+ 'soundcloud',
35
+ 'tumblr',
36
+ 'wikipedia',
37
+ );
38
+
39
+ /**
40
+ * WPSEO_Schema_Person constructor.
41
  *
42
  * @param WPSEO_Schema_Context $context A value object with context variables.
43
  */
95
  *
96
  * @param int $user_id User ID.
97
  *
98
+ * @return string[] $output A list of social profiles.
99
  */
100
  protected function get_social_profiles( $user_id ) {
101
+ /**
102
+ * Filter: 'wpseo_schema_person_social_profiles' - Allows filtering of social profiles per user.
103
+ *
104
+ * @param int $user_id The current user we're grabbing social profiles for.
105
+ *
106
+ * @api string[] $social_profiles The array of social profiles to retrieve. Each should be a user meta field
107
+ * key. As they are retrieved using the WordPress function `get_the_author_meta`.
108
+ */
109
+ $social_profiles = apply_filters( 'wpseo_schema_person_social_profiles', $this->social_profiles, $user_id );
 
 
 
110
  $output = array();
111
  foreach ( $social_profiles as $profile ) {
112
  $social_url = $this->url_social_site( $profile, $user_id );
frontend/schema/class-schema-webpage.php CHANGED
@@ -69,7 +69,7 @@ class WPSEO_Schema_WebPage implements WPSEO_Graph_Piece {
69
  }
70
 
71
  if ( is_singular() ) {
72
- $data = $this->add_featured_image( $data );
73
 
74
  $post = get_post( $this->context->id );
75
  $data['datePublished'] = mysql2date( DATE_W3C, $post->post_date_gmt, false );
@@ -135,24 +135,66 @@ class WPSEO_Schema_WebPage implements WPSEO_Graph_Piece {
135
  }
136
 
137
  /**
138
- * Adds a featured image to the schema if there is one.
139
  *
140
  * @param array $data WebPage Schema.
141
  *
142
  * @return array $data WebPage Schema.
143
  */
144
- private function add_featured_image( $data ) {
145
- if ( ! has_post_thumbnail( $this->context->id ) ) {
 
 
 
 
 
 
 
 
146
  return $data;
147
  }
148
 
149
- $id = $this->context->canonical . WPSEO_Schema_IDs::PRIMARY_IMAGE_HASH;
150
- $schema_image = new WPSEO_Schema_Image( $id );
151
- $data['image'] = $schema_image->generate_from_attachment_id( get_post_thumbnail_id() );
152
  $data['primaryImageOfPage'] = array(
153
- '@id' => $id,
154
  );
155
 
156
  return $data;
157
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  }
69
  }
70
 
71
  if ( is_singular() ) {
72
+ $data = $this->add_image( $data );
73
 
74
  $post = get_post( $this->context->id );
75
  $data['datePublished'] = mysql2date( DATE_W3C, $post->post_date_gmt, false );
135
  }
136
 
137
  /**
138
+ * Adds a featured image to the schema if there is one, if not falls back to the first image on the page.
139
  *
140
  * @param array $data WebPage Schema.
141
  *
142
  * @return array $data WebPage Schema.
143
  */
144
+ private function add_image( $data ) {
145
+ $image_id = $this->context->canonical . WPSEO_Schema_IDs::PRIMARY_IMAGE_HASH;
146
+
147
+ $image_schema = $this->get_featured_image( $this->context->id, $image_id );
148
+
149
+ if ( $image_schema === null ) {
150
+ $image_schema = $this->get_first_content_image( $this->context->id, $image_id );
151
+ }
152
+
153
+ if ( $image_schema === null ) {
154
  return $data;
155
  }
156
 
157
+ $data['image'] = $image_schema;
 
 
158
  $data['primaryImageOfPage'] = array(
159
+ '@id' => $image_id,
160
  );
161
 
162
  return $data;
163
  }
164
+
165
+ /**
166
+ * Gets the image schema for the web page based on the featured image.
167
+ *
168
+ * @param int $post_id The post id.
169
+ * @param string $image_id The image schema id.
170
+ *
171
+ * @return array|null The image schema object and null if there is no featured image.
172
+ */
173
+ private function get_featured_image( $post_id, $image_id ) {
174
+ if ( ! has_post_thumbnail( $post_id ) ) {
175
+ return null;
176
+ }
177
+
178
+ $schema_image = new WPSEO_Schema_Image( $image_id );
179
+ return $schema_image->generate_from_attachment_id( get_post_thumbnail_id() );
180
+ }
181
+
182
+ /**
183
+ * Gets the image schema for the web page based on the first content image image.
184
+ *
185
+ * @param int $post_id The post id.
186
+ * @param string $image_id The image schema id.
187
+ *
188
+ * @return array|null The image schema object and null if there is no image in the content.
189
+ */
190
+ private function get_first_content_image( $post_id, $image_id ) {
191
+ $image_url = WPSEO_Image_Utils::get_first_usable_content_image_for_post( $post_id );
192
+
193
+ if ( $image_url === null ) {
194
+ return null;
195
+ }
196
+
197
+ $schema_image = new WPSEO_Schema_Image( $image_id );
198
+ return $schema_image->generate_from_url( $image_url );
199
+ }
200
  }
frontend/schema/class-schema.php CHANGED
@@ -13,6 +13,7 @@
13
  * @since 1.8
14
  */
15
  class WPSEO_Schema implements WPSEO_WordPress_Integration {
 
16
  /**
17
  * Registers the hooks.
18
  */
@@ -55,7 +56,15 @@ class WPSEO_Schema implements WPSEO_WordPress_Integration {
55
  $graph = array();
56
 
57
  foreach ( $this->get_graph_pieces() as $piece ) {
58
- if ( ! $piece->is_needed() ) {
 
 
 
 
 
 
 
 
59
  continue;
60
  }
61
 
@@ -66,7 +75,6 @@ class WPSEO_Schema implements WPSEO_WordPress_Integration {
66
  *
67
  * @api array $graph_piece The graph piece to filter.
68
  */
69
- $class = str_replace( 'wpseo_schema_', '', strtolower( get_class( $piece ) ) );
70
  $graph_piece = apply_filters( 'wpseo_schema_' . $class, $graph_piece );
71
  if ( is_array( $graph_piece ) ) {
72
  $graph[] = $graph_piece;
13
  * @since 1.8
14
  */
15
  class WPSEO_Schema implements WPSEO_WordPress_Integration {
16
+
17
  /**
18
  * Registers the hooks.
19
  */
56
  $graph = array();
57
 
58
  foreach ( $this->get_graph_pieces() as $piece ) {
59
+ $class = str_replace( 'wpseo_schema_', '', strtolower( get_class( $piece ) ) );
60
+
61
+ /**
62
+ * Filter: 'wpseo_schema_needs_<class name>' - Allows changing which graph pieces we output.
63
+ *
64
+ * @api bool $is_needed Whether or not to show a graph piece.
65
+ */
66
+ $is_needed = apply_filters( 'wpseo_schema_needs_' . $class, $piece->is_needed() );
67
+ if ( ! $is_needed ) {
68
  continue;
69
  }
70
 
75
  *
76
  * @api array $graph_piece The graph piece to filter.
77
  */
 
78
  $graph_piece = apply_filters( 'wpseo_schema_' . $class, $graph_piece );
79
  if ( is_array( $graph_piece ) ) {
80
  $graph[] = $graph_piece;
frontend/schema/interface-wpseo-graph-piece.php CHANGED
@@ -12,6 +12,7 @@ if ( ! interface_exists( 'WPSEO_Graph_Piece' ) ) {
12
  * @since 10.2
13
  */
14
  interface WPSEO_Graph_Piece {
 
15
  /**
16
  * Add your piece of the graph.
17
  *
12
  * @since 10.2
13
  */
14
  interface WPSEO_Graph_Piece {
15
+
16
  /**
17
  * Add your piece of the graph.
18
  *
inc/class-addon-manager.php CHANGED
@@ -110,7 +110,6 @@ class WPSEO_Addon_Manager {
110
  }
111
 
112
  return $this->get_site_information_default();
113
-
114
  }
115
 
116
  /**
110
  }
111
 
112
  return $this->get_site_information_default();
 
113
  }
114
 
115
  /**
inc/class-wpseo-image-utils.php CHANGED
@@ -358,4 +358,29 @@ class WPSEO_Image_Utils {
358
 
359
  return true;
360
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  }
358
 
359
  return true;
360
  }
361
+
362
+ /**
363
+ * Gets the post's first usable content image. Null if none is available.
364
+ *
365
+ * @param int $post_id The post id.
366
+ *
367
+ * @return string|null The image URL.
368
+ */
369
+ public static function get_first_usable_content_image_for_post( $post_id = null ) {
370
+ $post = get_post( $post_id );
371
+
372
+ $image_finder = new WPSEO_Content_Images();
373
+ $images = $image_finder->get_images( $post->ID, $post );
374
+
375
+ if ( ! is_array( $images ) || empty( $images ) ) {
376
+ return null;
377
+ }
378
+
379
+ $image_url = reset( $images );
380
+ if ( ! $image_url ) {
381
+ return null;
382
+ }
383
+
384
+ return $image_url;
385
+ }
386
  }
inc/class-wpseo-meta.php CHANGED
@@ -33,10 +33,10 @@ class WPSEO_Meta {
33
  /**
34
  * Prefix for all WPSEO meta values in the database.
35
  *
36
- * @var string
37
- *
38
  * {@internal If at any point this would change, quite apart from an upgrade routine,
39
  * this also will need to be changed in the wpml-config.xml file.}}
 
 
40
  */
41
  public static $meta_prefix = '_yoast_wpseo_';
42
 
@@ -68,41 +68,40 @@ class WPSEO_Meta {
68
  /**
69
  * Meta box field definitions for the meta box form.
70
  *
71
- * @var array $meta_fields
72
- * Array format:
 
 
 
 
 
73
  * (required) 'type' => (string) field type. i.e. text / textarea / checkbox /
74
- * radio / select / multiselect / upload etc
75
- * (required) 'title' => (string) table row title
76
- * (recommended) 'default_value' => (string|array) default value for the field
77
  * IMPORTANT:
78
  * - if the field has options, the default has to be the
79
- * key of one of the options
80
  * - if the field is a text field, the default **has** to be
81
  * an empty string as otherwise the user can't save
82
- * an empty value/delete the meta value
83
  * - if the field is a checkbox, the only valid values
84
- * are 'on' or 'off'
85
  * (semi-required) 'options' => (array) options for used with (multi-)select and radio
86
- * fields, required if that's the field type
87
- * key = (string) value which will be saved to db
88
- * value = (string) text label for the option
89
  * (optional) 'autocomplete' => (bool) whether autocomplete is on for text fields,
90
- * defaults to true
91
- * (optional) 'class' => (string) classname(s) to add to the actual <input> tag
92
- * (optional) 'description' => (string) description to show underneath the field
93
- * (optional) 'expl' => (string) label for a checkbox
94
- * (optional) 'help' => (string) help text to show on mouse over ? image
95
- * (optional) 'rows' => (int) number of rows for a textarea, defaults to 3
96
- *
97
  * (optional) 'placeholder' => (string) Currently only used by add-on plugins.
98
  * (optional) 'serialized' => (bool) whether the value is expected to be serialized,
99
- * i.e. an array or object, defaults to false
100
  * Currently only used by add-on plugins.
101
- *
102
- * {@internal
103
- * - Titles, help texts, description text and option labels are added via a translate_meta_boxes() method
104
- * in the relevant child classes (WPSEO_Metabox and WPSEO_Social_admin) as they are only needed there.
105
- * - Beware: even though the meta keys are divided into subsets, they still have to be uniquely named!}}
106
  */
107
  public static $meta_fields = array(
108
  'general' => array(
33
  /**
34
  * Prefix for all WPSEO meta values in the database.
35
  *
 
 
36
  * {@internal If at any point this would change, quite apart from an upgrade routine,
37
  * this also will need to be changed in the wpml-config.xml file.}}
38
+ *
39
+ * @var string
40
  */
41
  public static $meta_prefix = '_yoast_wpseo_';
42
 
68
  /**
69
  * Meta box field definitions for the meta box form.
70
  *
71
+ * {@internal
72
+ * - Titles, help texts, description text and option labels are added via a translate_meta_boxes() method
73
+ * in the relevant child classes (WPSEO_Metabox and WPSEO_Social_admin) as they are only needed there.
74
+ * - Beware: even though the meta keys are divided into subsets, they still have to be uniquely named!}}
75
+ *
76
+ * @var array $meta_fields
77
+ * Array format:
78
  * (required) 'type' => (string) field type. i.e. text / textarea / checkbox /
79
+ * radio / select / multiselect / upload etc.
80
+ * (required) 'title' => (string) table row title.
81
+ * (recommended) 'default_value' => (string|array) default value for the field.
82
  * IMPORTANT:
83
  * - if the field has options, the default has to be the
84
+ * key of one of the options.
85
  * - if the field is a text field, the default **has** to be
86
  * an empty string as otherwise the user can't save
87
+ * an empty value/delete the meta value.
88
  * - if the field is a checkbox, the only valid values
89
+ * are 'on' or 'off'.
90
  * (semi-required) 'options' => (array) options for used with (multi-)select and radio
91
+ * fields, required if that's the field type.
92
+ * key = (string) value which will be saved to db.
93
+ * value = (string) text label for the option.
94
  * (optional) 'autocomplete' => (bool) whether autocomplete is on for text fields,
95
+ * defaults to true.
96
+ * (optional) 'class' => (string) classname(s) to add to the actual <input> tag.
97
+ * (optional) 'description' => (string) description to show underneath the field.
98
+ * (optional) 'expl' => (string) label for a checkbox.
99
+ * (optional) 'help' => (string) help text to show on mouse over ? image.
100
+ * (optional) 'rows' => (int) number of rows for a textarea, defaults to 3.
 
101
  * (optional) 'placeholder' => (string) Currently only used by add-on plugins.
102
  * (optional) 'serialized' => (bool) whether the value is expected to be serialized,
103
+ * i.e. an array or object, defaults to false.
104
  * Currently only used by add-on plugins.
 
 
 
 
 
105
  */
106
  public static $meta_fields = array(
107
  'general' => array(
inc/class-wpseo-utils.php CHANGED
@@ -57,7 +57,7 @@ class WPSEO_Utils {
57
  *
58
  * {@internal current_user_can() checks internally whether a user is on wp-ms and adjusts accordingly.}}
59
  *
60
- * @since 1.8.0
61
  *
62
  * @return bool
63
  */
@@ -316,7 +316,7 @@ class WPSEO_Utils {
316
  * Sanitize a url for saving to the database.
317
  * Not to be confused with the old native WP function.
318
  *
319
- * @todo [JRF => whomever] Check/improve url verification.
320
  *
321
  * @since 1.8.0
322
  *
@@ -1179,24 +1179,41 @@ SVG;
1179
  return wp_json_encode( $data, $flags );
1180
  }
1181
 
1182
-
1183
  /**
1184
  * Output a Schema blob.
1185
  *
1186
  * @param array $graph The Schema graph array to output.
1187
  * @param string $class The (optional) class to add to the script tag.
 
 
1188
  */
1189
  public static function schema_output( $graph, $class = 'yoast-schema-graph' ) {
1190
  if ( ! is_array( $graph ) || empty( $graph ) ) {
1191
- return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1192
  }
1193
 
1194
  $output = array(
1195
  '@context' => 'https://schema.org',
1196
  '@graph' => $graph,
1197
  );
1198
-
1199
- echo "<script type='application/ld+json' class='", esc_attr( $class ), "'>", self::format_json_encode( $output ), '</script>', "\n";
1200
  }
1201
 
1202
  /* ********************* DEPRECATED METHODS ********************* */
@@ -1204,7 +1221,7 @@ SVG;
1204
  /**
1205
  * Returns the language part of a given locale, defaults to english when the $locale is empty.
1206
  *
1207
- * @see WPSEO_Language_Utils::get_language()
1208
  *
1209
  * @deprecated 9.5
1210
  * @codeCoverageIgnore
@@ -1227,7 +1244,7 @@ SVG;
1227
  * Can be removed when support for WordPress 4.6 will be dropped, in favor
1228
  * of WordPress get_user_locale() that already fallbacks to the site's locale.
1229
  *
1230
- * @see WPSEO_Language_Utils::get_user_locale()
1231
  *
1232
  * @deprecated 9.5
1233
  * @codeCoverageIgnore
@@ -1239,4 +1256,20 @@ SVG;
1239
 
1240
  return WPSEO_Language_Utils::get_user_locale();
1241
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1242
  }
57
  *
58
  * {@internal current_user_can() checks internally whether a user is on wp-ms and adjusts accordingly.}}
59
  *
60
+ * @since 1.8.0
61
  *
62
  * @return bool
63
  */
316
  * Sanitize a url for saving to the database.
317
  * Not to be confused with the old native WP function.
318
  *
319
+ * @todo [JRF => whomever] Check/improve url verification.
320
  *
321
  * @since 1.8.0
322
  *
1179
  return wp_json_encode( $data, $flags );
1180
  }
1181
 
 
1182
  /**
1183
  * Output a Schema blob.
1184
  *
1185
  * @param array $graph The Schema graph array to output.
1186
  * @param string $class The (optional) class to add to the script tag.
1187
+ *
1188
+ * @return bool
1189
  */
1190
  public static function schema_output( $graph, $class = 'yoast-schema-graph' ) {
1191
  if ( ! is_array( $graph ) || empty( $graph ) ) {
1192
+ return false;
1193
+ }
1194
+
1195
+ echo self::schema_tag( $graph, $class );
1196
+ return true;
1197
+ }
1198
+
1199
+ /**
1200
+ * Returns a script tag with Schema blob.
1201
+ *
1202
+ * @param array $graph The Schema graph array to output.
1203
+ * @param string $class The (optional) class to add to the script tag.
1204
+ *
1205
+ * @return false|string A schema blob with script tags.
1206
+ */
1207
+ public static function schema_tag( $graph, $class = 'yoast-schema-graph' ) {
1208
+ if ( ! is_array( $graph ) || empty( $graph ) ) {
1209
+ return false;
1210
  }
1211
 
1212
  $output = array(
1213
  '@context' => 'https://schema.org',
1214
  '@graph' => $graph,
1215
  );
1216
+ return "<script type='application/ld+json' class='" . esc_attr( $class ) . "'>" . self::format_json_encode( $output ) . '</script>' . "\n";
 
1217
  }
1218
 
1219
  /* ********************* DEPRECATED METHODS ********************* */
1221
  /**
1222
  * Returns the language part of a given locale, defaults to english when the $locale is empty.
1223
  *
1224
+ * @see WPSEO_Language_Utils::get_language()
1225
  *
1226
  * @deprecated 9.5
1227
  * @codeCoverageIgnore
1244
  * Can be removed when support for WordPress 4.6 will be dropped, in favor
1245
  * of WordPress get_user_locale() that already fallbacks to the site's locale.
1246
  *
1247
+ * @see WPSEO_Language_Utils::get_user_locale()
1248
  *
1249
  * @deprecated 9.5
1250
  * @codeCoverageIgnore
1256
 
1257
  return WPSEO_Language_Utils::get_user_locale();
1258
  }
1259
+
1260
+ /**
1261
+ * Gets an array of enabled features.
1262
+ *
1263
+ * @return string[] The array of enabled features.
1264
+ */
1265
+ public static function retrieve_enabled_features() {
1266
+ $enabled_features = array();
1267
+ if ( defined( 'YOAST_SEO_ENABLED_FEATURES' ) ) {
1268
+ $enabled_features = preg_split( '/,\W*/', YOAST_SEO_ENABLED_FEATURES );
1269
+ }
1270
+ // Make the array of enabled features filterable, so features can be enabled at will.
1271
+ $enabled_features = apply_filters( 'wpseo_enable_feature', $enabled_features );
1272
+
1273
+ return $enabled_features;
1274
+ }
1275
  }
inc/options/class-wpseo-option-wpseo.php CHANGED
@@ -22,7 +22,7 @@ class WPSEO_Option_Wpseo extends WPSEO_Option {
22
  *
23
  * {@internal Shouldn't be requested directly, use $this->get_defaults();}}
24
  *
25
- * @var array
26
  */
27
  protected $defaults = array(
28
  // Non-form fields, set via (ajax) function.
22
  *
23
  * {@internal Shouldn't be requested directly, use $this->get_defaults();}}
24
  *
25
+ * @var array
26
  */
27
  protected $defaults = array(
28
  // Non-form fields, set via (ajax) function.
inc/options/class-wpseo-option.php CHANGED
@@ -180,7 +180,7 @@ abstract class WPSEO_Option {
180
  /*
181
  * Make sure the option will always get validated, independently of register_setting()
182
  * (only available on back-end).
183
- */
184
  add_filter( 'sanitize_option_' . $this->option_name, array( $this, 'validate' ) );
185
 
186
  // Flushes the rewrite rules when option is updated.
180
  /*
181
  * Make sure the option will always get validated, independently of register_setting()
182
  * (only available on back-end).
183
+ */
184
  add_filter( 'sanitize_option_' . $this->option_name, array( $this, 'validate' ) );
185
 
186
  // Flushes the rewrite rules when option is updated.
inc/sitemaps/class-post-type-sitemap-provider.php CHANGED
@@ -163,12 +163,13 @@ class WPSEO_Post_Type_Sitemap_Provider implements WPSEO_Sitemap_Provider {
163
  $all_dates = array();
164
 
165
  if ( $max_pages > 1 ) {
 
166
 
167
  $sql = "
168
  SELECT post_modified_gmt
169
  FROM ( SELECT @rownum:=0 ) init
170
  JOIN {$wpdb->posts} USE INDEX( type_status_date )
171
- WHERE post_status IN ( 'publish', 'inherit' )
172
  AND post_type = %s
173
  AND ( @rownum:=@rownum+1 ) %% %d = 0
174
  ORDER BY post_modified_gmt ASC
@@ -543,7 +544,7 @@ class WPSEO_Post_Type_Sitemap_Provider implements WPSEO_Sitemap_Provider {
543
  * Also see {@link http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/}.
544
  */
545
  $sql = "
546
- SELECT l.ID, post_title, post_content, post_name, post_parent, post_author, post_modified_gmt, post_date, post_date_gmt
547
  FROM (
548
  SELECT {$wpdb->posts}.ID
549
  FROM {$wpdb->posts}
@@ -561,7 +562,6 @@ class WPSEO_Post_Type_Sitemap_Provider implements WPSEO_Sitemap_Provider {
561
 
562
  foreach ( $posts as $post ) {
563
  $post->post_type = $post_type;
564
- $post->post_status = 'publish';
565
  $post->filter = 'sample';
566
  $post->ID = (int) $post->ID;
567
  $post->post_parent = (int) $post->post_parent;
@@ -584,20 +584,24 @@ class WPSEO_Post_Type_Sitemap_Provider implements WPSEO_Sitemap_Provider {
584
  global $wpdb;
585
 
586
  $join = '';
587
- $status = "{$wpdb->posts}.post_status = 'publish'";
 
 
588
 
589
  // Based on WP_Query->get_posts(). R.
590
  if ( 'attachment' === $post_type ) {
591
  $join = " LEFT JOIN {$wpdb->posts} AS p2 ON ({$wpdb->posts}.post_parent = p2.ID) ";
592
- $status = "p2.post_status = 'publish' AND p2.post_password = ''";
 
 
593
  }
594
 
595
  $where_clause = "
596
- {$join}
597
- WHERE {$status}
598
- AND {$wpdb->posts}.post_type = %s
599
- AND {$wpdb->posts}.post_password = ''
600
- AND {$wpdb->posts}.post_date != '0000-00-00 00:00:00'
601
  ";
602
 
603
  return $wpdb->prepare( $where_clause, $post_type );
163
  $all_dates = array();
164
 
165
  if ( $max_pages > 1 ) {
166
+ $post_statuses = array_map( 'esc_sql', WPSEO_Sitemaps::get_post_statuses( $post_type ) );
167
 
168
  $sql = "
169
  SELECT post_modified_gmt
170
  FROM ( SELECT @rownum:=0 ) init
171
  JOIN {$wpdb->posts} USE INDEX( type_status_date )
172
+ WHERE post_status IN ('" . implode( "','", $post_statuses ) . "')
173
  AND post_type = %s
174
  AND ( @rownum:=@rownum+1 ) %% %d = 0
175
  ORDER BY post_modified_gmt ASC
544
  * Also see {@link http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/}.
545
  */
546
  $sql = "
547
+ SELECT l.ID, post_title, post_content, post_name, post_parent, post_author, post_status, post_modified_gmt, post_date, post_date_gmt
548
  FROM (
549
  SELECT {$wpdb->posts}.ID
550
  FROM {$wpdb->posts}
562
 
563
  foreach ( $posts as $post ) {
564
  $post->post_type = $post_type;
 
565
  $post->filter = 'sample';
566
  $post->ID = (int) $post->ID;
567
  $post->post_parent = (int) $post->post_parent;
584
  global $wpdb;
585
 
586
  $join = '';
587
+
588
+ $post_statuses = array_map( 'esc_sql', WPSEO_Sitemaps::get_post_statuses( $post_type ) );
589
+ $status_where = "{$wpdb->posts}.post_status IN ('" . implode( "','", $post_statuses ) . "')";
590
 
591
  // Based on WP_Query->get_posts(). R.
592
  if ( 'attachment' === $post_type ) {
593
  $join = " LEFT JOIN {$wpdb->posts} AS p2 ON ({$wpdb->posts}.post_parent = p2.ID) ";
594
+
595
+ $parent_statuses = array_diff( $post_statuses, array( 'inherit' ) );
596
+ $status_where = "p2.post_status IN ('" . implode( "','", $parent_statuses ) . "') AND p2.post_password = ''";
597
  }
598
 
599
  $where_clause = "
600
+ {$join}
601
+ WHERE {$status_where}
602
+ AND {$wpdb->posts}.post_type = %s
603
+ AND {$wpdb->posts}.post_password = ''
604
+ AND {$wpdb->posts}.post_date != '0000-00-00 00:00:00'
605
  ";
606
 
607
  return $wpdb->prepare( $where_clause, $post_type );
inc/sitemaps/class-sitemaps-renderer.php CHANGED
@@ -154,23 +154,7 @@ class WPSEO_Sitemaps_Renderer {
154
 
155
  $output .= $sitemap;
156
  $output .= "\n<!-- XML Sitemap generated by Yoast SEO -->";
157
-
158
- $debug = WP_DEBUG || ( defined( 'WPSEO_DEBUG' ) && true === WPSEO_DEBUG );
159
-
160
- if ( ! WP_DEBUG_DISPLAY || ! $debug ) {
161
- return $output;
162
- }
163
-
164
- $memory_used = number_format( ( memory_get_peak_usage() / 1048576 ), 2 );
165
- $queries_run = ( $transient ) ? 'Served from transient cache' : 'Queries executed ' . absint( $GLOBALS['wpdb']->num_queries );
166
-
167
- $output .= "\n<!-- {$memory_used}MB | {$queries_run} -->";
168
-
169
- if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {
170
-
171
- $queries = print_r( $GLOBALS['wpdb']->queries, true );
172
- $output .= "\n<!-- {$queries} -->";
173
- }
174
 
175
  return $output;
176
  }
@@ -369,4 +353,30 @@ class WPSEO_Sitemaps_Renderer {
369
 
370
  return plugin_dir_url( WPSEO_FILE ) . 'css/main-sitemap.xsl';
371
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372
  }
154
 
155
  $output .= $sitemap;
156
  $output .= "\n<!-- XML Sitemap generated by Yoast SEO -->";
157
+ $output .= $this->get_debug( $transient );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
 
159
  return $output;
160
  }
353
 
354
  return plugin_dir_url( WPSEO_FILE ) . 'css/main-sitemap.xsl';
355
  }
356
+
357
+ /**
358
+ * Adds debugging information to the output.
359
+ *
360
+ * @param bool $transient Transient cache was used or not.
361
+ *
362
+ * @return string Information about the functionality used to build the sitemap.
363
+ */
364
+ protected function get_debug( $transient ) {
365
+ $debug = defined( 'YOAST_SEO_DEBUG_SITEMAPS' ) && YOAST_SEO_DEBUG_SITEMAPS === true;
366
+ if ( ! $debug ) {
367
+ return '';
368
+ }
369
+
370
+ $memory_used = number_format( ( memory_get_peak_usage() / 1048576 ), 2 );
371
+ $queries_run = ( $transient ) ? 'Served from transient cache' : 'Queries executed ' . absint( $GLOBALS['wpdb']->num_queries );
372
+
373
+ $output = "\n<!-- {$memory_used}MB | {$queries_run} -->";
374
+
375
+ if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {
376
+ $queries = print_r( $GLOBALS['wpdb']->queries, true );
377
+ $output .= "\n<!-- {$queries} -->";
378
+ }
379
+
380
+ return $output;
381
+ }
382
  }
inc/sitemaps/class-sitemaps-router.php CHANGED
@@ -29,11 +29,11 @@ class WPSEO_Sitemaps_Router {
29
 
30
  $wp->add_query_var( 'sitemap' );
31
  $wp->add_query_var( 'sitemap_n' );
32
- $wp->add_query_var( 'xsl' );
33
 
34
  add_rewrite_rule( 'sitemap_index\.xml$', 'index.php?sitemap=1', 'top' );
35
  add_rewrite_rule( '([^/]+?)-sitemap([0-9]+)?\.xml$', 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]', 'top' );
36
- add_rewrite_rule( '([a-z]+)?-?sitemap\.xsl$', 'index.php?xsl=$matches[1]', 'top' );
37
  }
38
 
39
  /**
@@ -45,7 +45,7 @@ class WPSEO_Sitemaps_Router {
45
  */
46
  public function redirect_canonical( $redirect ) {
47
 
48
- if ( get_query_var( 'sitemap' ) || get_query_var( 'xsl' ) ) {
49
  return false;
50
  }
51
 
29
 
30
  $wp->add_query_var( 'sitemap' );
31
  $wp->add_query_var( 'sitemap_n' );
32
+ $wp->add_query_var( 'yoast-sitemap-xsl' );
33
 
34
  add_rewrite_rule( 'sitemap_index\.xml$', 'index.php?sitemap=1', 'top' );
35
  add_rewrite_rule( '([^/]+?)-sitemap([0-9]+)?\.xml$', 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]', 'top' );
36
+ add_rewrite_rule( '([a-z]+)?-?sitemap\.xsl$', 'index.php?yoast-sitemap-xsl=$matches[1]', 'top' );
37
  }
38
 
39
  /**
45
  */
46
  public function redirect_canonical( $redirect ) {
47
 
48
+ if ( get_query_var( 'sitemap' ) || get_query_var( 'yoast-sitemap-xsl' ) ) {
49
  return false;
50
  }
51
 
inc/sitemaps/class-sitemaps.php CHANGED
@@ -175,7 +175,7 @@ class WPSEO_Sitemaps {
175
  public function register_xsl( $name, $function, $rewrite = '' ) {
176
  add_action( 'wpseo_xsl_' . $name, $function );
177
  if ( ! empty( $rewrite ) ) {
178
- add_rewrite_rule( $rewrite, 'index.php?xsl=' . $name, 'top' );
179
  }
180
  }
181
 
@@ -230,9 +230,9 @@ class WPSEO_Sitemaps {
230
  return;
231
  }
232
 
233
- $xsl = get_query_var( 'xsl' );
234
 
235
- if ( ! empty( $xsl ) ) {
236
  /*
237
  * This is a method to provide the XSL via the home_url.
238
  * Needed when the site_url and home_url are not the same.
@@ -240,7 +240,7 @@ class WPSEO_Sitemaps {
240
  *
241
  * Whenever home_url and site_url are the same, the file can be loaded directly.
242
  */
243
- $this->xsl_output( $xsl );
244
  $this->sitemap_close();
245
 
246
  return;
@@ -495,14 +495,16 @@ class WPSEO_Sitemaps {
495
  $post_type_names = get_post_types( array( 'public' => true ) );
496
 
497
  if ( ! empty( $post_type_names ) ) {
 
 
498
  $sql = "
499
- SELECT post_type, MAX(post_modified_gmt) AS date
500
- FROM $wpdb->posts
501
- WHERE post_status IN ('publish','inherit')
502
- AND post_type IN ('" . implode( "','", $post_type_names ) . "')
503
- GROUP BY post_type
504
- ORDER BY post_modified_gmt DESC
505
- ";
506
 
507
  foreach ( $wpdb->get_results( $sql ) as $obj ) {
508
  $post_type_dates[ $obj->post_type ] = $obj->date;
@@ -582,4 +584,35 @@ class WPSEO_Sitemaps {
582
 
583
  return $entries;
584
  }