SEOPress - Version 5.3

Version Description

Read the blog post update = * NEW Regular expressions for redirects (PRO) * NEW Autocomplete for Redirections (PRO) * NEW Conditions for Redirections: if user logged in, logged out, both (PRO) * NEW Page Speed Insights redesign, now with Core Web Vitals score, Desktop + Mobile scores, Save as PDF, CRON (PRO) * NEW Exclude WPML hidden languages from XML sitemaps (post, page, post type and term taxonomy) * NEW Exclude Polylang PRO hidden languages from XML sitemaps (post, page, post type and term taxonomy) * NEW Accordion for SEOPress FAQ block (PRO) * NEW Ping Google and Bing daily automatically for XML Sitemaps * NEW Drag and drop for SEO dashboard cards * NEW Notification if a physical robots.txt file already exists * NEW Notification if your site has disallow all in robots.txt * NEW Autodetect WooCommerce fields for automatic product schema on creation * NEW 'seopress_sitemaps_xsl_css' hook to filter XML sitemaps CSS (props @edwinsiebel - https://www.seopress.org/support/hooks/filter-css-of-xsl-sitemaps/) * NEW 'seopress_sitemaps_xsl' hook to filter XSL sitemaps (props @edwinsiebel - https://www.seopress.org/support/hooks/filter-xsl-sitemap/) * NEW 'seopress_before_redirect' action hook to run custom code before the redirection (https://www.seopress.org/support/hooks/add-action-before-redirect/) * NEW 'seopress_sitemaps_single_url' hook to filter each URL fron single xml sitemaps (https://www.seopress.org/support/hooks/filter-the-urls-of-each-item-of-a-singular-xml-sitemap/) * NEW 'seopress_sitemaps_term_single_url' hook to filter each URL fron term xml sitemaps (https://www.seopress.org/support/hooks/filter-the-urls-of-each-item-of-a-taxonomy-xml-sitemap/) * NEW 'seopress_sitemaps_xml_ping_url' hook to filter xml sitemaps URL sent via the ping (https://www.seopress.org/support/hooks/filter-index-xml-sitemap-url-sent-to-google/) * NEW 'seopress_sitemaps_xml_ping_args' hook to filter xml sitemaps args for the ping (https://www.seopress.org/support/hooks/filter-the-arguments-of-the-ping-sitemap-query-for-google/) * NEW 'seopress_faq_block_inline_css' hook to filter inline CSS for FAQ block (https://www.seopress.org/support/hooks/disable-seopress-faq-block-inline-css/) * NEW 'seopress_faq_block_html' hook to filter the HTML of our FAQ block (https://www.seopress.org/support/hooks/filter-block-faq-html-block-editor/) * INFO Redirect sitemap_index.xml, wp-sitemap.xml to sitemaps.xml to avoid resubmit sitemaps in Google Search Console * INFO Author subtype for schemas will now use the website field first, else the author archive URL * INFO Add GTIN12 to product global Identifiers type (PRO) * INFO Remove nofollow links from comments area to content analysis * INFO Update updater * INFO Edit your social images (Facebook and Twitter) by clicking on the preview * INFO Display 100 entries in Redirections post type * INFO Knowledge Graph is now outputted on homepage only * INFO Improve hyphenation in Google Snippet Preview * INFO Disabling RSS feeds will redirect them to homepage if requested * FIX Exclude custom canonical URLs from xml sitemaps * FIX Product price amount OG tag * FIX Temporary fix to remove Add to cart GA event for archive page / related products if Elementor PRO is enabled to prevent a conflict * FIX Duplicated queries seopress_get_page_by_title() * FIX Publisher logo * FIX News xml sitemap with "&" in Publication Name field * FIX Documentation panel for Insights * FIX Author URL in schema (automatic and manual) * FIX Disable Orgnization / Person schemas from Knowledge Graph if Social feature is set to OFF * FIX "seopress_rich_snippets_publisher_logo" missing for wpml-config.xml file (WPML and Polylang users) * FIX Publisher logo Width and Height (it might be necessary to reupload it from SEO, PRO, Structured Data Types) * FIX Custom Shop page breadcrumbs * FIX Help link for Google Ads option * FIX Universal SEO metabox error with singular WC product in frontend * FIX Google Analytics dashboard widget configuration settings * FIX Conflict with Thrive builder * FIX Conflit with Remove /category/ in URL with Events Calendar plugin * FIX Some CSS * FIX CRON tasks * FIX i18n

View our complete changelog

Download this release

Release Info

Developer rainbowgeek
Plugin Icon 128x128 SEOPress
Version 5.3
Comparing to
See all releases

Code changes from version 5.2 to 5.3

Files changed (72) hide show
  1. assets/css/seopress.css +121 -20
  2. assets/css/seopress.min.css +1 -1
  3. assets/js/seopress-block-editor.js +51 -50
  4. assets/js/seopress-dashboard.js +43 -1
  5. assets/js/seopress-dashboard.min.js +1 -1
  6. assets/js/seopress-media-uploader.js +4 -2
  7. assets/js/seopress-media-uploader.min.js +1 -1
  8. inc/admin/admin-bar/admin-bar.php +0 -21
  9. inc/admin/admin-bar/admin-header.php +26 -4
  10. inc/admin/admin-features-list.php +3 -3
  11. inc/admin/admin-pages/Main.php +49 -26
  12. inc/admin/ajax-migrate/seopressor.php +2 -1
  13. inc/admin/ajax.php +34 -2
  14. inc/admin/blocks/insights.php +247 -242
  15. inc/admin/blocks/intro.php +1 -1
  16. inc/admin/blocks/news.php +97 -87
  17. inc/admin/blocks/notifications-center.php +823 -748
  18. inc/admin/blocks/tasks.php +98 -94
  19. inc/admin/callbacks/Advanced.php +1 -1
  20. inc/admin/callbacks/Analytics.php +1 -1
  21. inc/admin/callbacks/Social.php +2 -2
  22. inc/admin/callbacks/Titles.php +4 -2
  23. inc/admin/cron.php +36 -0
  24. inc/admin/docs/DocsLinks.php +66 -37
  25. inc/admin/metaboxes/admin-metaboxes-form.php +66 -10
  26. inc/admin/metaboxes/admin-metaboxes.php +20 -7
  27. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.asset.php +1 -1
  28. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.css +1 -25
  29. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.css.map +0 -1
  30. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.js +1 -891
  31. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.js.map +0 -1
  32. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/style-index.css +0 -2
  33. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/style-index.css.map +0 -1
  34. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/package-lock.json +37 -37
  35. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/accordion.css +0 -0
  36. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/accordion.js +9 -0
  37. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/edit.js +16 -4
  38. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/editor.scss +10 -8
  39. inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/register-block.php +64 -29
  40. inc/admin/sections/Analytics.php +7 -0
  41. inc/admin/sections/Sitemaps.php +8 -0
  42. inc/admin/settings/Advanced.php +1 -1
  43. inc/admin/wizard/admin-wizard.php +11 -7
  44. inc/functions/options-advanced-admin.php +30 -22
  45. inc/functions/options-import-export.php +27 -0
  46. inc/functions/options.php +4 -2
  47. inc/functions/sitemap/template-xml-sitemaps-single-term.php +63 -10
  48. inc/functions/sitemap/template-xml-sitemaps-xsl.php +14 -8
  49. inc/functions/sitemap/template-xml-sitemaps.php +57 -0
  50. languages/wp-seopress.pot +1 -1
  51. public/metaboxe.js +828 -453
  52. readme.txt +74 -77
  53. seopress-functions.php +36 -29
  54. seopress.php +50 -13
  55. src/Actions/Api/Metas/RedirectionSettings.php +1 -1
  56. src/Actions/Api/Metas/RobotSettings.php +1 -1
  57. src/Actions/Api/Metas/SocialSettings.php +1 -1
  58. src/Actions/Api/SearchUrl.php +41 -0
  59. src/Actions/Front/Schemas/PrintHeadJsonSchema.php +20 -0
  60. src/Actions/Options/Init.php +6 -4
  61. src/Actions/Sitemap/Render.php +8 -1
  62. src/Helpers/Metas/RobotSettings.php +3 -3
  63. src/JsonSchemas/Organization.php +1 -0
  64. src/Services/ContentAnalysis/DomAnalysis.php +19 -17
  65. src/Services/ContentAnalysis/GetContent/LinkNoFollow.php +1 -1
  66. src/Services/EnqueueModuleMetabox.php +6 -0
  67. src/Services/SearchUrl.php +41 -0
  68. src/Services/Sitemap/Render/Single.php +37 -0
  69. src/Services/Social/FacebookImageOptionMeta.php +27 -4
  70. src/Tags/AuthorUrl.php +7 -2
  71. templates/sitemap/single.php +17 -10
  72. vendor/composer/installed.php +6 -6
assets/css/seopress.css CHANGED
@@ -46,7 +46,7 @@
46
  Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
47
  --color: #757575;
48
  --colorDark: #1e1e1e;
49
- --colorAlert: #a00;
50
  --colorWarning: #ffba00;
51
  --colorSuccess: #4ab866;
52
  --colorLowAlert: #e39f48;
@@ -447,6 +447,10 @@ table.fixed thead .column-seopress_noindex {
447
  content: none;
448
  }
449
  /* Dashboard */
 
 
 
 
450
  .seopress-summary-items {
451
  display: flex;
452
  flex-wrap: wrap;
@@ -454,7 +458,6 @@ table.fixed thead .column-seopress_noindex {
454
  .seopress-summary-item {
455
  display: flex;
456
  flex-direction: column;
457
- height: 100%;
458
  padding: 20px;
459
  border-bottom: 1px solid var(--borderColorLight40);
460
  border-right: 1px solid var(--borderColorLight40);
@@ -462,6 +465,12 @@ table.fixed thead .column-seopress_noindex {
462
  text-decoration: none;
463
  width: 50%;
464
  color: var(--colorDark);
 
 
 
 
 
 
465
  }
466
  .seopress-summary-item-label {
467
  display: block;
@@ -477,7 +486,12 @@ table.fixed thead .column-seopress_noindex {
477
  font-size: 20px;
478
  line-height: 28px;
479
  }
480
- .seopress-tab.inside {
 
 
 
 
 
481
  padding: 20px;
482
  }
483
  #seopress-admin-tabs.ui-tabs {
@@ -927,18 +941,22 @@ table.fixed thead .column-seopress_noindex {
927
  }
928
  #seopress_content_analysis .analysis-score .notgood #bar,
929
  .column-seopress_score .analysis-score #bar.notgood {
930
- stroke-dashoffset: 565;
931
  stroke: var(--colorWarning);
932
  }
933
  #seopress_content_analysis .analysis-score svg circle,
934
- .column-seopress_score .analysis-score svg circle,
935
- #tab_seopress_page_speed .ps-score svg circle,
936
- #tab_seopress_ps .ps-score svg circle {
937
  stroke-dashoffset: 0;
938
  transition: stroke-dashoffset 1s linear;
939
  stroke: #ccc;
940
  stroke-width: 2em;
941
  }
 
 
 
 
 
 
942
  #tab_seopress_page_speed .ps-score,
943
  #tab_seopress_ps .ps-score {
944
  position: relative;
@@ -946,12 +964,8 @@ table.fixed thead .column-seopress_noindex {
946
  }
947
  #tab_seopress_page_speed .ps-score svg,
948
  #tab_seopress_ps .ps-score svg {
949
- width: 60px;
950
- height: 60px;
951
- }
952
- #tab_seopress_page_speed .ps-score svg circle,
953
- #tab_seopress_ps .ps-score svg circle {
954
- stroke-width: 1em;
955
  }
956
  #tab_seopress_page_speed .ps-score span,
957
  #tab_seopress_ps .ps-score span {
@@ -959,8 +973,8 @@ table.fixed thead .column-seopress_noindex {
959
  left: 0;
960
  position: absolute;
961
  top: 0;
962
- width: 60px;
963
- height: 60px;
964
  align-items: center;
965
  display: flex;
966
  justify-content: center;
@@ -978,6 +992,50 @@ table.fixed thead .column-seopress_noindex {
978
  #tab_seopress_ps .ps-score.red #bar {
979
  stroke: var(--colorAlert);
980
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
981
  #seopress_content_analysis .gr-analysis {
982
  clear: both;
983
  }
@@ -1470,6 +1528,8 @@ body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active {
1470
  font-weight: 400;
1471
  line-height: 18.2px;
1472
  display: inline;
 
 
1473
  }
1474
  #seopress_cpt .google-snippet-preview.mobile-preview .snippet-description,
1475
  #seopress_cpt
@@ -1582,9 +1642,44 @@ body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active {
1582
  width: 100%;
1583
  height: auto;
1584
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1585
  #seopress_cpt .twitter-snippet-box {
1586
  color: #4b4f56;
1587
  font-size: 14px;
 
 
1588
  }
1589
  #seopress_cpt .snippet-twitter-url {
1590
  color: #8899a6;
@@ -1646,8 +1741,8 @@ body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active {
1646
  }
1647
  #seopress_cpt .twitter-snippet-box img {
1648
  display: block;
1649
- height: 200px;
1650
- width: 436px;
1651
  object-fit: cover;
1652
  background-color: #f0f0f0;
1653
  text-align: center;
@@ -2027,7 +2122,8 @@ body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active {
2027
  }
2028
  .seopress-setup .seopress-notice,
2029
  #seopress-tabs .seopress-notice,
2030
- #seopress_pro_cpt .seopress-notice {
 
2031
  top: inherit;
2032
  left: inherit;
2033
  margin: 15px 0 30px 0;
@@ -2173,7 +2269,8 @@ body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active {
2173
  }
2174
  /* Notifications */
2175
  #seopress-notifications-center.is-active,
2176
- #seopress-news-panel.is-active {
 
2177
  display: block !important;
2178
  }
2179
  #seopress-notifications-center .seopress-alert {
@@ -2269,6 +2366,7 @@ body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active {
2269
  border: 1px solid var(--borderColor);
2270
  border-radius: 3px;
2271
  transform: rotate(90deg);
 
2272
  }
2273
  .seopress-item-toggle-options::before {
2274
  content: "\f11c";
@@ -2283,7 +2381,7 @@ body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active {
2283
  border-radius: 3px;
2284
  position: relative;
2285
  }
2286
- .seopress-option .seopress-card-actions button {
2287
  margin-left: 0.5em;
2288
  }
2289
  .seopress-card-title {
@@ -2293,6 +2391,9 @@ body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active {
2293
  justify-content: space-between;
2294
  align-items: center;
2295
  }
 
 
 
2296
  .seopress-card-title h2 {
2297
  margin: 0;
2298
  }
46
  Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
47
  --color: #757575;
48
  --colorDark: #1e1e1e;
49
+ --colorAlert: #eb0f00;
50
  --colorWarning: #ffba00;
51
  --colorSuccess: #4ab866;
52
  --colorLowAlert: #e39f48;
447
  content: none;
448
  }
449
  /* Dashboard */
450
+ .sp-dashboard-card-highlight {
451
+ border: 1px dashed #c3c4c7;
452
+ margin: 20px 0;
453
+ }
454
  .seopress-summary-items {
455
  display: flex;
456
  flex-wrap: wrap;
458
  .seopress-summary-item {
459
  display: flex;
460
  flex-direction: column;
 
461
  padding: 20px;
462
  border-bottom: 1px solid var(--borderColorLight40);
463
  border-right: 1px solid var(--borderColorLight40);
465
  text-decoration: none;
466
  width: 50%;
467
  color: var(--colorDark);
468
+ justify-content: center;
469
+ }
470
+ @media only screen and (max-width: 782px) {
471
+ .seopress-summary-item {
472
+ width: 100%;
473
+ }
474
  }
475
  .seopress-summary-item-label {
476
  display: block;
486
  font-size: 20px;
487
  line-height: 28px;
488
  }
489
+ .seopress-summary-item-data small {
490
+ font-weight: normal;
491
+ font-size: 11px;
492
+ text-transform: uppercase;
493
+ }
494
+ .seopress-tab.inside, .seopress-summary-items .inside {
495
  padding: 20px;
496
  }
497
  #seopress-admin-tabs.ui-tabs {
941
  }
942
  #seopress_content_analysis .analysis-score .notgood #bar,
943
  .column-seopress_score .analysis-score #bar.notgood {
944
+ stroke-dashoffset: 101px;
945
  stroke: var(--colorWarning);
946
  }
947
  #seopress_content_analysis .analysis-score svg circle,
948
+ .column-seopress_score .analysis-score svg circle {
 
 
949
  stroke-dashoffset: 0;
950
  transition: stroke-dashoffset 1s linear;
951
  stroke: #ccc;
952
  stroke-width: 2em;
953
  }
954
+ #tab_seopress_page_speed .ps-score svg path,
955
+ #tab_seopress_ps .ps-score svg path {
956
+ stroke-linecap: round;
957
+ stroke-width: 2.8;
958
+ fill: none;
959
+ }
960
  #tab_seopress_page_speed .ps-score,
961
  #tab_seopress_ps .ps-score {
962
  position: relative;
964
  }
965
  #tab_seopress_page_speed .ps-score svg,
966
  #tab_seopress_ps .ps-score svg {
967
+ width: 80px;
968
+ height: 80px;
 
 
 
 
969
  }
970
  #tab_seopress_page_speed .ps-score span,
971
  #tab_seopress_ps .ps-score span {
973
  left: 0;
974
  position: absolute;
975
  top: 0;
976
+ width: 80px;
977
+ height: 80px;
978
  align-items: center;
979
  display: flex;
980
  justify-content: center;
992
  #tab_seopress_ps .ps-score.red #bar {
993
  stroke: var(--colorAlert);
994
  }
995
+ #tab_seopress_ps .score,
996
+ .wrap-seopress-score .score {
997
+ width: 12px;
998
+ height: 12px;
999
+ display: inline-block;
1000
+ margin-right: 10px;
1001
+ vertical-align: middle;
1002
+ }
1003
+ #tab_seopress_ps .score.red,
1004
+ .wrap-seopress-score .score.red {
1005
+ border-bottom-color: var(--colorAlert);
1006
+ border-bottom-style: solid;
1007
+ border-bottom-width: 12px;
1008
+ border-left-color: rgba(0, 0, 0, 0);
1009
+ border-left-style: solid;
1010
+ border-left-width: 6px;
1011
+ border-right-color: rgba(0, 0, 0, 0);
1012
+ border-right-style: solid;
1013
+ border-right-width: 6px;
1014
+ }
1015
+ .wrap-seopress-score small {
1016
+ font-size: 12px;
1017
+ }
1018
+ .wrap-seopress-score small.red,
1019
+ .wrap-seopress-score small.yellow {
1020
+ color: var(--colorAlert);
1021
+ }
1022
+ #tab_seopress_ps .score.yellow,
1023
+ .wrap-seopress-score .score.yellow {
1024
+ background-color: var(--colorWarning);
1025
+ display: inline-block;
1026
+ }
1027
+ #tab_seopress_ps .score.green,
1028
+ .wrap-seopress-score .score.green {
1029
+ border-radius: 100%;
1030
+ background-color: var(--colorSuccess);
1031
+ }
1032
+ .wrap-seopress-score small.green {
1033
+ color: var(--colorSuccess);
1034
+ }
1035
+ .wrap-seopress-score .score.null {
1036
+ background: #ccc;
1037
+ border-radius: 100%;
1038
+ }
1039
  #seopress_content_analysis .gr-analysis {
1040
  clear: both;
1041
  }
1528
  font-weight: 400;
1529
  line-height: 18.2px;
1530
  display: inline;
1531
+ hyphens: none;
1532
+ word-break: normal;
1533
  }
1534
  #seopress_cpt .google-snippet-preview.mobile-preview .snippet-description,
1535
  #seopress_cpt
1642
  width: 100%;
1643
  height: auto;
1644
  }
1645
+ .seopress_social_fb_img_upload,
1646
+ .seopress_social_twitter_img_upload {
1647
+ position: absolute;
1648
+ width: 100%;
1649
+ cursor: pointer;
1650
+ height: 100%;
1651
+ left: 0;
1652
+ top: 0;
1653
+ }
1654
+ .seopress_social_fb_img_upload:hover::after,
1655
+ .seopress_social_twitter_img_upload:hover::after {
1656
+ content: '\f464';
1657
+ position: absolute;
1658
+ font-family: 'dashicons';
1659
+ width: 100%;
1660
+ height: 100%;
1661
+ top: 0;
1662
+ left: 0;
1663
+ font-size: 40px;
1664
+ background: rgb(255 255 255 / 70%);
1665
+ display: flex;
1666
+ justify-content: center;
1667
+ align-items: center;
1668
+ color: #1e1e1e;
1669
+ }
1670
+ .snippet-fb-img,
1671
+ .snippet-fb-img-custom,
1672
+ .snippet-fb-img-default,
1673
+ .snippet-twitter-img,
1674
+ .snippet-twitter-img-custom,
1675
+ .snippet-twitter-img-default {
1676
+ position: relative;
1677
+ }
1678
  #seopress_cpt .twitter-snippet-box {
1679
  color: #4b4f56;
1680
  font-size: 14px;
1681
+ width: 504px;
1682
+
1683
  }
1684
  #seopress_cpt .snippet-twitter-url {
1685
  color: #8899a6;
1741
  }
1742
  #seopress_cpt .twitter-snippet-box img {
1743
  display: block;
1744
+ height: 263px;
1745
+ width: 504px;
1746
  object-fit: cover;
1747
  background-color: #f0f0f0;
1748
  text-align: center;
2122
  }
2123
  .seopress-setup .seopress-notice,
2124
  #seopress-tabs .seopress-notice,
2125
+ #seopress_pro_cpt .seopress-notice,
2126
+ #seopress_insights_dashboard_rankings_widget .seopress-notice {
2127
  top: inherit;
2128
  left: inherit;
2129
  margin: 15px 0 30px 0;
2269
  }
2270
  /* Notifications */
2271
  #seopress-notifications-center.is-active,
2272
+ #seopress-news-panel.is-active,
2273
+ #notice-insights-alert.is-active {
2274
  display: block !important;
2275
  }
2276
  #seopress-notifications-center .seopress-alert {
2366
  border: 1px solid var(--borderColor);
2367
  border-radius: 3px;
2368
  transform: rotate(90deg);
2369
+ display: inline-block;
2370
  }
2371
  .seopress-item-toggle-options::before {
2372
  content: "\f11c";
2381
  border-radius: 3px;
2382
  position: relative;
2383
  }
2384
+ .seopress-option .seopress-card-actions a+button {
2385
  margin-left: 0.5em;
2386
  }
2387
  .seopress-card-title {
2391
  justify-content: space-between;
2392
  align-items: center;
2393
  }
2394
+ .seopress-dashboard-columns .seopress-dashboard-column:last-child .seopress-card-title:hover {
2395
+ cursor: move;
2396
+ }
2397
  .seopress-card-title h2 {
2398
  margin: 0;
2399
  }
assets/css/seopress.min.css CHANGED
@@ -1 +1 @@
1
- #seopress_content_analysis *,#seopress_cpt *,#seopress_pro_cpt *,.seopress-option *,.seopress-styles *{box-sizing:border-box}@font-face{font-family:seopress;src:url(../fonts/seopress.eot?81521271);src:url(../fonts/seopress.eot?81521271#iefix) format("embedded-opentype"),url(../fonts/seopress.woff?81521271) format("woff2"),url(../fonts/seopress.woff?81521271) format("woff"),url(../fonts/seopress.ttf?81521271) format("truetype"),url(../fonts/seopress.svg?81521271#seopress) format("svg");font-weight:400;font-style:normal}[class*=" icon-seopress"],[class^=icon-seopress-]{font-family:seopress!important;font-size:14px!important;line-height:24px!important}#adminmenu div.wp-menu-image.dashicons-admin-seopress::before{content:"\e800";font-family:seopress;font-weight:700;font-size:12px;line-height:20px}#seopress_content_analysis,#seopress_cpt,#seopress_pro_cpt,#wpadminbar,.column-seopress_score,.post-type-seopress_404 #wpcontent,.post-type-seopress_schemas #wpcontent,.seopress-option #wpcontent,.seopress-styles #wpcontent,.seopress-ui-datepicker{--primaryColor:#007cba;--paragraphColor:#757575;--fontSize:13px;--fontFamily:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;--color:#757575;--colorDark:#1e1e1e;--colorAlert:#a00;--colorWarning:#ffba00;--colorSuccess:#4ab866;--colorLowAlert:#e39f48;--colorPre:#37864b;--colorIcon:#d7dade;--lineHeight:24px;--titleColor:#3c434a;--titleFontSize:20px;--titleFontWeight:normal;--titleMargin:10px 0;--backgroundPrimary:#007cba;--backgroundPrimaryHover:#006ba1;--backgroundSecondaryHover:#f0f0f0;--borderColor:#a7aaad;--borderColorLight:#dcdcde;--borderColorLight40:rgba(220, 220, 222, 0.4);--borderColorCard:#e2e4e7;--borderColorTab:#c3c4c7}.seopress-option .text-center,.seopress-styles .text-center{text-align:center}.post-type-seopress_404 .btn,.post-type-seopress_schemas .btn,.seopress-option .btn,.seopress-styles .btn{display:inline-flex;text-decoration:none;font-size:var(--fontSize);margin:0;border:0;cursor:pointer;-webkit-appearance:none;background:0 0;transition:box-shadow .1s linear;height:36px;align-items:center;padding:6px 12px;border-radius:2px;vertical-align:middle;color:var(--colorDark);white-space:nowrap;outline:1px solid transparent}.post-type-seopress_404 .btnPrimary,.post-type-seopress_schemas .btnPrimary,.seopress-option .btnPrimary,.seopress-styles .btnPrimary{background:var(--primaryColor);color:#fff;text-decoration:none}.post-type-seopress_404 .btnPrimary:hover,.post-type-seopress_schemas .btnPrimary:hover,.seopress-option .btnPrimary:hover,.seopress-styles .btnPrimary:hover{background:var(--backgroundPrimaryHover);color:#fff}.post-type-seopress_404 .btnSecondary,.post-type-seopress_schemas .btnSecondary,.seopress-option .btnSecondary,.seopress-styles .btnSecondary{box-shadow:inset 0 0 0 1px var(--primaryColor);color:var(--primaryColor);background:0 0}.post-type-seopress_404 .btnTertiary,.post-type-seopress_schemas .btnTertiary,.seopress-option .btnTertiary,.seopress-styles .btnTertiary{color:var(--primaryColor);background:0 0}.post-type-seopress_404 .btnTertiary:hover,.post-type-seopress_schemas .btnTertiary:hover,.seopress-option .btnTertiary:hover,.seopress-styles .btnTertiary:hover{box-shadow:inset 0 0 0 1px var(--primaryColor)}.seopress-option hr,.seopress-styles hr{align-self:center;flex-grow:1;height:1px;margin:0 10px}#seopress-tabs.wrap .list-none{list-style:none;padding-left:0}.seopress-option .dashicons,.seopress-page-list .dashicons{vertical-align:middle;margin-right:5px;text-decoration:none}#seopress-news-panel .seopress-item-inner .dashicons{vertical-align:top}.seopress-button{text-transform:uppercase;background:#fff;border-color:#c8d7e1;border-style:solid;border-width:1px 1px 2px;color:#2e4453;display:inline-block;margin:0;outline:0;overflow:hidden;text-overflow:ellipsis;text-decoration:none;vertical-align:top;font-size:14px;line-height:20px;padding:6px 8px 6px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.seopress-button:hover{border-color:#a8bece;color:#00a0d2}.seopress-button .dashicons{vertical-align:middle}body .seopress-option h2{color:var(--titleColor);font-size:20px;line-height:24px;font-weight:400}body .seopress-option h3{color:var(--titleColor);font-size:16px;line-height:20px}#seopress_content_analysis input[type=text],#seopress_content_analysis textarea,#seopress_cpt input[type=text],#seopress_cpt textarea,#seopress_pro_cpt input[type=text],#seopress_pro_cpt textarea{width:100%;display:inline-block}#seopress_cpt #tabs-6 input[type=number]{min-width:200px}#seopress_cpt #tabs-6 #wrap-videos .video:first-child .remove-video{display:none}#seopress_content_analysis label,#seopress_cpt label,#seopress_pro_cpt label{margin-bottom:8px;display:inline-block;width:100%}#seopress_cpt #tabs-6{padding:0}body .seopress-option input[type=password],body .seopress-option input[type=text],body .seopress-option select,body .seopress-option textarea{max-width:35rem;border:1px solid var(--borderColor);box-shadow:0 2px 6px rgb(0 0 0 / 5%);width:100%}body .seopress-option select{min-height:50px}.wrap-opening-hours select{width:inherit}body .seopress-option input[type=number],body .seopress-option input[type=password],body .seopress-option input[type=text]{line-height:46px}body .seopress-option input[type=number]:hover,body .seopress-option input[type=password]:hover,body .seopress-option input[type=text]:hover,body .seopress-option select:hover,body .seopress-option textarea:hover{border-color:#787c82}body .seopress-option input[type=number]:active,body .seopress-option input[type=number]:focus,body .seopress-option input[type=password]:active,body .seopress-option input[type=password]:focus,body .seopress-option input[type=text]:active,body .seopress-option input[type=text]:focus,body .seopress-option select:active,body .seopress-option select:focus,body .seopress-option textarea:active,body .seopress-option textarea:focus{box-shadow:0 0 0 2px var(--primaryColor);border-color:transparent}@media only screen and (max-width:1024px){body .seopress-option input[type=number],body .seopress-option input[type=password],body .seopress-option input[type=text],body .seopress-option textarea{min-width:inherit;width:100%}}#seopress_content_analysis input[type=checkbox],#seopress_cpt input[type=checkbox],#seopress_pro_cpt input[type=checkbox],body .seopress-option input[type=checkbox]{font-family:var(--fontFamily);padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;border:1px solid var(--color);font-size:16px;line-height:normal;border:1px solid var(--colorDark);margin-right:12px;transition:none;border-radius:2px;background:#fff;color:var(--colorDark);clear:none;cursor:pointer;display:inline-block;line-height:0;margin:-1px 4px 0 0!important;outline:0;padding:0!important;text-align:center;vertical-align:top;width:20px;height:20px;-webkit-appearance:none;appearance:none;transition:.1s border-color ease-in-out}#seopress_content_analysis input[type=checkbox]:checked::before,#seopress_cpt input[type=checkbox]:checked::before,#seopress_pro_cpt input[type=checkbox]:checked::before,body .seopress-option input[type=checkbox]:checked::before{content:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");background:var(--primaryColor);margin:-1px;width:20px;height:20px}#seopress_content_analysis input[type=checkbox]:active,#seopress_content_analysis input[type=checkbox]:focus,#seopress_cpt input[type=checkbox]:active,#seopress_cpt input[type=checkbox]:focus,#seopress_pro_cpt input[type=checkbox]:active,#seopress_pro_cpt input[type=checkbox]:focus,body .seopress-option input[type=checkbox]:active,body .seopress-option input[type=checkbox]:focus{box-shadow:0 0 0 2px var(--primaryColor);border-color:transparent}.field-recommended,.field-required{font-weight:700}.field-required{color:var(--colorAlert)}.field-recommended{color:var(--colorWarning)}.form-table td{padding:15px 0}.form-table td p{margin:4px 0}.form-table td p.seopress_wrap_archive_cpt{margin-bottom:15px}table.wp-list-table .manage_column.column-seopress_canonical,table.wp-list-table .manage_column.column-seopress_desc,table.wp-list-table .manage_column.column-seopress_insights,table.wp-list-table .manage_column.column-seopress_noindex,table.wp-list-table .manage_column.column-seopress_redirect_enable,table.wp-list-table .manage_column.column-seopress_redirect_url,table.wp-list-table .manage_column.column-seopress_title,table.wp-list-table .manage_column.column-seopress_tkw{width:7%!important}.post-type-product table.fixed thead .column-seopress_desc,.post-type-product table.fixed thead .column-seopress_title{width:8%}.post-type-product .fixed .column-seopress_ps,.post-type-product .fixed .column-seopress_words,.post-type-product table.fixed thead .column-seopress_canonical,.post-type-product table.fixed thead .column-seopress_redirect_enable,.post-type-product table.fixed thead .column-seopress_redirect_url,.post-type-product table.fixed thead .column-seopress_tkw{width:6%}.post-type-product .fixed .column-seopress_score{width:50px}table.fixed thead .column-seopress_nofollow,table.fixed thead .column-seopress_noindex{width:100px}@media only screen and (max-width:1200px){table.fixed .column-seopress_canonical>div,table.fixed .column-seopress_desc>div,table.fixed .column-seopress_redirect_enable>div,table.fixed .column-seopress_redirect_url>div,table.fixed .column-seopress_title>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}table.fixed thead .column-seopress_canonical,table.fixed thead .column-seopress_nofollow,table.fixed thead .column-seopress_noindex,table.fixed thead .column-seopress_ps,table.fixed thead .column-seopress_redirect_enable,table.fixed thead .column-seopress_redirect_url,table.fixed thead .column-seopress_score,table.fixed thead .column-seopress_tkw,table.fixed thead .column-seopress_words{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.post-type-seopress_backlinks .wp-list-table .column-seopress_backlinks_url{width:35%}.post-type-seopress_backlinks .wp-list-table .column-seopress_backlinks_anchor_text{width:20%}.seopress-styles #seopress-header{padding:22px 120px 22px 40px;height:60px;margin:0 auto;width:calc(100% - 160px);background:#fff;position:fixed;top:32px;z-index:110;display:flex;justify-content:space-between;align-items:center}.folded.seopress-styles #seopress-header{width:calc(100% - 35px)}@media only screen and (max-width:782px){.seopress-styles #seopress-header{width:100%;padding:22px;top:46px;position:absolute}}#seopress-header #seopress-navbar ul{margin:0;padding:0}#seopress-header #seopress-navbar ul li{margin:0;display:inline-block;position:relative;padding:0 20px 0 0;font-weight:700}#seopress-header #seopress-navbar ul li::after{content:"/";color:var(--paragraphColor);position:absolute;display:block;top:0;left:calc(100% - 10px)}#seopress-header #seopress-navbar ul li:last-child:after{content:none}.seopress-summary-items{display:flex;flex-wrap:wrap}.seopress-summary-item{display:flex;flex-direction:column;height:100%;padding:20px;border-bottom:1px solid var(--borderColorLight40);border-right:1px solid var(--borderColorLight40);line-height:1.4em;text-decoration:none;width:50%;color:var(--colorDark)}.seopress-summary-item-label{display:block;margin-bottom:16px;color:var(--color);font-size:14px;line-height:20px}.seopress-summary-item-data{margin-bottom:4px;font-weight:500;color:var(--colorDark);font-size:20px;line-height:28px}.seopress-tab.inside{padding:20px}#seopress-admin-tabs.ui-tabs{position:relative;padding:.2em;border:none;font-family:inherit;font-size:inherit}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:-1px .2em 0 0;padding:0;white-space:nowrap;border:none;background:0 0}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li a{float:left;padding:.38em 1em .75rem;outline:0;border-bottom:2px solid #fff}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li.ui-state-disabled a,#seopress-admin-tabs.ui-tabs .ui-tabs-nav li.ui-tabs-active a,#seopress-admin-tabs.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text;border-bottom:2px solid #23282d;color:#23282d}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li a,#seopress-admin-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer;color:#0073aa;text-decoration:none}#seopress-admin-tabs.ui-tabs-vertical{width:55em}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-nav{padding:.2em .1em .2em .2em;float:left;width:12em}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-nav li{clear:left;width:100%;border-bottom-width:1px!important;border-right-width:0!important;margin:0 -1px .2em 0}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-nav li.ui-tabs-active{padding-bottom:0;padding-right:.1em;border-right-width:1px}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-panel{padding:1em;float:right;width:40em}#seopress-admin-tabs.wrap{background:#fff;display:block;width:64rem;max-width:100%;margin:0 auto}@media only screen and (max-width:1024px){#seopress-admin-tabs.wrap{width:100%}}#seopress-admin-tabs .seopress-tab{width:100%;display:none}#seopress-admin-tabs .seopress-tab.active{visibility:visible;overflow:inherit;opacity:1;transform:translateX(0);display:inherit;position:relative}.seopress-dashboard-columns{display:flex;max-width:64rem;margin:0 auto;justify-content:space-between;flex-direction:row}.seopress-dashboard-column{align-self:flex-start;width:calc(50% - 12px);margin:0}@media only screen and (max-width:782px){.seopress-dashboard-columns{max-width:100%;flex-direction:column}.seopress-dashboard-column{width:100%}}#seopress-admin-tabs .ui-tabs-nav,.seopress-get-started{margin:0 auto 20px;max-width:64rem;padding:2rem;width:100%;border-radius:0 0 4px 4px}.seopress-get-started{background:#fff url(img/bg-hero-started.svg) no-repeat 100% 50%/contain;position:relative}.seopress-get-started .inside{padding:2rem}.seopress-get-started .preheader{text-transform:uppercase;font-size:11px;font-weight:600;color:var(--paragraphColor)}.seopress-activity-panel-tabs{height:60px;display:flex;align-items:center}.seopress-activity-panel-tabs .btn{display:flex;flex-direction:column;justify-content:center;color:var(--color);height:60px;padding:10px 26px;border-bottom:3px solid transparent}.seopress-activity-panel-tabs .btn:hover{background:var(--backgroundSecondaryHover)}.seopress-activity-panel-tabs .btn.is-active{border-bottom:3px solid var(--backgroundPrimary);color:var(--colorDark)}.seopress-activity-panel-wrapper{height:calc(100vh - 92px);top:92px;background:var(--backgroundSecondaryHover);width:510px;transform:translateX(100%);transition-duration:.3s;transition-timing-function:ease-in-out;position:fixed;right:0;z-index:1000;overflow-x:hidden;overflow-y:auto}@media only screen and (max-width:782px){.seopress-activity-panel-wrapper{top:106px}}.seopress-activity-panel-wrapper.is-open{transform:none;box-shadow:0 12px 12px 0 rgb(85 93 102 / 30%)}.seopress-activity-panel-header{background:#e0e0e0;padding:16px 24px}.seopress-activity-panel-content{background:#fff;padding:16px 24px}.seopress-list-items,.seopress-list-items .seopress-item{margin:0}.seopress-list-items .seopress-item{border-bottom:1px solid var(--borderColorLight40)}.seopress-list-items .seopress-item:last-child{border-bottom:none}.seopress-list-items .seopress-item .seopress-item-inner{color:var(--primaryColor);text-decoration:none;padding:15px 20px;background:#fff;font-size:var(--fontSize);font-weight:700;width:100%}.seopress-option .has-action{display:flex;align-items:center}.seopress-list-items .seopress-item .seopress-item-inner:hover{background:var(--backgroundSecondaryHover)}.seopress-list-items .seopress-item-after,.seopress-list-items .seopress-item-before{margin:0 20px 0 10px;position:relative}.seopress-list-items .seopress-item-after::after,.seopress-list-items .seopress-item-before::before{content:"\f330";font-family:Dashicons;vertical-align:middle;font-size:20px;font-weight:400}.seopress-list-items .seopress-item-after{margin-left:auto;padding-left:20px;margin-right:0}.seopress-list-items .seopress-item-after::after{content:"\f345"}.seopress-list-items .seopress-item .seopress-item-title{margin:5px 0;color:var(--primaryColor)}.seopress-list-items .seopress-item .seopress-item-date{color:var(--paragraphColor);font-weight:400;margin:0}.seopress-list-items .seopress-item .seopress-item-content{color:var(--colorDark);font-weight:400;margin:0}.seopress-list-items .seopress-item .seopress-item-inner.check{position:relative}.seopress-list-items .seopress-item .seopress-item-inner.check::before{content:"";width:32px;height:32px;font-size:24px;vertical-align:middle;border-radius:50px;color:#fff;margin-right:10px;display:inline-block;border:1px solid var(--borderColorLight);line-height:32px;text-align:center}.seopress-list-items .seopress-item .seopress-item-inner.done::before{background:var(--backgroundPrimary);border:none;content:"\f15e";font-family:Dashicons}.sp-tooltip{position:relative;margin-left:5px;display:inline-block;cursor:help;vertical-align:bottom;text-align:left;background:0 0;border:none;padding:0}.sp-tooltip .dashicons{color:var(--colorDark)}.sp-tooltip .sp-tooltiptext{visibility:hidden;position:absolute;z-index:999999999;width:350px;right:-310px;padding:20px;top:25px;font-weight:400;box-shadow:0 3px 30px rgb(25 30 35 / 10%);border:1px solid var(--borderColorLight40);background:#fff;word-break:break-word;text-transform:none}.sp-tooltip .sp-tooltiptext::before{border:8px solid var(--borderColorLight40);top:-8px}.sp-tooltip .sp-tooltiptext::after{border:8px solid #fff;top:-6px}.sp-tooltip .sp-tooltiptext::after,.sp-tooltip .sp-tooltiptext::before{border-bottom-style:solid;border-left-color:transparent;border-right-color:transparent;border-top:none;margin-left:-10px;content:"";position:absolute;height:0;width:0;line-height:0;left:30px}.sp-tooltip:active .sp-tooltiptext,.sp-tooltip:focus .sp-tooltiptext,.sp-tooltip:hover .sp-tooltiptext{visibility:visible}.sp-tooltip .sp-tooltip-headings{font-size:18px;font-weight:600;margin-bottom:20px;display:block}.sp-tooltip .sp-tooltip-desc{margin-bottom:20px;display:block;border-bottom:1px solid var(--borderColorLight40);padding-bottom:20px;font-size:var(--fontSize);line-height:1.5}.sp-tooltip .sp-tooltip-code{font-family:Menlo,Monaco,Andale Mono,Courier New,monospace;display:block;word-break:break-all;color:var(--colorPre);font-size:11px}.analysis-score .sp-tooltip{vertical-align:middle;font-size:.75em}#seopress_content_analysis .wrap-insights-post .sp-tooltip *{font-weight:400}#seopress_content_analysis .wrap-insights-post .sp-tooltip-headings{font-weight:700}#seopress_content_analysis a{color:var(--backgroundPrimary)}#seopress_content_analysis a.nounderline,#seopress_content_analysis a.nounderline:hover{text-decoration:none}#seopress_content_analysis .wrap-seopress-analysis{display:inline-block;width:100%}#seopress_content_analysis .col-left{width:calc(50% - 30px);float:left;margin-right:30px}#seopress_content_analysis .col-right{float:right;width:50%}#seopress_content_analysis #seopress_suggestions{display:inline-block;width:100%;margin:0;height:auto;padding:20px 0;position:relative;left:-5px}#seopress_content_analysis #seopress_suggestions li{list-style:none;margin:5px;display:inline-block}#seopress_content_analysis .analysis-score{clear:both;border-top:1px solid var(--borderColorCard);display:flex;justify-content:space-between;align-items:center}.column-seopress_score .analysis-score{display:flex;align-content:center}#seopress_content_analysis .analysis-score p,.column-seopress_score .analysis-score p{font-weight:700;font-size:1.2em}#seopress_content_analysis .analysis-score svg,.column-seopress_score .analysis-score svg{display:inline-block;height:30px;width:30px;margin:0;border-radius:100%;position:relative;font-weight:600;shape-rendering:geometricprecision;font-size:.5rem;vertical-align:middle;margin-right:15px}.column-seopress_score .analysis-score p,.column-seopress_score .analysis-score svg{margin:0}@keyframes loadingPulse{0%{stroke:#adc5d2}50%{stroke:#00a0d2}100%{stroke:#adc5d2}}#seopress_content_analysis .analysis-score .loading #bar{stroke-dashoffset:0!important;stroke:#adc5d2!important;animation:loadingPulse 3s infinite ease-in-out}#seopress_content_analysis .analysis-score .good #bar,.column-seopress_score .analysis-score #bar.good{stroke:var(--colorSuccess)}#seopress_content_analysis .analysis-score .notgood #bar,.column-seopress_score .analysis-score #bar.notgood{stroke-dashoffset:565;stroke:var(--colorWarning)}#seopress_content_analysis .analysis-score svg circle,#tab_seopress_page_speed .ps-score svg circle,#tab_seopress_ps .ps-score svg circle,.column-seopress_score .analysis-score svg circle{stroke-dashoffset:0;transition:stroke-dashoffset 1s linear;stroke:#ccc;stroke-width:2em}#tab_seopress_page_speed .ps-score,#tab_seopress_ps .ps-score{position:relative;display:inline-block}#tab_seopress_page_speed .ps-score svg,#tab_seopress_ps .ps-score svg{width:60px;height:60px}#tab_seopress_page_speed .ps-score svg circle,#tab_seopress_ps .ps-score svg circle{stroke-width:1em}#tab_seopress_page_speed .ps-score span,#tab_seopress_ps .ps-score span{font-weight:700;left:0;position:absolute;top:0;width:60px;height:60px;align-items:center;display:flex;justify-content:center;margin:0}#tab_seopress_page_speed .ps-score.green #bar,#tab_seopress_ps .ps-score.green #bar{stroke:var(--colorSuccess)}#tab_seopress_page_speed .ps-score.yellow #bar,#tab_seopress_ps .ps-score.yellow #bar{stroke:var(--colorWarning)}#tab_seopress_page_speed .ps-score.red #bar,#tab_seopress_ps .ps-score.red #bar{stroke:var(--colorAlert)}#seopress_content_analysis .gr-analysis{clear:both}#seopress_content_analysis .gr-analysis-title{border-top:1px solid var(--borderColorCard);position:relative}#seopress_content_analysis .gr-analysis-title .impact,#seopress_cpt .impact{position:absolute;left:10px;top:calc(50% - 5px);width:10px;height:10px;border-radius:50px;padding:0;margin:0;border:1px solid #fff}#seopress_content_analysis .gr-analysis .impact.good{background:var(--colorSuccess);box-shadow:0 0 5px var(--colorSuccess)}#seopress_content_analysis .gr-analysis .impact.low{background:var(--colorWarning);box-shadow:0 0 5px var(--colorWarning)}#seopress_content_analysis .gr-analysis .impact.medium{background:var(--colorLowAlert);box-shadow:0 0 5px var(--colorLowAlert)}#seopress_content_analysis .gr-analysis .impact.high,#seopress_cpt .impact.high{background:var(--colorAlert);box-shadow:0 0 5px var(--colorAlert)}#seopress_content_analysis .gr-analysis-content .impact.high{background:var(--colorAlert);box-shadow:none;color:#fff;padding:2px 4px;margin-left:5px;border-radius:4px;font-weight:700}#seopress_cpt .impact.high{position:relative;top:calc(50% - 18px);display:inline-block;left:inherit;right:-10px}#seopress_content_analysis .description,#seopress_cpt .description,#seopress_pro_cpt .description,.seopress-option .description{display:block;font-size:12px;color:var(--color)}@media only screen and (max-width:782px){#seopress_content_analysis .description,#seopress_cpt .description,#seopress_pro_cpt .description,.seopress-option .description{word-break:break-word}}#seopress_content_analysis input~span.description,#seopress_content_analysis span.description~input,#seopress_cpt input~span.description,#seopress_cpt span.description~input,#seopress_pro_cpt input~span.description,#seopress_pro_cpt span.description~input{margin-top:5px}#seopress_content_analysis .gr-analysis-title button{background:#fff;border:0;cursor:pointer;display:block;margin:0;position:relative;text-align:left;width:100%;padding:15px 30px;align-items:center;transition:all .3s linear}#seopress_content_analysis .gr-analysis-title button:hover{background:#f3f4f5}#seopress_content_analysis .gr-analysis-title button:focus{color:#191e23;border:none;box-shadow:none;outline-offset:-2px;outline:1px dotted #555d66}#seopress_content_analysis .gr-analysis-title button .seopress-arrow::after{content:"\f343";font-family:Dashicons;position:absolute;right:10px;top:calc(50% - 7px)}#seopress_content_analysis .gr-analysis-title button.open .seopress-arrow::after{content:"\f347"}#seopress_content_analysis .gr-analysis-content{padding:0 1rem .5rem 1rem;display:none;width:100%;border-top:1px solid var(--borderColorCard)}#seopress_content_analysis h3{margin:0;font-size:1em}#seopress_content_analysis h4{border-bottom:1px solid var(--borderColorCard);padding-bottom:.5rem;text-transform:uppercase;font-size:.85em;position:-webkit-sticky;position:sticky;top:0;background:#fff}#seopress_content_analysis .wrap-analysis-img ul{display:flex;flex-wrap:wrap}#seopress_content_analysis .wrap-analysis-img ul li{padding:0;text-align:left;cursor:default}#seopress_content_analysis .wrap-analysis-img h4{border-bottom:1px solid var(--borderColorLight);padding-bottom:10px}#seopress_content_analysis .wrap-analysis-img ul li img{max-width:150px;max-height:150px;object-fit:cover;border:1px solid var(--borderColorLight);cursor:default;padding:1px}#seopress-analysis-tabs .dashicons,#seopress_cpt .dashicons{vertical-align:middle}#seopress-analysis-tabs{clear:both}#seopress_content_analysis .dashicons-no-alt,#seopress_content_analysis .dashicons-yes,#seopress_pro_cpt .dashicons-no-alt,#seopress_pro_cpt .dashicons-yes{color:#fff;background:var(--colorSuccess);border-radius:50px;margin-right:10px}#seopress_content_analysis .dashicons-no-alt,#seopress_pro_cpt .dashicons-no-alt{background:var(--colorAlert)}#seopress_content_analysis .description-alt,#seopress_cpt .description-alt{padding:1em 0;border-top:1px solid var(--borderColorLight);border-bottom:1px solid var(--borderColorLight);display:flex}#seopress_cpt .desc-fb{margin-top:0;border-top:none}#seopress_content_analysis .description-alt svg,#seopress_cpt .description-alt svg{vertical-align:middle;align-self:center;fill:#f0b849;flex-shrink:0;margin-right:16px}#seopress_cpt .notice{padding:10px 14px;margin:0}#seopress_cpt .inside{margin:0;padding:0}#seopress_cpt .ui-tabs .ui-tabs-nav{display:flex;position:relative;width:100%;z-index:10;margin:0;border-radius:0;padding:0;align-items:center;padding:0;height:48px;border-bottom:1px solid #ddd;background:inherit;line-height:inherit;color:inherit;border-top:none;border-left:none;border-right:none}#seopress_cpt .ui-tabs .sp-section{font-weight:700;font-size:var(--fontSize)}#seopress_cpt .ui-helper-clearfix:after{content:none}.seopress_page_seopress-titles #seopress-tabs .form-table td,.seopress_page_seopress-titles #seopress_content_analysis .form-table td{padding:0}#seopress_cpt .ui-tabs .ui-tabs-panel{background:#fff;border-radius:0;display:inline-block;padding:1em 1.4em;width:100%}#seopress_content_analysis .dashicons-info,#seopress_cpt .ui-tabs .ui-tabs-panel .dashicons-info,#seopress_pro_cpt .dashicons-info{font-size:16px;vertical-align:middle;height:16px;width:16px}#seopress_cpt .ui-tabs .ui-tabs-nav li,#seopress_cpt .ui-tabs-anchor{cursor:pointer!important}body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active{position:relative;z-index:60;cursor:pointer;border-radius:0;border-bottom:4px solid var(--backgroundPrimary)!important}#seopress_cpt .wp-color-result{margin:0}#seopress_cpt #tabs-6 #wrap-videos .video .accordion-section-content,#seopress_cpt #tabs-6>p{padding:0 1.4em}#seopress_cpt #tabs-6 #wrap-videos .video .accordion-section-content{padding:0 1.4em 1em}#seopress_cpt #tabs-6 #wrap-videos .video{border-top:1px solid var(--borderColorLight)}#seopress_cpt #tabs-6 #wrap-videos .video .accordion-section-title{border-left:none;border-right:none;font-size:1em;padding:1em 1.4em}#seopress_cpt #tabs-6 #wrap-videos .video:last-child .accordion-section-content,#seopress_cpt #tabs-6 #wrap-videos .video:last-child .accordion-section-title{border-bottom:1px solid var(--borderColorLight)}#seopress_content_analysis .mandatory,#seopress_cpt .mandatory{color:var(--colorAlert)}#seopress_cpt .box-left{float:left;width:49%;margin-right:1%}#seopress_cpt .box-right{float:left;width:49%;margin-left:1%}#seopress_cpt #tabs-3 .box-left{width:44%}#seopress_cpt #tabs-3 .box-right{width:54%}@media only screen and (max-width:1200px){#seopress_cpt .box-left,#seopress_cpt .box-right{float:none;width:100%;margin:0}}@media only screen and (max-width:1500px){#seopress_cpt #tabs-3 .box-left,#seopress_cpt #tabs-3 .box-right{float:none;width:100%;margin:0}}#edittag #seopress_cpt #tabs-3 .box-left,#edittag #seopress_cpt #tabs-3 .box-right{float:none;width:100%;margin:0}#seopress-tabs .seopress_media_upload,#seopress_pro_cpt .seopress_media_upload{margin-top:.5rem}#term-seopress #seopress_cpt{width:95%}#seopress_cpt .ui-tabs{position:relative;padding:0;border:none;font-family:inherit;font-size:inherit;display:inline-block;width:100%}#seopress_cpt .ui-tabs .ui-tabs-nav li{list-style:none;position:relative;padding:0;white-space:nowrap;margin:0;border:none;height:48px;background:0 0}#seopress_cpt .ui-tabs .ui-tabs-nav li a{display:flex;padding:3px 15px;align-items:center}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-nav li a,#seopress_cpt .ui-tabs-vertical .ui-tabs-nav li a{display:block}#seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:0;padding-bottom:0}#seopress_cpt .ui-tabs .ui-tabs-nav li.ui-state-disabled a,#seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active a,#seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-loading a{font-weight:500}#seopress_cpt .ui-tabs .ui-tabs-nav li a,#seopress_cpt .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer;color:#191e23;text-decoration:none;height:48px}#seopress_cpt .ui-tabs .ui-tabs-nav li a:focus,#seopress_cpt .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a:focus{outline:3px solid transparent;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--backgroundPrimary),inset 0 -4px 0 0 var(--backgroundPrimary)}#seopress_cpt .ui-tabs-vertical{width:55em}#seopress_cpt .ui-tabs-vertical .ui-tabs-nav{padding:.2em .1em .2em .2em;float:left;width:12em}#seopress_cpt .ui-tabs-vertical .ui-tabs-nav li{clear:left;width:100%;border-bottom-width:1px!important;border-right-width:0!important;margin:0 -1px .2em 0}#seopress_cpt .ui-tabs-vertical .ui-tabs-nav li.ui-tabs-active{padding-bottom:0;padding-right:.1em;border-right-width:1px}#seopress_cpt .ui-tabs-vertical .ui-tabs-panel{padding:1em;float:right;width:40em}#seopress_cpt .ui-tabs .ui-tabs-nav li a .dashicons{margin-right:2px}#seopress_cpt .google-snippet-preview{font-family:arial,sans-serif;word-break:break-all}#seopress_cpt .google-snippet-preview.mobile-preview .wrap-snippet{margin:0 0 10px 0;box-shadow:0 1px 6px rgba(32,33,36,.28);border-radius:8px;padding:12px 16px}#seopress_cpt .google-snippet-preview>p{word-break:normal}#seopress_cpt .google-snippet-preview .snippet-title,#seopress_cpt .google-snippet-preview .snippet-title-custom,#seopress_cpt .google-snippet-preview .snippet-title-default{color:#1a0dab;font-size:18px;font-weight:400;line-height:21.6px}#seopress_cpt .google-snippet-preview.mobile-preview .snippet-title,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-title-custom,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-title-default{font-size:16px;line-height:20px;margin-bottom:12px}#seopress_cpt .google-snippet-preview .snippet-permalink{color:#006621;font-size:14px;font-style:normal;font-weight:400;line-height:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#seopress_cpt .google-snippet-preview .wrap-snippet .wrap-m-icon-permalink,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-permalink{display:none}#seopress_cpt .google-snippet-preview.mobile-preview .wrap-m-icon-permalink{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:12px;display:flex}#seopress_cpt .google-snippet-preview.mobile-preview .wrap-m-icon-permalink .snippet-permalink{display:block;color:#3c4043;font-size:12px}#seopress_cpt .google-snippet-preview.mobile-preview .snippet-favicon{margin-right:12px;vertical-align:middle}#seopress_cpt .google-snippet-preview.mobile-preview .snippet-favicon img{width:16px;height:16px;max-width:inherit}#seopress_cpt .google-snippet-preview.mobile-preview .wrap-snippet .snippet-permalink:first-child{color:#3c4043;white-space:nowrap;font-size:12px;display:block}#seopress_cpt .google-snippet-preview .snippet-description,#seopress_cpt .google-snippet-preview .snippet-description-custom,#seopress_cpt .google-snippet-preview .snippet-description-default{color:#545454;font-size:14px;font-weight:400;line-height:18.2px;display:inline}#seopress_cpt .google-snippet-preview.mobile-preview .snippet-description,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-description-custom,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-description-default{color:#3c4043;font-size:14px;line-height:20px}#seopress_cpt .google-snippet-preview .snippet-date{color:grey;display:inline}#seopress_cpt .facebook-snippet-box{color:#4b4f56;font-size:14px;width:524px;max-width:100%}#seopress_cpt .facebook-snippet-box .notice,#seopress_cpt .twitter-snippet-box .notice{padding:10px 14px;margin:0 0 10px 0;width:100%}#seopress_cpt .facebook-snippet-box .notice span,#seopress_cpt .twitter-snippet-box .notice span{font-weight:700}#seopress_cpt .snippet-meta{display:flex;overflow:hidden;max-height:12px}#seopress_cpt .fb-by,#seopress_cpt .snippet-fb-site-name,#seopress_cpt .snippet-fb-url{color:#606770;font-size:12px;white-space:normal;line-height:11px;text-transform:uppercase;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis}#seopress_cpt .fb-sep{padding-left:5px;padding-right:5px;color:#606770;line-height:11px;font-size:12px}#seopress_cpt .facebook-snippet-box .facebook-snippet-text{border:1px solid #dadde1;background-color:#f2f3f5;padding:10px 12px}#seopress_cpt .facebook-snippet-box .title-desc{max-height:46px;overflow:hidden}#seopress_cpt .facebook-snippet-box .snippet-fb-title,#seopress_cpt .facebook-snippet-box .snippet-fb-title-custom,#seopress_cpt .facebook-snippet-box .snippet-fb-title-default{font-size:16px;line-height:20px;margin:3px 0 0;padding-top:2px;color:#1d2129;font-weight:700;overflow:hidden;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis;white-space:normal;word-break:break-word;max-height:22px}#seopress_cpt .facebook-snippet-box .snippet-fb-description,#seopress_cpt .facebook-snippet-box .snippet-fb-description-custom,#seopress_cpt .facebook-snippet-box .snippet-fb-description-default{color:#606770;font-size:14px;line-height:20px;word-break:break-word;font-family:Helvetica,Arial,sans-serif;max-height:80px;overflow:hidden;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis;white-space:normal;width:100%}#seopress_cpt .facebook-snippet-box img{display:block;height:274px;width:524px;object-fit:cover;background-color:#f0f0f0;text-align:center;border-bottom:none}.term-php #seopress_cpt .facebook-snippet-box img,.term-php #seopress_cpt .twitter-snippet-box img{width:100%;height:auto}#seopress_cpt .twitter-snippet-box{color:#4b4f56;font-size:14px}#seopress_cpt .snippet-twitter-url{color:#8899a6;font-size:14px;white-space:normal;line-height:11px;text-transform:uppercase;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis}#seopress_cpt .twitter-snippet-box .twitter-snippet-text{border:1px solid #dadde1;background-color:#fff;padding:10px 12px;border-radius:0 0 10px 10px}#seopress_cpt .twitter-snippet-box .title-desc{max-height:46px;overflow:hidden}#seopress_cpt .twitter-snippet-box .snippet-twitter-img,#seopress_cpt .twitter-snippet-box .snippet-twitter-img-custom,#seopress_cpt .twitter-snippet-box .snippet-twitter-img-default{border-radius:10px 10px 0 0;overflow:hidden}#seopress_cpt .twitter-snippet-box .snippet-twitter-title,#seopress_cpt .twitter-snippet-box .snippet-twitter-title-custom,#seopress_cpt .twitter-snippet-box .snippet-twitter-title-default{font-size:1em;line-height:20px;margin-bottom:5px;max-height:1.3em;color:#000;font-weight:700;overflow:hidden;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis;white-space:normal;word-break:break-word}#seopress_cpt .twitter-snippet-box .snippet-twitter-description,#seopress_cpt .twitter-snippet-box .snippet-twitter-description-custom,#seopress_cpt .twitter-snippet-box .snippet-twitter-description-default{color:#000;font-size:14px;line-height:20px;word-break:break-word;font-family:Helvetica,Arial,sans-serif;max-height:80px;overflow:hidden;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis;white-space:normal;width:100%}#seopress_cpt .twitter-snippet-box img{display:block;height:200px;width:436px;object-fit:cover;background-color:#f0f0f0;text-align:center;border-bottom:none}.wrap-toggle-preview{position:relative}.wrap-toggle-preview p{font-weight:700;margin:0 0 1rem 0}#seopress_add_to_insights{margin-left:1rem}#seopress_add_to_insights_status{display:inline-block;font-weight:700;margin:0 0 0 1rem;vertical-align:middle;padding:.3rem;font-style:italic}#seopress_cpt .wrap-seopress-counters,#seopress_pro_cpt .wrap-seopress-counters,.seopress-setup .wrap-seopress-counters,.seopress-styles .wrap-seopress-counters{text-align:right;background:#e9ecef;padding:2px 5px;display:flex;font-size:12px;justify-content:flex-end;border-radius:0 0 .25rem .25rem}#seopress_cpt .sp-progress,#seopress_pro_cpt .sp-progress,.seopress-setup .sp-progress,.seopress-styles .sp-progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem .25rem 0 0;margin:-15px 0 0 0}#seopress_cpt .sp-progress-bar,#seopress_pro_cpt .sp-progress-bar,.seopress-setup .sp-progress-bar,.seopress-styles .sp-progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0085ba;transition:width .6s ease}#seopress_cpt #seopress_titles_desc_counters,#seopress_cpt #seopress_titles_title_counters,#seopress_pro_cpt #seopress_rich_snippets_articles_counters,#seopress_pro_cpt #seopress_rich_snippets_courses_counters{display:inline;margin-right:5px}#seopress_cpt #seopress_titles_desc_counters_val,#seopress_cpt #seopress_titles_title_counters_val,#seopress_pro_cpt #seopress_rich_snippets_articles_counters_val,#seopress_pro_cpt #seopress_rich_snippets_courses_counters_val{display:inline;font-weight:700}#tab-panel-seopress_titles_help_tab li span{font-weight:700;margin-right:10px}.seopress-styles .seopress-option{margin:85px 40px 40px}@media only screen and (max-width:782px){.seopress-styles .seopress-option{margin:85px 22px 22px}}.seopress-styles .seopress-option h1{font-size:var(--titleFontSize);color:var(--titleColor);font-weight:var(--titleFontWeight);margin:var(--titleMargin);display:flex;justify-content:space-between}.seopress_wrap_archive_cpt,.seopress_wrap_single_cpt,.seopress_wrap_single_tax,.seopress_wrap_tax{margin:0 0 20px 0}#tab_seopress_titles_archives .form-table th:empty,#tab_seopress_titles_single .form-table th:empty,#tab_seopress_titles_tax .form-table th:empty{display:none}.seopress-styles .seopress-option .link-archive{font-size:var(--fontSize)}.seopress-styles .seopress-option .link-archive .dashicons{font-size:18px;width:20px;height:20px;margin:inherit}.seopress-option h1 .feature-state .dashicons{font-size:16px;width:16px;height:16px;vertical-align:middle;margin:0 10px 0 0}.seopress-styles .seopress-option .submit{padding:20px 0 20px 0;left:0;margin:0;position:sticky;bottom:0;z-index:100;display:inline-block}@media only screen and (max-width:782px){.seopress-styles .seopress-option .submit{position:relative}}.seopress-styles .seopress-option .seopress-tab .submit{display:block;position:relative}.seopress-styles #wpcontent{padding-left:0}.seopress-styles pre{font-family:Menlo,Monaco,Andale Mono,Courier New,monospace;padding:10px;display:inline-block;background-color:var(--backgroundSecondaryHover);border-radius:3px;color:var(--colorDark);font-size:var(--fontSize)}.seopress-option .seopress-settings{float:left;max-width:750px;width:100%}.seopress-option .seopress-settings label{margin:0 0 0 10px}.wrap-seopress-tab-content{position:relative;display:block;width:100%;max-width:64rem;margin:0 auto}#seopress-tabs .seopress-tab{padding:10px 1.5rem;width:100%;display:none}#seopress-tabs.full-width .seopress-tab{width:100%}@media only screen and (max-width:1024px){#seopress-tabs .seopress-tab{width:100%}}#seopress-tabs .seopress-tab.active{display:inline-block;background:#fff}@media only screen and (max-width:782px){#seopress-tabs .seopress-tab.active{width:100%;border-left:none;border-top:1px solid RGB(238,238,238)}}#seopress_htaccess_file{width:100%}.seopress-option textarea{min-height:100px}.seopress-option .wp-picker-container button{box-shadow:none;border:1px solid #0071a1;border-radius:3px;background:#f3f5f6;text-transform:none}.seopress-option .wp-picker-container input[type=text].wp-color-picker{min-width:inherit}.seopress-option .wp-picker-container .wp-picker-default{margin:0}.seopress-option .wp-picker-container .wp-picker-clear{box-shadow:none;text-transform:none;border-radius:0;background:0 0;margin:0}.seopress-option .wp-picker-container .wp-picker-clear:hover{background:0 0;text-decoration:currentColor;color:inherit}.seopress-inbox-title p{font-size:20px;color:var(--titleColor);margin:0}#seopress-admin-tabs .ui-tabs-nav{display:flex;padding-top:1rem;padding-bottom:0}#seopress-admin-tabs .nav-tab-wrapper a.nav-tab-active:focus{color:inherit}.seopress-intro{padding:20px}.seopress-option .seopress-table{background:#fff;border:1px solid var(--borderColorLight)}.seopress-option .seopress-table th{padding:15px 10px;vertical-align:middle}.wp-admin-ui_page_seopress-roles .seopress-option .seopress-table th{min-width:200px}.seopress-option .seopress-table .seopress-settings-section{background:#f1f1f1}.seopress-option .seopress-table .seopress-table-head .seopress-feature{border-bottom:1px solid var(--borderColorLight);font-weight:700;background:#f1f1f1}#seopress-content .feature-state,.seopress-option .feature-state{font-style:italic;font-size:11px;font-weight:400}@media only screen and (max-width:782px){#seopress-content .feature-state,.seopress-option .feature-state{display:none}}.seopress-option #tab_seopress_titles_archives h3,.seopress-option #tab_seopress_titles_single h3,.seopress-option #tab_seopress_titles_tax h3{margin:2em 0 1em 0;border-top:1px solid var(--borderColorLight);padding:1em 0 0 0}.seopress-option #tab_seopress_titles_archives h3:first-child,.seopress-option #tab_seopress_titles_single h3:first-child,.seopress-option #tab_seopress_titles_tax h3:first-child{margin:0 0 1em 0}.seopress-option #tab_seopress_titles_archives h3 div,.seopress-option #tab_seopress_titles_single h3 div,.seopress-option #tab_seopress_titles_tax h3 div{display:inline}#seopress-content .feature-state-on,#seopress-content .feature-state.feature-state-on,.seopress-option .feature-state-on,.seopress-option .feature-state.feature-state-on{display:inline-block}#seopress-content .feature-state-off,.seopress-option .feature-state-off{display:none}.seopress-option .postbox .inside li{list-style:square inside;padding-left:5px}#tab_seopress_page_speed .inside li{list-style:none;padding-left:0;word-break:break-word}.seopress-option .log{display:none;font-weight:700}.seopress-option input[type=text].seopress-admin-menu-input{min-width:inherit;width:100%}.seopress_page_seopress-import-export .postbox{width:calc(100% - 20px)}#seopress_cpt #seopress_titles_title_meta{margin-bottom:.2rem}.seopress-option .section-tool{border:none;box-shadow:none;background:0 0;position:relative}.seopress-option .section-tool::after{content:"";background:#dedede;height:1px;width:100%;display:block}.seopress-option .section-tool:last-child{margin-bottom:0}.seopress-option .section-tool:last-child::after{content:none}.seopress-option .section-tool .inside{padding-left:0;padding-right:0}.seopress-option .sp-section-header{width:100%;display:flex;position:relative;align-items:center}.seopress-option .sp-section-header h2{font-size:1.5em}.seopress-option .sp-section-header>.dashicons{color:var(--primaryColor);padding:10px;border-radius:6px;margin-right:10px;background:#c4f0ff}.seopress-option .sp-section-header .wrap-toggle-checkboxes{display:flex}.seopress-notice{margin:5px 0 35px 15px;position:relative;top:75px;left:25px;background:rgb(0 124 186 / 10%);border-left:4px solid var(--primaryColor);padding:8px 12px;width:calc(100% - 108px);z-index:10}#seopress-tabs .seopress-notice,#seopress_pro_cpt .seopress-notice,.seopress-setup .seopress-notice{top:inherit;left:inherit;margin:15px 0 30px 0;width:auto}.seopress-hidden{display:none}.seopress-notice pre{background:#fff}.seopress-notice.is-success{border-left-color:var(--colorSuccess);background:#eff9f1}.seopress-notice.is-warning{border-left-color:#f0b849;background:#fef8ee}.seopress-notice.is-error{border-left-color:#cc1818;background:rgb(244 162 162 / 30%)}#seopress-tabs.wrap{margin:30px 0 0 0}#seopress-notifications-center .seopress-alert ul,#seopress-tabs.wrap ul{list-style:square inside;padding-left:5px;display:inline-block;max-width:35rem;width:100%}.post-type-seopress_404 .seopress-BlankState-message::before,.post-type-seopress_schemas .seopress-BlankState-message::before{font-family:Dashicons;speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;margin:0;text-indent:0;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;content:"\f103"}.post-type-seopress_schemas .seopress-BlankState-message::before{content:"\f495"}.seopress-BlankState{text-align:center;padding:5em 0 0}.seopress-BlankState .seopress-BlankState-message{color:#aaa;margin:0 auto 1.5em;line-height:1.5em;font-size:1.2em;max-width:500px}.seopress-BlankState .seopress-BlankState-message::before{color:#ddd;text-shadow:0 -1px 1px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.8);font-size:8em;display:block;position:relative!important;top:auto;left:auto;line-height:1em;margin:0 0 .1875em}.seopress-BlankState .seopress-BlankState-cta{font-size:1.2em;padding:.75em 1.5em;margin:0 .25em}.seopress-BlankState{max-width:764px;text-align:center;margin:auto}.seopress-BlankState .seopress-BlankState-message{color:var(--titleColor);font-size:1.5em;margin:0 auto 1em}.seopress-BlankState .seopress-BlankState-message::before{font-size:120px}.seopress-BlankState .seopress-BlankState-buttons{margin-bottom:4em}#seopress_content_analysis .up,#seopress_content_analysis .up .dashicons{color:var(--colorSuccess)}#seopress_content_analysis .down,#seopress_content_analysis .down .dashicons{color:var(--colorAlert)}#seopress_content_analysis .up .dashicons{transform:rotateZ(45deg)}#seopress_content_analysis .stable .dashicons{transform:rotateZ(90deg)}#seopress_content_analysis .down .dashicons{transform:rotateZ(135deg)}#seopress_content_analysis .wrap-insights-post{clear:both;border-top:1px solid var(--borderColorCard);display:flex;align-items:center}#seopress_content_analysis .wrap-insights-post .widget-insights-title{margin:0 1rem}#seopress_content_analysis .wrap-insights-post span{font-weight:700;margin:0 .2rem 0 0}.wrap-user-roles{display:grid;grid-template-columns:repeat(4,1fr)}@media only screen and (max-width:782px){.wrap-user-roles{display:block}}#seopress-news-panel.is-active,#seopress-notifications-center.is-active{display:block!important}#seopress-notifications-center .seopress-alert{padding:16px 25px;position:relative;transition:all 150ms ease;justify-content:space-between;margin-bottom:20px}#seopress-notifications-center .seopress-alert:last-child{margin-bottom:0;border-bottom:none}#seopress-notifications-center .dashicons{display:flex;align-self:normal;width:30px;height:30px;color:var(--colorIcon);font-size:30px;margin:0 0 10px 0}#seopress-admin-tabs #tab_seopress_notifications.seopress-tab{background:0 0;padding:0;border-radius:0;width:100%}.seopress-notice #message{margin:5px 10px 2px 0}#seopress-notice a{position:relative;text-decoration:none;margin:0 0 0 .3rem}#seopress-notice a .tooltip{white-space:pre;z-index:200;padding:2px 5px;font-weight:500;font-size:12px;color:#aab7c4;background:#fff;box-shadow:0 1px 2px 0 rgba(49,49,93,.1),0 0 1px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;opacity:0;top:30px;transition:opacity .2s ease;visibility:hidden;line-height:20px;left:-100%;overflow:hidden}#seopress-notice a:hover .tooltip{opacity:1;visibility:visible}.seopress-page-list{margin:1.5rem auto}.post-type-seopress_404 .seopress-notice,.post-type-seopress_bot .seopress-notice,.post-type-seopress_schemas .seopress-notice{left:0;top:40px;margin:0 0 50px;width:calc(100% - 48px)}.seopress-search{position:relative;padding:20px}.seopress-search::before{content:"\f179";font-family:Dashicons;position:absolute;top:35px;left:30px;font-size:20px}.seopress-search input{padding-left:40px}.seopress-item-toggle-options{position:relative;cursor:pointer;padding:5px 10px;border:1px solid var(--borderColor);border-radius:3px;transform:rotate(90deg)}.seopress-item-toggle-options::before{content:"\f11c";font-family:Dashicons;font-size:18px;vertical-align:middle}.seopress-card{background:#fff;border:1px solid var(--borderColorCard);border-radius:3px;position:relative}.seopress-option .seopress-card-actions button{margin-left:.5em}.seopress-card-title{border-bottom:1px solid var(--borderColorCard);padding:18px 24px;display:flex;justify-content:space-between;align-items:center}.seopress-card-title h2{margin:0}.seopress-cart-list{border-bottom:1px solid var(--borderColorCard);padding:18px 24px;display:flex;align-items:center;text-decoration:none;color:var(--primaryColor);font-weight:700;line-height:20px}.seopress-cart-list:last-child{border-bottom:none}.seopress-cart-list:active,.seopress-cart-list:focus,.seopress-cart-list:hover{background:var(--backgroundSecondaryHover)}body .seopress-cart-list h3{font-size:var(--fontSize);color:var(--primaryColor);font-weight:700;margin:0}.seopress-cart-list p{color:var(--titleColor);font-weight:400;margin:0;font-size:12px;line-height:20px}.seopress-card-footer{padding:10px 20px;border-top:1px solid var(--borderColorLight40)}.seopress-card-popover{display:none;background:#fff;border:1px solid var(--borderColor);padding:20px;position:absolute;top:55px;overflow-y:auto;right:28px;z-index:20}.seopress-card-popover.is-open{display:block}#seopress-tabs .seopress-tag-dropdown,#seopress_cpt .seopress-tag-dropdown,#seopress_cpt .tag-title,#seopress_pro_cpt .tag-title,.seopress-button,.seopress-option .tag-title{cursor:pointer;font-weight:500;border-radius:4px;transition:all .3s linear}#seopress_cpt .wrap-tags,#seopress_pro_cpt .wrap-tags,.seopress-option .wrap-tags{position:relative;display:inline-flex;width:100%;margin:10px 0}.seopress-option .wrap-tags{flex-wrap:wrap}.seopress-option .wrap-tags button{margin-bottom:10px}@media only screen and (max-width:782px){#seopress_cpt .wrap-tags,#seopress_pro_cpt .wrap-tags,.seopress-option .wrap-tags{flex-wrap:wrap}}#seopress-tabs .sp-wrap-tag-variables-list,#seopress_cpt .sp-wrap-tag-variables-list,#seopress_pro_cpt .sp-wrap-tag-variables-list{position:relative;float:left;display:none}#seopress-tabs.wrap .sp-tag-variables-list,#seopress_cpt .sp-tag-variables-list,#seopress_pro_cpt .sp-tag-variables-list{position:absolute;left:-48px;width:300px;z-index:100;top:20px;color:var(--titleColor);height:300px;z-index:100;overflow:auto;background:#fff;border:1px solid var(--borderColorLight);box-shadow:0 2px 6px rgb(0 0 0 / 5%);border-radius:2px;list-style:none;padding:0}#seopress-tabs .sp-wrap-tag-variables-list.open,#seopress_cpt .sp-wrap-tag-variables-list.open,#seopress_pro_cpt .sp-wrap-tag-variables-list.open{display:block}#seopress-tabs .seopress-tag-single-all.tag-description .dashicons,#seopress-tabs .seopress-tag-single-all.tag-title .dashicons,#seopress_cpt .seopress-tag-single-all.seopress-tag-dropdown .dashicons,#seopress_cpt .seopress-tag-single-all.tag-title .dashicons,#seopress_pro_cpt .seopress-tag-single-all.tag-title .dashicons{margin:0;transition:all 150ms linear}#seopress-tabs .seopress-tag-single-all.open .dashicons,#seopress_cpt .seopress-tag-single-all.open .dashicons,#seopress_pro_cpt .seopress-tag-single-all.open .dashicons{transform:rotateX(180deg)}#seopress-tabs.wrap .sp-tag-variables-list li,#seopress_cpt .sp-tag-variables-list li,#seopress_pro_cpt .sp-tag-variables-list li{padding:8px 12px;cursor:pointer;margin:0;border-bottom:1px solid var(--borderColorLight40)}#seopress-tabs .sp-tag-variables-list li span,#seopress_cpt .sp-tag-variables-list li span,#seopress_pro_cpt .sp-tag-variables-list li span{display:block;font-weight:700;font-size:12px;margin-bottom:2px}#seopress-tabs.wrap .sp-tag-variables-list li:hover,#seopress_cpt .sp-tag-variables-list li:hover,#seopress_pro_cpt .sp-tag-variables-list li:hover{background:var(--backgroundPrimaryHover);color:#fff;border-bottom-color:#fff}#seopress-tabs.wrap .sp-tag-variables-list li::after,#seopress_cpt .sp-tag-variables-list li::after,#seopress_pro_cpt .sp-tag-variables-list li::after{content:attr(data-value);display:inline-block;background:#e9ecef;padding:1px 5px;color:#333;font-family:Menlo,Monaco,Andale Mono,Courier New,monospace;border-radius:3px;font-size:11px}#seopress-tabs.wrap .seopress-tag-dropdown .dashicons,#seopress_cpt .seopress-tag-dropdown .dashicons,#seopress_cpt .tag-title .dashicons,#seopress_pro_cpt .tag-title .dashicons,.seopress-option .tag-title .dashicons{padding:0;height:16px;width:16px;font-size:16px;margin-right:5px;color:var(--primaryColor);vertical-align:middle}#seopress-tabs.wrap .seopress-tag-dropdown:hover .dashicons,#seopress_cpt .seopress-tag-dropdown:hover .dashicons,#seopress_cpt .tag-title:hover .dashicons,#seopress_pro_cpt .tag-title:hover .dashicons,.seopress-option .tag-title:hover .dashicons{color:#fff}#seopress-tabs.wrap .seopress-tag-dropdown .dashicons{margin:0}.seopress-overlay-tag-dropdown{position:absolute;display:none;top:0;left:0;width:100%;height:100%;z-index:50}.seopress-overlay-tag-dropdown.active{display:block}#seopress-tabs .seopress-tag-dropdown,#seopress_cpt .seopress-tag-dropdown,#seopress_cpt .tag-title,#seopress_pro_cpt .tag-title,.seopress-option .tag-title{padding:5px 12px;font-size:10px;user-select:none;margin:0 5px 0 0;display:inline-flex;text-transform:uppercase;align-items:center;color:var(--primaryColor)}#seopress-tabs .seopress-tag-dropdown:focus,#seopress-tabs .seopress-tag-dropdown:hover,#seopress_cpt .seopress-tag-dropdown:focus,#seopress_cpt .seopress-tag-dropdown:hover,#seopress_cpt .tag-title:focus,#seopress_cpt .tag-title:hover,#seopress_pro_cpt .tag-title:focus,#seopress_pro_cpt .tag-title:hover,.seopress-option .tag-title:focus,.seopress-option .tag-title:hover{box-shadow:0 0 var(--wp-admin-border-width-focus) var(--backgroundPrimary);background:var(--backgroundPrimaryHover);color:#fff}@media only screen and (max-width:782px){#seopress-tabs .seopress-tag-dropdown,#seopress_cpt .seopress-tag-dropdown,#seopress_cpt .tag-title,#seopress_pro_cpt .tag-title,.seopress-option .tag-title{margin-bottom:10px}}#seopress-content .seopress-useful-tools .widget-reverse li{padding:10px;margin:0;border-bottom:1px solid var(--borderColorLight)}#seopress-content .seopress-reverse label,#seopress-content .seopress-useful-tools .widget-whois ul li span{font-weight:700}#seopress-content #seopress-reverse-url{width:100%;margin:10px 0}#seopress-content .widget-reverse p{margin:0}.seopress-styles #screen-meta{position:relative;top:60px}.seopress-styles #screen-meta-links .show-settings{box-shadow:none}.seopress-styles #screen-meta-links .screen-meta-toggle{position:fixed;top:32px;z-index:2000;right:40px}@media only screen and (max-width:782px){.seopress-styles #screen-meta-links .screen-meta-toggle{position:relative;top:60px}}#seopress-content input.toggle,#seopress_cpt input.toggle,.seopress-option input.toggle{max-height:0;max-width:0;opacity:0;position:relative}.seopress-feature input.toggle{display:block}#seopress_cpt input.toggle,.seopress_wrap_single_cpt input.toggle,.seopress_wrap_tax input.toggle{margin:0;border:none;min-width:0}#seopress-content input.toggle+label,#seopress_cpt #tabs-1 input.toggle+label,.seopress-option input.toggle+label{display:inline-block;position:relative;box-shadow:inset 0 0 0 1px #d5d5d5;text-indent:-5000px;height:20px;width:40px;border-radius:15px;margin:0 10px 0 0}#seopress-content input.toggle+label{margin:0;left:-20px}#seopress_cpt #tabs-1 input.toggle+label{margin:0}.wrap-toggle-checkboxes input.toggle+label{float:left;margin-right:10px}#seopress-content input.toggle+label:before,#seopress_cpt input.toggle+label:before,.seopress-option input.toggle+label:before{content:"";position:absolute;display:block;height:20px;width:30px;top:0;left:0;border-radius:15px;background:rgba(19,191,17,0);transition:.25s ease-in-out}#seopress-content input.toggle+label:after,#seopress_cpt input.toggle+label:after,.seopress-option input.toggle+label:after{content:"";position:absolute;display:block;height:20px;width:20px;top:0;left:0;border-radius:15px;background:#fff;box-shadow:inset 0 0 0 1px rgba(0,0,0,.2),0 2px 4px rgba(0,0,0,.2);transition:.25s ease-in-out}#seopress_cpt input.toggle+label,#seopress_cpt input.toggle+label:before,.seopress_wrap_single_cpt input.toggle+label,.seopress_wrap_single_cpt input.toggle+label:before,.seopress_wrap_tax input.toggle+label,.seopress_wrap_tax input.toggle+label:before{width:40px;height:20px}#seopress_cpt input.toggle+label:after,.seopress_wrap_single_cpt input.toggle+label:after,.seopress_wrap_tax input.toggle+label:after{width:20px;height:20px}#seopress-content input.toggle[data-toggle="1"]+label:before,#seopress_cpt input.toggle[data-toggle="1"]+label:before,.seopress-option input.toggle[data-toggle="1"]+label:before,.seopress_wrap_single_cpt input.toggle[data-toggle="1"]+label:before,.seopress_wrap_tax input.toggle[data-toggle="1"]+label:before{width:40px;background:var(--backgroundPrimary)}#seopress-content input.toggle[data-toggle="1"]+label:after,#seopress_cpt input.toggle[data-toggle="1"]+label:after,.seopress-option input.toggle[data-toggle="1"]+label:after{left:20px;box-shadow:inset 0 0 0 1px var(--backgroundPrimary),0 2px 4px rgba(0,0,0,.2)}#seopress_cpt input.toggle[data-toggle="1"]+label:after,.seopress_wrap_single_cpt input.toggle[data-toggle="1"]+label:after,.seopress_wrap_tax input.toggle[data-toggle="1"]+label:after{box-shadow:inset 0 0 0 1px var(--backgroundPrimary),0 2px 4px rgba(0,0,0,.2)}#seopress-content .seopress-page-list{position:relative;display:block;max-width:64rem}@media only screen and (max-width:782px){#seopress-content .seopress-page-list{grid-template-columns:repeat(1,1fr)}}.seopress-styles .wrap{margin:0;display:flex;position:relative}.seopress-insights.seopress-styles .wrap,.toplevel_page_seopress-option.seopress-styles .wrap{display:inherit;position:inherit;margin:inherit}@media only screen and (max-width:782px){.seopress-styles .wrap{display:inherit;position:inherit;margin:inherit}}.seopress-option .wrap div.nav-tab-wrapper{margin:0;padding:0;line-height:inherit;width:15%;z-index:10;font-weight:400;display:block;border-bottom:none}@media only screen and (max-width:782px){.seopress-option .wrap div.nav-tab-wrapper{width:100%;margin:0 0 20px 0;padding:0}}#seopress-admin-tabs.wrap div.nav-tab-wrapper{background:#fff;margin:0 auto;max-width:64rem;width:100%;border-bottom:1px solid var(--borderColorCard);padding:0;line-height:inherit;position:sticky;z-index:10;top:92px;border-radius:4px 4px 0 0;font-weight:400;overflow:hidden;display:flex;align-items:center;justify-content:space-between}@media only screen and (max-width:600px){#seopress-admin-tabs.wrap div.nav-tab-wrapper{top:0;display:block}}@media only screen and (max-width:1024px){#seopress-admin-tabs.wrap div.nav-tab-wrapper{display:block}}.seopress-option .nav-tab{border:0;background:0 0;opacity:.5;padding:6px 30px 6px 10px;transition:opacity .3s linear;color:var(--titleColor);margin:0;float:none;display:inline-block;width:100%;text-align:left;font-weight:400;white-space:normal}#seopress-admin-tabs .nav-tab{background:0 0;opacity:.5;padding:14px 20px;transition:opacity .3s linear;margin:0;float:none;display:inline-block;font-weight:400}#seopress-admin-tabs .nav-tab{width:100%}#seopress-admin-tabs .nav-tab-active,#seopress-admin-tabs .nav-tab-active:focus,#seopress-admin-tabs .nav-tab-active:focus:active,#seopress-admin-tabs .nav-tab-active:hover,#seopress-admin-tabs .nav-tab:focus,.nav-tab-active:focus,.seopress-option .nav-tab-active,.seopress-option .nav-tab-active:focus:active,.seopress-option .nav-tab-active:hover,.seopress-option .nav-tab:focus{opacity:1;outline:0;font-weight:600;position:relative;border-left:3px solid var(--backgroundPrimary)}#seopress-admin-tabs .nav-tab-active,#seopress-admin-tabs .nav-tab-active:focus,#seopress-admin-tabs .nav-tab-active:focus:active,#seopress-admin-tabs .nav-tab-active:hover,#seopress-admin-tabs .nav-tab:focus{border-bottom:4px solid var(--backgroundPrimary);border-left:none}#seopress-admin-tabs .nav-tab:hover,.seopress-option .nav-tab:hover{opacity:1}#seopress-admin-tabs .nav-tab:focus,.seopress-option .nav-tab:focus{outline:0;box-shadow:none}@keyframes sp-fade-in-out{0%{opacity:0;bottom:0;visibility:hidden}25%{opacity:1;bottom:40px;visibility:visible}75%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}.sp-components-snackbar-list{position:fixed;right:0;bottom:40px;padding-left:16px;padding-right:16px;animation-name:sp-fade-in-out;animation-duration:5s;animation-iteration-count:1;animation-fill-mode:forwards;visibility:hidden;z-index:1}.sp-components-snackbar__content{display:flex;align-items:center;justify-content:space-between;line-height:1.4}.sp-components-snackbar{font-family:var(--fontFamily);font-size:var(--fontSize);background-color:#32373c;border-radius:4px;box-shadow:0 2px 4px rgba(0,0,0,.3);color:#fff;padding:16px 24px;cursor:pointer}.sp-components-snackbar .dashicons{color:#fff}
1
+ #seopress_content_analysis *,#seopress_cpt *,#seopress_pro_cpt *,.seopress-option *,.seopress-styles *{box-sizing:border-box}@font-face{font-family:seopress;src:url(../fonts/seopress.eot?81521271);src:url(../fonts/seopress.eot?81521271#iefix) format("embedded-opentype"),url(../fonts/seopress.woff?81521271) format("woff2"),url(../fonts/seopress.woff?81521271) format("woff"),url(../fonts/seopress.ttf?81521271) format("truetype"),url(../fonts/seopress.svg?81521271#seopress) format("svg");font-weight:400;font-style:normal}[class*=" icon-seopress"],[class^=icon-seopress-]{font-family:seopress!important;font-size:14px!important;line-height:24px!important}#adminmenu div.wp-menu-image.dashicons-admin-seopress::before{content:"\e800";font-family:seopress;font-weight:700;font-size:12px;line-height:20px}#seopress_content_analysis,#seopress_cpt,#seopress_pro_cpt,#wpadminbar,.column-seopress_score,.post-type-seopress_404 #wpcontent,.post-type-seopress_schemas #wpcontent,.seopress-option #wpcontent,.seopress-styles #wpcontent,.seopress-ui-datepicker{--primaryColor:#007cba;--paragraphColor:#757575;--fontSize:13px;--fontFamily:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;--color:#757575;--colorDark:#1e1e1e;--colorAlert:#eb0f00;--colorWarning:#ffba00;--colorSuccess:#4ab866;--colorLowAlert:#e39f48;--colorPre:#37864b;--colorIcon:#d7dade;--lineHeight:24px;--titleColor:#3c434a;--titleFontSize:20px;--titleFontWeight:normal;--titleMargin:10px 0;--backgroundPrimary:#007cba;--backgroundPrimaryHover:#006ba1;--backgroundSecondaryHover:#f0f0f0;--borderColor:#a7aaad;--borderColorLight:#dcdcde;--borderColorLight40:rgba(220, 220, 222, 0.4);--borderColorCard:#e2e4e7;--borderColorTab:#c3c4c7}.seopress-option .text-center,.seopress-styles .text-center{text-align:center}.post-type-seopress_404 .btn,.post-type-seopress_schemas .btn,.seopress-option .btn,.seopress-styles .btn{display:inline-flex;text-decoration:none;font-size:var(--fontSize);margin:0;border:0;cursor:pointer;-webkit-appearance:none;background:0 0;transition:box-shadow .1s linear;height:36px;align-items:center;padding:6px 12px;border-radius:2px;vertical-align:middle;color:var(--colorDark);white-space:nowrap;outline:1px solid transparent}.post-type-seopress_404 .btnPrimary,.post-type-seopress_schemas .btnPrimary,.seopress-option .btnPrimary,.seopress-styles .btnPrimary{background:var(--primaryColor);color:#fff;text-decoration:none}.post-type-seopress_404 .btnPrimary:hover,.post-type-seopress_schemas .btnPrimary:hover,.seopress-option .btnPrimary:hover,.seopress-styles .btnPrimary:hover{background:var(--backgroundPrimaryHover);color:#fff}.post-type-seopress_404 .btnSecondary,.post-type-seopress_schemas .btnSecondary,.seopress-option .btnSecondary,.seopress-styles .btnSecondary{box-shadow:inset 0 0 0 1px var(--primaryColor);color:var(--primaryColor);background:0 0}.post-type-seopress_404 .btnTertiary,.post-type-seopress_schemas .btnTertiary,.seopress-option .btnTertiary,.seopress-styles .btnTertiary{color:var(--primaryColor);background:0 0}.post-type-seopress_404 .btnTertiary:hover,.post-type-seopress_schemas .btnTertiary:hover,.seopress-option .btnTertiary:hover,.seopress-styles .btnTertiary:hover{box-shadow:inset 0 0 0 1px var(--primaryColor)}.seopress-option hr,.seopress-styles hr{align-self:center;flex-grow:1;height:1px;margin:0 10px}#seopress-tabs.wrap .list-none{list-style:none;padding-left:0}.seopress-option .dashicons,.seopress-page-list .dashicons{vertical-align:middle;margin-right:5px;text-decoration:none}#seopress-news-panel .seopress-item-inner .dashicons{vertical-align:top}.seopress-button{text-transform:uppercase;background:#fff;border-color:#c8d7e1;border-style:solid;border-width:1px 1px 2px;color:#2e4453;display:inline-block;margin:0;outline:0;overflow:hidden;text-overflow:ellipsis;text-decoration:none;vertical-align:top;font-size:14px;line-height:20px;padding:6px 8px 6px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.seopress-button:hover{border-color:#a8bece;color:#00a0d2}.seopress-button .dashicons{vertical-align:middle}body .seopress-option h2{color:var(--titleColor);font-size:20px;line-height:24px;font-weight:400}body .seopress-option h3{color:var(--titleColor);font-size:16px;line-height:20px}#seopress_content_analysis input[type=text],#seopress_content_analysis textarea,#seopress_cpt input[type=text],#seopress_cpt textarea,#seopress_pro_cpt input[type=text],#seopress_pro_cpt textarea{width:100%;display:inline-block}#seopress_cpt #tabs-6 input[type=number]{min-width:200px}#seopress_cpt #tabs-6 #wrap-videos .video:first-child .remove-video{display:none}#seopress_content_analysis label,#seopress_cpt label,#seopress_pro_cpt label{margin-bottom:8px;display:inline-block;width:100%}#seopress_cpt #tabs-6{padding:0}body .seopress-option input[type=password],body .seopress-option input[type=text],body .seopress-option select,body .seopress-option textarea{max-width:35rem;border:1px solid var(--borderColor);box-shadow:0 2px 6px rgb(0 0 0 / 5%);width:100%}body .seopress-option select{min-height:50px}.wrap-opening-hours select{width:inherit}body .seopress-option input[type=number],body .seopress-option input[type=password],body .seopress-option input[type=text]{line-height:46px}body .seopress-option input[type=number]:hover,body .seopress-option input[type=password]:hover,body .seopress-option input[type=text]:hover,body .seopress-option select:hover,body .seopress-option textarea:hover{border-color:#787c82}body .seopress-option input[type=number]:active,body .seopress-option input[type=number]:focus,body .seopress-option input[type=password]:active,body .seopress-option input[type=password]:focus,body .seopress-option input[type=text]:active,body .seopress-option input[type=text]:focus,body .seopress-option select:active,body .seopress-option select:focus,body .seopress-option textarea:active,body .seopress-option textarea:focus{box-shadow:0 0 0 2px var(--primaryColor);border-color:transparent}@media only screen and (max-width:1024px){body .seopress-option input[type=number],body .seopress-option input[type=password],body .seopress-option input[type=text],body .seopress-option textarea{min-width:inherit;width:100%}}#seopress_content_analysis input[type=checkbox],#seopress_cpt input[type=checkbox],#seopress_pro_cpt input[type=checkbox],body .seopress-option input[type=checkbox]{font-family:var(--fontFamily);padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow .1s linear;border-radius:2px;border:1px solid var(--color);font-size:16px;line-height:normal;border:1px solid var(--colorDark);margin-right:12px;transition:none;border-radius:2px;background:#fff;color:var(--colorDark);clear:none;cursor:pointer;display:inline-block;line-height:0;margin:-1px 4px 0 0!important;outline:0;padding:0!important;text-align:center;vertical-align:top;width:20px;height:20px;-webkit-appearance:none;appearance:none;transition:.1s border-color ease-in-out}#seopress_content_analysis input[type=checkbox]:checked::before,#seopress_cpt input[type=checkbox]:checked::before,#seopress_pro_cpt input[type=checkbox]:checked::before,body .seopress-option input[type=checkbox]:checked::before{content:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");background:var(--primaryColor);margin:-1px;width:20px;height:20px}#seopress_content_analysis input[type=checkbox]:active,#seopress_content_analysis input[type=checkbox]:focus,#seopress_cpt input[type=checkbox]:active,#seopress_cpt input[type=checkbox]:focus,#seopress_pro_cpt input[type=checkbox]:active,#seopress_pro_cpt input[type=checkbox]:focus,body .seopress-option input[type=checkbox]:active,body .seopress-option input[type=checkbox]:focus{box-shadow:0 0 0 2px var(--primaryColor);border-color:transparent}.field-recommended,.field-required{font-weight:700}.field-required{color:var(--colorAlert)}.field-recommended{color:var(--colorWarning)}.form-table td{padding:15px 0}.form-table td p{margin:4px 0}.form-table td p.seopress_wrap_archive_cpt{margin-bottom:15px}table.wp-list-table .manage_column.column-seopress_canonical,table.wp-list-table .manage_column.column-seopress_desc,table.wp-list-table .manage_column.column-seopress_insights,table.wp-list-table .manage_column.column-seopress_noindex,table.wp-list-table .manage_column.column-seopress_redirect_enable,table.wp-list-table .manage_column.column-seopress_redirect_url,table.wp-list-table .manage_column.column-seopress_title,table.wp-list-table .manage_column.column-seopress_tkw{width:7%!important}.post-type-product table.fixed thead .column-seopress_desc,.post-type-product table.fixed thead .column-seopress_title{width:8%}.post-type-product .fixed .column-seopress_ps,.post-type-product .fixed .column-seopress_words,.post-type-product table.fixed thead .column-seopress_canonical,.post-type-product table.fixed thead .column-seopress_redirect_enable,.post-type-product table.fixed thead .column-seopress_redirect_url,.post-type-product table.fixed thead .column-seopress_tkw{width:6%}.post-type-product .fixed .column-seopress_score{width:50px}table.fixed thead .column-seopress_nofollow,table.fixed thead .column-seopress_noindex{width:100px}@media only screen and (max-width:1200px){table.fixed .column-seopress_canonical>div,table.fixed .column-seopress_desc>div,table.fixed .column-seopress_redirect_enable>div,table.fixed .column-seopress_redirect_url>div,table.fixed .column-seopress_title>div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}table.fixed thead .column-seopress_canonical,table.fixed thead .column-seopress_nofollow,table.fixed thead .column-seopress_noindex,table.fixed thead .column-seopress_ps,table.fixed thead .column-seopress_redirect_enable,table.fixed thead .column-seopress_redirect_url,table.fixed thead .column-seopress_score,table.fixed thead .column-seopress_tkw,table.fixed thead .column-seopress_words{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.post-type-seopress_backlinks .wp-list-table .column-seopress_backlinks_url{width:35%}.post-type-seopress_backlinks .wp-list-table .column-seopress_backlinks_anchor_text{width:20%}.seopress-styles #seopress-header{padding:22px 120px 22px 40px;height:60px;margin:0 auto;width:calc(100% - 160px);background:#fff;position:fixed;top:32px;z-index:110;display:flex;justify-content:space-between;align-items:center}.folded.seopress-styles #seopress-header{width:calc(100% - 35px)}@media only screen and (max-width:782px){.seopress-styles #seopress-header{width:100%;padding:22px;top:46px;position:absolute}}#seopress-header #seopress-navbar ul{margin:0;padding:0}#seopress-header #seopress-navbar ul li{margin:0;display:inline-block;position:relative;padding:0 20px 0 0;font-weight:700}#seopress-header #seopress-navbar ul li::after{content:"/";color:var(--paragraphColor);position:absolute;display:block;top:0;left:calc(100% - 10px)}#seopress-header #seopress-navbar ul li:last-child:after{content:none}.sp-dashboard-card-highlight{border:1px dashed #c3c4c7;margin:20px 0}.seopress-summary-items{display:flex;flex-wrap:wrap}.seopress-summary-item{display:flex;flex-direction:column;padding:20px;border-bottom:1px solid var(--borderColorLight40);border-right:1px solid var(--borderColorLight40);line-height:1.4em;text-decoration:none;width:50%;color:var(--colorDark);justify-content:center}@media only screen and (max-width:782px){.seopress-summary-item{width:100%}}.seopress-summary-item-label{display:block;margin-bottom:16px;color:var(--color);font-size:14px;line-height:20px}.seopress-summary-item-data{margin-bottom:4px;font-weight:500;color:var(--colorDark);font-size:20px;line-height:28px}.seopress-summary-item-data small{font-weight:400;font-size:11px;text-transform:uppercase}.seopress-summary-items .inside,.seopress-tab.inside{padding:20px}#seopress-admin-tabs.ui-tabs{position:relative;padding:.2em;border:none;font-family:inherit;font-size:inherit}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:-1px .2em 0 0;padding:0;white-space:nowrap;border:none;background:0 0}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li a{float:left;padding:.38em 1em .75rem;outline:0;border-bottom:2px solid #fff}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li.ui-state-disabled a,#seopress-admin-tabs.ui-tabs .ui-tabs-nav li.ui-tabs-active a,#seopress-admin-tabs.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text;border-bottom:2px solid #23282d;color:#23282d}#seopress-admin-tabs.ui-tabs .ui-tabs-nav li a,#seopress-admin-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer;color:#0073aa;text-decoration:none}#seopress-admin-tabs.ui-tabs-vertical{width:55em}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-nav{padding:.2em .1em .2em .2em;float:left;width:12em}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-nav li{clear:left;width:100%;border-bottom-width:1px!important;border-right-width:0!important;margin:0 -1px .2em 0}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-nav li.ui-tabs-active{padding-bottom:0;padding-right:.1em;border-right-width:1px}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-panel{padding:1em;float:right;width:40em}#seopress-admin-tabs.wrap{background:#fff;display:block;width:64rem;max-width:100%;margin:0 auto}@media only screen and (max-width:1024px){#seopress-admin-tabs.wrap{width:100%}}#seopress-admin-tabs .seopress-tab{width:100%;display:none}#seopress-admin-tabs .seopress-tab.active{visibility:visible;overflow:inherit;opacity:1;transform:translateX(0);display:inherit;position:relative}.seopress-dashboard-columns{display:flex;max-width:64rem;margin:0 auto;justify-content:space-between;flex-direction:row}.seopress-dashboard-column{align-self:flex-start;width:calc(50% - 12px);margin:0}@media only screen and (max-width:782px){.seopress-dashboard-columns{max-width:100%;flex-direction:column}.seopress-dashboard-column{width:100%}}#seopress-admin-tabs .ui-tabs-nav,.seopress-get-started{margin:0 auto 20px;max-width:64rem;padding:2rem;width:100%;border-radius:0 0 4px 4px}.seopress-get-started{background:#fff url(../img/bg-hero-started.svg) no-repeat 100% 50%/contain;position:relative}.seopress-get-started .inside{padding:2rem}.seopress-get-started .preheader{text-transform:uppercase;font-size:11px;font-weight:600;color:var(--paragraphColor)}.seopress-activity-panel-tabs{height:60px;display:flex;align-items:center}.seopress-activity-panel-tabs .btn{display:flex;flex-direction:column;justify-content:center;color:var(--color);height:60px;padding:10px 26px;border-bottom:3px solid transparent}.seopress-activity-panel-tabs .btn:hover{background:var(--backgroundSecondaryHover)}.seopress-activity-panel-tabs .btn.is-active{border-bottom:3px solid var(--backgroundPrimary);color:var(--colorDark)}.seopress-activity-panel-wrapper{height:calc(100vh - 92px);top:92px;background:var(--backgroundSecondaryHover);width:510px;transform:translateX(100%);transition-duration:.3s;transition-timing-function:ease-in-out;position:fixed;right:0;z-index:1000;overflow-x:hidden;overflow-y:auto}@media only screen and (max-width:782px){.seopress-activity-panel-wrapper{top:106px}}.seopress-activity-panel-wrapper.is-open{transform:none;box-shadow:0 12px 12px 0 rgb(85 93 102 / 30%)}.seopress-activity-panel-header{background:#e0e0e0;padding:16px 24px}.seopress-activity-panel-content{background:#fff;padding:16px 24px}.seopress-list-items,.seopress-list-items .seopress-item{margin:0}.seopress-list-items .seopress-item{border-bottom:1px solid var(--borderColorLight40)}.seopress-list-items .seopress-item:last-child{border-bottom:none}.seopress-list-items .seopress-item .seopress-item-inner{color:var(--primaryColor);text-decoration:none;padding:15px 20px;background:#fff;font-size:var(--fontSize);font-weight:700;width:100%}.seopress-option .has-action{display:flex;align-items:center}.seopress-list-items .seopress-item .seopress-item-inner:hover{background:var(--backgroundSecondaryHover)}.seopress-list-items .seopress-item-after,.seopress-list-items .seopress-item-before{margin:0 20px 0 10px;position:relative}.seopress-list-items .seopress-item-after::after,.seopress-list-items .seopress-item-before::before{content:"\f330";font-family:Dashicons;vertical-align:middle;font-size:20px;font-weight:400}.seopress-list-items .seopress-item-after{margin-left:auto;padding-left:20px;margin-right:0}.seopress-list-items .seopress-item-after::after{content:"\f345"}.seopress-list-items .seopress-item .seopress-item-title{margin:5px 0;color:var(--primaryColor)}.seopress-list-items .seopress-item .seopress-item-date{color:var(--paragraphColor);font-weight:400;margin:0}.seopress-list-items .seopress-item .seopress-item-content{color:var(--colorDark);font-weight:400;margin:0}.seopress-list-items .seopress-item .seopress-item-inner.check{position:relative}.seopress-list-items .seopress-item .seopress-item-inner.check::before{content:"";width:32px;height:32px;font-size:24px;vertical-align:middle;border-radius:50px;color:#fff;margin-right:10px;display:inline-block;border:1px solid var(--borderColorLight);line-height:32px;text-align:center}.seopress-list-items .seopress-item .seopress-item-inner.done::before{background:var(--backgroundPrimary);border:none;content:"\f15e";font-family:Dashicons}.sp-tooltip{position:relative;margin-left:5px;display:inline-block;cursor:help;vertical-align:bottom;text-align:left;background:0 0;border:none;padding:0}.sp-tooltip .dashicons{color:var(--colorDark)}.sp-tooltip .sp-tooltiptext{visibility:hidden;position:absolute;z-index:999999999;width:350px;right:-310px;padding:20px;top:25px;font-weight:400;box-shadow:0 3px 30px rgb(25 30 35 / 10%);border:1px solid var(--borderColorLight40);background:#fff;word-break:break-word;text-transform:none}.sp-tooltip .sp-tooltiptext::before{border:8px solid var(--borderColorLight40);top:-8px}.sp-tooltip .sp-tooltiptext::after{border:8px solid #fff;top:-6px}.sp-tooltip .sp-tooltiptext::after,.sp-tooltip .sp-tooltiptext::before{border-bottom-style:solid;border-left-color:transparent;border-right-color:transparent;border-top:none;margin-left:-10px;content:"";position:absolute;height:0;width:0;line-height:0;left:30px}.sp-tooltip:active .sp-tooltiptext,.sp-tooltip:focus .sp-tooltiptext,.sp-tooltip:hover .sp-tooltiptext{visibility:visible}.sp-tooltip .sp-tooltip-headings{font-size:18px;font-weight:600;margin-bottom:20px;display:block}.sp-tooltip .sp-tooltip-desc{margin-bottom:20px;display:block;border-bottom:1px solid var(--borderColorLight40);padding-bottom:20px;font-size:var(--fontSize);line-height:1.5}.sp-tooltip .sp-tooltip-code{font-family:Menlo,Monaco,Andale Mono,Courier New,monospace;display:block;word-break:break-all;color:var(--colorPre);font-size:11px}.analysis-score .sp-tooltip{vertical-align:middle;font-size:.75em}#seopress_content_analysis .wrap-insights-post .sp-tooltip *{font-weight:400}#seopress_content_analysis .wrap-insights-post .sp-tooltip-headings{font-weight:700}#seopress_content_analysis a{color:var(--backgroundPrimary)}#seopress_content_analysis a.nounderline,#seopress_content_analysis a.nounderline:hover{text-decoration:none}#seopress_content_analysis .wrap-seopress-analysis{display:inline-block;width:100%}#seopress_content_analysis .col-left{width:calc(50% - 30px);float:left;margin-right:30px}#seopress_content_analysis .col-right{float:right;width:50%}#seopress_content_analysis #seopress_suggestions{display:inline-block;width:100%;margin:0;height:auto;padding:20px 0;position:relative;left:-5px}#seopress_content_analysis #seopress_suggestions li{list-style:none;margin:5px;display:inline-block}#seopress_content_analysis .analysis-score{clear:both;border-top:1px solid var(--borderColorCard);display:flex;justify-content:space-between;align-items:center}.column-seopress_score .analysis-score{display:flex;align-content:center}#seopress_content_analysis .analysis-score p,.column-seopress_score .analysis-score p{font-weight:700;font-size:1.2em}#seopress_content_analysis .analysis-score svg,.column-seopress_score .analysis-score svg{display:inline-block;height:30px;width:30px;margin:0;border-radius:100%;position:relative;font-weight:600;shape-rendering:geometricprecision;font-size:.5rem;vertical-align:middle;margin-right:15px}.column-seopress_score .analysis-score p,.column-seopress_score .analysis-score svg{margin:0}@keyframes loadingPulse{0%{stroke:#adc5d2}50%{stroke:#00a0d2}100%{stroke:#adc5d2}}#seopress_content_analysis .analysis-score .loading #bar{stroke-dashoffset:0!important;stroke:#adc5d2!important;animation:loadingPulse 3s infinite ease-in-out}#seopress_content_analysis .analysis-score .good #bar,.column-seopress_score .analysis-score #bar.good{stroke:var(--colorSuccess)}#seopress_content_analysis .analysis-score .notgood #bar,.column-seopress_score .analysis-score #bar.notgood{stroke-dashoffset:101px;stroke:var(--colorWarning)}#seopress_content_analysis .analysis-score svg circle,.column-seopress_score .analysis-score svg circle{stroke-dashoffset:0;transition:stroke-dashoffset 1s linear;stroke:#ccc;stroke-width:2em}#tab_seopress_page_speed .ps-score svg path,#tab_seopress_ps .ps-score svg path{stroke-linecap:round;stroke-width:2.8;fill:none}#tab_seopress_page_speed .ps-score,#tab_seopress_ps .ps-score{position:relative;display:inline-block}#tab_seopress_page_speed .ps-score svg,#tab_seopress_ps .ps-score svg{width:80px;height:80px}#tab_seopress_page_speed .ps-score span,#tab_seopress_ps .ps-score span{font-weight:700;left:0;position:absolute;top:0;width:80px;height:80px;align-items:center;display:flex;justify-content:center;margin:0}#tab_seopress_page_speed .ps-score.green #bar,#tab_seopress_ps .ps-score.green #bar{stroke:var(--colorSuccess)}#tab_seopress_page_speed .ps-score.yellow #bar,#tab_seopress_ps .ps-score.yellow #bar{stroke:var(--colorWarning)}#tab_seopress_page_speed .ps-score.red #bar,#tab_seopress_ps .ps-score.red #bar{stroke:var(--colorAlert)}#tab_seopress_ps .score,.wrap-seopress-score .score{width:12px;height:12px;display:inline-block;margin-right:10px;vertical-align:middle}#tab_seopress_ps .score.red,.wrap-seopress-score .score.red{border-bottom-color:var(--colorAlert);border-bottom-style:solid;border-bottom-width:12px;border-left-color:transparent;border-left-style:solid;border-left-width:6px;border-right-color:transparent;border-right-style:solid;border-right-width:6px}.wrap-seopress-score small{font-size:12px}.wrap-seopress-score small.red,.wrap-seopress-score small.yellow{color:var(--colorAlert)}#tab_seopress_ps .score.yellow,.wrap-seopress-score .score.yellow{background-color:var(--colorWarning);display:inline-block}#tab_seopress_ps .score.green,.wrap-seopress-score .score.green{border-radius:100%;background-color:var(--colorSuccess)}.wrap-seopress-score small.green{color:var(--colorSuccess)}.wrap-seopress-score .score.null{background:#ccc;border-radius:100%}#seopress_content_analysis .gr-analysis{clear:both}#seopress_content_analysis .gr-analysis-title{border-top:1px solid var(--borderColorCard);position:relative}#seopress_content_analysis .gr-analysis-title .impact,#seopress_cpt .impact{position:absolute;left:10px;top:calc(50% - 5px);width:10px;height:10px;border-radius:50px;padding:0;margin:0;border:1px solid #fff}#seopress_content_analysis .gr-analysis .impact.good{background:var(--colorSuccess);box-shadow:0 0 5px var(--colorSuccess)}#seopress_content_analysis .gr-analysis .impact.low{background:var(--colorWarning);box-shadow:0 0 5px var(--colorWarning)}#seopress_content_analysis .gr-analysis .impact.medium{background:var(--colorLowAlert);box-shadow:0 0 5px var(--colorLowAlert)}#seopress_content_analysis .gr-analysis .impact.high,#seopress_cpt .impact.high{background:var(--colorAlert);box-shadow:0 0 5px var(--colorAlert)}#seopress_content_analysis .gr-analysis-content .impact.high{background:var(--colorAlert);box-shadow:none;color:#fff;padding:2px 4px;margin-left:5px;border-radius:4px;font-weight:700}#seopress_cpt .impact.high{position:relative;top:calc(50% - 18px);display:inline-block;left:inherit;right:-10px}#seopress_content_analysis .description,#seopress_cpt .description,#seopress_pro_cpt .description,.seopress-option .description{display:block;font-size:12px;color:var(--color)}@media only screen and (max-width:782px){#seopress_content_analysis .description,#seopress_cpt .description,#seopress_pro_cpt .description,.seopress-option .description{word-break:break-word}}#seopress_content_analysis input~span.description,#seopress_content_analysis span.description~input,#seopress_cpt input~span.description,#seopress_cpt span.description~input,#seopress_pro_cpt input~span.description,#seopress_pro_cpt span.description~input{margin-top:5px}#seopress_content_analysis .gr-analysis-title button{background:#fff;border:0;cursor:pointer;display:block;margin:0;position:relative;text-align:left;width:100%;padding:15px 30px;align-items:center;transition:all .3s linear}#seopress_content_analysis .gr-analysis-title button:hover{background:#f3f4f5}#seopress_content_analysis .gr-analysis-title button:focus{color:#191e23;border:none;box-shadow:none;outline-offset:-2px;outline:1px dotted #555d66}#seopress_content_analysis .gr-analysis-title button .seopress-arrow::after{content:"\f343";font-family:Dashicons;position:absolute;right:10px;top:calc(50% - 7px)}#seopress_content_analysis .gr-analysis-title button.open .seopress-arrow::after{content:"\f347"}#seopress_content_analysis .gr-analysis-content{padding:0 1rem .5rem 1rem;display:none;width:100%;border-top:1px solid var(--borderColorCard)}#seopress_content_analysis h3{margin:0;font-size:1em}#seopress_content_analysis h4{border-bottom:1px solid var(--borderColorCard);padding-bottom:.5rem;text-transform:uppercase;font-size:.85em;position:-webkit-sticky;position:sticky;top:0;background:#fff}#seopress_content_analysis .wrap-analysis-img ul{display:flex;flex-wrap:wrap}#seopress_content_analysis .wrap-analysis-img ul li{padding:0;text-align:left;cursor:default}#seopress_content_analysis .wrap-analysis-img h4{border-bottom:1px solid var(--borderColorLight);padding-bottom:10px}#seopress_content_analysis .wrap-analysis-img ul li img{max-width:150px;max-height:150px;object-fit:cover;border:1px solid var(--borderColorLight);cursor:default;padding:1px}#seopress-analysis-tabs .dashicons,#seopress_cpt .dashicons{vertical-align:middle}#seopress-analysis-tabs{clear:both}#seopress_content_analysis .dashicons-no-alt,#seopress_content_analysis .dashicons-yes,#seopress_pro_cpt .dashicons-no-alt,#seopress_pro_cpt .dashicons-yes{color:#fff;background:var(--colorSuccess);border-radius:50px;margin-right:10px}#seopress_content_analysis .dashicons-no-alt,#seopress_pro_cpt .dashicons-no-alt{background:var(--colorAlert)}#seopress_content_analysis .description-alt,#seopress_cpt .description-alt{padding:1em 0;border-top:1px solid var(--borderColorLight);border-bottom:1px solid var(--borderColorLight);display:flex}#seopress_cpt .desc-fb{margin-top:0;border-top:none}#seopress_content_analysis .description-alt svg,#seopress_cpt .description-alt svg{vertical-align:middle;align-self:center;fill:#f0b849;flex-shrink:0;margin-right:16px}#seopress_cpt .notice{padding:10px 14px;margin:0}#seopress_cpt .inside{margin:0;padding:0}#seopress_cpt .ui-tabs .ui-tabs-nav{display:flex;position:relative;width:100%;z-index:10;margin:0;border-radius:0;padding:0;align-items:center;padding:0;height:48px;border-bottom:1px solid #ddd;background:inherit;line-height:inherit;color:inherit;border-top:none;border-left:none;border-right:none}#seopress_cpt .ui-tabs .sp-section{font-weight:700;font-size:var(--fontSize)}#seopress_cpt .ui-helper-clearfix:after{content:none}.seopress_page_seopress-titles #seopress-tabs .form-table td,.seopress_page_seopress-titles #seopress_content_analysis .form-table td{padding:0}#seopress_cpt .ui-tabs .ui-tabs-panel{background:#fff;border-radius:0;display:inline-block;padding:1em 1.4em;width:100%}#seopress_content_analysis .dashicons-info,#seopress_cpt .ui-tabs .ui-tabs-panel .dashicons-info,#seopress_pro_cpt .dashicons-info{font-size:16px;vertical-align:middle;height:16px;width:16px}#seopress_cpt .ui-tabs .ui-tabs-nav li,#seopress_cpt .ui-tabs-anchor{cursor:pointer!important}body #seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active{position:relative;z-index:60;cursor:pointer;border-radius:0;border-bottom:4px solid var(--backgroundPrimary)!important}#seopress_cpt .wp-color-result{margin:0}#seopress_cpt #tabs-6 #wrap-videos .video .accordion-section-content,#seopress_cpt #tabs-6>p{padding:0 1.4em}#seopress_cpt #tabs-6 #wrap-videos .video .accordion-section-content{padding:0 1.4em 1em}#seopress_cpt #tabs-6 #wrap-videos .video{border-top:1px solid var(--borderColorLight)}#seopress_cpt #tabs-6 #wrap-videos .video .accordion-section-title{border-left:none;border-right:none;font-size:1em;padding:1em 1.4em}#seopress_cpt #tabs-6 #wrap-videos .video:last-child .accordion-section-content,#seopress_cpt #tabs-6 #wrap-videos .video:last-child .accordion-section-title{border-bottom:1px solid var(--borderColorLight)}#seopress_content_analysis .mandatory,#seopress_cpt .mandatory{color:var(--colorAlert)}#seopress_cpt .box-left{float:left;width:49%;margin-right:1%}#seopress_cpt .box-right{float:left;width:49%;margin-left:1%}#seopress_cpt #tabs-3 .box-left{width:44%}#seopress_cpt #tabs-3 .box-right{width:54%}@media only screen and (max-width:1200px){#seopress_cpt .box-left,#seopress_cpt .box-right{float:none;width:100%;margin:0}}@media only screen and (max-width:1500px){#seopress_cpt #tabs-3 .box-left,#seopress_cpt #tabs-3 .box-right{float:none;width:100%;margin:0}}#edittag #seopress_cpt #tabs-3 .box-left,#edittag #seopress_cpt #tabs-3 .box-right{float:none;width:100%;margin:0}#seopress-tabs .seopress_media_upload,#seopress_pro_cpt .seopress_media_upload{margin-top:.5rem}#term-seopress #seopress_cpt{width:95%}#seopress_cpt .ui-tabs{position:relative;padding:0;border:none;font-family:inherit;font-size:inherit;display:inline-block;width:100%}#seopress_cpt .ui-tabs .ui-tabs-nav li{list-style:none;position:relative;padding:0;white-space:nowrap;margin:0;border:none;height:48px;background:0 0}#seopress_cpt .ui-tabs .ui-tabs-nav li a{display:flex;padding:3px 15px;align-items:center}#seopress-admin-tabs.ui-tabs-vertical .ui-tabs-nav li a,#seopress_cpt .ui-tabs-vertical .ui-tabs-nav li a{display:block}#seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:0;padding-bottom:0}#seopress_cpt .ui-tabs .ui-tabs-nav li.ui-state-disabled a,#seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-active a,#seopress_cpt .ui-tabs .ui-tabs-nav li.ui-tabs-loading a{font-weight:500}#seopress_cpt .ui-tabs .ui-tabs-nav li a,#seopress_cpt .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer;color:#191e23;text-decoration:none;height:48px}#seopress_cpt .ui-tabs .ui-tabs-nav li a:focus,#seopress_cpt .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a:focus{outline:3px solid transparent;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--backgroundPrimary),inset 0 -4px 0 0 var(--backgroundPrimary)}#seopress_cpt .ui-tabs-vertical{width:55em}#seopress_cpt .ui-tabs-vertical .ui-tabs-nav{padding:.2em .1em .2em .2em;float:left;width:12em}#seopress_cpt .ui-tabs-vertical .ui-tabs-nav li{clear:left;width:100%;border-bottom-width:1px!important;border-right-width:0!important;margin:0 -1px .2em 0}#seopress_cpt .ui-tabs-vertical .ui-tabs-nav li.ui-tabs-active{padding-bottom:0;padding-right:.1em;border-right-width:1px}#seopress_cpt .ui-tabs-vertical .ui-tabs-panel{padding:1em;float:right;width:40em}#seopress_cpt .ui-tabs .ui-tabs-nav li a .dashicons{margin-right:2px}#seopress_cpt .google-snippet-preview{font-family:arial,sans-serif;word-break:break-all}#seopress_cpt .google-snippet-preview.mobile-preview .wrap-snippet{margin:0 0 10px 0;box-shadow:0 1px 6px rgba(32,33,36,.28);border-radius:8px;padding:12px 16px}#seopress_cpt .google-snippet-preview>p{word-break:normal}#seopress_cpt .google-snippet-preview .snippet-title,#seopress_cpt .google-snippet-preview .snippet-title-custom,#seopress_cpt .google-snippet-preview .snippet-title-default{color:#1a0dab;font-size:18px;font-weight:400;line-height:21.6px}#seopress_cpt .google-snippet-preview.mobile-preview .snippet-title,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-title-custom,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-title-default{font-size:16px;line-height:20px;margin-bottom:12px}#seopress_cpt .google-snippet-preview .snippet-permalink{color:#006621;font-size:14px;font-style:normal;font-weight:400;line-height:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#seopress_cpt .google-snippet-preview .wrap-snippet .wrap-m-icon-permalink,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-permalink{display:none}#seopress_cpt .google-snippet-preview.mobile-preview .wrap-m-icon-permalink{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:12px;display:flex}#seopress_cpt .google-snippet-preview.mobile-preview .wrap-m-icon-permalink .snippet-permalink{display:block;color:#3c4043;font-size:12px}#seopress_cpt .google-snippet-preview.mobile-preview .snippet-favicon{margin-right:12px;vertical-align:middle}#seopress_cpt .google-snippet-preview.mobile-preview .snippet-favicon img{width:16px;height:16px;max-width:inherit}#seopress_cpt .google-snippet-preview.mobile-preview .wrap-snippet .snippet-permalink:first-child{color:#3c4043;white-space:nowrap;font-size:12px;display:block}#seopress_cpt .google-snippet-preview .snippet-description,#seopress_cpt .google-snippet-preview .snippet-description-custom,#seopress_cpt .google-snippet-preview .snippet-description-default{color:#545454;font-size:14px;font-weight:400;line-height:18.2px;display:inline;hyphens:none;word-break:normal}#seopress_cpt .google-snippet-preview.mobile-preview .snippet-description,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-description-custom,#seopress_cpt .google-snippet-preview.mobile-preview .snippet-description-default{color:#3c4043;font-size:14px;line-height:20px}#seopress_cpt .google-snippet-preview .snippet-date{color:grey;display:inline}#seopress_cpt .facebook-snippet-box{color:#4b4f56;font-size:14px;width:524px;max-width:100%}#seopress_cpt .facebook-snippet-box .notice,#seopress_cpt .twitter-snippet-box .notice{padding:10px 14px;margin:0 0 10px 0;width:100%}#seopress_cpt .facebook-snippet-box .notice span,#seopress_cpt .twitter-snippet-box .notice span{font-weight:700}#seopress_cpt .snippet-meta{display:flex;overflow:hidden;max-height:12px}#seopress_cpt .fb-by,#seopress_cpt .snippet-fb-site-name,#seopress_cpt .snippet-fb-url{color:#606770;font-size:12px;white-space:normal;line-height:11px;text-transform:uppercase;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis}#seopress_cpt .fb-sep{padding-left:5px;padding-right:5px;color:#606770;line-height:11px;font-size:12px}#seopress_cpt .facebook-snippet-box .facebook-snippet-text{border:1px solid #dadde1;background-color:#f2f3f5;padding:10px 12px}#seopress_cpt .facebook-snippet-box .title-desc{max-height:46px;overflow:hidden}#seopress_cpt .facebook-snippet-box .snippet-fb-title,#seopress_cpt .facebook-snippet-box .snippet-fb-title-custom,#seopress_cpt .facebook-snippet-box .snippet-fb-title-default{font-size:16px;line-height:20px;margin:3px 0 0;padding-top:2px;color:#1d2129;font-weight:700;overflow:hidden;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis;white-space:normal;word-break:break-word;max-height:22px}#seopress_cpt .facebook-snippet-box .snippet-fb-description,#seopress_cpt .facebook-snippet-box .snippet-fb-description-custom,#seopress_cpt .facebook-snippet-box .snippet-fb-description-default{color:#606770;font-size:14px;line-height:20px;word-break:break-word;font-family:Helvetica,Arial,sans-serif;max-height:80px;overflow:hidden;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis;white-space:normal;width:100%}#seopress_cpt .facebook-snippet-box img{display:block;height:274px;width:524px;object-fit:cover;background-color:#f0f0f0;text-align:center;border-bottom:none}.term-php #seopress_cpt .facebook-snippet-box img,.term-php #seopress_cpt .twitter-snippet-box img{width:100%;height:auto}.seopress_social_fb_img_upload,.seopress_social_twitter_img_upload{position:absolute;width:100%;cursor:pointer;height:100%;left:0;top:0}.seopress_social_fb_img_upload:hover::after,.seopress_social_twitter_img_upload:hover::after{content:'\f464';position:absolute;font-family:dashicons;width:100%;height:100%;top:0;left:0;font-size:40px;background:rgb(255 255 255 / 70%);display:flex;justify-content:center;align-items:center;color:#1e1e1e}.snippet-fb-img,.snippet-fb-img-custom,.snippet-fb-img-default,.snippet-twitter-img,.snippet-twitter-img-custom,.snippet-twitter-img-default{position:relative}#seopress_cpt .twitter-snippet-box{color:#4b4f56;font-size:14px;width:504px}#seopress_cpt .snippet-twitter-url{color:#8899a6;font-size:14px;white-space:normal;line-height:11px;text-transform:uppercase;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis}#seopress_cpt .twitter-snippet-box .twitter-snippet-text{border:1px solid #dadde1;background-color:#fff;padding:10px 12px;border-radius:0 0 10px 10px}#seopress_cpt .twitter-snippet-box .title-desc{max-height:46px;overflow:hidden}#seopress_cpt .twitter-snippet-box .snippet-twitter-img,#seopress_cpt .twitter-snippet-box .snippet-twitter-img-custom,#seopress_cpt .twitter-snippet-box .snippet-twitter-img-default{border-radius:10px 10px 0 0;overflow:hidden}#seopress_cpt .twitter-snippet-box .snippet-twitter-title,#seopress_cpt .twitter-snippet-box .snippet-twitter-title-custom,#seopress_cpt .twitter-snippet-box .snippet-twitter-title-default{font-size:1em;line-height:20px;margin-bottom:5px;max-height:1.3em;color:#000;font-weight:700;overflow:hidden;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis;white-space:normal;word-break:break-word}#seopress_cpt .twitter-snippet-box .snippet-twitter-description,#seopress_cpt .twitter-snippet-box .snippet-twitter-description-custom,#seopress_cpt .twitter-snippet-box .snippet-twitter-description-default{color:#000;font-size:14px;line-height:20px;word-break:break-word;font-family:Helvetica,Arial,sans-serif;max-height:80px;overflow:hidden;-webkit-box-orient:vertical;display:-webkit-box;text-overflow:ellipsis;white-space:normal;width:100%}#seopress_cpt .twitter-snippet-box img{display:block;height:263px;width:504px;object-fit:cover;background-color:#f0f0f0;text-align:center;border-bottom:none}.wrap-toggle-preview{position:relative}.wrap-toggle-preview p{font-weight:700;margin:0 0 1rem 0}#seopress_add_to_insights{margin-left:1rem}#seopress_add_to_insights_status{display:inline-block;font-weight:700;margin:0 0 0 1rem;vertical-align:middle;padding:.3rem;font-style:italic}#seopress_cpt .wrap-seopress-counters,#seopress_pro_cpt .wrap-seopress-counters,.seopress-setup .wrap-seopress-counters,.seopress-styles .wrap-seopress-counters{text-align:right;background:#e9ecef;padding:2px 5px;display:flex;font-size:12px;justify-content:flex-end;border-radius:0 0 .25rem .25rem}#seopress_cpt .sp-progress,#seopress_pro_cpt .sp-progress,.seopress-setup .sp-progress,.seopress-styles .sp-progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem .25rem 0 0;margin:-15px 0 0 0}#seopress_cpt .sp-progress-bar,#seopress_pro_cpt .sp-progress-bar,.seopress-setup .sp-progress-bar,.seopress-styles .sp-progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0085ba;transition:width .6s ease}#seopress_cpt #seopress_titles_desc_counters,#seopress_cpt #seopress_titles_title_counters,#seopress_pro_cpt #seopress_rich_snippets_articles_counters,#seopress_pro_cpt #seopress_rich_snippets_courses_counters{display:inline;margin-right:5px}#seopress_cpt #seopress_titles_desc_counters_val,#seopress_cpt #seopress_titles_title_counters_val,#seopress_pro_cpt #seopress_rich_snippets_articles_counters_val,#seopress_pro_cpt #seopress_rich_snippets_courses_counters_val{display:inline;font-weight:700}#tab-panel-seopress_titles_help_tab li span{font-weight:700;margin-right:10px}.seopress-styles .seopress-option{margin:85px 40px 40px}@media only screen and (max-width:782px){.seopress-styles .seopress-option{margin:85px 22px 22px}}.seopress-styles .seopress-option h1{font-size:var(--titleFontSize);color:var(--titleColor);font-weight:var(--titleFontWeight);margin:var(--titleMargin);display:flex;justify-content:space-between}.seopress_wrap_archive_cpt,.seopress_wrap_single_cpt,.seopress_wrap_single_tax,.seopress_wrap_tax{margin:0 0 20px 0}#tab_seopress_titles_archives .form-table th:empty,#tab_seopress_titles_single .form-table th:empty,#tab_seopress_titles_tax .form-table th:empty{display:none}.seopress-styles .seopress-option .link-archive{font-size:var(--fontSize)}.seopress-styles .seopress-option .link-archive .dashicons{font-size:18px;width:20px;height:20px;margin:inherit}.seopress-option h1 .feature-state .dashicons{font-size:16px;width:16px;height:16px;vertical-align:middle;margin:0 10px 0 0}.seopress-styles .seopress-option .submit{padding:20px 0 20px 0;left:0;margin:0;position:sticky;bottom:0;z-index:100;display:inline-block}@media only screen and (max-width:782px){.seopress-styles .seopress-option .submit{position:relative}}.seopress-styles .seopress-option .seopress-tab .submit{display:block;position:relative}.seopress-styles #wpcontent{padding-left:0}.seopress-styles pre{font-family:Menlo,Monaco,Andale Mono,Courier New,monospace;padding:10px;display:inline-block;background-color:var(--backgroundSecondaryHover);border-radius:3px;color:var(--colorDark);font-size:var(--fontSize)}.seopress-option .seopress-settings{float:left;max-width:750px;width:100%}.seopress-option .seopress-settings label{margin:0 0 0 10px}.wrap-seopress-tab-content{position:relative;display:block;width:100%;max-width:64rem;margin:0 auto}#seopress-tabs .seopress-tab{padding:10px 1.5rem;width:100%;display:none}#seopress-tabs.full-width .seopress-tab{width:100%}@media only screen and (max-width:1024px){#seopress-tabs .seopress-tab{width:100%}}#seopress-tabs .seopress-tab.active{display:inline-block;background:#fff}@media only screen and (max-width:782px){#seopress-tabs .seopress-tab.active{width:100%;border-left:none;border-top:1px solid RGB(238,238,238)}}#seopress_htaccess_file{width:100%}.seopress-option textarea{min-height:100px}.seopress-option .wp-picker-container button{box-shadow:none;border:1px solid #0071a1;border-radius:3px;background:#f3f5f6;text-transform:none}.seopress-option .wp-picker-container input[type=text].wp-color-picker{min-width:inherit}.seopress-option .wp-picker-container .wp-picker-default{margin:0}.seopress-option .wp-picker-container .wp-picker-clear{box-shadow:none;text-transform:none;border-radius:0;background:0 0;margin:0}.seopress-option .wp-picker-container .wp-picker-clear:hover{background:0 0;text-decoration:currentColor;color:inherit}.seopress-inbox-title p{font-size:20px;color:var(--titleColor);margin:0}#seopress-admin-tabs .ui-tabs-nav{display:flex;padding-top:1rem;padding-bottom:0}#seopress-admin-tabs .nav-tab-wrapper a.nav-tab-active:focus{color:inherit}.seopress-intro{padding:20px}.seopress-option .seopress-table{background:#fff;border:1px solid var(--borderColorLight)}.seopress-option .seopress-table th{padding:15px 10px;vertical-align:middle}.wp-admin-ui_page_seopress-roles .seopress-option .seopress-table th{min-width:200px}.seopress-option .seopress-table .seopress-settings-section{background:#f1f1f1}.seopress-option .seopress-table .seopress-table-head .seopress-feature{border-bottom:1px solid var(--borderColorLight);font-weight:700;background:#f1f1f1}#seopress-content .feature-state,.seopress-option .feature-state{font-style:italic;font-size:11px;font-weight:400}@media only screen and (max-width:782px){#seopress-content .feature-state,.seopress-option .feature-state{display:none}}.seopress-option #tab_seopress_titles_archives h3,.seopress-option #tab_seopress_titles_single h3,.seopress-option #tab_seopress_titles_tax h3{margin:2em 0 1em 0;border-top:1px solid var(--borderColorLight);padding:1em 0 0 0}.seopress-option #tab_seopress_titles_archives h3:first-child,.seopress-option #tab_seopress_titles_single h3:first-child,.seopress-option #tab_seopress_titles_tax h3:first-child{margin:0 0 1em 0}.seopress-option #tab_seopress_titles_archives h3 div,.seopress-option #tab_seopress_titles_single h3 div,.seopress-option #tab_seopress_titles_tax h3 div{display:inline}#seopress-content .feature-state-on,#seopress-content .feature-state.feature-state-on,.seopress-option .feature-state-on,.seopress-option .feature-state.feature-state-on{display:inline-block}#seopress-content .feature-state-off,.seopress-option .feature-state-off{display:none}.seopress-option .postbox .inside li{list-style:square inside;padding-left:5px}#tab_seopress_page_speed .inside li{list-style:none;padding-left:0;word-break:break-word}.seopress-option .log{display:none;font-weight:700}.seopress-option input[type=text].seopress-admin-menu-input{min-width:inherit;width:100%}.seopress_page_seopress-import-export .postbox{width:calc(100% - 20px)}#seopress_cpt #seopress_titles_title_meta{margin-bottom:.2rem}.seopress-option .section-tool{border:none;box-shadow:none;background:0 0;position:relative}.seopress-option .section-tool::after{content:"";background:#dedede;height:1px;width:100%;display:block}.seopress-option .section-tool:last-child{margin-bottom:0}.seopress-option .section-tool:last-child::after{content:none}.seopress-option .section-tool .inside{padding-left:0;padding-right:0}.seopress-option .sp-section-header{width:100%;display:flex;position:relative;align-items:center}.seopress-option .sp-section-header h2{font-size:1.5em}.seopress-option .sp-section-header>.dashicons{color:var(--primaryColor);padding:10px;border-radius:6px;margin-right:10px;background:#c4f0ff}.seopress-option .sp-section-header .wrap-toggle-checkboxes{display:flex}.seopress-notice{margin:5px 0 35px 15px;position:relative;top:75px;left:25px;background:rgb(0 124 186 / 10%);border-left:4px solid var(--primaryColor);padding:8px 12px;width:calc(100% - 108px);z-index:10}#seopress-tabs .seopress-notice,#seopress_insights_dashboard_rankings_widget .seopress-notice,#seopress_pro_cpt .seopress-notice,.seopress-setup .seopress-notice{top:inherit;left:inherit;margin:15px 0 30px 0;width:auto}.seopress-hidden{display:none}.seopress-notice pre{background:#fff}.seopress-notice.is-success{border-left-color:var(--colorSuccess);background:#eff9f1}.seopress-notice.is-warning{border-left-color:#f0b849;background:#fef8ee}.seopress-notice.is-error{border-left-color:#cc1818;background:rgb(244 162 162 / 30%)}#seopress-tabs.wrap{margin:30px 0 0 0}#seopress-notifications-center .seopress-alert ul,#seopress-tabs.wrap ul{list-style:square inside;padding-left:5px;display:inline-block;max-width:35rem;width:100%}.post-type-seopress_404 .seopress-BlankState-message::before,.post-type-seopress_schemas .seopress-BlankState-message::before{font-family:Dashicons;speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;margin:0;text-indent:0;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center;content:"\f103"}.post-type-seopress_schemas .seopress-BlankState-message::before{content:"\f495"}.seopress-BlankState{text-align:center;padding:5em 0 0}.seopress-BlankState .seopress-BlankState-message{color:#aaa;margin:0 auto 1.5em;line-height:1.5em;font-size:1.2em;max-width:500px}.seopress-BlankState .seopress-BlankState-message::before{color:#ddd;text-shadow:0 -1px 1px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.8);font-size:8em;display:block;position:relative!important;top:auto;left:auto;line-height:1em;margin:0 0 .1875em}.seopress-BlankState .seopress-BlankState-cta{font-size:1.2em;padding:.75em 1.5em;margin:0 .25em}.seopress-BlankState{max-width:764px;text-align:center;margin:auto}.seopress-BlankState .seopress-BlankState-message{color:var(--titleColor);font-size:1.5em;margin:0 auto 1em}.seopress-BlankState .seopress-BlankState-message::before{font-size:120px}.seopress-BlankState .seopress-BlankState-buttons{margin-bottom:4em}#seopress_content_analysis .up,#seopress_content_analysis .up .dashicons{color:var(--colorSuccess)}#seopress_content_analysis .down,#seopress_content_analysis .down .dashicons{color:var(--colorAlert)}#seopress_content_analysis .up .dashicons{transform:rotateZ(45deg)}#seopress_content_analysis .stable .dashicons{transform:rotateZ(90deg)}#seopress_content_analysis .down .dashicons{transform:rotateZ(135deg)}#seopress_content_analysis .wrap-insights-post{clear:both;border-top:1px solid var(--borderColorCard);display:flex;align-items:center}#seopress_content_analysis .wrap-insights-post .widget-insights-title{margin:0 1rem}#seopress_content_analysis .wrap-insights-post span{font-weight:700;margin:0 .2rem 0 0}.wrap-user-roles{display:grid;grid-template-columns:repeat(4,1fr)}@media only screen and (max-width:782px){.wrap-user-roles{display:block}}#notice-insights-alert.is-active,#seopress-news-panel.is-active,#seopress-notifications-center.is-active{display:block!important}#seopress-notifications-center .seopress-alert{padding:16px 25px;position:relative;transition:all 150ms ease;justify-content:space-between;margin-bottom:20px}#seopress-notifications-center .seopress-alert:last-child{margin-bottom:0;border-bottom:none}#seopress-notifications-center .dashicons{display:flex;align-self:normal;width:30px;height:30px;color:var(--colorIcon);font-size:30px;margin:0 0 10px 0}#seopress-admin-tabs #tab_seopress_notifications.seopress-tab{background:0 0;padding:0;border-radius:0;width:100%}.seopress-notice #message{margin:5px 10px 2px 0}#seopress-notice a{position:relative;text-decoration:none;margin:0 0 0 .3rem}#seopress-notice a .tooltip{white-space:pre;z-index:200;padding:2px 5px;font-weight:500;font-size:12px;color:#aab7c4;background:#fff;box-shadow:0 1px 2px 0 rgba(49,49,93,.1),0 0 1px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;opacity:0;top:30px;transition:opacity .2s ease;visibility:hidden;line-height:20px;left:-100%;overflow:hidden}#seopress-notice a:hover .tooltip{opacity:1;visibility:visible}.seopress-page-list{margin:1.5rem auto}.post-type-seopress_404 .seopress-notice,.post-type-seopress_bot .seopress-notice,.post-type-seopress_schemas .seopress-notice{left:0;top:40px;margin:0 0 50px;width:calc(100% - 48px)}.seopress-search{position:relative;padding:20px}.seopress-search::before{content:"\f179";font-family:Dashicons;position:absolute;top:35px;left:30px;font-size:20px}.seopress-search input{padding-left:40px}.seopress-item-toggle-options{position:relative;cursor:pointer;padding:5px 10px;border:1px solid var(--borderColor);border-radius:3px;transform:rotate(90deg);display:inline-block}.seopress-item-toggle-options::before{content:"\f11c";font-family:Dashicons;font-size:18px;vertical-align:middle}.seopress-card{background:#fff;border:1px solid var(--borderColorCard);border-radius:3px;position:relative}.seopress-option .seopress-card-actions a+button{margin-left:.5em}.seopress-card-title{border-bottom:1px solid var(--borderColorCard);padding:18px 24px;display:flex;justify-content:space-between;align-items:center}.seopress-dashboard-columns .seopress-dashboard-column:last-child .seopress-card-title:hover{cursor:move}.seopress-card-title h2{margin:0}.seopress-cart-list{border-bottom:1px solid var(--borderColorCard);padding:18px 24px;display:flex;align-items:center;text-decoration:none;color:var(--primaryColor);font-weight:700;line-height:20px}.seopress-cart-list:last-child{border-bottom:none}.seopress-cart-list:active,.seopress-cart-list:focus,.seopress-cart-list:hover{background:var(--backgroundSecondaryHover)}body .seopress-cart-list h3{font-size:var(--fontSize);color:var(--primaryColor);font-weight:700;margin:0}.seopress-cart-list p{color:var(--titleColor);font-weight:400;margin:0;font-size:12px;line-height:20px}.seopress-card-footer{padding:10px 20px;border-top:1px solid var(--borderColorLight40)}.seopress-card-popover{display:none;background:#fff;border:1px solid var(--borderColor);padding:20px;position:absolute;top:55px;overflow-y:auto;right:28px;z-index:20}.seopress-card-popover.is-open{display:block}#seopress-tabs .seopress-tag-dropdown,#seopress_cpt .seopress-tag-dropdown,#seopress_cpt .tag-title,#seopress_pro_cpt .tag-title,.seopress-button,.seopress-option .tag-title{cursor:pointer;font-weight:500;border-radius:4px;transition:all .3s linear}#seopress_cpt .wrap-tags,#seopress_pro_cpt .wrap-tags,.seopress-option .wrap-tags{position:relative;display:inline-flex;width:100%;margin:10px 0}.seopress-option .wrap-tags{flex-wrap:wrap}.seopress-option .wrap-tags button{margin-bottom:10px}@media only screen and (max-width:782px){#seopress_cpt .wrap-tags,#seopress_pro_cpt .wrap-tags,.seopress-option .wrap-tags{flex-wrap:wrap}}#seopress-tabs .sp-wrap-tag-variables-list,#seopress_cpt .sp-wrap-tag-variables-list,#seopress_pro_cpt .sp-wrap-tag-variables-list{position:relative;float:left;display:none}#seopress-tabs.wrap .sp-tag-variables-list,#seopress_cpt .sp-tag-variables-list,#seopress_pro_cpt .sp-tag-variables-list{position:absolute;left:-48px;width:300px;z-index:100;top:20px;color:var(--titleColor);height:300px;z-index:100;overflow:auto;background:#fff;border:1px solid var(--borderColorLight);box-shadow:0 2px 6px rgb(0 0 0 / 5%);border-radius:2px;list-style:none;padding:0}#seopress-tabs .sp-wrap-tag-variables-list.open,#seopress_cpt .sp-wrap-tag-variables-list.open,#seopress_pro_cpt .sp-wrap-tag-variables-list.open{display:block}#seopress-tabs .seopress-tag-single-all.tag-description .dashicons,#seopress-tabs .seopress-tag-single-all.tag-title .dashicons,#seopress_cpt .seopress-tag-single-all.seopress-tag-dropdown .dashicons,#seopress_cpt .seopress-tag-single-all.tag-title .dashicons,#seopress_pro_cpt .seopress-tag-single-all.tag-title .dashicons{margin:0;transition:all 150ms linear}#seopress-tabs .seopress-tag-single-all.open .dashicons,#seopress_cpt .seopress-tag-single-all.open .dashicons,#seopress_pro_cpt .seopress-tag-single-all.open .dashicons{transform:rotateX(180deg)}#seopress-tabs.wrap .sp-tag-variables-list li,#seopress_cpt .sp-tag-variables-list li,#seopress_pro_cpt .sp-tag-variables-list li{padding:8px 12px;cursor:pointer;margin:0;border-bottom:1px solid var(--borderColorLight40)}#seopress-tabs .sp-tag-variables-list li span,#seopress_cpt .sp-tag-variables-list li span,#seopress_pro_cpt .sp-tag-variables-list li span{display:block;font-weight:700;font-size:12px;margin-bottom:2px}#seopress-tabs.wrap .sp-tag-variables-list li:hover,#seopress_cpt .sp-tag-variables-list li:hover,#seopress_pro_cpt .sp-tag-variables-list li:hover{background:var(--backgroundPrimaryHover);color:#fff;border-bottom-color:#fff}#seopress-tabs.wrap .sp-tag-variables-list li::after,#seopress_cpt .sp-tag-variables-list li::after,#seopress_pro_cpt .sp-tag-variables-list li::after{content:attr(data-value);display:inline-block;background:#e9ecef;padding:1px 5px;color:#333;font-family:Menlo,Monaco,Andale Mono,Courier New,monospace;border-radius:3px;font-size:11px}#seopress-tabs.wrap .seopress-tag-dropdown .dashicons,#seopress_cpt .seopress-tag-dropdown .dashicons,#seopress_cpt .tag-title .dashicons,#seopress_pro_cpt .tag-title .dashicons,.seopress-option .tag-title .dashicons{padding:0;height:16px;width:16px;font-size:16px;margin-right:5px;color:var(--primaryColor);vertical-align:middle}#seopress-tabs.wrap .seopress-tag-dropdown:hover .dashicons,#seopress_cpt .seopress-tag-dropdown:hover .dashicons,#seopress_cpt .tag-title:hover .dashicons,#seopress_pro_cpt .tag-title:hover .dashicons,.seopress-option .tag-title:hover .dashicons{color:#fff}#seopress-tabs.wrap .seopress-tag-dropdown .dashicons{margin:0}.seopress-overlay-tag-dropdown{position:absolute;display:none;top:0;left:0;width:100%;height:100%;z-index:50}.seopress-overlay-tag-dropdown.active{display:block}#seopress-tabs .seopress-tag-dropdown,#seopress_cpt .seopress-tag-dropdown,#seopress_cpt .tag-title,#seopress_pro_cpt .tag-title,.seopress-option .tag-title{padding:5px 12px;font-size:10px;user-select:none;margin:0 5px 0 0;display:inline-flex;text-transform:uppercase;align-items:center;color:var(--primaryColor)}#seopress-tabs .seopress-tag-dropdown:focus,#seopress-tabs .seopress-tag-dropdown:hover,#seopress_cpt .seopress-tag-dropdown:focus,#seopress_cpt .seopress-tag-dropdown:hover,#seopress_cpt .tag-title:focus,#seopress_cpt .tag-title:hover,#seopress_pro_cpt .tag-title:focus,#seopress_pro_cpt .tag-title:hover,.seopress-option .tag-title:focus,.seopress-option .tag-title:hover{box-shadow:0 0 var(--wp-admin-border-width-focus) var(--backgroundPrimary);background:var(--backgroundPrimaryHover);color:#fff}@media only screen and (max-width:782px){#seopress-tabs .seopress-tag-dropdown,#seopress_cpt .seopress-tag-dropdown,#seopress_cpt .tag-title,#seopress_pro_cpt .tag-title,.seopress-option .tag-title{margin-bottom:10px}}#seopress-content .seopress-useful-tools .widget-reverse li{padding:10px;margin:0;border-bottom:1px solid var(--borderColorLight)}#seopress-content .seopress-reverse label,#seopress-content .seopress-useful-tools .widget-whois ul li span{font-weight:700}#seopress-content #seopress-reverse-url{width:100%;margin:10px 0}#seopress-content .widget-reverse p{margin:0}.seopress-styles #screen-meta{position:relative;top:60px}.seopress-styles #screen-meta-links .show-settings{box-shadow:none}.seopress-styles #screen-meta-links .screen-meta-toggle{position:fixed;top:32px;z-index:2000;right:40px}@media only screen and (max-width:782px){.seopress-styles #screen-meta-links .screen-meta-toggle{position:relative;top:60px}}#seopress-content input.toggle,#seopress_cpt input.toggle,.seopress-option input.toggle{max-height:0;max-width:0;opacity:0;position:relative}.seopress-feature input.toggle{display:block}#seopress_cpt input.toggle,.seopress_wrap_single_cpt input.toggle,.seopress_wrap_tax input.toggle{margin:0;border:none;min-width:0}#seopress-content input.toggle+label,#seopress_cpt #tabs-1 input.toggle+label,.seopress-option input.toggle+label{display:inline-block;position:relative;box-shadow:inset 0 0 0 1px #d5d5d5;text-indent:-5000px;height:20px;width:40px;border-radius:15px;margin:0 10px 0 0}#seopress-content input.toggle+label{margin:0;left:-20px}#seopress_cpt #tabs-1 input.toggle+label{margin:0}.wrap-toggle-checkboxes input.toggle+label{float:left;margin-right:10px}#seopress-content input.toggle+label:before,#seopress_cpt input.toggle+label:before,.seopress-option input.toggle+label:before{content:"";position:absolute;display:block;height:20px;width:30px;top:0;left:0;border-radius:15px;background:rgba(19,191,17,0);transition:.25s ease-in-out}#seopress-content input.toggle+label:after,#seopress_cpt input.toggle+label:after,.seopress-option input.toggle+label:after{content:"";position:absolute;display:block;height:20px;width:20px;top:0;left:0;border-radius:15px;background:#fff;box-shadow:inset 0 0 0 1px rgba(0,0,0,.2),0 2px 4px rgba(0,0,0,.2);transition:.25s ease-in-out}#seopress_cpt input.toggle+label,#seopress_cpt input.toggle+label:before,.seopress_wrap_single_cpt input.toggle+label,.seopress_wrap_single_cpt input.toggle+label:before,.seopress_wrap_tax input.toggle+label,.seopress_wrap_tax input.toggle+label:before{width:40px;height:20px}#seopress_cpt input.toggle+label:after,.seopress_wrap_single_cpt input.toggle+label:after,.seopress_wrap_tax input.toggle+label:after{width:20px;height:20px}#seopress-content input.toggle[data-toggle="1"]+label:before,#seopress_cpt input.toggle[data-toggle="1"]+label:before,.seopress-option input.toggle[data-toggle="1"]+label:before,.seopress_wrap_single_cpt input.toggle[data-toggle="1"]+label:before,.seopress_wrap_tax input.toggle[data-toggle="1"]+label:before{width:40px;background:var(--backgroundPrimary)}#seopress-content input.toggle[data-toggle="1"]+label:after,#seopress_cpt input.toggle[data-toggle="1"]+label:after,.seopress-option input.toggle[data-toggle="1"]+label:after{left:20px;box-shadow:inset 0 0 0 1px var(--backgroundPrimary),0 2px 4px rgba(0,0,0,.2)}#seopress_cpt input.toggle[data-toggle="1"]+label:after,.seopress_wrap_single_cpt input.toggle[data-toggle="1"]+label:after,.seopress_wrap_tax input.toggle[data-toggle="1"]+label:after{box-shadow:inset 0 0 0 1px var(--backgroundPrimary),0 2px 4px rgba(0,0,0,.2)}#seopress-content .seopress-page-list{position:relative;display:block;max-width:64rem}@media only screen and (max-width:782px){#seopress-content .seopress-page-list{grid-template-columns:repeat(1,1fr)}}.seopress-styles .wrap{margin:0;display:flex;position:relative}.seopress-insights.seopress-styles .wrap,.toplevel_page_seopress-option.seopress-styles .wrap{display:inherit;position:inherit;margin:inherit}@media only screen and (max-width:782px){.seopress-styles .wrap{display:inherit;position:inherit;margin:inherit}}.seopress-option .wrap div.nav-tab-wrapper{margin:0;padding:0;line-height:inherit;width:15%;z-index:10;font-weight:400;display:block;border-bottom:none}@media only screen and (max-width:782px){.seopress-option .wrap div.nav-tab-wrapper{width:100%;margin:0 0 20px 0;padding:0}}#seopress-admin-tabs.wrap div.nav-tab-wrapper{background:#fff;margin:0 auto;max-width:64rem;width:100%;border-bottom:1px solid var(--borderColorCard);padding:0;line-height:inherit;position:sticky;z-index:10;top:92px;border-radius:4px 4px 0 0;font-weight:400;overflow:hidden;display:flex;align-items:center;justify-content:space-between}@media only screen and (max-width:600px){#seopress-admin-tabs.wrap div.nav-tab-wrapper{top:0;display:block}}@media only screen and (max-width:1024px){#seopress-admin-tabs.wrap div.nav-tab-wrapper{display:block}}.seopress-option .nav-tab{border:0;background:0 0;opacity:.5;padding:6px 30px 6px 10px;transition:opacity .3s linear;color:var(--titleColor);margin:0;float:none;display:inline-block;width:100%;text-align:left;font-weight:400;white-space:normal}#seopress-admin-tabs .nav-tab{background:0 0;opacity:.5;padding:14px 20px;transition:opacity .3s linear;margin:0;float:none;display:inline-block;font-weight:400}#seopress-admin-tabs .nav-tab{width:100%}#seopress-admin-tabs .nav-tab-active,#seopress-admin-tabs .nav-tab-active:focus,#seopress-admin-tabs .nav-tab-active:focus:active,#seopress-admin-tabs .nav-tab-active:hover,#seopress-admin-tabs .nav-tab:focus,.nav-tab-active:focus,.seopress-option .nav-tab-active,.seopress-option .nav-tab-active:focus:active,.seopress-option .nav-tab-active:hover,.seopress-option .nav-tab:focus{opacity:1;outline:0;font-weight:600;position:relative;border-left:3px solid var(--backgroundPrimary)}#seopress-admin-tabs .nav-tab-active,#seopress-admin-tabs .nav-tab-active:focus,#seopress-admin-tabs .nav-tab-active:focus:active,#seopress-admin-tabs .nav-tab-active:hover,#seopress-admin-tabs .nav-tab:focus{border-bottom:4px solid var(--backgroundPrimary);border-left:none}#seopress-admin-tabs .nav-tab:hover,.seopress-option .nav-tab:hover{opacity:1}#seopress-admin-tabs .nav-tab:focus,.seopress-option .nav-tab:focus{outline:0;box-shadow:none}@keyframes sp-fade-in-out{0%{opacity:0;bottom:0;visibility:hidden}25%{opacity:1;bottom:40px;visibility:visible}75%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}.sp-components-snackbar-list{position:fixed;right:0;bottom:40px;padding-left:16px;padding-right:16px;animation-name:sp-fade-in-out;animation-duration:5s;animation-iteration-count:1;animation-fill-mode:forwards;visibility:hidden;z-index:1}.sp-components-snackbar__content{display:flex;align-items:center;justify-content:space-between;line-height:1.4}.sp-components-snackbar{font-family:var(--fontFamily);font-size:var(--fontSize);background-color:#32373c;border-radius:4px;box-shadow:0 2px 4px rgba(0,0,0,.3);color:#fff;padding:16px 24px;cursor:pointer}.sp-components-snackbar .dashicons{color:#fff}
assets/js/seopress-block-editor.js CHANGED
@@ -1,9 +1,9 @@
1
  //Retrieve title / meta-desc from source code
2
- jQuery(document).ready(function($) {
3
- const { subscribe, select } = wp.data;
4
- let hasSaved = false;
5
 
6
- subscribe( () => {
7
  //var isSavingPost = wp.data.select('core/editor').isSavingPost();
8
  var isAutosavingPost = wp.data.select('core/editor').isAutosavingPost();
9
  var isSavingMetaBoxes = wp.data.select('core/edit-post').isSavingMetaBoxes();
@@ -33,8 +33,8 @@ let hasSaved = false;
33
  }
34
 
35
  $.ajax({
36
- method : 'GET',
37
- url : seopressAjaxRealPreview.seopress_real_preview,
38
  data: {
39
  action: 'seopress_do_real_preview',
40
  post_id: post_id,
@@ -44,29 +44,30 @@ let hasSaved = false;
44
  seopress_analysis_target_kw: $('#seopress_analysis_target_kw_meta').val(),
45
  _ajax_nonce: seopressAjaxRealPreview.seopress_nonce,
46
  },
47
- beforeSend: function() {
48
  $(".analysis-score p span").fadeIn().text(seopressAjaxRealPreview.i18n.progress),
49
- $(".analysis-score p").addClass('loading')
50
  },
51
- success : function( s ) {
52
- typeof s.data.og_title ==="undefined" ? og_title = "" : og_title = s.data.og_title.values;
53
- typeof s.data.og_desc ==="undefined" ? og_desc = "" : og_desc = s.data.og_desc.values;
54
- typeof s.data.og_img ==="undefined" ? og_img = "" : og_img = s.data.og_img.values;
55
- typeof s.data.og_url ==="undefined" ? og_url = "" : og_url = s.data.og_url.host;
56
- typeof s.data.og_site_name ==="undefined" ? og_site_name = "" : og_site_name = s.data.og_site_name.values;
57
- typeof s.data.tw_title ==="undefined" ? tw_title = "" : tw_title = s.data.tw_title.values;
58
- typeof s.data.tw_desc ==="undefined" ? tw_desc = "" : tw_desc = s.data.tw_desc.values;
59
- typeof s.data.tw_img ==="undefined" ? tw_img = "" : tw_img = s.data.tw_img.values;
60
- typeof s.data.meta_robots ==="undefined" ? meta_robots = "" : meta_robots = s.data.meta_robots[0];
61
-
62
- var data_arr = {og_title : og_title,
63
- og_desc : og_desc,
64
- og_img : og_img,
65
- og_url : og_url,
66
- og_site_name : og_site_name,
67
- tw_title : tw_title,
68
- tw_desc : tw_desc,
69
- tw_img : tw_img
 
70
  };
71
 
72
  for (var key in data_arr) {
@@ -86,68 +87,68 @@ let hasSaved = false;
86
 
87
  var if_noindex = new RegExp('noindex');
88
 
89
- if(if_noindex.test(meta_robots)){
90
  $("#sp-advanced-alert").append('<span class="impact high" aria-hidden="true"></span>');
91
  }
92
 
93
  // Google Preview
94
  $("#seopress_cpt .google-snippet-preview .snippet-title").html(s.data.title),
95
- $("#seopress_cpt .google-snippet-preview .snippet-title-default").html(s.data.title),
96
- $("#seopress_titles_title_meta").attr("placeholder", s.data.title),
97
- $("#seopress_cpt .google-snippet-preview .snippet-description").html(s.data.meta_desc),
98
- $("#seopress_cpt .google-snippet-preview .snippet-description-default").html(s.data.meta_desc),
99
- $("#seopress_titles_desc_meta").attr("placeholder", s.data.meta_desc)
100
 
101
  // Facebook Preview
102
  if (data_arr.og_title) {
103
  $("#seopress_cpt #seopress_social_fb_title_meta").attr("placeholder", data_arr.og_title[0]),
104
- $("#seopress_cpt .facebook-snippet-preview .snippet-fb-title").html(data_arr.og_title[0]),
105
- $("#seopress_cpt .facebook-snippet-preview .snippet-fb-title-default").html(data_arr.og_title[0])
106
  }
107
 
108
  if (data_arr.og_desc) {
109
  $("#seopress_cpt #seopress_social_fb_desc_meta").attr("placeholder", data_arr.og_desc[0]),
110
- $("#seopress_cpt .facebook-snippet-preview .snippet-fb-description").html(data_arr.og_desc[0]),
111
- $("#seopress_cpt .facebook-snippet-preview .snippet-fb-description-default").html(data_arr.og_desc[0])
112
  }
113
 
114
  if (data_arr.og_img) {
115
  $("#seopress_cpt #seopress_social_fb_img_meta").attr("placeholder", data_arr.og_img[0]),
116
- $("#seopress_cpt .facebook-snippet-preview .snippet-fb-img img").attr("src", data_arr.og_img[0]),
117
- $("#seopress_cpt .facebook-snippet-preview .snippet-fb-img-default img").attr("src", data_arr.og_img[0])
118
  }
119
 
120
  $("#seopress_cpt .facebook-snippet-preview .snippet-fb-url").html(data_arr.og_url),
121
- $("#seopress_cpt .facebook-snippet-preview .snippet-fb-site-name").html(data_arr.og_site_name)
122
 
123
  // Twitter Preview
124
  if (data_arr.tw_title) {
125
  $("#seopress_cpt #seopress_social_twitter_title_meta").attr("placeholder", data_arr.tw_title[0]),
126
- $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-title").html(data_arr.tw_title[0]),
127
- $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-title-default").html(data_arr.tw_title[0])
128
  }
129
 
130
  if (data_arr.tw_desc) {
131
  $("#seopress_cpt #seopress_social_twitter_desc_meta").attr("placeholder", data_arr.tw_desc[0]),
132
- $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-description").html(data_arr.tw_desc[0]),
133
- $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-description-default").html(data_arr.tw_desc[0])
134
  }
135
 
136
  if (data_arr.tw_img) {
137
  $("#seopress_cpt #seopress_social_twitter_img_meta").attr("placeholder", data_arr.tw_img[0]),
138
- $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-img img").attr("src", data_arr.tw_img[0]),
139
- $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-img-default img").attr("src", data_arr.tw_img[0])
140
  }
141
 
142
  $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-url").html(data_arr.og_url),
143
 
144
- $( '#seopress_cpt #seopress_robots_canonical_meta').attr('placeholder', s.data.canonical),
145
 
146
- $( '#seopress-analysis-tabs').load(" #seopress-analysis-tabs-1", '', sp_ca_toggle),
147
- $(".analysis-score p").removeClass('loading')
148
  },
149
  });
150
  }
151
- hasSaved = !! isSavingMetaBoxes; //isSavingPost != 0;
152
  });
153
  });
1
  //Retrieve title / meta-desc from source code
2
+ jQuery(document).ready(function ($) {
3
+ const { subscribe, select } = wp.data;
4
+ let hasSaved = false;
5
 
6
+ subscribe(() => {
7
  //var isSavingPost = wp.data.select('core/editor').isSavingPost();
8
  var isAutosavingPost = wp.data.select('core/editor').isAutosavingPost();
9
  var isSavingMetaBoxes = wp.data.select('core/edit-post').isSavingMetaBoxes();
33
  }
34
 
35
  $.ajax({
36
+ method: 'GET',
37
+ url: seopressAjaxRealPreview.seopress_real_preview,
38
  data: {
39
  action: 'seopress_do_real_preview',
40
  post_id: post_id,
44
  seopress_analysis_target_kw: $('#seopress_analysis_target_kw_meta').val(),
45
  _ajax_nonce: seopressAjaxRealPreview.seopress_nonce,
46
  },
47
+ beforeSend: function () {
48
  $(".analysis-score p span").fadeIn().text(seopressAjaxRealPreview.i18n.progress),
49
+ $(".analysis-score p").addClass('loading')
50
  },
51
+ success: function (s) {
52
+ typeof s.data.og_title === "undefined" ? og_title = "" : og_title = s.data.og_title.values;
53
+ typeof s.data.og_desc === "undefined" ? og_desc = "" : og_desc = s.data.og_desc.values;
54
+ typeof s.data.og_img === "undefined" ? og_img = "" : og_img = s.data.og_img.values;
55
+ typeof s.data.og_url === "undefined" ? og_url = "" : og_url = s.data.og_url.host;
56
+ typeof s.data.og_site_name === "undefined" ? og_site_name = "" : og_site_name = s.data.og_site_name.values;
57
+ typeof s.data.tw_title === "undefined" ? tw_title = "" : tw_title = s.data.tw_title.values;
58
+ typeof s.data.tw_desc === "undefined" ? tw_desc = "" : tw_desc = s.data.tw_desc.values;
59
+ typeof s.data.tw_img === "undefined" ? tw_img = "" : tw_img = s.data.tw_img.values;
60
+ typeof s.data.meta_robots === "undefined" ? meta_robots = "" : meta_robots = s.data.meta_robots[0];
61
+
62
+ var data_arr = {
63
+ og_title: og_title,
64
+ og_desc: og_desc,
65
+ og_img: og_img,
66
+ og_url: og_url,
67
+ og_site_name: og_site_name,
68
+ tw_title: tw_title,
69
+ tw_desc: tw_desc,
70
+ tw_img: tw_img
71
  };
72
 
73
  for (var key in data_arr) {
87
 
88
  var if_noindex = new RegExp('noindex');
89
 
90
+ if (if_noindex.test(meta_robots)) {
91
  $("#sp-advanced-alert").append('<span class="impact high" aria-hidden="true"></span>');
92
  }
93
 
94
  // Google Preview
95
  $("#seopress_cpt .google-snippet-preview .snippet-title").html(s.data.title),
96
+ $("#seopress_cpt .google-snippet-preview .snippet-title-default").html(s.data.title),
97
+ $("#seopress_titles_title_meta").attr("placeholder", s.data.title),
98
+ $("#seopress_cpt .google-snippet-preview .snippet-description").html(s.data.meta_desc),
99
+ $("#seopress_cpt .google-snippet-preview .snippet-description-default").html(s.data.meta_desc),
100
+ $("#seopress_titles_desc_meta").attr("placeholder", s.data.meta_desc)
101
 
102
  // Facebook Preview
103
  if (data_arr.og_title) {
104
  $("#seopress_cpt #seopress_social_fb_title_meta").attr("placeholder", data_arr.og_title[0]),
105
+ $("#seopress_cpt .facebook-snippet-preview .snippet-fb-title").html(data_arr.og_title[0]),
106
+ $("#seopress_cpt .facebook-snippet-preview .snippet-fb-title-default").html(data_arr.og_title[0])
107
  }
108
 
109
  if (data_arr.og_desc) {
110
  $("#seopress_cpt #seopress_social_fb_desc_meta").attr("placeholder", data_arr.og_desc[0]),
111
+ $("#seopress_cpt .facebook-snippet-preview .snippet-fb-description").html(data_arr.og_desc[0]),
112
+ $("#seopress_cpt .facebook-snippet-preview .snippet-fb-description-default").html(data_arr.og_desc[0])
113
  }
114
 
115
  if (data_arr.og_img) {
116
  $("#seopress_cpt #seopress_social_fb_img_meta").attr("placeholder", data_arr.og_img[0]),
117
+ $("#seopress_cpt .facebook-snippet-preview .snippet-fb-img img").attr("src", data_arr.og_img[0]),
118
+ $("#seopress_cpt .facebook-snippet-preview .snippet-fb-img-default img").attr("src", data_arr.og_img[0])
119
  }
120
 
121
  $("#seopress_cpt .facebook-snippet-preview .snippet-fb-url").html(data_arr.og_url),
122
+ $("#seopress_cpt .facebook-snippet-preview .snippet-fb-site-name").html(data_arr.og_site_name)
123
 
124
  // Twitter Preview
125
  if (data_arr.tw_title) {
126
  $("#seopress_cpt #seopress_social_twitter_title_meta").attr("placeholder", data_arr.tw_title[0]),
127
+ $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-title").html(data_arr.tw_title[0]),
128
+ $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-title-default").html(data_arr.tw_title[0])
129
  }
130
 
131
  if (data_arr.tw_desc) {
132
  $("#seopress_cpt #seopress_social_twitter_desc_meta").attr("placeholder", data_arr.tw_desc[0]),
133
+ $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-description").html(data_arr.tw_desc[0]),
134
+ $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-description-default").html(data_arr.tw_desc[0])
135
  }
136
 
137
  if (data_arr.tw_img) {
138
  $("#seopress_cpt #seopress_social_twitter_img_meta").attr("placeholder", data_arr.tw_img[0]),
139
+ $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-img img").attr("src", data_arr.tw_img[0]),
140
+ $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-img-default img").attr("src", data_arr.tw_img[0])
141
  }
142
 
143
  $("#seopress_cpt .twitter-snippet-preview .snippet-twitter-url").html(data_arr.og_url),
144
 
145
+ $('#seopress_cpt #seopress_robots_canonical_meta').attr('placeholder', s.data.canonical),
146
 
147
+ $('#seopress-analysis-tabs').load(" #seopress-analysis-tabs-1", '', sp_ca_toggle),
148
+ $(".analysis-score p").removeClass('loading')
149
  },
150
  });
151
  }
152
+ hasSaved = !!isSavingMetaBoxes; //isSavingPost != 0;
153
  });
154
  });
assets/js/seopress-dashboard.js CHANGED
@@ -25,7 +25,9 @@ jQuery(document).ready(function ($) {
25
  "notice-go-pro",
26
  "notice-noindex",
27
  "notice-tasks",
28
- "notice-insights"
 
 
29
  ]
30
  notices.forEach(function (item) {
31
  $('#' + item).on('click', function () {
@@ -129,6 +131,19 @@ jQuery(document).ready(function ($) {
129
  },
130
  });
131
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  $('#notifications_center').on('click', function () {
133
  $('#seopress-notifications-center').toggleClass('is-active');
134
  $('#notifications_center').attr('data-toggle', $('#notifications_center').attr('data-toggle') == '1' ? '0' : '1');
@@ -211,4 +226,31 @@ jQuery(document).ready(function ($) {
211
  $('#spinner-reverse.spinner').css("visibility", "visible");
212
  $('#spinner-reverse.spinner').css("float", "none");
213
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  });
25
  "notice-go-pro",
26
  "notice-noindex",
27
  "notice-tasks",
28
+ "notice-insights",
29
+ "notice-robots-txt",
30
+ "notice-robots-txt-valid",
31
  ]
32
  notices.forEach(function (item) {
33
  $('#' + item).on('click', function () {
131
  },
132
  });
133
  });
134
+ $('#seopress_tools').on('click', function () {
135
+ $('#notice-insights-alert').toggleClass('is-active');
136
+ $('#seopress_tools').attr('data-toggle', $('#seopress_tools').attr('data-toggle') == '1' ? '0' : '1');
137
+ $.ajax({
138
+ method: 'POST',
139
+ url: seopressAjaxDisplay.seopress_display,
140
+ data: {
141
+ action: 'seopress_display',
142
+ tools_center: $('#seopress_tools').attr('data-toggle'),
143
+ _ajax_nonce: seopressAjaxDisplay.seopress_nonce,
144
+ },
145
+ });
146
+ });
147
  $('#notifications_center').on('click', function () {
148
  $('#seopress-notifications-center').toggleClass('is-active');
149
  $('#notifications_center').attr('data-toggle', $('#notifications_center').attr('data-toggle') == '1' ? '0' : '1');
226
  $('#spinner-reverse.spinner').css("visibility", "visible");
227
  $('#spinner-reverse.spinner').css("float", "none");
228
  });
229
+
230
+ //Drag and drop for cards
231
+ $(".seopress-dashboard-columns .seopress-dashboard-column:last-child").sortable({
232
+ items: ".seopress-card",
233
+ placeholder: "sp-dashboard-card-highlight",
234
+ cancel: ".seopress-intro, .seopress-card-popover",
235
+ handle: ".seopress-card-title",
236
+ opacity: 0.9,
237
+ forcePlaceholderSize: true,
238
+ update: function (e) {
239
+ const item = jQuery(e.target);
240
+
241
+ var postData = item.sortable("toArray", {
242
+ attribute: "id",
243
+ });
244
+
245
+ $.ajax({
246
+ method: "POST",
247
+ url: seopressAjaxDndFeatures.seopress_dnd_features,
248
+ data: {
249
+ action: "seopress_dnd_features",
250
+ order: postData,
251
+ _ajax_nonce: seopressAjaxDndFeatures.seopress_nonce,
252
+ },
253
+ });
254
+ },
255
+ });
256
  });
assets/js/seopress-dashboard.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(s){s.trim(s("#seopress-notifications-center").html())||s("#seopress-notifications-center").remove();const e=["notice-get-started","notice-usm","notice-wizard","notice-insights-wizard","notice-tagdiv","notice-divide-comments","notice-review","notice-trailingslash","notice-posts-number","notice-rss-use-excerpt","notice-ga-ids","notice-search-console","notice-google-business","notice-ssl","notice-title-tag","notice-enfold","notice-themes","notice-page-builders","notice-go-pro","notice-noindex","notice-tasks","notice-insights"];e.forEach(function(e){s("#"+e).on("click",function(){s("#"+e).attr("data-notice","1"==s("#"+e).attr("data-notice")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxHideNotices.seopress_hide_notices,data:{action:"seopress_hide_notices",notice:e,notice_value:s("#"+e).attr("data-notice"),_ajax_nonce:seopressAjaxHideNotices.seopress_nonce},success:function(t){s("#seopress-notice-save").css("display","block"),s("#seopress-notice-save .html").html("Notice successfully removed"),s("#"+e+"-alert").fadeOut(),s("#seopress-notice-save").delay(3500).fadeOut()}})})});const t=["titles","xml-sitemap","social","google-analytics","advanced","local-business","woocommerce","edd","dublin-core","rich-snippets","breadcrumbs","robots","news","404","bot","rewrite","white-label"];t.forEach(function(e){s("#toggle-"+e).on("click",function(){s("#toggle-"+e).attr("data-toggle","1"==s("#toggle-"+e).attr("data-toggle")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxToggleFeatures.seopress_toggle_features,data:{action:"seopress_toggle_features",feature:"toggle-"+e,feature_value:s("#toggle-"+e).attr("data-toggle"),_ajax_nonce:seopressAjaxToggleFeatures.seopress_nonce},success:function(e){window.history.pushState("","",window.location.href+"&settings-updated=true"),s("#seopress-notice-save").show(),s("#seopress-notice-save").delay(3500).fadeOut(),window.history.pushState("","",window.location.href)}})})}),s("#seopress-activity-panel button").on("click",function(){s(this).toggleClass("is-active"),s("#seopress-activity-panel-"+s(this).data("panel")).toggleClass("is-open")}),s("#seopress-content").on("click",function(){s("#seopress-activity-panel").find(".is-open").toggleClass("is-open"),s("#seopress-activity-panel").find(".is-active").toggleClass("is-active")}),s(".seopress-item-toggle-options").on("click",function(){s(this).next(".seopress-card-popover").toggleClass("is-open")}),s("#seopress-news-items").on("click",function(){s.ajax({method:"POST",url:seopressAjaxNews.seopress_news,data:{action:"seopress_news",news_max_items:s("#news_max_items").val(),_ajax_nonce:seopressAjaxNews.seopress_nonce},success:function(e){s("#seopress-news-panel .seopress-card-content").load(" #seopress-news-panel .seopress-card-content"),s("#seopress-news-panel .seopress-card-popover").toggleClass("is-open")}})}),s("#seopress_news").on("click",function(){s("#seopress-news-panel").toggleClass("is-active"),s("#seopress_news").attr("data-toggle","1"==s("#seopress_news").attr("data-toggle")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxDisplay.seopress_display,data:{action:"seopress_display",news_center:s("#seopress_news").attr("data-toggle"),_ajax_nonce:seopressAjaxDisplay.seopress_nonce}})}),s("#notifications_center").on("click",function(){s("#seopress-notifications-center").toggleClass("is-active"),s("#notifications_center").attr("data-toggle","1"==s("#notifications_center").attr("data-toggle")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxDisplay.seopress_display,data:{action:"seopress_display",notifications_center:s("#notifications_center").attr("data-toggle"),_ajax_nonce:seopressAjaxDisplay.seopress_nonce}})})}),jQuery(document).ready(function(s){var e=window.location.hash,t=e.split("$");if("undefined"!=typeof sessionStorage){var a=sessionStorage.getItem("seopress_admin_tab");"1"==t[1]?(s("#tab_seopress_analytics-tab").addClass("nav-tab-active"),s("#tab_seopress_analytics").addClass("active")):"2"==t[1]?(s("#tab_seopress_seo_tools-tab").addClass("nav-tab-active"),s("#tab_seopress_seo_tools").addClass("active")):"3"==t[1]?(s("#tab_seopress_ps-tab").addClass("nav-tab-active"),s("#tab_seopress_ps_tools").addClass("active")):a?(s("#seopress-admin-tabs").find(".nav-tab.nav-tab-active").removeClass("nav-tab-active"),s("#seopress-admin-tabs").find(".seopress-tab.active").removeClass("active"),s("#"+a.split("#tab=")+"-tab").addClass("nav-tab-active"),s("#"+a.split("#tab=")).addClass("active")):(s("#tab_seopress_analytics-tab").addClass("nav-tab-active"),s("#tab_seopress_analytics").addClass("active"))}s("#seopress-admin-tabs").find("a.nav-tab").click(function(e){e.preventDefault();var a=s(this).attr("href").split("#tab=")[1];s("#seopress-admin-tabs").find(".nav-tab.nav-tab-active").removeClass("nav-tab-active"),s("#"+a+"-tab").addClass("nav-tab-active"),1==t[1]?sessionStorage.setItem("seopress_admin_tab","tab_seopress_analytics"):2==t[1]?sessionStorage.setItem("seopress_admin_tab","tab_seopress_seo_tools"):3==t[1]?sessionStorage.setItem("seopress_admin_tab","tab_seopress_ps_tools"):sessionStorage.setItem("seopress_admin_tab",a),s("#seopress-admin-tabs").find(".seopress-tab.active").removeClass("active"),s("#"+a).addClass("active")}),s("#seopress-reverse-submit").on("click",function(){s.ajax({method:"GET",url:seopressAjaxReverse.seopress_request_reverse,data:{action:"seopress_request_reverse",_ajax_nonce:seopressAjaxReverse.seopress_nonce},success:function(s){window.location.reload(!0)}})}),s("#seopress-reverse-submit").on("click",function(){s(this).attr("disabled","disabled"),s("#spinner-reverse.spinner").css("visibility","visible"),s("#spinner-reverse.spinner").css("float","none")})});
1
+ jQuery(document).ready(function(s){s.trim(s("#seopress-notifications-center").html())||s("#seopress-notifications-center").remove();const e=["notice-get-started","notice-usm","notice-wizard","notice-insights-wizard","notice-tagdiv","notice-divide-comments","notice-review","notice-trailingslash","notice-posts-number","notice-rss-use-excerpt","notice-ga-ids","notice-search-console","notice-google-business","notice-ssl","notice-title-tag","notice-enfold","notice-themes","notice-page-builders","notice-go-pro","notice-noindex","notice-tasks","notice-insights","notice-robots-txt","notice-robots-txt-valid"];e.forEach(function(e){s("#"+e).on("click",function(){s("#"+e).attr("data-notice","1"==s("#"+e).attr("data-notice")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxHideNotices.seopress_hide_notices,data:{action:"seopress_hide_notices",notice:e,notice_value:s("#"+e).attr("data-notice"),_ajax_nonce:seopressAjaxHideNotices.seopress_nonce},success:function(t){s("#seopress-notice-save").css("display","block"),s("#seopress-notice-save .html").html("Notice successfully removed"),s("#"+e+"-alert").fadeOut(),s("#seopress-notice-save").delay(3500).fadeOut()}})})});const t=["titles","xml-sitemap","social","google-analytics","advanced","local-business","woocommerce","edd","dublin-core","rich-snippets","breadcrumbs","robots","news","404","bot","rewrite","white-label"];t.forEach(function(e){s("#toggle-"+e).on("click",function(){s("#toggle-"+e).attr("data-toggle","1"==s("#toggle-"+e).attr("data-toggle")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxToggleFeatures.seopress_toggle_features,data:{action:"seopress_toggle_features",feature:"toggle-"+e,feature_value:s("#toggle-"+e).attr("data-toggle"),_ajax_nonce:seopressAjaxToggleFeatures.seopress_nonce},success:function(e){window.history.pushState("","",window.location.href+"&settings-updated=true"),s("#seopress-notice-save").show(),s("#seopress-notice-save").delay(3500).fadeOut(),window.history.pushState("","",window.location.href)}})})}),s("#seopress-activity-panel button").on("click",function(){s(this).toggleClass("is-active"),s("#seopress-activity-panel-"+s(this).data("panel")).toggleClass("is-open")}),s("#seopress-content").on("click",function(){s("#seopress-activity-panel").find(".is-open").toggleClass("is-open"),s("#seopress-activity-panel").find(".is-active").toggleClass("is-active")}),s(".seopress-item-toggle-options").on("click",function(){s(this).next(".seopress-card-popover").toggleClass("is-open")}),s("#seopress-news-items").on("click",function(){s.ajax({method:"POST",url:seopressAjaxNews.seopress_news,data:{action:"seopress_news",news_max_items:s("#news_max_items").val(),_ajax_nonce:seopressAjaxNews.seopress_nonce},success:function(e){s("#seopress-news-panel .seopress-card-content").load(" #seopress-news-panel .seopress-card-content"),s("#seopress-news-panel .seopress-card-popover").toggleClass("is-open")}})}),s("#seopress_news").on("click",function(){s("#seopress-news-panel").toggleClass("is-active"),s("#seopress_news").attr("data-toggle","1"==s("#seopress_news").attr("data-toggle")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxDisplay.seopress_display,data:{action:"seopress_display",news_center:s("#seopress_news").attr("data-toggle"),_ajax_nonce:seopressAjaxDisplay.seopress_nonce}})}),s("#seopress_tools").on("click",function(){s("#notice-insights-alert").toggleClass("is-active"),s("#seopress_tools").attr("data-toggle","1"==s("#seopress_tools").attr("data-toggle")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxDisplay.seopress_display,data:{action:"seopress_display",tools_center:s("#seopress_tools").attr("data-toggle"),_ajax_nonce:seopressAjaxDisplay.seopress_nonce}})}),s("#notifications_center").on("click",function(){s("#seopress-notifications-center").toggleClass("is-active"),s("#notifications_center").attr("data-toggle","1"==s("#notifications_center").attr("data-toggle")?"0":"1"),s.ajax({method:"POST",url:seopressAjaxDisplay.seopress_display,data:{action:"seopress_display",notifications_center:s("#notifications_center").attr("data-toggle"),_ajax_nonce:seopressAjaxDisplay.seopress_nonce}})})}),jQuery(document).ready(function(s){var e=window.location.hash,t=e.split("$");if("undefined"!=typeof sessionStorage){var a=sessionStorage.getItem("seopress_admin_tab");"1"==t[1]?(s("#tab_seopress_analytics-tab").addClass("nav-tab-active"),s("#tab_seopress_analytics").addClass("active")):"2"==t[1]?(s("#tab_seopress_seo_tools-tab").addClass("nav-tab-active"),s("#tab_seopress_seo_tools").addClass("active")):"3"==t[1]?(s("#tab_seopress_ps-tab").addClass("nav-tab-active"),s("#tab_seopress_ps_tools").addClass("active")):a?(s("#seopress-admin-tabs").find(".nav-tab.nav-tab-active").removeClass("nav-tab-active"),s("#seopress-admin-tabs").find(".seopress-tab.active").removeClass("active"),s("#"+a.split("#tab=")+"-tab").addClass("nav-tab-active"),s("#"+a.split("#tab=")).addClass("active")):(s("#tab_seopress_analytics-tab").addClass("nav-tab-active"),s("#tab_seopress_analytics").addClass("active"))}s("#seopress-admin-tabs").find("a.nav-tab").click(function(e){e.preventDefault();var a=s(this).attr("href").split("#tab=")[1];s("#seopress-admin-tabs").find(".nav-tab.nav-tab-active").removeClass("nav-tab-active"),s("#"+a+"-tab").addClass("nav-tab-active"),1==t[1]?sessionStorage.setItem("seopress_admin_tab","tab_seopress_analytics"):2==t[1]?sessionStorage.setItem("seopress_admin_tab","tab_seopress_seo_tools"):3==t[1]?sessionStorage.setItem("seopress_admin_tab","tab_seopress_ps_tools"):sessionStorage.setItem("seopress_admin_tab",a),s("#seopress-admin-tabs").find(".seopress-tab.active").removeClass("active"),s("#"+a).addClass("active")}),s("#seopress-reverse-submit").on("click",function(){s.ajax({method:"GET",url:seopressAjaxReverse.seopress_request_reverse,data:{action:"seopress_request_reverse",_ajax_nonce:seopressAjaxReverse.seopress_nonce},success:function(s){window.location.reload(!0)}})}),s("#seopress-reverse-submit").on("click",function(){s(this).attr("disabled","disabled"),s("#spinner-reverse.spinner").css("visibility","visible"),s("#spinner-reverse.spinner").css("float","none")}),s(".seopress-dashboard-columns .seopress-dashboard-column:last-child").sortable({items:".seopress-card",placeholder:"sp-dashboard-card-highlight",cancel:".seopress-intro, .seopress-card-popover",handle:".seopress-card-title",opacity:.9,forcePlaceholderSize:!0,update:function(e){const t=jQuery(e.target);var a=t.sortable("toArray",{attribute:"id"});s.ajax({method:"POST",url:seopressAjaxDndFeatures.seopress_dnd_features,data:{action:"seopress_dnd_features",order:a,_ajax_nonce:seopressAjaxDndFeatures.seopress_nonce}})}})});
assets/js/seopress-media-uploader.js CHANGED
@@ -26,6 +26,8 @@ jQuery(document).ready(function ($) {
26
  "#seopress_social_knowledge_img",
27
  "#seopress_social_twitter_img",
28
  "#seopress_social_fb_img",
 
 
29
  ];
30
 
31
  array.forEach(function (item) {
@@ -51,13 +53,13 @@ jQuery(document).ready(function ($) {
51
  .toJSON();
52
  $(item + "_meta").val(attachment.url);
53
  if (
54
- item == "#seopress_social_fb_img" &&
55
  typeof sp_social_img != "undefined"
56
  ) {
57
  sp_social_img("fb");
58
  }
59
  if (
60
- item == "#seopress_social_twitter_img" &&
61
  typeof sp_social_img != "undefined"
62
  ) {
63
  sp_social_img("twitter");
26
  "#seopress_social_knowledge_img",
27
  "#seopress_social_twitter_img",
28
  "#seopress_social_fb_img",
29
+ ".seopress_social_fb_img",
30
+ ".seopress_social_twitter_img"
31
  ];
32
 
33
  array.forEach(function (item) {
53
  .toJSON();
54
  $(item + "_meta").val(attachment.url);
55
  if (
56
+ (item == "#seopress_social_fb_img" || item == ".seopress_social_fb_img") &&
57
  typeof sp_social_img != "undefined"
58
  ) {
59
  sp_social_img("fb");
60
  }
61
  if (
62
+ (item == "#seopress_social_twitter_img" || item == ".seopress_social_twitter_img") &&
63
  typeof sp_social_img != "undefined"
64
  ) {
65
  sp_social_img("twitter");
assets/js/seopress-media-uploader.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(t){var e;t(".button.seopress_social_facebook_img_cpt").click(function(a){a.preventDefault();var i=t(this).parent().find("input[type=text]");e=wp.media.frames.file_frame=wp.media({multiple:!1}),e.on("select",function(){attachment=e.state().get("selection").first().toJSON(),t(i).val(attachment.url)}),e.open()});const a=["#seopress_social_knowledge_img","#seopress_social_twitter_img","#seopress_social_fb_img"];a.forEach(function(e){var a;t(e+"_upload").click(function(i){i.preventDefault(),a?a.open():(a=wp.media.frames.file_frame=wp.media({multiple:!1}),a.on("select",function(){attachment=a.state().get("selection").first().toJSON(),t(e+"_meta").val(attachment.url),"#seopress_social_fb_img"==e&&"undefined"!=typeof sp_social_img&&sp_social_img("fb"),"#seopress_social_twitter_img"==e&&"undefined"!=typeof sp_social_img&&sp_social_img("twitter"),0!=t(e+"_attachment_id").length&&(t(e+"_attachment_id").val(attachment.id),t(e+"_width").val(attachment.width),t(e+"_height").val(attachment.height))}),a.open())})}),t(".seopress-btn-upload-media").click(function(e){var a;if(e.preventDefault(),a)a.open();else{a=wp.media.frames.file_frame=wp.media({multiple:!1});var i=t(this);a.on("select",function(){attachment=a.state().get("selection").first().toJSON(),t(i.data("input-value")).val(attachment.url)}),a.open()}})});
1
+ jQuery(document).ready(function(e){var t;e(".button.seopress_social_facebook_img_cpt").click(function(i){i.preventDefault();var a=e(this).parent().find("input[type=text]");t=wp.media.frames.file_frame=wp.media({multiple:!1}),t.on("select",function(){attachment=t.state().get("selection").first().toJSON(),e(a).val(attachment.url)}),t.open()});const i=["#seopress_social_knowledge_img","#seopress_social_twitter_img","#seopress_social_fb_img",".seopress_social_fb_img",".seopress_social_twitter_img"];i.forEach(function(t){var i;e(t+"_upload").click(function(a){a.preventDefault(),i?i.open():(i=wp.media.frames.file_frame=wp.media({multiple:!1}),i.on("select",function(){attachment=i.state().get("selection").first().toJSON(),e(t+"_meta").val(attachment.url),"#seopress_social_fb_img"!=t&&".seopress_social_fb_img"!=t||"undefined"==typeof sp_social_img||sp_social_img("fb"),"#seopress_social_twitter_img"!=t&&".seopress_social_twitter_img"!=t||"undefined"==typeof sp_social_img||sp_social_img("twitter"),0!=e(t+"_attachment_id").length&&(e(t+"_attachment_id").val(attachment.id),e(t+"_width").val(attachment.width),e(t+"_height").val(attachment.height))}),i.open())})}),e(".seopress-btn-upload-media").click(function(t){var i;if(t.preventDefault(),i)i.open();else{i=wp.media.frames.file_frame=wp.media({multiple:!1});var a=e(this);i.on("select",function(){attachment=i.state().get("selection").first().toJSON(),e(a.data("input-value")).val(attachment.url)}),i.open()}})});
inc/admin/admin-bar/admin-bar.php CHANGED
@@ -2,27 +2,6 @@
2
 
3
  defined('ABSPATH') or exit('Please don&rsquo;t call the plugin directly. Thanks :)');
4
 
5
- /*
6
- * Global noindex from SEO, Titles settings
7
- * @since 4.0
8
- * @param string $feature
9
- * @return string 1 if true
10
- * @author Benjamin
11
- */
12
- if ( ! function_exists('seopress_global_noindex_option')) {
13
- function seopress_global_noindex_option() {
14
- $seopress_titles_noindex_option = get_option('seopress_titles_option_name');
15
- if ( ! empty($seopress_titles_noindex_option)) {
16
- foreach ($seopress_titles_noindex_option as $key => $seopress_titles_noindex_value) {
17
- $options[$key] = $seopress_titles_noindex_value;
18
- }
19
- if (isset($seopress_titles_noindex_option['seopress_titles_noindex'])) {
20
- return $seopress_titles_noindex_option['seopress_titles_noindex'];
21
- }
22
- }
23
- }
24
- }
25
-
26
  //Noindex alert?
27
  function seopress_advanced_appearance_adminbar_noindex_option() {
28
  $seopress_advanced_appearance_adminbar_noindex_option = get_option('seopress_advanced_option_name');
2
 
3
  defined('ABSPATH') or exit('Please don&rsquo;t call the plugin directly. Thanks :)');
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  //Noindex alert?
6
  function seopress_advanced_appearance_adminbar_noindex_option() {
7
  $seopress_advanced_appearance_adminbar_noindex_option = get_option('seopress_advanced_option_name');
inc/admin/admin-bar/admin-header.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  defined('ABSPATH') or exit('Please don&rsquo;t call the plugin directly. Thanks :)');
4
 
5
- function seopress_admin_header() {
6
  $docs = seopress_get_docs_links(); ?>
7
 
8
  <div id="seopress-header" class="seopress-option">
@@ -53,7 +53,12 @@ function seopress_admin_header() {
53
  <label for="seopress-search" class="screen-reader-text"><?php _e('Search', 'wp-seopress'); ?></label>
54
  </form>
55
  <ul class="seopress-list-items" role="menu">
56
- <?php foreach ($docs['get_started'] as $key => $value) {
 
 
 
 
 
57
  foreach ($value as $_key => $_value) {
58
  ?>
59
  <li class="seopress-item">
@@ -106,8 +111,7 @@ function seopress_admin_header() {
106
  </p>
107
 
108
  <?php
109
- $options = get_option('seopress_advanced_option_name');
110
- $check = isset($options['seopress_advanced_appearance_news']); ?>
111
 
112
  <p>
113
  <input id="seopress_news" class="toggle" data-toggle=<?php if ('1' == $check) {
@@ -123,6 +127,24 @@ function seopress_admin_header() {
123
  <?php _e('Hide SEO News?', 'wp-seopress'); ?>
124
  </label>
125
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  </div>
127
  </div>
128
  </div>
2
 
3
  defined('ABSPATH') or exit('Please don&rsquo;t call the plugin directly. Thanks :)');
4
 
5
+ function seopress_admin_header($context = "") {
6
  $docs = seopress_get_docs_links(); ?>
7
 
8
  <div id="seopress-header" class="seopress-option">
53
  <label for="seopress-search" class="screen-reader-text"><?php _e('Search', 'wp-seopress'); ?></label>
54
  </form>
55
  <ul class="seopress-list-items" role="menu">
56
+ <?php
57
+ $docs_started = $docs['get_started'];
58
+ if ($context ==='insights') {
59
+ $docs_started = $docs['get_started_insights'];
60
+ }
61
+ foreach ($docs_started as $key => $value) {
62
  foreach ($value as $_key => $_value) {
63
  ?>
64
  <li class="seopress-item">
111
  </p>
112
 
113
  <?php
114
+ $check = isset($options['seopress_advanced_appearance_news']); ?>
 
115
 
116
  <p>
117
  <input id="seopress_news" class="toggle" data-toggle=<?php if ('1' == $check) {
127
  <?php _e('Hide SEO News?', 'wp-seopress'); ?>
128
  </label>
129
  </p>
130
+
131
+ <?php
132
+ $check = isset($options['seopress_advanced_appearance_seo_tools']); ?>
133
+
134
+ <p>
135
+ <input id="seopress_tools" class="toggle" data-toggle=<?php if ('1' == $check) {
136
+ echo '1';
137
+ } else {
138
+ echo '0';
139
+ } ?> name="seopress_advanced_option_name[seopress_advanced_appearance_seo_tools]" type="checkbox"
140
+ <?php if ('1' == $check) {
141
+ echo 'checked="yes"';
142
+ } ?>/>
143
+ <label for="seopress_tools"></label>
144
+ <label for="seopress_advanced_option_name[seopress_advanced_appearance_seo_tools]">
145
+ <?php _e('Hide Site Overview?', 'wp-seopress'); ?>
146
+ </label>
147
+ </p>
148
  </div>
149
  </div>
150
  </div>
inc/admin/admin-features-list.php CHANGED
@@ -5,14 +5,14 @@
5
  exit;
6
  }
7
  ?>
8
- <div class="seopress-page-list seopress-card">
9
  <div class="seopress-card-title">
10
  <h2><?php _e('SEO management', 'wp-seopress'); ?>
11
  </h2>
 
12
  </div>
13
 
14
  <?php
15
- $features = [];
16
  $features = [
17
  'titles' => [
18
  'title' => __('Titles & Metas', 'wp-seopress'),
@@ -211,4 +211,4 @@
211
  </div>
212
  <?php }
213
  ?>
214
- </div>
5
  exit;
6
  }
7
  ?>
8
+ <div id="seopress-page-list" class="seopress-page-list seopress-card">
9
  <div class="seopress-card-title">
10
  <h2><?php _e('SEO management', 'wp-seopress'); ?>
11
  </h2>
12
+ <span class="dashicons dashicons-sort"></span>
13
  </div>
14
 
15
  <?php
 
16
  $features = [
17
  'titles' => [
18
  'title' => __('Titles & Metas', 'wp-seopress'),
211
  </div>
212
  <?php }
213
  ?>
214
+ </div>
inc/admin/admin-pages/Main.php CHANGED
@@ -7,22 +7,38 @@ $this->options = get_option('seopress_option_name');
7
  $current_tab ='';
8
  if (function_exists('seopress_admin_header')) {
9
  echo seopress_admin_header();
10
- } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  <div id="seopress-content" class="seopress-option">
12
  <!--Get started-->
13
  <?php
14
- function seopress_get_hidden_notices_get_started_option()
15
- {
16
- $seopress_get_hidden_notices_get_started_option = get_option('seopress_notices');
17
- if (! empty($seopress_get_hidden_notices_get_started_option)) {
18
- foreach ($seopress_get_hidden_notices_get_started_option as $key => $seopress_get_hidden_notices_get_started_value) {
19
- $options[$key] = $seopress_get_hidden_notices_get_started_value;
20
- }
21
- if (isset($seopress_get_hidden_notices_get_started_option['notice-get-started'])) {
22
- return $seopress_get_hidden_notices_get_started_option['notice-get-started'];
23
- }
24
- }
25
- }
26
  if ('1' != seopress_get_hidden_notices_get_started_option()) {
27
  if (function_exists('seopress_get_toggle_white_label_option') && '1' == seopress_get_toggle_white_label_option()) {
28
  //do nothing
@@ -44,20 +60,27 @@ if ('1' != seopress_get_hidden_notices_get_started_option()) {
44
  </div>
45
  <div class="seopress-dashboard-column">
46
  <?php
47
- if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
48
- if (defined('SEOPRESS_WL_ADMIN_HEADER') && SEOPRESS_WL_ADMIN_HEADER === false) {
49
- //do nothing
50
- } else {
51
- include_once dirname(dirname(__FILE__)) . '/blocks/insights.php';
 
 
 
 
 
 
 
 
 
52
  }
53
- } ?>
54
- <?php
55
- if (defined('SEOPRESS_WL_ADMIN_HEADER') && SEOPRESS_WL_ADMIN_HEADER === false) {
56
- //do nothing
57
- } else {
58
- include_once dirname(dirname(__FILE__)) . '/blocks/news.php';
59
- } ?>
60
- <?php include_once dirname(dirname(__FILE__)) . '/admin-features-list.php'; ?>
61
  </div>
62
  </div>
63
 
7
  $current_tab ='';
8
  if (function_exists('seopress_admin_header')) {
9
  echo seopress_admin_header();
10
+ }
11
+
12
+ function seopress_get_hidden_notices_get_started_option()
13
+ {
14
+ $seopress_get_hidden_notices_get_started_option = get_option('seopress_notices');
15
+ if (! empty($seopress_get_hidden_notices_get_started_option)) {
16
+ foreach ($seopress_get_hidden_notices_get_started_option as $key => $seopress_get_hidden_notices_get_started_value) {
17
+ $options[$key] = $seopress_get_hidden_notices_get_started_value;
18
+ }
19
+ if (isset($seopress_get_hidden_notices_get_started_option['notice-get-started'])) {
20
+ return $seopress_get_hidden_notices_get_started_option['notice-get-started'];
21
+ }
22
+ }
23
+ }
24
+
25
+ function seopress_dashboard_cards_order_option()
26
+ {
27
+ $seopress_dashboard_cards_order_option = get_option('seopress_dashboard_option_name');
28
+ if (! empty($seopress_dashboard_cards_order_option)) {
29
+ foreach ($seopress_dashboard_cards_order_option as $key => $seopress_dashboard_cards_order_value) {
30
+ $options[$key] = $seopress_dashboard_cards_order_value;
31
+ }
32
+ if (isset($seopress_dashboard_cards_order_option['cards_order'])) {
33
+ return $seopress_dashboard_cards_order_option['cards_order'];
34
+ }
35
+ }
36
+ }
37
+ ?>
38
+
39
  <div id="seopress-content" class="seopress-option">
40
  <!--Get started-->
41
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
42
  if ('1' != seopress_get_hidden_notices_get_started_option()) {
43
  if (function_exists('seopress_get_toggle_white_label_option') && '1' == seopress_get_toggle_white_label_option()) {
44
  //do nothing
60
  </div>
61
  <div class="seopress-dashboard-column">
62
  <?php
63
+
64
+ $cards = [
65
+ 'notice-insights-alert' => '/blocks/insights.php',
66
+ 'seopress-news-panel' => '/blocks/news.php',
67
+ 'seopress-page-list' => '/admin-features-list.php'
68
+ ];
69
+
70
+ $order = seopress_dashboard_cards_order_option();
71
+
72
+ if (!empty($order)) {
73
+ foreach($order as $key => $value) {
74
+ if (isset($cards[$value])) {
75
+ include_once dirname(dirname(__FILE__)) . $cards[$value];
76
+ }
77
  }
78
+ } else {
79
+ foreach($cards as $key => $value) {
80
+ include_once dirname(dirname(__FILE__)) . $value;
81
+ }
82
+ }
83
+ ?>
 
 
84
  </div>
85
  </div>
86
 
inc/admin/ajax-migrate/seopressor.php CHANGED
@@ -144,7 +144,8 @@ function seopress_metadata_export() {
144
 
145
  //Get post types
146
  $seopress_get_post_types = [];
147
- foreach (seopress_get_post_types() as $seopress_cpt_key => $seopress_cpt_value) {
 
148
  $seopress_get_post_types[] = $seopress_cpt_key;
149
  }
150
 
144
 
145
  //Get post types
146
  $seopress_get_post_types = [];
147
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
148
+ foreach ($postTypes as $seopress_cpt_key => $seopress_cpt_value) {
149
  $seopress_get_post_types[] = $seopress_cpt_key;
150
  }
151
 
inc/admin/ajax.php CHANGED
@@ -466,7 +466,7 @@ function seopress_do_real_preview()
466
  }
467
 
468
  //nofollow links
469
- $nofollow_links = $xpath->query("//a[contains(@rel, 'nofollow')]");
470
  if (! empty($nofollow_links)) {
471
  foreach ($nofollow_links as $key=>$link) {
472
  if (! preg_match_all('#\b(cancel-comment-reply-link)\b#iu', $link->getAttribute('id'), $m) && ! preg_match_all('#\b(comment-reply-link)\b#iu', $link->getAttribute('class'), $m)) {
@@ -576,7 +576,7 @@ function seopress_toggle_features()
576
  if (current_user_can(seopress_capability('manage_options', 'dashboard')) && is_admin()) {
577
  if (isset($_POST['feature']) && isset($_POST['feature_value'])) {
578
  $seopress_toggle_options = get_option('seopress_toggle');
579
- $seopress_toggle_options[$_POST['feature']] = $_POST['feature_value'];
580
  update_option('seopress_toggle', $seopress_toggle_options, 'yes', false);
581
  }
582
  exit();
@@ -584,6 +584,26 @@ function seopress_toggle_features()
584
  }
585
  add_action('wp_ajax_seopress_toggle_features', 'seopress_toggle_features');
586
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
587
  ///////////////////////////////////////////////////////////////////////////////////////////////////
588
  //Dashboard News Panel
589
  ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -632,6 +652,18 @@ function seopress_display()
632
 
633
  update_option('seopress_advanced_option_name', $seopress_advanced_option_name, false);
634
  }
 
 
 
 
 
 
 
 
 
 
 
 
635
  exit();
636
  }
637
  }
466
  }
467
 
468
  //nofollow links
469
+ $nofollow_links = $xpath->query("//a[contains(@rel, 'nofollow') and not(contains(@rel, 'ugc'))]");
470
  if (! empty($nofollow_links)) {
471
  foreach ($nofollow_links as $key=>$link) {
472
  if (! preg_match_all('#\b(cancel-comment-reply-link)\b#iu', $link->getAttribute('id'), $m) && ! preg_match_all('#\b(comment-reply-link)\b#iu', $link->getAttribute('class'), $m)) {
576
  if (current_user_can(seopress_capability('manage_options', 'dashboard')) && is_admin()) {
577
  if (isset($_POST['feature']) && isset($_POST['feature_value'])) {
578
  $seopress_toggle_options = get_option('seopress_toggle');
579
+ $seopress_toggle_options[$_POST['feature']] = esc_attr($_POST['feature_value']);
580
  update_option('seopress_toggle', $seopress_toggle_options, 'yes', false);
581
  }
582
  exit();
584
  }
585
  add_action('wp_ajax_seopress_toggle_features', 'seopress_toggle_features');
586
 
587
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
588
+ //Dashboard drag and drop features
589
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
590
+ function seopress_dnd_features()
591
+ {
592
+ check_ajax_referer('seopress_dnd_features_nonce');
593
+ if (current_user_can(seopress_capability('manage_options', 'dashboard')) && is_admin()) {
594
+ if (isset($_POST['order']) && $_POST['order']) {
595
+ $cards_order = get_option('seopress_dashboard_option_name');
596
+
597
+ $cards_order['cards_order'] = $_POST['order'];
598
+
599
+ update_option('seopress_dashboard_option_name', $cards_order);
600
+ }
601
+ }
602
+
603
+ wp_send_json_success();
604
+ }
605
+ add_action('wp_ajax_seopress_dnd_features', 'seopress_dnd_features');
606
+
607
  ///////////////////////////////////////////////////////////////////////////////////////////////////
608
  //Dashboard News Panel
609
  ///////////////////////////////////////////////////////////////////////////////////////////////////
652
 
653
  update_option('seopress_advanced_option_name', $seopress_advanced_option_name, false);
654
  }
655
+ //Tools Panel
656
+ if (isset($_POST['tools_center'])) {
657
+ $seopress_advanced_option_name = get_option('seopress_advanced_option_name');
658
+
659
+ if ('1' == $_POST['tools_center']) {
660
+ $seopress_advanced_option_name['seopress_advanced_appearance_seo_tools'] = esc_attr($_POST['tools_center']);
661
+ } else {
662
+ unset($seopress_advanced_option_name['seopress_advanced_appearance_seo_tools']);
663
+ }
664
+
665
+ update_option('seopress_advanced_option_name', $seopress_advanced_option_name, false);
666
+ }
667
  exit();
668
  }
669
  }
inc/admin/blocks/insights.php CHANGED
@@ -4,281 +4,286 @@
4
  echo 'Please don&rsquo;t call the plugin directly. Thanks :)';
5
  exit;
6
  }
 
 
 
 
7
 
8
- function seopress_google_analytics_dashboard_widget_option()
9
- {
10
- $seopress_google_analytics_dashboard_widget_option = get_option('seopress_google_analytics_option_name');
11
- if (! empty($seopress_google_analytics_dashboard_widget_option)) {
12
- foreach ($seopress_google_analytics_dashboard_widget_option as $key => $seopress_google_analytics_dashboard_widget_value) {
13
- $options[$key] = $seopress_google_analytics_dashboard_widget_value;
14
- }
15
- if (isset($seopress_google_analytics_dashboard_widget_option['seopress_google_analytics_dashboard_widget'])) {
16
- return $seopress_google_analytics_dashboard_widget_option['seopress_google_analytics_dashboard_widget'];
 
 
17
  }
18
- }
19
- }
20
 
21
- function seopress_get_hidden_notices_insights_option()
22
- {
23
- $seopress_get_hidden_notices_insights_option = get_option('seopress_notices');
24
- if (! empty($seopress_get_hidden_notices_insights_option)) {
25
- foreach ($seopress_get_hidden_notices_insights_option as $key => $seopress_get_hidden_notices_insights_value) {
26
- $options[$key] = $seopress_get_hidden_notices_insights_value;
27
- }
28
- if (isset($seopress_get_hidden_notices_insights_option['notice-insights'])) {
29
- return $seopress_get_hidden_notices_insights_option['notice-insights'];
 
 
30
  }
31
- }
32
- }
33
 
34
- if ('1' != seopress_get_hidden_notices_insights_option()) {
35
- ?>
 
 
 
 
 
 
 
 
 
 
36
 
37
- <div id="notice-insights-alert" class="seopress-page-list seopress-card">
38
- <div class="seopress-card-title">
39
- <h2><?php _e('Stats overview', 'wp-seopress'); ?>
40
- </h2>
41
 
42
- <span class="seopress-item-toggle-options"></span>
43
- <div class="seopress-card-popover">
44
- <?php
45
- $options = get_option('seopress_dashboard_option_name');
46
- $value = isset($options['hide_insights']) ? esc_attr($options['hide_insights']) : 5;
47
- ?>
48
 
49
- <button id="notice-insights" name="notice-insights" data-notice="notice-insights" type="submit" class="btn btnSecondary">
50
- <?php _e('Hide this', 'wp-seopress'); ?>
51
- </button>
52
- </div>
53
- </div>
54
- <div class="seopress-card-content">
55
- <div id="seopress-admin-tabs" class="wrap">
56
- <?php
57
- $dashboard_settings_tabs = [
58
- 'tab_seopress_analytics' => __('Google Analytics', 'wp-seopress'),
59
- 'tab_seopress_ps' => __('PageSpeed', 'wp-seopress'),
60
- 'tab_seopress_seo_tools' => __('SEO Tools', 'wp-seopress'),
61
- ];
62
- ?>
63
-
64
- <div class="nav-tab-wrapper">
65
- <?php foreach ($dashboard_settings_tabs as $tab_key => $tab_caption) { ?>
66
- <a id="<?php echo $tab_key; ?>-tab" class="nav-tab"
67
- href="?page=seopress-option#tab=<?php echo $tab_key; ?>"><?php echo $tab_caption; ?></a>
68
- <?php } ?>
69
  </div>
 
 
 
 
 
 
 
 
 
70
 
71
- <?php
72
- $seopress_page_speed_results = [];
73
- $seopress_page_speed_results = json_decode(get_transient('seopress_results_page_speed'), true);
74
-
75
- $ps_score = 0;
76
- $fetchTime = '';
77
- $class_score = '';
78
- $circumference = '';
79
- if (! empty($seopress_page_speed_results)) {
80
- $ps_score = ($seopress_page_speed_results['lighthouseResult']['categories']['performance']['score']) * 100;
81
-
82
- if ($ps_score >= 0 && $ps_score < 49) {
83
- $class_score = 'red';
84
- } elseif ($ps_score >= 50 && $ps_score < 90) {
85
- $class_score = 'yellow';
86
- } elseif ($ps_score >= 90 && $ps_score <= 100) {
87
- $class_score = 'green';
88
- } else {
89
- $class_score = 'grey';
90
- }
91
-
92
- //565.48
93
- $circumference = 90 * 2 * M_PI;
94
- $circumference = $circumference - $ps_score / 100 * $circumference;
95
- $fetchTime = $seopress_page_speed_results['lighthouseResult']['fetchTime'];
96
- }
97
- ?>
98
-
99
- <div class="wrap-seopress-tab-content"
100
- data-score="<?php echo $ps_score; ?>">
101
- <div id="tab_seopress_ps" class="seopress-tab seopress-page-speed inside<?php if ('tab_seopress_ps' == $current_tab) {
102
- echo 'active';
103
- }?>">
104
- <p><?php _e('The speed score is based on the lab data analyzed by Lighthouse.', 'wp-seopress'); ?>
105
- </p>
106
- <div class="wrap-scale">
107
- <div
108
- class="ps-score <?php echo $class_score; ?>">
109
- <svg role="img" aria-hidden="true" focusable="false" width="100%" height="100%"
110
- viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg">
111
- <circle r="90" cx="100" cy="100" fill="transparent" stroke-dasharray="565.48"
112
- stroke-dashoffset="0"></circle>
113
- <circle id="bar" r="90" cx="100" cy="100" fill="transparent"
114
- stroke-dasharray="<?php echo $circumference; ?>"
115
- stroke-dashoffset="0"></circle>
116
- </svg>
117
- <span><?php echo $ps_score . '%'; ?></span>
118
- </div>
119
-
120
- <a href="<?php echo admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_page_speed'); ?>"
121
- class="btn btnSecondary">
122
- <?php _e('See full report', 'wp-seopress'); ?>
123
- </a>
124
  </div>
125
- <p class="wrap-scale">
126
- <?php _e('<strong>Scale:</strong><span class="slow"></span>0-49 (slow) <span class="average"></span>50-89 (average) <span class="fast"></span>90-100 (fast)', 'wp-seopress'); ?>
127
- </p>
128
- <div class="last-date-analysis">
129
- <p>
130
- <strong><?php _e('Last analysis: ', 'wp-seopress'); ?></strong>
131
- <?php echo date_i18n(get_option('date_format'), strtotime($fetchTime)); ?>
132
- <?php _e(' at ', 'wp-seopress'); ?>
133
- <?php echo date('H:i', strtotime($fetchTime)); ?>
134
- </p>
135
- </div>
136
- </div>
137
 
138
- <?php if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) { ?>
139
- <div id="tab_seopress_analytics" class="seopress-tab seopress-analytics <?php if ('tab_seopress_analytics' == $current_tab) {
140
- echo 'active';
141
- } ?>">
142
- <?php if ('1' == seopress_get_toggle_option('google-analytics') && '1' !== seopress_google_analytics_dashboard_widget_option()) {
143
- $stats = get_transient('seopress_results_google_analytics');
144
- $html = [];
145
- if (! empty($stats['sessions'])) {
146
- $html[__('Sessions', 'wp-seopress')] = $stats['sessions'];
147
- }
148
- if (! empty($stats['users'])) {
149
- $html[__('Users', 'wp-seopress')] = $stats['users'];
150
- }
151
- if (! empty($stats['pageviews'])) {
152
- $html[__('Page Views', 'wp-seopress')] = $stats['pageviews'];
153
- }
154
- if (! empty($stats['pageviewsPerSession'])) {
155
- $html[__('Page view / session', 'wp-seopress')] = $stats['pageviewsPerSession'];
156
- }
157
- if (! empty($stats['avgSessionDuration'])) {
158
- $html[__('Average session duration', 'wp-seopress')] = $stats['avgSessionDuration'];
159
- }
160
- if (! empty($stats['bounceRate'])) {
161
- $html[__('Bounce rate', 'wp-seopress')] = $stats['bounceRate'];
162
- }
163
- if (! empty($stats['percentNewSessions'])) {
164
- $html[__('New sessions', 'wp-seopress')] = $stats['percentNewSessions'];
165
- } ?>
166
 
167
- <div class="seopress-summary-items">
168
 
169
- <?php if (! empty($html)) { ?>
170
- <?php foreach ($html as $key => $value) { ?>
171
- <div class="seopress-summary-item">
172
- <div class="seopress-summary-item-label">
173
- <?php echo $key; ?>
174
- </div>
175
- <div class="seopress-summary-item-data">
176
- <?php echo $value; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  </div>
179
- <?php } ?>
180
- <?php } else { ?>
181
- <?php _e('No stats found', 'wp-seopress'); ?>
182
  <?php } ?>
183
-
184
- </div>
185
- <?php
186
- } else { ?>
187
- <div class="seopress-summary-items">
188
- <div class="seopress-summary-item">
189
  <p>
190
- <a class="btn btnSecondary" href="<?php echo admin_url( 'admin.php?page=seopress-google-analytics#tab=tab_seopress_google_analytics_dashboard' ); ?>">
191
- <?php _e('Connect Google Analytics','wp-seopress'); ?>
 
192
  </a>
193
  </p>
194
  </div>
195
- </div>
196
- <?php } ?>
197
- </div>
198
- <?php } ?>
199
-
200
- <?php if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) { ?>
201
- <div id="tab_seopress_seo_tools" class="seopress-tab seopress-useful-tools inside <?php if ('tab_seopress_seo_tools' == $current_tab) {
202
- echo 'active';
203
- } ?>">
204
 
205
- <!-- Reverse -->
206
- <div class="widget widget-reverse">
207
- <h3 class="widget-title"><?php _e('Check websites setup on your server', 'wp-seopress'); ?>
208
- </h3>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
209
 
210
- <p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  <?php
212
- if ('' != get_transient('seopress_results_reverse')) {
213
- $seopress_results_reverse = (array) json_decode(get_transient('seopress_results_reverse'));
 
 
 
 
 
 
 
 
 
 
 
214
 
215
- //Init
216
- $seopress_results_reverse_remote_ip_address = __('Not found', 'wp-seopress');
217
- if (isset($seopress_results_reverse['remoteIpAddress'])) {
218
- $seopress_results_reverse_remote_ip_address = $seopress_results_reverse['remoteIpAddress'];
219
- }
220
 
221
- $seopress_results_reverse_last_scrape = __('No scrape.', 'wp-seopress');
222
- if (isset($seopress_results_reverse['lastScrape'])) {
223
- $seopress_results_reverse_last_scrape = $seopress_results_reverse['lastScrape'];
224
- }
225
 
226
- $seopress_results_reverse_domain_count = __('No domain found.', 'wp-seopress');
227
- if (isset($seopress_results_reverse['domainCount'])) {
228
- $seopress_results_reverse_domain_count = $seopress_results_reverse['domainCount'];
229
- }
230
 
231
- $seopress_results_reverse_domain_array = '';
232
- if (isset($seopress_results_reverse['domainArray'])) {
233
- $seopress_results_reverse_domain_array = $seopress_results_reverse['domainArray'];
234
- } ?>
235
- <p class="remote-ip">
236
- <strong>
237
- <?php _e('Server IP Address: ', 'wp-seopress'); ?>
238
- </strong>
239
- <?php echo $seopress_results_reverse_remote_ip_address; ?>
240
- </p>
241
 
242
- <p class="last-scrape">
243
- <strong>
244
- <?php _e('Last scrape: ', 'wp-seopress'); ?>
245
- </strong>
246
- <?php echo $seopress_results_reverse_last_scrape; ?>
247
- </p>
248
 
249
- <p class="domain-count">
250
- <strong>
251
- <?php _e('Number of websites on your server: ', 'wp-seopress'); ?>
252
- </strong>
253
- <?php echo $seopress_results_reverse_domain_count; ?>
254
- </p>
255
- <?php if ('' != $seopress_results_reverse_domain_array) { ?>
256
- <ul>
257
- <?php foreach ($seopress_results_reverse_domain_array as $key => $value) { ?>
258
- <li>
259
- <span class="dashicons dashicons-minus"></span>
260
- <a href="//' . preg_replace('#^https?://#', '', $value[0]) . '" target="_blank">
261
- <?php echo $value[0]; ?>
262
- </a>
263
- <span class="dashicons dashicons-external"></span>
264
- </li>
265
- <?php } ?>
266
- </ul>
267
- <?php }
268
- }
269
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
270
 
271
- <button id="seopress-reverse-submit" type="button" class="btn btnSecondary" name="submit">
272
- <?php _e('Get list', 'wp-seopress'); ?>
273
- </button>
274
 
275
- <span id="spinner-reverse" class="spinner"></span>
 
 
 
276
  </div>
277
  </div>
278
- <?php } ?>
279
  </div>
280
  </div>
281
- </div>
282
- </div>
283
-
284
- <?php }
4
  echo 'Please don&rsquo;t call the plugin directly. Thanks :)';
5
  exit;
6
  }
7
+ if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
8
+ if (defined('SEOPRESS_WL_ADMIN_HEADER') && SEOPRESS_WL_ADMIN_HEADER === false) {
9
+ //do nothing
10
+ } else {
11
 
12
+ function seopress_google_analytics_dashboard_widget_option()
13
+ {
14
+ $seopress_google_analytics_dashboard_widget_option = get_option('seopress_google_analytics_option_name');
15
+ if (! empty($seopress_google_analytics_dashboard_widget_option)) {
16
+ foreach ($seopress_google_analytics_dashboard_widget_option as $key => $seopress_google_analytics_dashboard_widget_value) {
17
+ $options[$key] = $seopress_google_analytics_dashboard_widget_value;
18
+ }
19
+ if (isset($seopress_google_analytics_dashboard_widget_option['seopress_google_analytics_dashboard_widget'])) {
20
+ return $seopress_google_analytics_dashboard_widget_option['seopress_google_analytics_dashboard_widget'];
21
+ }
22
+ }
23
  }
 
 
24
 
25
+ function seopress_get_hidden_notices_insights_option()
26
+ {
27
+ $seopress_get_hidden_notices_insights_option = get_option('seopress_notices');
28
+ if (! empty($seopress_get_hidden_notices_insights_option)) {
29
+ foreach ($seopress_get_hidden_notices_insights_option as $key => $seopress_get_hidden_notices_insights_value) {
30
+ $options[$key] = $seopress_get_hidden_notices_insights_value;
31
+ }
32
+ if (isset($seopress_get_hidden_notices_insights_option['notice-insights'])) {
33
+ return $seopress_get_hidden_notices_insights_option['notice-insights'];
34
+ }
35
+ }
36
  }
 
 
37
 
38
+ function seopress_advanced_appearance_seo_tools_option()
39
+ {
40
+ $seopress_advanced_appearance_seo_tools_option = get_option('seopress_advanced_option_name');
41
+ if (! empty($seopress_advanced_appearance_seo_tools_option)) {
42
+ foreach ($seopress_advanced_appearance_seo_tools_option as $key => $seopress_advanced_appearance_seo_tools_value) {
43
+ $options[$key] = $seopress_advanced_appearance_seo_tools_value;
44
+ }
45
+ if (isset($seopress_advanced_appearance_seo_tools_option['seopress_advanced_appearance_seo_tools'])) {
46
+ return $seopress_advanced_appearance_seo_tools_option['seopress_advanced_appearance_seo_tools'];
47
+ }
48
+ }
49
+ }
50
 
51
+ $class = '1' != seopress_advanced_appearance_seo_tools_option() ? 'is-active' : '';
52
+ ?>
 
 
53
 
54
+ <div id="notice-insights-alert" class="seopress-page-list seopress-card <?php echo $class; ?>" style="display: none">
55
+ <div class="seopress-card-title">
56
+ <h2><?php _e('Site overview', 'wp-seopress'); ?>
57
+ </h2>
 
 
58
 
59
+ <div>
60
+ <span class="dashicons dashicons-sort"></span>
61
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  </div>
63
+ <div class="seopress-card-content">
64
+ <div id="seopress-admin-tabs" class="wrap">
65
+ <?php
66
+ $dashboard_settings_tabs = [
67
+ 'tab_seopress_analytics' => __('Google Analytics', 'wp-seopress'),
68
+ 'tab_seopress_ps' => __('PageSpeed', 'wp-seopress'),
69
+ 'tab_seopress_seo_tools' => __('SEO Tools', 'wp-seopress'),
70
+ ];
71
+ ?>
72
 
73
+ <div class="nav-tab-wrapper">
74
+ <?php foreach ($dashboard_settings_tabs as $tab_key => $tab_caption) { ?>
75
+ <a id="<?php echo $tab_key; ?>-tab" class="nav-tab"
76
+ href="?page=seopress-option#tab=<?php echo $tab_key; ?>"><?php echo $tab_caption; ?></a>
77
+ <?php } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
79
 
80
+ <?php
81
+ $seopress_page_speed_results = [];
82
+ $seopress_page_speed_results = json_decode(get_transient('seopress_results_page_speed'), true);
83
+ $cwv_svg = '<svg enable-background="new 0 0 24 24" focusable="false" height="15" viewBox="0 0 24 24" width="15" style="fill:#06f;vertical-align:middle"><g><g><path d="M0,0h24v24H0V0z" fill="none"></path></g></g><g><path d="M17,3H7C5.9,3,5,3.9,5,5v16l7-3l7,3V5C19,3.9,18.1,3,17,3z"></path></g></svg>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
 
85
+ $fetchTime = '';
86
 
87
+ $ps_score = '';
88
+ $core_web_vitals_score = '';
89
+ if (! empty($seopress_page_speed_results)) {
90
+ $ps_score = seopress_pro_get_ps_score($seopress_page_speed_results);
91
+ $ps_score_desktop = seopress_pro_get_ps_score($seopress_page_speed_results, false);
92
+ $core_web_vitals_score = seopress_pro_get_cwv_score($seopress_page_speed_results);
93
+ }
94
+ ?>
95
+
96
+ <div class="wrap-seopress-tab-content">
97
+ <div id="tab_seopress_ps" class="seopress-tab seopress-page-speed inside<?php if ('tab_seopress_ps' == $current_tab) {
98
+ echo 'active';
99
+ }?>">
100
+ <h3><?php _e('Google Page Speed Score','wp-seopress'); ?></h3>
101
+ <p><?php _e('Learn how your site has performed, based on data from your actual users around the world.','wp-seopress-pro'); ?>
102
+ </p>
103
+ <?php if ($ps_score && $ps_score_desktop) { ?>
104
+ <div class="seopress-cwv seopress-summary-item-data">
105
+ <?php echo $ps_score; ?>
106
+ <?php echo $ps_score_desktop; ?>
107
+ <p class="wrap-scale">
108
+ <?php _e('<span><span class="score red"></span>0-49</span><span><span class="score yellow"></span>50-89</span><span><span class="score green"></span>90-100</span>','wp-seopress-pro') ?>
109
+ </p>
110
  </div>
111
+ <div class="seopress-cwv">
112
+ <?php if ($core_web_vitals_score === true) { ?>
113
+ <img src="<?php echo SEOPRESS_PRO_ASSETS_DIR; ?>/img/cwv-pass.svg"
114
+ alt='' width='96' height='96' />
115
+ <?php } else { ?>
116
+ <img src="<?php echo SEOPRESS_PRO_ASSETS_DIR; ?>/img/cwv-fail.svg"
117
+ alt='' width='96' height='96' />
118
+ <?php } ?>
119
+ <div>
120
+ <h3>
121
+ <?php _e('Core Web Vitals Assessment: ', 'wp-seopress-pro'); ?>
122
+
123
+ <?php if ($core_web_vitals_score === true) { ?>
124
+ <span class="green"><?php _e('Passed', 'wp-seopress-pro'); ?></span>
125
+ <?php } else { ?>
126
+ <span class="red"><?php _e('Failed', 'wp-seopress-pro'); ?></span>
127
+ <?php }
128
+ echo $core_web_vitals_score; ?>
129
+ </h3>
130
+ <p><?php printf(__('Computed from the %s Core Web Vitals metrics over the latest 28-day collection period.', 'wp-seopress-pro'), $cwv_svg); ?></p>
131
+ </div>
132
  </div>
133
+ <?php } else { ?>
134
+ <p><?php _e('No data available.','wp-seopress'); ?></p>
 
135
  <?php } ?>
 
 
 
 
 
 
136
  <p>
137
+ <a href="<?php echo admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_page_speed'); ?>"
138
+ class="btn btnSecondary">
139
+ <?php _e('See full report', 'wp-seopress'); ?>
140
  </a>
141
  </p>
142
  </div>
 
 
 
 
 
 
 
 
 
143
 
144
+ <?php if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) { ?>
145
+ <div id="tab_seopress_analytics" class="seopress-tab seopress-analytics <?php if ('tab_seopress_analytics' == $current_tab) {
146
+ echo 'active';
147
+ } ?>">
148
+ <?php if ('1' == seopress_get_toggle_option('google-analytics') && '1' !== seopress_google_analytics_dashboard_widget_option()) {
149
+ $stats = get_transient('seopress_results_google_analytics');
150
+ $html = [];
151
+ if (! empty($stats['sessions'])) {
152
+ $html[__('Sessions', 'wp-seopress')] = $stats['sessions'];
153
+ }
154
+ if (! empty($stats['users'])) {
155
+ $html[__('Users', 'wp-seopress')] = $stats['users'];
156
+ }
157
+ if (! empty($stats['pageviews'])) {
158
+ $html[__('Page Views', 'wp-seopress')] = $stats['pageviews'];
159
+ }
160
+ if (! empty($stats['pageviewsPerSession'])) {
161
+ $html[__('Page view / session', 'wp-seopress')] = $stats['pageviewsPerSession'];
162
+ }
163
+ if (! empty($stats['avgSessionDuration'])) {
164
+ $html[__('Average session duration', 'wp-seopress')] = $stats['avgSessionDuration'];
165
+ }
166
+ if (! empty($stats['bounceRate'])) {
167
+ $html[__('Bounce rate', 'wp-seopress')] = $stats['bounceRate'];
168
+ }
169
+ if (! empty($stats['percentNewSessions'])) {
170
+ $html[__('New sessions', 'wp-seopress')] = $stats['percentNewSessions'];
171
+ } ?>
172
 
173
+ <div class="seopress-summary-items">
174
+ <?php if (! empty($html)) { ?>
175
+ <?php foreach ($html as $key => $value) { ?>
176
+ <div class="seopress-summary-item">
177
+ <div class="seopress-summary-item-label">
178
+ <?php echo $key; ?>
179
+ </div>
180
+ <div class="seopress-summary-item-data">
181
+ <?php echo $value; ?>
182
+ </div>
183
+ </div>
184
+ <?php } ?>
185
+ <?php } else { ?>
186
+ <p class="inside"><?php _e('No stats found', 'wp-seopress'); ?></p>
187
+ <?php } ?>
188
+ </div>
189
  <?php
190
+ } else { ?>
191
+ <div class="seopress-summary-items">
192
+ <div class="seopress-summary-item">
193
+ <p>
194
+ <a class="btn btnSecondary" href="<?php echo admin_url( 'admin.php?page=seopress-google-analytics#tab=tab_seopress_google_analytics_dashboard' ); ?>">
195
+ <?php _e('Connect Google Analytics','wp-seopress'); ?>
196
+ </a>
197
+ </p>
198
+ </div>
199
+ </div>
200
+ <?php } ?>
201
+ </div>
202
+ <?php } ?>
203
 
204
+ <?php if (is_plugin_active('wp-seopress-pro/seopress-pro.php') ) { ?>
205
+ <div id="tab_seopress_seo_tools" class="seopress-tab seopress-useful-tools inside <?php if ('tab_seopress_seo_tools' == $current_tab) {
206
+ echo 'active';
207
+ } ?>">
 
208
 
209
+ <!-- Reverse -->
210
+ <div class="widget widget-reverse">
211
+ <h3 class="widget-title"><?php _e('Check websites setup on your server', 'wp-seopress'); ?>
212
+ </h3>
213
 
214
+ <p>
215
+ <?php
216
+ if ('' != get_transient('seopress_results_reverse')) {
217
+ $seopress_results_reverse = (array) json_decode(get_transient('seopress_results_reverse'));
218
 
219
+ //Init
220
+ $seopress_results_reverse_remote_ip_address = __('Not found', 'wp-seopress');
221
+ if (isset($seopress_results_reverse['remoteIpAddress'])) {
222
+ $seopress_results_reverse_remote_ip_address = $seopress_results_reverse['remoteIpAddress'];
223
+ }
 
 
 
 
 
224
 
225
+ $seopress_results_reverse_last_scrape = __('No scrape.', 'wp-seopress');
226
+ if (isset($seopress_results_reverse['lastScrape'])) {
227
+ $seopress_results_reverse_last_scrape = $seopress_results_reverse['lastScrape'];
228
+ }
 
 
229
 
230
+ $seopress_results_reverse_domain_count = __('No domain found.', 'wp-seopress');
231
+ if (isset($seopress_results_reverse['domainCount'])) {
232
+ $seopress_results_reverse_domain_count = $seopress_results_reverse['domainCount'];
233
+ }
234
+
235
+ $seopress_results_reverse_domain_array = '';
236
+ if (isset($seopress_results_reverse['domainArray'])) {
237
+ $seopress_results_reverse_domain_array = $seopress_results_reverse['domainArray'];
238
+ } ?>
239
+ <p class="remote-ip">
240
+ <strong>
241
+ <?php _e('Server IP Address: ', 'wp-seopress'); ?>
242
+ </strong>
243
+ <?php echo $seopress_results_reverse_remote_ip_address; ?>
244
+ </p>
245
+
246
+ <p class="last-scrape">
247
+ <strong>
248
+ <?php _e('Last scrape: ', 'wp-seopress'); ?>
249
+ </strong>
250
+ <?php echo $seopress_results_reverse_last_scrape; ?>
251
+ </p>
252
+
253
+ <p class="domain-count">
254
+ <strong>
255
+ <?php _e('Number of websites on your server: ', 'wp-seopress'); ?>
256
+ </strong>
257
+ <?php echo $seopress_results_reverse_domain_count; ?>
258
+ </p>
259
+ <?php if ('' != $seopress_results_reverse_domain_array) { ?>
260
+ <ul>
261
+ <?php foreach ($seopress_results_reverse_domain_array as $key => $value) { ?>
262
+ <li>
263
+ <span class="dashicons dashicons-minus"></span>
264
+ <a href="//' . preg_replace('#^https?://#', '', $value[0]) . '" target="_blank">
265
+ <?php echo $value[0]; ?>
266
+ </a>
267
+ <span class="dashicons dashicons-external"></span>
268
+ </li>
269
+ <?php } ?>
270
+ </ul>
271
+ <?php }
272
+ }
273
+ ?>
274
 
275
+ <button id="seopress-reverse-submit" type="button" class="btn btnSecondary" name="submit">
276
+ <?php _e('Get list', 'wp-seopress'); ?>
277
+ </button>
278
 
279
+ <span id="spinner-reverse" class="spinner"></span>
280
+ </div>
281
+ </div>
282
+ <?php } ?>
283
  </div>
284
  </div>
 
285
  </div>
286
  </div>
287
+ <?php
288
+ }
289
+ }
 
inc/admin/blocks/intro.php CHANGED
@@ -7,7 +7,7 @@
7
  ?>
8
 
9
 
10
- <div class="seopress-intro">
11
  <h2><?php _e('Your SEO today', 'wp-seopress'); ?></h2>
12
  <p><?php _e('To do\'s, tips, and insights for your business', ''); ?></p>
13
  </div>
7
  ?>
8
 
9
 
10
+ <div id="seopress-intro" class="seopress-intro">
11
  <h2><?php _e('Your SEO today', 'wp-seopress'); ?></h2>
12
  <p><?php _e('To do\'s, tips, and insights for your business', ''); ?></p>
13
  </div>
inc/admin/blocks/news.php CHANGED
@@ -5,97 +5,107 @@
5
  exit;
6
  }
7
 
8
- //News Center
9
- function seopress_advanced_appearance_news_option() {
10
- $seopress_advanced_appearance_news_option = get_option('seopress_advanced_option_name');
11
- if ( ! empty($seopress_advanced_appearance_news_option)) {
12
- foreach ($seopress_advanced_appearance_news_option as $key => $seopress_advanced_appearance_news_value) {
13
- $options[$key] = $seopress_advanced_appearance_news_value;
14
- }
15
- if (isset($seopress_advanced_appearance_news_option['seopress_advanced_appearance_news'])) {
16
- return $seopress_advanced_appearance_news_option['seopress_advanced_appearance_news'];
 
 
 
 
 
 
17
  }
18
- }
19
- }
20
 
21
- $docs = seopress_get_docs_links();
22
-
23
- $class = '1' != seopress_advanced_appearance_news_option() ? 'is-active' : '';
24
- ?>
25
-
26
- <div id="seopress-news-panel"
27
- class="seopress-card <?php echo $class; ?>"
28
- style="display: none">
29
- <div class="seopress-card-title">
30
- <h2><?php _e('Latest News from SEOPress Blog', 'wp-seopress'); ?>
31
- </h2>
32
-
33
- <span class="seopress-item-toggle-options"></span>
34
- <div class="seopress-card-popover">
35
- <?php
36
- $options = get_option('seopress_dashboard_option_name');
37
- $value = isset($options['news_max_items']) ? esc_attr($options['news_max_items']) : 5;
38
- ?>
39
-
40
- <p>
41
- <label for="seopress_dashboard_option_name[news_max_items]">
42
- <?php _e('How many items would you like to display?', 'wp-seopress'); ?>
43
- </label>
44
- <input id="news_max_items" name="seopress_dashboard_option_name[news_max_items]" type="number" step="1"
45
- min="1" max="5" value="<?php echo $value; ?>">
46
- </p>
47
-
48
- <button id="seopress-news-items" type="submit" class="btn btnSecondary">
49
- <?php _e('Save', 'wp-seopress'); ?>
50
- </button>
51
- </div>
52
- </div>
53
- <div class="seopress-card-content">
54
- <?php
55
- include_once ABSPATH . WPINC . '/feed.php';
56
 
57
- // Get a SimplePie feed object from the specified feed source.
58
- $rss = fetch_feed('https://www.seopress.org/feed');
59
 
60
- $maxitems = 0;
 
 
 
 
 
61
 
62
- if ( ! is_wp_error($rss)) { // Checks that the object is created correctly
63
- // Figure out how many total items there are, but limit it to 5.
64
- $maxitems = $rss->get_item_quantity($value);
65
 
66
- // Build an array of all the items, starting with element 0 (first element).
67
- $rss_items = $rss->get_items(0, $maxitems);
68
- }
69
- ?>
 
 
 
 
 
 
 
 
 
 
 
70
 
71
- <ul class="seopress-list-items" role="menu">
72
- <?php if (0 == $maxitems) { ?>
73
- <li class="seopress-item has-action">
74
- <?php _e('No items', 'wp-seopress'); ?>
75
- </li>
76
- <?php } else { ?>
77
- <?php // Loop through each feed item and display each item as a hyperlink.?>
78
- <?php foreach ($rss_items as $item) { ?>
79
- <li class="seopress-item has-action seopress-item-inner">
80
- <a href="<?php echo esc_url($item->get_permalink()); ?>"
81
- target="_blank" class="seopress-item-inner"
82
- title="<?php printf(__('Learn more about %s in a new tab', 'wp-seopress'), esc_html($item->get_title())); ?>">
83
- <p class="seopress-item-date"><?php echo $item->get_date('M Y'); ?>
84
- </p>
85
-
86
- <h3 class="seopress-item-title">
87
- <?php echo esc_html($item->get_title()); ?><span class="dashicons dashicons-external"></span>
88
- </h3>
89
- <p class="seopress-item-content"><?php echo $item->get_description(); ?>
90
- </p>
91
- </a>
92
- </li>
93
- <?php } ?>
94
- <?php } ?>
95
- </ul>
96
- </div>
97
- <div class="seopress-card-footer">
98
- <a href="<?php echo $docs['blog']; ?>"><?php _e('All news', 'wp-seopress'); ?></a>
99
- <span class="dashicons dashicons-external"></span>
100
- </div>
101
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  exit;
6
  }
7
 
8
+ if (defined('SEOPRESS_WL_ADMIN_HEADER') && SEOPRESS_WL_ADMIN_HEADER === false) {
9
+ //do nothing
10
+ } else {
11
+
12
+ //News Center
13
+ function seopress_advanced_appearance_news_option() {
14
+ $seopress_advanced_appearance_news_option = get_option('seopress_advanced_option_name');
15
+ if ( ! empty($seopress_advanced_appearance_news_option)) {
16
+ foreach ($seopress_advanced_appearance_news_option as $key => $seopress_advanced_appearance_news_value) {
17
+ $options[$key] = $seopress_advanced_appearance_news_value;
18
+ }
19
+ if (isset($seopress_advanced_appearance_news_option['seopress_advanced_appearance_news'])) {
20
+ return $seopress_advanced_appearance_news_option['seopress_advanced_appearance_news'];
21
+ }
22
+ }
23
  }
 
 
24
 
25
+ $docs = seopress_get_docs_links();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
+ $class = '1' != seopress_advanced_appearance_news_option() ? 'is-active' : '';
28
+ ?>
29
 
30
+ <div id="seopress-news-panel"
31
+ class="seopress-card <?php echo $class; ?>"
32
+ style="display: none">
33
+ <div class="seopress-card-title">
34
+ <h2><?php _e('Latest News from SEOPress Blog', 'wp-seopress'); ?>
35
+ </h2>
36
 
37
+ <div>
38
+ <span class="dashicons dashicons-sort"></span>
 
39
 
40
+ <span class="seopress-item-toggle-options"></span>
41
+
42
+ <div class="seopress-card-popover">
43
+ <?php
44
+ $options = get_option('seopress_dashboard_option_name');
45
+ $value = isset($options['news_max_items']) ? esc_attr($options['news_max_items']) : 5;
46
+ ?>
47
+
48
+ <p>
49
+ <label for="seopress_dashboard_option_name[news_max_items]">
50
+ <?php _e('How many items would you like to display?', 'wp-seopress'); ?>
51
+ </label>
52
+ <input id="news_max_items" name="seopress_dashboard_option_name[news_max_items]" type="number" step="1"
53
+ min="1" max="5" value="<?php echo $value; ?>">
54
+ </p>
55
 
56
+ <button id="seopress-news-items" type="submit" class="btn btnSecondary">
57
+ <?php _e('Save', 'wp-seopress'); ?>
58
+ </button>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ <div class="seopress-card-content">
63
+ <?php
64
+ include_once ABSPATH . WPINC . '/feed.php';
65
+
66
+ // Get a SimplePie feed object from the specified feed source.
67
+ $rss = fetch_feed('https://www.seopress.org/feed');
68
+
69
+ $maxitems = 0;
70
+
71
+ if ( ! is_wp_error($rss)) { // Checks that the object is created correctly
72
+ // Figure out how many total items there are, but limit it to 5.
73
+ $maxitems = $rss->get_item_quantity($value);
74
+
75
+ // Build an array of all the items, starting with element 0 (first element).
76
+ $rss_items = $rss->get_items(0, $maxitems);
77
+ }
78
+ ?>
79
+
80
+ <ul class="seopress-list-items" role="menu">
81
+ <?php if (0 == $maxitems) { ?>
82
+ <li class="seopress-item has-action">
83
+ <?php _e('No items', 'wp-seopress'); ?>
84
+ </li>
85
+ <?php } else { ?>
86
+ <?php // Loop through each feed item and display each item as a hyperlink.?>
87
+ <?php foreach ($rss_items as $item) { ?>
88
+ <li class="seopress-item has-action seopress-item-inner">
89
+ <a href="<?php echo esc_url($item->get_permalink()); ?>"
90
+ target="_blank" class="seopress-item-inner"
91
+ title="<?php printf(__('Learn more about %s in a new tab', 'wp-seopress'), esc_html($item->get_title())); ?>">
92
+ <p class="seopress-item-date"><?php echo $item->get_date('M Y'); ?>
93
+ </p>
94
+
95
+ <h3 class="seopress-item-title">
96
+ <?php echo esc_html($item->get_title()); ?><span class="dashicons dashicons-external"></span>
97
+ </h3>
98
+ <p class="seopress-item-content"><?php echo $item->get_description(); ?>
99
+ </p>
100
+ </a>
101
+ </li>
102
+ <?php } ?>
103
+ <?php } ?>
104
+ </ul>
105
+ </div>
106
+ <div class="seopress-card-footer">
107
+ <a href="<?php echo $docs['blog']; ?>"><?php _e('All news', 'wp-seopress'); ?></a>
108
+ <span class="dashicons dashicons-external"></span>
109
+ </div>
110
+ </div>
111
+ <?php }
inc/admin/blocks/notifications-center.php CHANGED
@@ -4,138 +4,98 @@
4
  echo 'Please don&rsquo;t call the plugin directly. Thanks :)';
5
  exit;
6
  }
7
- //Notifications Center
8
- function seopress_advanced_appearance_notifications_option()
9
- {
10
- $seopress_advanced_appearance_notifications_option = get_option('seopress_advanced_option_name');
11
- if (! empty($seopress_advanced_appearance_notifications_option)) {
12
- foreach ($seopress_advanced_appearance_notifications_option as $key => $seopress_advanced_appearance_notifications_value) {
13
- $options[$key] = $seopress_advanced_appearance_notifications_value;
14
- }
15
- if (isset($seopress_advanced_appearance_notifications_option['seopress_advanced_appearance_notifications'])) {
16
- return $seopress_advanced_appearance_notifications_option['seopress_advanced_appearance_notifications'];
17
- }
18
- }
19
- }
20
- //SEO Tools
21
- function seopress_advanced_appearance_seo_tools_option()
22
- {
23
- $seopress_advanced_appearance_seo_tools_option = get_option('seopress_advanced_option_name');
24
- if (! empty($seopress_advanced_appearance_seo_tools_option)) {
25
- foreach ($seopress_advanced_appearance_seo_tools_option as $key => $seopress_advanced_appearance_seo_tools_value) {
26
- $options[$key] = $seopress_advanced_appearance_seo_tools_value;
27
- }
28
- if (isset($seopress_advanced_appearance_seo_tools_option['seopress_advanced_appearance_seo_tools'])) {
29
- return $seopress_advanced_appearance_seo_tools_option['seopress_advanced_appearance_seo_tools'];
30
- }
31
- }
32
- }
33
- ?>
34
-
35
- <?php if (defined('SEOPRESS_WL_ADMIN_HEADER') && SEOPRESS_WL_ADMIN_HEADER === false) {
36
- //do nothing
37
- } else { ?>
38
- <?php $class = '1' != seopress_advanced_appearance_notifications_option() ? 'is-active' : ''; ?>
39
 
40
- <div id="seopress-notifications-center"
41
- class="seopress-page-list <?php echo $class; ?>"
42
- style="display: none">
43
- <?php
44
- function seopress_advanced_appearance_universal_metabox_option()
45
  {
46
- $seopress_advanced_appearance_universal_metabox_option = get_option('seopress_advanced_option_name');
47
- if (! empty($seopress_advanced_appearance_universal_metabox_option)) {
48
- foreach ($seopress_advanced_appearance_universal_metabox_option as $key => $seopress_advanced_appearance_universal_metabox_value) {
49
- $options[$key] = $seopress_advanced_appearance_universal_metabox_value;
50
  }
51
- if (isset($seopress_advanced_appearance_universal_metabox_option['seopress_advanced_appearance_universal_metabox'])) {
52
- return $seopress_advanced_appearance_universal_metabox_option['seopress_advanced_appearance_universal_metabox'];
53
  }
54
  }
55
  }
56
- function seopress_get_hidden_notices_usm_option()
57
- {
58
- $seopress_get_hidden_notices_usm_option = get_option('seopress_notices');
59
- if (! empty($seopress_get_hidden_notices_usm_option)) {
60
- foreach ($seopress_get_hidden_notices_usm_option as $key => $seopress_get_hidden_notices_usm_value) {
61
- $options[$key] = $seopress_get_hidden_notices_usm_value;
62
- }
63
- if (isset($seopress_get_hidden_notices_usm_option['notice-usm'])) {
64
- return $seopress_get_hidden_notices_usm_option['notice-usm'];
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
  }
67
- }
68
- if ('1' != seopress_get_hidden_notices_usm_option() && seopress_advanced_appearance_universal_metabox_option() !== '1') {
69
- $args = [
70
- 'id' => 'notice-usm',
71
- 'title' => __('Enable our universal SEO metabox for the Block Editor', 'wp-seopress'),
72
- 'desc' => __('By default, our new SEO metabox is disabled for Gutenberg. Test it without further delay!', 'wp-seopress'),
73
- 'impact' => [
74
- 'info' => __('Wizard', 'wp-seopress'),
75
- ],
76
- 'link' => [
77
- 'en' => admin_url('admin.php?page=seopress-advanced#tab=tab_seopress_advanced_appearance'),
78
- 'title' => __('Activate it', 'wp-seopress'),
79
- 'external' => false,
80
- ],
81
- 'icon' => 'dashicons-admin-tools',
82
- 'deleteable' => true,
83
- ];
84
- seopress_notification($args);
85
- }
86
- function seopress_get_hidden_notices_wizard_option()
87
- {
88
- $seopress_get_hidden_notices_wizard_option = get_option('seopress_notices');
89
- if (! empty($seopress_get_hidden_notices_wizard_option)) {
90
- foreach ($seopress_get_hidden_notices_wizard_option as $key => $seopress_get_hidden_notices_wizard_value) {
91
- $options[$key] = $seopress_get_hidden_notices_wizard_value;
92
- }
93
- if (isset($seopress_get_hidden_notices_wizard_option['notice-wizard'])) {
94
- return $seopress_get_hidden_notices_wizard_option['notice-wizard'];
95
  }
96
  }
97
- }
98
- if ('1' != seopress_get_hidden_notices_wizard_option()) {
99
- $args = [
100
- 'id' => 'notice-wizard',
101
- 'title' => __('Configure SEOPress in a few minutes with our installation wizard', 'wp-seopress'),
102
- 'desc' => __('The best way to quickly setup SEOPress on your site.', 'wp-seopress'),
103
- 'impact' => [
104
- 'info' => __('Wizard', 'wp-seopress'),
105
- ],
106
- 'link' => [
107
- 'en' => admin_url('admin.php?page=seopress-setup'),
108
- 'title' => __('Start the wizard', 'wp-seopress'),
109
- 'external' => true,
110
- ],
111
- 'icon' => 'dashicons-admin-tools',
112
- 'deleteable' => true,
113
- ];
114
- seopress_notification($args);
115
- }
116
- if (is_plugin_active('wp-seopress-insights/seopress-insights.php')) {
117
- function seopress_get_hidden_notices_insights_wizard_option()
118
  {
119
- $seopress_get_hidden_notices_insights_wizard_option = get_option('seopress_notices');
120
- if (! empty($seopress_get_hidden_notices_insights_wizard_option)) {
121
- foreach ($seopress_get_hidden_notices_insights_wizard_option as $key => $seopress_get_hidden_notices_insights_wizard_value) {
122
- $options[$key] = $seopress_get_hidden_notices_insights_wizard_value;
123
  }
124
- if (isset($seopress_get_hidden_notices_insights_wizard_option['notice-insights-wizard'])) {
125
- return $seopress_get_hidden_notices_insights_wizard_option['notice-insights-wizard'];
126
  }
127
  }
128
  }
129
- if ('1' != seopress_get_hidden_notices_insights_wizard_option()) {
130
  $args = [
131
- 'id' => 'notice-insights-wizard',
132
- 'title' => __('Configure SEOPress Insights in a few minutes with our installation wizard', 'wp-seopress'),
133
- 'desc' => __('Track your keywords positions and backlinks directly on your WordPress site.', 'wp-seopress'),
134
  'impact' => [
135
  'info' => __('Wizard', 'wp-seopress'),
136
  ],
137
  'link' => [
138
- 'en' => admin_url('admin.php?page=seopress-insights-setup'),
139
  'title' => __('Start the wizard', 'wp-seopress'),
140
  'external' => true,
141
  ],
@@ -144,837 +104,952 @@
144
  ];
145
  seopress_notification($args);
146
  }
147
- }
148
- //DIVI SEO options conflict
149
- $theme = wp_get_theme();
150
- if ('Divi' == $theme->template || 'Divi' == $theme->parent_theme) {
151
- $divi_options = get_option('et_divi');
152
- if (! empty($divi_options)) {
153
- if (
154
- (array_key_exists('divi_seo_home_title', $divi_options) && 'on' == $divi_options['divi_seo_home_title']) ||
155
- (array_key_exists('divi_seo_home_description', $divi_options) && 'on' == $divi_options['divi_seo_home_description']) ||
156
- (array_key_exists('divi_seo_home_keywords', $divi_options) && 'on' == $divi_options['divi_seo_home_keywords']) ||
157
- (array_key_exists('divi_seo_home_canonical', $divi_options) && 'on' == $divi_options['divi_seo_home_canonical']) ||
158
- (array_key_exists('divi_seo_single_title', $divi_options) && 'on' == $divi_options['divi_seo_single_title']) ||
159
- (array_key_exists('divi_seo_single_description', $divi_options) && 'on' == $divi_options['divi_seo_single_description']) ||
160
- (array_key_exists('divi_seo_single_keywords', $divi_options) && 'on' == $divi_options['divi_seo_single_keywords']) ||
161
- (array_key_exists('divi_seo_single_canonical', $divi_options) && 'on' == $divi_options['divi_seo_single_canonical']) ||
162
- (array_key_exists('divi_seo_index_canonical', $divi_options) && 'on' == $divi_options['divi_seo_index_canonical']) ||
163
- (array_key_exists('divi_seo_index_description', $divi_options) && 'on' == $divi_options['divi_seo_index_description'])
164
- ) {
165
  $args = [
166
- 'id' => 'notice-divi-seo',
167
- 'title' => __('We noticed that some SEO DIVI options are enabled!', 'wp-seopress'),
168
- 'desc' => __('To avoid any SEO conflicts, please disable every SEO option from <strong>DIVI theme options page, SEO tab</strong>.', 'wp-seopress'),
169
  'impact' => [
170
- 'high' => __('High impact', 'wp-seopress'),
171
  ],
172
  'link' => [
173
- 'en' => admin_url('admin.php?page=et_divi_options#seo-1'),
174
- 'title' => __('Fix this!', 'wp-seopress'),
175
- 'external' => false,
176
  ],
177
- 'icon' => 'dashicons-admin-plugins',
178
- 'deleteable' => false,
179
  ];
180
  seopress_notification($args);
181
  }
182
  }
183
- }
184
- if ('/' != substr(get_option('permalink_structure'), -1) && '' == seopress_advanced_advanced_trailingslash_option()) {
185
- $args = [
186
- 'id' => 'notice-permalinks',
187
- 'title' => __('Your permalinks don\'t have a trailingslash', 'wp-seopress'),
188
- 'desc' => __('To avoid any SEO issues, we recommend you to activate the "<strong>Disable trailing slash for metas</strong>" option from our <strong>Advanced settings page</strong>. Do not forget to clear your cache if necessary.', 'wp-seopress'),
189
- 'impact' => [
190
- 'high' => __('High impact', 'wp-seopress'),
191
- ],
192
- 'link' => [
193
- 'en' => admin_url('admin.php?page=seopress-advanced#tab=seopress_advanced_advanced'),
194
- 'title' => __('Fix this!', 'wp-seopress'),
195
- 'external' => false,
196
- ],
197
- 'icon' => 'dashicons-admin-links',
198
- 'deleteable' => false,
199
- ];
200
- seopress_notification($args);
201
- }
202
- if ('/' == substr(get_option('permalink_structure'), -1) && '1' == seopress_advanced_advanced_trailingslash_option()) {
203
- $args = [
204
- 'id' => 'notice-permalinks',
205
- 'title' => __('Your permalinks have a trailingslash', 'wp-seopress'),
206
- 'desc' => __('To avoid any SEO issues, we recommend you to de-activate the "<strong>Disable trailing slash for metas</strong>" option from our <strong>Advanced settings page</strong>. Do not forget to clear your cache if necessary.', 'wp-seopress'),
207
- 'impact' => [
208
- 'high' => __('High impact', 'wp-seopress'),
209
- ],
210
- 'link' => [
211
- 'en' => admin_url('admin.php?page=seopress-advanced#tab=seopress_advanced_advanced'),
212
- 'title' => __('Fix this!', 'wp-seopress'),
213
- 'external' => false,
214
- ],
215
- 'icon' => 'dashicons-admin-links',
216
- 'deleteable' => false,
217
- ];
218
- seopress_notification($args);
219
- }
220
- if (is_plugin_active('td-composer/td-composer.php')) {
221
- function seopress_get_hidden_notices_tagdiv_option()
222
- {
223
- $seopress_get_hidden_notices_tagdiv_option = get_option('seopress_notices');
224
- if (! empty($seopress_get_hidden_notices_tagdiv_option)) {
225
- foreach ($seopress_get_hidden_notices_tagdiv_option as $key => $seopress_get_hidden_notices_tagdiv_value) {
226
- $options[$key] = $seopress_get_hidden_notices_tagdiv_value;
227
- }
228
- if (isset($seopress_get_hidden_notices_tagdiv_option['notice-tagdiv'])) {
229
- return $seopress_get_hidden_notices_tagdiv_option['notice-tagdiv'];
230
  }
231
  }
232
  }
233
- if ('1' != seopress_get_hidden_notices_tagdiv_option()) {
234
  $args = [
235
- 'id' => 'notice-tagdiv',
236
- 'title' => __('TagDiv Composer plugin doesn\'t use <strong>add_theme_support(\'title-tag\');</strong>', 'wp-seopress'),
237
- 'desc' => __('Fix this compatibility issue to allow SEOPress generates the correct meta titles.', 'wp-seopress'),
238
  'impact' => [
239
  'high' => __('High impact', 'wp-seopress'),
240
  ],
241
  'link' => [
242
- 'fr' => 'https://www.seopress.org/fr/support/guides/corriger-erreur-compatibilite-extension-tagdiv-composer-newspaper/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress',
243
- 'en' => 'https://www.seopress.org/support/guides/fix-compatibility-issue-tagdiv-composer-plugin-newspaper-theme/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress',
244
  'title' => __('Fix this!', 'wp-seopress'),
245
- 'external' => true,
246
  ],
247
- 'icon' => 'dashicons-admin-customizer',
248
- 'deleteable' => true,
249
  ];
250
  seopress_notification($args);
251
  }
252
- }
253
- if ('1' != get_theme_support('title-tag')) {
254
- function seopress_get_hidden_notices_title_tag_option()
255
- {
256
- $seopress_get_hidden_notices_title_tag_option = get_option('seopress_notices');
257
- if (! empty($seopress_get_hidden_notices_title_tag_option)) {
258
- foreach ($seopress_get_hidden_notices_title_tag_option as $key => $seopress_get_hidden_notices_title_tag_value) {
259
- $options[$key] = $seopress_get_hidden_notices_title_tag_value;
260
- }
261
- if (isset($seopress_get_hidden_notices_title_tag_option['notice-title-tag'])) {
262
- return $seopress_get_hidden_notices_title_tag_option['notice-title-tag'];
263
- }
264
- }
265
- }
266
- if ('1' != seopress_get_hidden_notices_title_tag_option()) {
267
  $args = [
268
- 'id' => 'notice-title-tag',
269
- 'title' => __('Your theme doesn\'t use <strong>add_theme_support(\'title-tag\');</strong>', 'wp-seopress'),
270
- 'desc' => __('This error indicates that your theme uses a deprecated function to generate the title tag of your pages. SEOPress will not be able to generate your custom title tags if this error is not fixed.', 'wp-seopress'),
271
  'impact' => [
272
  'high' => __('High impact', 'wp-seopress'),
273
  ],
274
  'link' => [
275
- 'fr' => 'https://www.seopress.org/fr/support/guides/resoudre-add_theme_support-manquant-dans-votre-theme/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress',
276
- 'en' => 'https://www.seopress.org/support/guides/fixing-missing-add_theme_support-in-your-theme/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress',
277
- 'title' => __('Learn more', 'wp-seopress'),
278
- 'external' => true,
279
  ],
280
- 'icon' => 'dashicons-admin-customizer',
281
  'deleteable' => false,
282
  ];
283
  seopress_notification($args);
284
  }
285
- }
286
- if (is_plugin_active('swift-performance-lite/performance.php')) {
287
- function seopress_get_swift_performance_sitemap_option()
288
- {
289
- $seopress_get_swift_performance_sitemap_option = get_option('swift_performance_options');
290
- if (! empty($seopress_get_swift_performance_sitemap_option)) {
291
- foreach ($seopress_get_swift_performance_sitemap_option as $key => $seopress_get_swift_performance_sitemap_value) {
292
- $options[$key] = $seopress_get_swift_performance_sitemap_value;
 
 
 
293
  }
294
- if (isset($seopress_get_swift_performance_sitemap_option['cache-sitemap'])) {
295
- return $seopress_get_swift_performance_sitemap_option['cache-sitemap'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296
  }
297
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  }
299
- if (seopress_get_swift_performance_sitemap_option() === "1") {
300
- function seopress_get_hidden_notices_swift_option()
301
  {
302
- $seopress_get_hidden_notices_swift_option = get_option('seopress_notices');
303
- if (! empty($seopress_get_hidden_notices_swift_option)) {
304
- foreach ($seopress_get_hidden_notices_swift_option as $key => $seopress_get_hidden_notices_swift_value) {
305
- $options[$key] = $seopress_get_hidden_notices_swift_value;
306
  }
307
- if (isset($seopress_get_hidden_notices_swift_option['notice-swift'])) {
308
- return $seopress_get_hidden_notices_swift_option['notice-swift'];
309
  }
310
  }
311
  }
312
- $args = [
313
- 'id' => 'notice-swift',
314
- 'title' => __('Your XML sitemap is cached!', 'wp-seopress'),
315
- 'desc' => __('Swift Performance is caching your XML sitemap. You must disable this option to prevent any compatibility issue (Swift Performance > Settings > Caching, General tab).', 'wp-seopress'),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  'impact' => [
317
  'high' => __('High impact', 'wp-seopress'),
318
  ],
319
  'link' => [
320
- 'en' => admin_url('tools.php?page=swift-performance'),
321
- 'title' => __('Fix this!', 'wp-seopress'),
322
  'external' => false,
323
  ],
324
- 'icon' => 'dashicons-media-spreadsheet',
325
  'deleteable' => false,
326
  ];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
  seopress_notification($args);
328
  }
329
- }
330
- $seo_plugins = [
331
- 'wordpress-seo/wp-seo.php' => 'Yoast SEO',
332
- 'wordpress-seo-premium/wp-seo-premium.php' => 'Yoast SEO Premium',
333
- 'all-in-one-seo-pack/all_in_one_seo_pack.php' => 'All In One SEO',
334
- 'autodescription/autodescription.php' => 'The SEO Framework',
335
- 'squirrly-seo/squirrly.php' => 'Squirrly SEO',
336
- 'seo-by-rank-math/rank-math.php' => 'Rank Math',
337
- 'seo-ultimate/seo-ultimate.php' => 'SEO Ultimate',
338
- 'wp-meta-seo/wp-meta-seo.php' => 'WP Meta SEO',
339
- 'premium-seo-pack/plugin.php' => 'Premium SEO Pack',
340
- 'wpseo/wpseo.php' => 'wpSEO',
341
- 'platinum-seo-pack/platinum-seo-pack.php' => 'Platinum SEO Pack',
342
- 'smartcrawl-seo/wpmu-dev-seo.php' => 'SmartCrawl',
343
- 'seo-pressor/seo-pressor.php' => 'SEOPressor',
344
- ];
345
-
346
- foreach ($seo_plugins as $key => $value) {
347
- if (is_plugin_active($key)) {
348
  $args = [
349
- 'id' => 'notice-seo-plugins',
350
- /* translators: %s name of a SEO plugin (eg: Yoast SEO) */
351
- 'title' => sprintf(__('We noticed that you use <strong>%s</strong> plugin.', 'wp-seopress'), $value),
352
- 'desc' => __('Do you want to migrate all your metadata to SEOPress? Do not use multiple SEO plugins at once to avoid conflicts!', 'wp-seopress'),
353
  'impact' => [
354
  'high' => __('High impact', 'wp-seopress'),
355
  ],
356
  'link' => [
357
- 'en' => admin_url('admin.php?page=seopress-import-export'),
358
- 'title' => __('Migrate!', 'wp-seopress'),
359
  'external' => false,
360
  ],
361
- 'icon' => 'dashicons-admin-plugins',
362
  'deleteable' => false,
 
363
  ];
364
  seopress_notification($args);
365
  }
366
- }
367
- if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
368
- if (1 == seopress_404_cleaning_option() && ! wp_next_scheduled('seopress_404_cron_cleaning')) {
369
  $args = [
370
- 'id' => 'notice-title-tag',
371
- 'title' => __('You have enabled 404 cleaning BUT the scheduled task is not running.', 'wp-seopress'),
372
- 'desc' => __('To solve this, please disable and re-enable SEOPress PRO. No data will be lost.', 'wp-seopress'),
373
- 'icon' => 'dashicons-clock',
 
 
 
 
 
 
 
 
374
  'deleteable' => false,
 
375
  ];
376
  seopress_notification($args);
377
  }
378
- }
379
- //Enfold theme
380
- $avia_options_enfold = get_option('avia_options_enfold');
381
- $avia_options_enfold_child = get_option('avia_options_enfold_child');
382
- $theme = wp_get_theme();
383
- if ('enfold' == $theme->template || 'enfold' == $theme->parent_theme) {
384
- if ('plugin' != $avia_options_enfold['avia']['seo_robots'] || 'plugin' != $avia_options_enfold_child['avia']['seo_robots']) {
385
- function seopress_get_hidden_notices_enfold_option()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
386
  {
387
- $seopress_get_hidden_notices_enfold_option = get_option('seopress_notices');
388
- if (! empty($seopress_get_hidden_notices_enfold_option)) {
389
- foreach ($seopress_get_hidden_notices_enfold_option as $key => $seopress_get_hidden_notices_enfold_value) {
390
- $options[$key] = $seopress_get_hidden_notices_enfold_value;
391
  }
392
- if (isset($seopress_get_hidden_notices_enfold_option['notice-enfold'])) {
393
- return $seopress_get_hidden_notices_enfold_option['notice-enfold'];
394
  }
395
  }
396
  }
397
- if ('1' != seopress_get_hidden_notices_enfold_option()) {
398
  $args = [
399
- 'id' => 'notice-enfold',
400
- 'title' => __('Enfold theme is not correctly setup for SEO!', 'wp-seopress'),
401
- 'desc' => __('You must disable "Meta tag robots" option from Enfold settings (SEO Support tab) to avoid any SEO issues.', 'wp-seopress'),
402
  'impact' => [
403
- 'low' => __('High impact', 'wp-seopress'),
404
  ],
405
  'link' => [
406
- 'en' => admin_url('admin.php?avia_welcome=true&page=avia'),
407
- 'title' => __('Fix this!', 'wp-seopress'),
408
  'external' => true,
409
  ],
410
- 'icon' => 'dashicons-admin-tools',
411
  'deleteable' => true,
412
  ];
413
  seopress_notification($args);
414
  }
415
  }
416
- }
417
- if (seopress_get_empty_templates('cpt', 'title')) {
418
- $args = [
419
- 'id' => 'notice-cpt-empty-title',
420
- 'title' => __('Global meta title missing for several custom post types!', 'wp-seopress'),
421
- 'desc' => seopress_get_empty_templates('cpt', 'title', false),
422
- 'impact' => [
423
- 'high' => __('High impact', 'wp-seopress'),
424
- ],
425
- 'link' => [
426
- 'en' => admin_url('admin.php?page=seopress-titles#tab=tab_seopress_titles_single'),
427
- 'title' => __('Fix this!', 'wp-seopress'),
428
- 'external' => false,
429
- ],
430
- 'icon' => 'dashicons-editor-table',
431
- 'deleteable' => false,
432
- 'wrap' => false,
433
- ];
434
- seopress_notification($args);
435
- }
436
- if (seopress_get_empty_templates('cpt', 'description')) {
437
- $args = [
438
- 'id' => 'notice-cpt-empty-desc',
439
- 'title' => __('Global meta description missing for several custom post types!', 'wp-seopress'),
440
- 'desc' => seopress_get_empty_templates('cpt', 'description', false),
441
- 'impact' => [
442
- 'high' => __('High impact', 'wp-seopress'),
443
- ],
444
- 'link' => [
445
- 'en' => admin_url('admin.php?page=seopress-titles#tab=tab_seopress_titles_single'),
446
- 'title' => __('Fix this!', 'wp-seopress'),
447
- 'external' => false,
448
- ],
449
- 'icon' => 'dashicons-editor-table',
450
- 'deleteable' => false,
451
- 'wrap' => false,
452
- ];
453
- seopress_notification($args);
454
- }
455
- if (seopress_get_empty_templates('tax', 'title')) {
456
- $args = [
457
- 'id' => 'notice-tax-empty-title',
458
- 'title' => __('Global meta title missing for several taxonomies!', 'wp-seopress'),
459
- 'desc' => seopress_get_empty_templates('tax', 'title', false),
460
- 'impact' => [
461
- 'high' => __('High impact', 'wp-seopress'),
462
- ],
463
- 'link' => [
464
- 'en' => admin_url('admin.php?page=seopress-titles#tab=tab_seopress_titles_tax'),
465
- 'title' => __('Fix this!', 'wp-seopress'),
466
- 'external' => false,
467
- ],
468
- 'icon' => 'dashicons-editor-table',
469
- 'deleteable' => false,
470
- 'wrap' => false,
471
- ];
472
- seopress_notification($args);
473
- }
474
- if (seopress_get_empty_templates('tax', 'description')) {
475
- $args = [
476
- 'id' => 'notice-tax-empty-templates',
477
- 'title' => __('Global meta description missing for several taxonomies!', 'wp-seopress'),
478
- 'desc' => seopress_get_empty_templates('tax', 'description', false),
479
- 'impact' => [
480
- 'high' => __('High impact', 'wp-seopress'),
481
- ],
482
- 'link' => [
483
- 'en' => admin_url('admin.php?page=seopress-titles#tab=tab_seopress_titles_tax'),
484
- 'title' => __('Fix this!', 'wp-seopress'),
485
- 'external' => false,
486
- ],
487
- 'icon' => 'dashicons-editor-table',
488
- 'deleteable' => false,
489
- 'wrap' => false,
490
- ];
491
- seopress_notification($args);
492
- }
493
-
494
- if (! is_ssl()) {
495
- function seopress_get_hidden_notices_ssl_option()
496
- {
497
- $seopress_get_hidden_notices_ssl_option = get_option('seopress_notices');
498
- if (! empty($seopress_get_hidden_notices_ssl_option)) {
499
- foreach ($seopress_get_hidden_notices_ssl_option as $key => $seopress_get_hidden_notices_ssl_value) {
500
- $options[$key] = $seopress_get_hidden_notices_ssl_value;
501
- }
502
- if (isset($seopress_get_hidden_notices_ssl_option['notice-ssl'])) {
503
- return $seopress_get_hidden_notices_ssl_option['notice-ssl'];
504
- }
505
- }
506
- }
507
- if ('1' != seopress_get_hidden_notices_ssl_option()) {
508
  $args = [
509
- 'id' => 'notice-ssl',
510
- 'title' => __('Your site doesn\'t use an SSL certificate!', 'wp-seopress'),
511
- 'desc' => __('Https is considered by Google as a positive signal for the ranking of your site. It also reassures your visitors for data security, and improves trust.', 'wp-seopress') . ' <a href="https://webmasters.googleblog.com/2014/08/https-as-ranking-signal.html" target="_blank">' . __('Learn more', 'wp-seopress') . '</a>',
512
  'impact' => [
513
- 'low' => __('Low impact', 'wp-seopress'),
514
  ],
515
  'link' => [
516
- 'en' => 'https://www.seopress.org/go/namecheap',
517
- 'title' => __('Buy an SSL!', 'wp-seopress'),
 
518
  'external' => true,
519
  ],
520
- 'icon' => 'dashicons-unlock',
521
  'deleteable' => true,
522
  ];
523
  seopress_notification($args);
524
  }
525
- }
526
- if (function_exists('extension_loaded') && ! extension_loaded('dom')) {
527
- $args = [
528
- 'id' => 'notice-ssl-alert',
529
- 'title' => __('PHP module "DOM" is missing on your server.', 'wp-seopress'),
530
- 'desc' => __('This PHP module, installed by default with PHP, is required by many plugins including SEOPress. Please contact your host as soon as possible to solve this.', 'wp-seopress'),
531
- 'impact' => [
532
- 'high' => __('High impact', 'wp-seopress'),
533
- ],
534
- 'link' => [
535
- 'fr' => 'https://www.seopress.org/fr/support/guides/debutez-seopress/',
536
- 'en' => 'https://www.seopress.org/support/guides/get-started-seopress/',
537
- 'title' => __('Learn more', 'wp-seopress'),
538
- 'external' => true,
539
- ],
540
- 'deleteable' => true,
541
- ];
542
- seopress_notification($args);
543
- }
544
- if (! function_exists('seopress_titles_noindex_option')) {
545
- function seopress_titles_noindex_option()
546
  {
547
- $seopress_titles_noindex_option = get_option('seopress_titles_option_name');
548
- if (! empty($seopress_titles_noindex_option)) {
549
- foreach ($seopress_titles_noindex_option as $key => $seopress_titles_noindex_value) {
550
- $options[$key] = $seopress_titles_noindex_value;
551
  }
552
- if (isset($seopress_titles_noindex_option['seopress_titles_noindex'])) {
553
- return $seopress_titles_noindex_option['seopress_titles_noindex'];
554
  }
555
  }
556
  }
557
- }
558
- function seopress_get_hidden_notices_noindex_option()
559
- {
560
- $seopress_get_hidden_notices_noindex_option = get_option('seopress_notices');
561
- if (! empty($seopress_get_hidden_notices_noindex_option)) {
562
- foreach ($seopress_get_hidden_notices_noindex_option as $key => $seopress_get_hidden_notices_noindex_value) {
563
- $options[$key] = $seopress_get_hidden_notices_noindex_value;
564
- }
565
- if (isset($seopress_get_hidden_notices_noindex_option['notice-noindex'])) {
566
- return $seopress_get_hidden_notices_noindex_option['notice-noindex'];
 
 
 
 
 
 
 
 
567
  }
568
  }
569
- }
570
- if ('1' != seopress_get_hidden_notices_noindex_option()) {
571
- if ('1' == seopress_titles_noindex_option() || '1' != get_option('blog_public')) {
572
  $args = [
573
- 'id' => 'notice-noindex',
574
- 'title' => __('Your site is not visible to Search Engines!', 'wp-seopress'),
575
- 'desc' => __('You have activated the blocking of the indexing of your site. If your site is under development, this is probably normal. Otherwise, check your settings. Delete this notification using the cross on the right if you are not concerned.', 'wp-seopress'),
576
  'impact' => [
577
  'high' => __('High impact', 'wp-seopress'),
578
  ],
579
  'link' => [
580
- 'en' => admin_url('options-reading.php'),
581
  'title' => __('Fix this!', 'wp-seopress'),
582
  'external' => false,
583
  ],
584
- 'icon' => 'dashicons-warning',
585
- 'deleteable' => true,
586
  ];
587
  seopress_notification($args);
588
  }
589
- }
590
- if ('' == get_option('blogname')) {
591
- $args = [
592
- 'id' => 'notice-title-empty',
593
- 'title' => __('Your site title is empty!', 'wp-seopress'),
594
- 'desc' => __('Your Site Title is used by WordPress, your theme and your plugins including SEOPress. It is an essential component in the generation of title tags, but not only. Enter one!', 'wp-seopress'),
595
- 'impact' => [
596
- 'high' => __('High impact', 'wp-seopress'),
597
- ],
598
- 'link' => [
599
- 'en' => admin_url('options-general.php'),
600
- 'title' => __('Fix this!', 'wp-seopress'),
601
- 'external' => false,
602
- ],
603
- 'deleteable' => false,
604
- ];
605
- seopress_notification($args);
606
- }
607
- if ('' == get_option('permalink_structure')) {
608
- $args = [
609
- 'id' => 'notice-permalinks',
610
- 'title' => __('Your permalinks are not SEO Friendly! Enable pretty permalinks to fix this.', 'wp-seopress'),
611
- 'desc' => __('Why is this important? Showing only the summary of each article significantly reduces the theft of your content by third party sites. Not to mention, the increase in your traffic, your advertising revenue, conversions...', 'wp-seopress'),
612
- 'impact' => [
613
- 'high' => __('High impact', 'wp-seopress'),
614
- ],
615
- 'link' => [
616
- 'en' => admin_url('options-permalink.php'),
617
- 'title' => __('Fix this!', 'wp-seopress'),
618
- 'external' => false,
619
- ],
620
- 'icon' => 'dashicons-admin-links',
621
- 'deleteable' => false,
622
- ];
623
- seopress_notification($args);
624
- }
625
- if ('0' == get_option('rss_use_excerpt')) {
626
- function seopress_get_hidden_notices_rss_use_excerpt_option()
627
- {
628
- $seopress_get_hidden_notices_rss_use_excerpt_option = get_option('seopress_notices');
629
- if (! empty($seopress_get_hidden_notices_rss_use_excerpt_option)) {
630
- foreach ($seopress_get_hidden_notices_rss_use_excerpt_option as $key => $seopress_get_hidden_notices_rss_use_excerpt_value) {
631
- $options[$key] = $seopress_get_hidden_notices_rss_use_excerpt_value;
632
- }
633
- if (isset($seopress_get_hidden_notices_rss_use_excerpt_option['notice-rss-use-excerpt'])) {
634
- return $seopress_get_hidden_notices_rss_use_excerpt_option['notice-rss-use-excerpt'];
635
- }
636
- }
637
- }
638
- if ('1' != seopress_get_hidden_notices_rss_use_excerpt_option()) {
639
  $args = [
640
- 'id' => 'notice-rss-use-excerpt',
641
- 'title' => __('Your RSS feed shows full text!', 'wp-seopress'),
642
  'desc' => __('Why is this important? Showing only the summary of each article significantly reduces the theft of your content by third party sites. Not to mention, the increase in your traffic, your advertising revenue, conversions...', 'wp-seopress'),
643
  'impact' => [
644
- 'medium' => __('Medium impact', 'wp-seopress'),
645
  ],
646
  'link' => [
647
- 'en' => admin_url('options-reading.php'),
648
  'title' => __('Fix this!', 'wp-seopress'),
649
  'external' => false,
650
  ],
651
- 'icon' => 'dashicons-rss',
652
- 'deleteable' => true,
653
  ];
654
  seopress_notification($args);
655
  }
656
- }
657
-
658
- function seopress_ga_enable_option()
659
- {
660
- $seopress_ga_enable_option = get_option('seopress_google_analytics_option_name');
661
- if (! empty($seopress_ga_enable_option)) {
662
- foreach ($seopress_ga_enable_option as $key => $seopress_ga_enable_value) {
663
- $options[$key] = $seopress_ga_enable_value;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
664
  }
665
- if (isset($seopress_ga_enable_option['seopress_google_analytics_enable'])) {
666
- return $seopress_ga_enable_option['seopress_google_analytics_enable'];
 
 
 
 
 
 
 
 
 
 
667
  }
668
  }
669
- }
670
- function seopress_ga_ua_option()
671
- {
672
- $seopress_ga_ua_option = get_option('seopress_google_analytics_option_name');
673
- if (! empty($seopress_ga_ua_option)) {
674
- foreach ($seopress_ga_ua_option as $key => $seopress_ga_ua_value) {
675
- $options[$key] = $seopress_ga_ua_value;
 
 
 
676
  }
677
- if (isset($seopress_ga_ua_option['seopress_google_analytics_ua'])) {
678
- return $seopress_ga_ua_option['seopress_google_analytics_ua'];
 
 
 
 
 
 
 
 
 
679
  }
680
  }
681
- }
682
- function seopress_ga4_option()
683
- {
684
- $seopress_ga4_option = get_option('seopress_google_analytics_option_name');
685
- if (! empty($seopress_ga4_option)) {
686
- foreach ($seopress_ga4_option as $key => $seopress_ga4_value) {
687
- $options[$key] = $seopress_ga4_value;
 
 
 
 
 
688
  }
689
- if (isset($seopress_ga4_option['seopress_google_analytics_ga4'])) {
690
- return $seopress_ga4_option['seopress_google_analytics_ga4'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
691
  }
692
  }
693
- }
694
- if ('' === seopress_ga_ua_option() && '' === seopress_ga4_option() && '1' === seopress_ga_enable_option()) {
695
- function seopress_get_hidden_notices_analytics_option()
696
  {
697
- $seopress_get_hidden_notices_analytics_option = get_option('seopress_notices');
698
- if (! empty($seopress_get_hidden_notices_analytics_option)) {
699
- foreach ($seopress_get_hidden_notices_analytics_option as $key => $seopress_get_hidden_notices_analytics_value) {
700
- $options[$key] = $seopress_get_hidden_notices_analytics_value;
701
  }
702
- if (isset($seopress_get_hidden_notices_analytics_option['notice-ga-ids'])) {
703
- return $seopress_get_hidden_notices_analytics_option['notice-ga-ids'];
704
  }
705
  }
706
  }
707
- if ('1' != seopress_get_hidden_notices_analytics_option()) {
708
  $args = [
709
- 'id' => 'notice-ga-ids',
710
- 'title' => __('You have activated Google Analytics tracking without adding identifiers!', 'wp-seopress'),
711
- 'desc' => __('Google Analytics will not track your visitors until you finish the configuration.', 'wp-seopress'),
712
  'impact' => [
713
- 'medium' => __('Medium impact', 'wp-seopress'),
714
  ],
715
  'link' => [
716
- 'en' => admin_url('admin.php?page=seopress-google-analytics'),
717
- 'title' => __('Fix this!', 'wp-seopress'),
718
- 'external' => false,
719
  ],
720
- 'icon' => 'dashicons-chart-area',
721
  'deleteable' => true,
722
  ];
723
  seopress_notification($args);
724
  }
725
- }
726
-
727
- function seopress_get_hidden_notices_review_option()
728
- {
729
- $seopress_get_hidden_notices_review_option = get_option('seopress_notices');
730
- if (! empty($seopress_get_hidden_notices_review_option)) {
731
- foreach ($seopress_get_hidden_notices_review_option as $key => $seopress_get_hidden_notices_review_value) {
732
- $options[$key] = $seopress_get_hidden_notices_review_value;
 
 
 
 
733
  }
734
- if (isset($seopress_get_hidden_notices_review_option['notice-review'])) {
735
- return $seopress_get_hidden_notices_review_option['notice-review'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
736
  }
737
  }
738
- }
739
- if ('1' != seopress_get_hidden_notices_review_option()) {
740
- $args = [
741
- 'id' => 'notice-review',
742
- 'title' => __('You like SEOPress? Please help us by rating us 5 stars!', 'wp-seopress'),
743
- 'desc' => __('Support the development and improvement of the plugin by taking 15 seconds of your time to leave us a user review on the official WordPress plugins repository. Thank you!', 'wp-seopress'),
744
- 'impact' => [
745
- 'info' => __('Information', 'wp-seopress'),
746
- ],
747
- 'link' => [
748
- 'en' => 'https://wordpress.org/support/view/plugin-reviews/wp-seopress?rate=5#postform',
749
- 'title' => __('Rate us!', 'wp-seopress'),
750
- 'external' => true,
751
- ],
752
- 'icon' => 'dashicons-thumbs-up',
753
- 'deleteable' => true,
754
- ];
755
- seopress_notification($args);
756
- }
757
- if ('1' == get_option('page_comments')) {
758
- function seopress_get_hidden_notices_divide_comments_option()
759
- {
760
- $seopress_get_hidden_notices_divide_comments_option = get_option('seopress_notices');
761
- if (! empty($seopress_get_hidden_notices_divide_comments_option)) {
762
- foreach ($seopress_get_hidden_notices_divide_comments_option as $key => $seopress_get_hidden_notices_divide_comments_value) {
763
- $options[$key] = $seopress_get_hidden_notices_divide_comments_value;
764
- }
765
- if (isset($seopress_get_hidden_notices_divide_comments_option['notice-divide-comments'])) {
766
- return $seopress_get_hidden_notices_divide_comments_option['notice-divide-comments'];
767
  }
768
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
769
  }
770
- if ('1' != seopress_get_hidden_notices_divide_comments_option()) {
771
  $args = [
772
- 'id' => 'notice-divide-comments',
773
- 'title' => __('Break comments into pages is ON!', 'wp-seopress'),
774
- 'desc' => __('Enabling this option will create duplicate content for each article beyond x comments. This can have a disastrous effect by creating a large number of poor quality pages, and slowing the Google bot unnecessarily, so your ranking in search results.', 'wp-seopress'),
775
  'impact' => [
776
- 'high' => __('High impact', 'wp-seopress'),
777
  ],
778
  'link' => [
779
- 'en' => admin_url('options-discussion.php'),
780
- 'title' => __('Disable this!', 'wp-seopress'),
781
  'external' => false,
782
  ],
783
- 'icon' => 'dashicons-admin-comments',
784
- 'deleteable' => true,
785
  ];
786
  seopress_notification($args);
787
  }
788
- }
789
- if (get_option('posts_per_page') < '16') {
790
- function seopress_get_hidden_notices_posts_number_option()
791
  {
792
- $seopress_get_hidden_notices_posts_number_option = get_option('seopress_notices');
793
- if (! empty($seopress_get_hidden_notices_posts_number_option)) {
794
- foreach ($seopress_get_hidden_notices_posts_number_option as $key => $seopress_get_hidden_notices_posts_number_value) {
795
- $options[$key] = $seopress_get_hidden_notices_posts_number_value;
796
  }
797
- if (isset($seopress_get_hidden_notices_posts_number_option['notice-posts-number'])) {
798
- return $seopress_get_hidden_notices_posts_number_option['notice-posts-number'];
799
  }
800
  }
801
  }
802
- if ('1' != seopress_get_hidden_notices_posts_number_option()) {
803
  $args = [
804
- 'id' => 'notice-posts-number',
805
- 'title' => __('Display more posts per page on homepage and archives', 'wp-seopress'),
806
- 'desc' => __('To reduce the number pages search engines have to crawl to find all your articles, it is recommended displaying more posts per page. This should not be a problem for your users. Using mobile, we prefer to scroll down rather than clicking on next page links.', 'wp-seopress'),
807
  'impact' => [
808
- 'medium' => __('Medium impact', 'wp-seopress'),
809
  ],
810
  'link' => [
811
- 'en' => admin_url('options-reading.php'),
812
- 'title' => __('Fix this!', 'wp-seopress'),
813
- 'external' => false,
814
  ],
815
  'deleteable' => true,
816
  ];
817
  seopress_notification($args);
818
  }
819
- }
820
- if ('1' != seopress_xml_sitemap_general_enable_option()) {
821
- $args = [
822
- 'id' => 'notice-xml-sitemaps',
823
- 'title' => __('You don\'t have an XML Sitemap!', 'wp-seopress'),
824
- 'desc' => __('XML Sitemaps are useful to facilitate the crawling of your content by search engine robots. Indirectly, this can benefit your ranking by reducing the crawl bugdet.', 'wp-seopress'),
825
- 'impact' => [
826
- 'medium' => __('Medium impact', 'wp-seopress'),
827
- ],
828
- 'link' => [
829
- 'en' => admin_url('admin.php?page=seopress-xml-sitemap'),
830
- 'title' => __('Fix this!', 'wp-seopress'),
831
- 'external' => false,
832
- ],
833
- 'icon' => 'dashicons-warning',
834
- 'deleteable' => false,
835
- ];
836
- seopress_notification($args);
837
- }
838
- function seopress_get_hidden_notices_google_business_option()
839
- {
840
- $seopress_get_hidden_notices_google_business_option = get_option('seopress_notices');
841
- if (! empty($seopress_get_hidden_notices_google_business_option)) {
842
- foreach ($seopress_get_hidden_notices_google_business_option as $key => $seopress_get_hidden_notices_google_business_value) {
843
- $options[$key] = $seopress_get_hidden_notices_google_business_value;
844
- }
845
- if (isset($seopress_get_hidden_notices_google_business_option['notice-google-business'])) {
846
- return $seopress_get_hidden_notices_google_business_option['notice-google-business'];
847
- }
848
- }
849
- }
850
- if ('1' != seopress_get_hidden_notices_google_business_option()) {
851
- $args = [
852
- 'id' => 'notice-google-business',
853
- 'title' => __('Do you have a Google My Business page? It\'s free!', 'wp-seopress'),
854
- 'desc' => __('Local Business websites should have a My Business page to improve visibility in search results. Click on the cross on the right to delete this notification if you are not concerned.', 'wp-seopress'),
855
- 'impact' => [
856
- 'high' => __('High impact', 'wp-seopress'),
857
- ],
858
- 'link' => [
859
- 'en' => 'https://www.google.com/business/go/',
860
- 'title' => __('Create your page now!', 'wp-seopress'),
861
- 'external' => true,
862
- ],
863
- 'deleteable' => true,
864
- ];
865
- seopress_notification($args);
866
- }
867
- function seopress_get_hidden_notices_search_console_option()
868
- {
869
- $seopress_get_hidden_notices_search_console_option = get_option('seopress_notices');
870
- if (! empty($seopress_get_hidden_notices_search_console_option)) {
871
- foreach ($seopress_get_hidden_notices_search_console_option as $key => $seopress_get_hidden_notices_search_console_value) {
872
- $options[$key] = $seopress_get_hidden_notices_search_console_value;
873
- }
874
- if (isset($seopress_get_hidden_notices_search_console_option['notice-search-console'])) {
875
- return $seopress_get_hidden_notices_search_console_option['notice-search-console'];
876
  }
877
  }
878
- }
879
- function seopress_get_google_site_verification_option()
880
- {
881
- $seopress_get_google_site_verification_option = get_option('seopress_advanced_option_name');
882
- if (! empty($seopress_get_google_site_verification_option)) {
883
- foreach ($seopress_get_google_site_verification_option as $key => $seopress_get_google_site_verification_value) {
884
- $options[$key] = $seopress_get_google_site_verification_value;
885
- }
886
- if (isset($seopress_get_google_site_verification_option['seopress_advanced_advanced_google'])) {
887
- return $seopress_get_google_site_verification_option['seopress_advanced_advanced_google'];
888
  }
889
  }
890
- }
891
- if ('1' != seopress_get_hidden_notices_search_console_option() && '' == seopress_get_google_site_verification_option()) {
892
- $args = [
893
- 'id' => 'notice-search-console',
894
- 'title' => __('Add your site to Google. It\'s free!', 'wp-seopress'),
895
- 'desc' => __('Is your brand new site online? So reference it as quickly as possible on Google to get your first visitors via Google Search Console. Already the case? Click on the cross on the right to remove this alert.', 'wp-seopress'),
896
- 'impact' => [
897
- 'high' => __('High impact', 'wp-seopress'),
898
- ],
899
- 'link' => [
900
- 'en' => 'https://www.google.com/webmasters/tools/home',
901
- 'title' => __('Add your site to Search Console!', 'wp-seopress'),
902
- 'external' => true,
903
- ],
904
- 'deleteable' => true,
905
- ];
906
- seopress_notification($args);
907
- }
908
- if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
909
- if (function_exists('seopress_rich_snippets_enable_option') && '1' != seopress_rich_snippets_enable_option()) {
910
  $args = [
911
- 'id' => 'notice-schemas-metabox',
912
- 'title' => __('Structured data types is not correctly enabled', 'wp-seopress'),
913
- 'desc' => __('Please enable <strong>Structured Data Types metabox for your posts, pages and custom post types</strong> option in order to use automatic and manual schemas. (SEO > PRO > Structured Data Types (schema.org)', 'wp-seopress'),
914
  'impact' => [
915
  'high' => __('High impact', 'wp-seopress'),
916
  ],
917
  'link' => [
918
- 'en' => esc_url(admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_rich_snippets')),
919
- 'title' => __('Fix this!', 'wp-seopress'),
920
- 'external' => false,
921
  ],
922
- 'icon' => 'dashicons-warning',
923
- 'deleteable' => false,
924
  ];
925
  seopress_notification($args);
926
  }
927
- }
928
- if ('valid' != get_option('seopress_pro_license_status') && is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
929
- $args = [
930
- 'id' => 'notice-license',
931
- 'title' => __('You have to enter your licence key to get updates and support', 'wp-seopress'),
932
- 'desc' => __('Please activate the SEOPress PRO license key to automatically receive updates to guarantee you the best user experience possible.', 'wp-seopress'),
933
- 'impact' => [
934
- 'info' => __('License', 'wp-seopress'),
935
- ],
936
- 'link' => [
937
- 'en' => admin_url('admin.php?page=seopress-license'),
938
- 'title' => __('Fix this!', 'wp-seopress'),
939
- 'external' => false,
940
- ],
941
- 'icon' => 'dashicons-admin-network',
942
- 'deleteable' => false,
943
- ];
944
- seopress_notification($args);
945
- }
946
- if (! is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
947
- function seopress_get_hidden_notices_go_pro_option()
948
- {
949
- $seopress_get_hidden_notices_go_pro_option = get_option('seopress_notices');
950
- if (! empty($seopress_get_hidden_notices_go_pro_option)) {
951
- foreach ($seopress_get_hidden_notices_go_pro_option as $key => $seopress_get_hidden_notices_go_pro_value) {
952
- $options[$key] = $seopress_get_hidden_notices_go_pro_value;
953
- }
954
- if (isset($seopress_get_hidden_notices_go_pro_option['notice-go-pro'])) {
955
- return $seopress_get_hidden_notices_go_pro_option['notice-go-pro'];
956
- }
957
  }
958
  }
959
- if ('1' != seopress_get_hidden_notices_go_pro_option() && '' == seopress_get_hidden_notices_go_pro_option()) {
960
  $args = [
961
- 'id' => 'notice-go-pro',
962
- 'title' => __('Take your SEO to the next level with SEOPress PRO!', 'wp-seopress'),
963
- 'desc' => __('The PRO version of SEOPress allows you to easily manage your structured data (schemas), add a breadcrumb optimized for SEO and accessibility, improve SEO for WooCommerce, gain productivity with our import / export tool from a CSV of your metadata and so much more.', 'wp-seopress'),
964
  'impact' => [
965
- 'info' => __('PRO', 'wp-seopress'),
966
  ],
967
  'link' => [
968
- 'fr' => 'https://www.seopress.org/fr?utm_source=plugin&utm_medium=notification&utm_campaign=dashboard',
969
- 'en' => 'https://www.seopress.org/?utm_source=plugin&utm_medium=notification&utm_campaign=dashboard',
970
- 'title' => __('Upgrade now!', 'wp-seopress'),
971
- 'external' => true,
972
  ],
973
- 'deleteable' => true,
 
974
  ];
975
  seopress_notification($args);
976
  }
977
- } ?>
978
- </div>
979
- <!--#seopress-notifications-center-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
980
  <?php }
 
4
  echo 'Please don&rsquo;t call the plugin directly. Thanks :)';
5
  exit;
6
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ if (defined('SEOPRESS_WL_ADMIN_HEADER') && SEOPRESS_WL_ADMIN_HEADER === false) {
9
+ //do nothing
10
+ } else {
11
+ //Notifications Center
12
+ function seopress_advanced_appearance_notifications_option()
13
  {
14
+ $seopress_advanced_appearance_notifications_option = get_option('seopress_advanced_option_name');
15
+ if (! empty($seopress_advanced_appearance_notifications_option)) {
16
+ foreach ($seopress_advanced_appearance_notifications_option as $key => $seopress_advanced_appearance_notifications_value) {
17
+ $options[$key] = $seopress_advanced_appearance_notifications_value;
18
  }
19
+ if (isset($seopress_advanced_appearance_notifications_option['seopress_advanced_appearance_notifications'])) {
20
+ return $seopress_advanced_appearance_notifications_option['seopress_advanced_appearance_notifications'];
21
  }
22
  }
23
  }
24
+ ?>
25
+
26
+ <?php if (defined('SEOPRESS_WL_ADMIN_HEADER') && SEOPRESS_WL_ADMIN_HEADER === false) {
27
+ //do nothing
28
+ } else { ?>
29
+ <?php $class = '1' != seopress_advanced_appearance_notifications_option() ? 'is-active' : ''; ?>
30
+
31
+ <div id="seopress-notifications-center"
32
+ class="seopress-page-list <?php echo $class; ?>"
33
+ style="display: none">
34
+ <?php
35
+ function seopress_advanced_appearance_universal_metabox_option()
36
+ {
37
+ $seopress_advanced_appearance_universal_metabox_option = get_option('seopress_advanced_option_name');
38
+ if (! empty($seopress_advanced_appearance_universal_metabox_option)) {
39
+ foreach ($seopress_advanced_appearance_universal_metabox_option as $key => $seopress_advanced_appearance_universal_metabox_value) {
40
+ $options[$key] = $seopress_advanced_appearance_universal_metabox_value;
41
+ }
42
+ if (isset($seopress_advanced_appearance_universal_metabox_option['seopress_advanced_appearance_universal_metabox'])) {
43
+ return $seopress_advanced_appearance_universal_metabox_option['seopress_advanced_appearance_universal_metabox'];
44
+ }
45
  }
46
  }
47
+ function seopress_get_hidden_notices_usm_option()
48
+ {
49
+ $seopress_get_hidden_notices_usm_option = get_option('seopress_notices');
50
+ if (! empty($seopress_get_hidden_notices_usm_option)) {
51
+ foreach ($seopress_get_hidden_notices_usm_option as $key => $seopress_get_hidden_notices_usm_value) {
52
+ $options[$key] = $seopress_get_hidden_notices_usm_value;
53
+ }
54
+ if (isset($seopress_get_hidden_notices_usm_option['notice-usm'])) {
55
+ return $seopress_get_hidden_notices_usm_option['notice-usm'];
56
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  }
58
  }
59
+ if ('1' != seopress_get_hidden_notices_usm_option() && seopress_advanced_appearance_universal_metabox_option() !== '1') {
60
+ $args = [
61
+ 'id' => 'notice-usm',
62
+ 'title' => __('Enable our universal SEO metabox for the Block Editor', 'wp-seopress'),
63
+ 'desc' => __('By default, our new SEO metabox is disabled for Gutenberg. Test it without further delay!', 'wp-seopress'),
64
+ 'impact' => [
65
+ 'info' => __('Wizard', 'wp-seopress'),
66
+ ],
67
+ 'link' => [
68
+ 'en' => admin_url('admin.php?page=seopress-advanced#tab=tab_seopress_advanced_appearance'),
69
+ 'title' => __('Activate it', 'wp-seopress'),
70
+ 'external' => false,
71
+ ],
72
+ 'icon' => 'dashicons-admin-tools',
73
+ 'deleteable' => true,
74
+ ];
75
+ seopress_notification($args);
76
+ }
77
+ function seopress_get_hidden_notices_wizard_option()
 
 
78
  {
79
+ $seopress_get_hidden_notices_wizard_option = get_option('seopress_notices');
80
+ if (! empty($seopress_get_hidden_notices_wizard_option)) {
81
+ foreach ($seopress_get_hidden_notices_wizard_option as $key => $seopress_get_hidden_notices_wizard_value) {
82
+ $options[$key] = $seopress_get_hidden_notices_wizard_value;
83
  }
84
+ if (isset($seopress_get_hidden_notices_wizard_option['notice-wizard'])) {
85
+ return $seopress_get_hidden_notices_wizard_option['notice-wizard'];
86
  }
87
  }
88
  }
89
+ if ('1' != seopress_get_hidden_notices_wizard_option()) {
90
  $args = [
91
+ 'id' => 'notice-wizard',
92
+ 'title' => __('Configure SEOPress in a few minutes with our installation wizard', 'wp-seopress'),
93
+ 'desc' => __('The best way to quickly setup SEOPress on your site.', 'wp-seopress'),
94
  'impact' => [
95
  'info' => __('Wizard', 'wp-seopress'),
96
  ],
97
  'link' => [
98
+ 'en' => admin_url('admin.php?page=seopress-setup'),
99
  'title' => __('Start the wizard', 'wp-seopress'),
100
  'external' => true,
101
  ],
104
  ];
105
  seopress_notification($args);
106
  }
107
+ if (is_plugin_active('wp-seopress-insights/seopress-insights.php')) {
108
+ function seopress_get_hidden_notices_insights_wizard_option()
109
+ {
110
+ $seopress_get_hidden_notices_insights_wizard_option = get_option('seopress_notices');
111
+ if (! empty($seopress_get_hidden_notices_insights_wizard_option)) {
112
+ foreach ($seopress_get_hidden_notices_insights_wizard_option as $key => $seopress_get_hidden_notices_insights_wizard_value) {
113
+ $options[$key] = $seopress_get_hidden_notices_insights_wizard_value;
114
+ }
115
+ if (isset($seopress_get_hidden_notices_insights_wizard_option['notice-insights-wizard'])) {
116
+ return $seopress_get_hidden_notices_insights_wizard_option['notice-insights-wizard'];
117
+ }
118
+ }
119
+ }
120
+ if ('1' != seopress_get_hidden_notices_insights_wizard_option()) {
 
 
 
 
121
  $args = [
122
+ 'id' => 'notice-insights-wizard',
123
+ 'title' => __('Configure SEOPress Insights in a few minutes with our installation wizard', 'wp-seopress'),
124
+ 'desc' => __('Track your keywords positions and backlinks directly on your WordPress site.', 'wp-seopress'),
125
  'impact' => [
126
+ 'info' => __('Wizard', 'wp-seopress'),
127
  ],
128
  'link' => [
129
+ 'en' => admin_url('admin.php?page=seopress-insights-setup'),
130
+ 'title' => __('Start the wizard', 'wp-seopress'),
131
+ 'external' => true,
132
  ],
133
+ 'icon' => 'dashicons-admin-tools',
134
+ 'deleteable' => true,
135
  ];
136
  seopress_notification($args);
137
  }
138
  }
139
+ //DIVI SEO options conflict
140
+ $theme = wp_get_theme();
141
+ if ('Divi' == $theme->template || 'Divi' == $theme->parent_theme) {
142
+ $divi_options = get_option('et_divi');
143
+ if (! empty($divi_options)) {
144
+ if (
145
+ (array_key_exists('divi_seo_home_title', $divi_options) && 'on' == $divi_options['divi_seo_home_title']) ||
146
+ (array_key_exists('divi_seo_home_description', $divi_options) && 'on' == $divi_options['divi_seo_home_description']) ||
147
+ (array_key_exists('divi_seo_home_keywords', $divi_options) && 'on' == $divi_options['divi_seo_home_keywords']) ||
148
+ (array_key_exists('divi_seo_home_canonical', $divi_options) && 'on' == $divi_options['divi_seo_home_canonical']) ||
149
+ (array_key_exists('divi_seo_single_title', $divi_options) && 'on' == $divi_options['divi_seo_single_title']) ||
150
+ (array_key_exists('divi_seo_single_description', $divi_options) && 'on' == $divi_options['divi_seo_single_description']) ||
151
+ (array_key_exists('divi_seo_single_keywords', $divi_options) && 'on' == $divi_options['divi_seo_single_keywords']) ||
152
+ (array_key_exists('divi_seo_single_canonical', $divi_options) && 'on' == $divi_options['divi_seo_single_canonical']) ||
153
+ (array_key_exists('divi_seo_index_canonical', $divi_options) && 'on' == $divi_options['divi_seo_index_canonical']) ||
154
+ (array_key_exists('divi_seo_index_description', $divi_options) && 'on' == $divi_options['divi_seo_index_description'])
155
+ ) {
156
+ $args = [
157
+ 'id' => 'notice-divi-seo',
158
+ 'title' => __('We noticed that some SEO DIVI options are enabled!', 'wp-seopress'),
159
+ 'desc' => __('To avoid any SEO conflicts, please disable every SEO option from <strong>DIVI theme options page, SEO tab</strong>.', 'wp-seopress'),
160
+ 'impact' => [
161
+ 'high' => __('High impact', 'wp-seopress'),
162
+ ],
163
+ 'link' => [
164
+ 'en' => admin_url('admin.php?page=et_divi_options#seo-1'),
165
+ 'title' => __('Fix this!', 'wp-seopress'),
166
+ 'external' => false,
167
+ ],
168
+ 'icon' => 'dashicons-admin-plugins',
169
+ 'deleteable' => false,
170
+ ];
171
+ seopress_notification($args);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  }
173
  }
174
  }
175
+ if ('/' != substr(get_option('permalink_structure'), -1) && '' == seopress_advanced_advanced_trailingslash_option()) {
176
  $args = [
177
+ 'id' => 'notice-permalinks',
178
+ 'title' => __('Your permalinks don\'t have a trailingslash', 'wp-seopress'),
179
+ 'desc' => __('To avoid any SEO issues, we recommend you to activate the "<strong>Disable trailing slash for metas</strong>" option from our <strong>Advanced settings page</strong>. Do not forget to clear your cache if necessary.', 'wp-seopress'),
180
  'impact' => [
181
  'high' => __('High impact', 'wp-seopress'),
182
  ],
183
  'link' => [
184
+ 'en' => admin_url('admin.php?page=seopress-advanced#tab=seopress_advanced_advanced'),
 
185
  'title' => __('Fix this!', 'wp-seopress'),
186
+ 'external' => false,
187
  ],
188
+ 'icon' => 'dashicons-admin-links',
189
+ 'deleteable' => false,
190
  ];
191
  seopress_notification($args);
192
  }
193
+ if ('/' == substr(get_option('permalink_structure'), -1) && '1' == seopress_advanced_advanced_trailingslash_option()) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  $args = [
195
+ 'id' => 'notice-permalinks',
196
+ 'title' => __('Your permalinks have a trailingslash', 'wp-seopress'),
197
+ 'desc' => __('To avoid any SEO issues, we recommend you to de-activate the "<strong>Disable trailing slash for metas</strong>" option from our <strong>Advanced settings page</strong>. Do not forget to clear your cache if necessary.', 'wp-seopress'),
198
  'impact' => [
199
  'high' => __('High impact', 'wp-seopress'),
200
  ],
201
  'link' => [
202
+ 'en' => admin_url('admin.php?page=seopress-advanced#tab=seopress_advanced_advanced'),
203
+ 'title' => __('Fix this!', 'wp-seopress'),
204
+ 'external' => false,
 
205
  ],
206
+ 'icon' => 'dashicons-admin-links',
207
  'deleteable' => false,
208
  ];
209
  seopress_notification($args);
210
  }
211
+ if (is_plugin_active('td-composer/td-composer.php')) {
212
+ function seopress_get_hidden_notices_tagdiv_option()
213
+ {
214
+ $seopress_get_hidden_notices_tagdiv_option = get_option('seopress_notices');
215
+ if (! empty($seopress_get_hidden_notices_tagdiv_option)) {
216
+ foreach ($seopress_get_hidden_notices_tagdiv_option as $key => $seopress_get_hidden_notices_tagdiv_value) {
217
+ $options[$key] = $seopress_get_hidden_notices_tagdiv_value;
218
+ }
219
+ if (isset($seopress_get_hidden_notices_tagdiv_option['notice-tagdiv'])) {
220
+ return $seopress_get_hidden_notices_tagdiv_option['notice-tagdiv'];
221
+ }
222
  }
223
+ }
224
+ if ('1' != seopress_get_hidden_notices_tagdiv_option()) {
225
+ $args = [
226
+ 'id' => 'notice-tagdiv',
227
+ 'title' => __('TagDiv Composer plugin doesn\'t use <strong>add_theme_support(\'title-tag\');</strong>', 'wp-seopress'),
228
+ 'desc' => __('Fix this compatibility issue to allow SEOPress generates the correct meta titles.', 'wp-seopress'),
229
+ 'impact' => [
230
+ 'high' => __('High impact', 'wp-seopress'),
231
+ ],
232
+ 'link' => [
233
+ 'fr' => 'https://www.seopress.org/fr/support/guides/corriger-erreur-compatibilite-extension-tagdiv-composer-newspaper/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress',
234
+ 'en' => 'https://www.seopress.org/support/guides/fix-compatibility-issue-tagdiv-composer-plugin-newspaper-theme/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress',
235
+ 'title' => __('Fix this!', 'wp-seopress'),
236
+ 'external' => true,
237
+ ],
238
+ 'icon' => 'dashicons-admin-customizer',
239
+ 'deleteable' => true,
240
+ ];
241
+ seopress_notification($args);
242
+ }
243
+ }
244
+ if ('1' != get_theme_support('title-tag')) {
245
+ function seopress_get_hidden_notices_title_tag_option()
246
+ {
247
+ $seopress_get_hidden_notices_title_tag_option = get_option('seopress_notices');
248
+ if (! empty($seopress_get_hidden_notices_title_tag_option)) {
249
+ foreach ($seopress_get_hidden_notices_title_tag_option as $key => $seopress_get_hidden_notices_title_tag_value) {
250
+ $options[$key] = $seopress_get_hidden_notices_title_tag_value;
251
+ }
252
+ if (isset($seopress_get_hidden_notices_title_tag_option['notice-title-tag'])) {
253
+ return $seopress_get_hidden_notices_title_tag_option['notice-title-tag'];
254
+ }
255
  }
256
  }
257
+ if ('1' != seopress_get_hidden_notices_title_tag_option()) {
258
+ $args = [
259
+ 'id' => 'notice-title-tag',
260
+ 'title' => __('Your theme doesn\'t use <strong>add_theme_support(\'title-tag\');</strong>', 'wp-seopress'),
261
+ 'desc' => __('This error indicates that your theme uses a deprecated function to generate the title tag of your pages. SEOPress will not be able to generate your custom title tags if this error is not fixed.', 'wp-seopress'),
262
+ 'impact' => [
263
+ 'high' => __('High impact', 'wp-seopress'),
264
+ ],
265
+ 'link' => [
266
+ 'fr' => 'https://www.seopress.org/fr/support/guides/resoudre-add_theme_support-manquant-dans-votre-theme/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress',
267
+ 'en' => 'https://www.seopress.org/support/guides/fixing-missing-add_theme_support-in-your-theme/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress',
268
+ 'title' => __('Learn more', 'wp-seopress'),
269
+ 'external' => true,
270
+ ],
271
+ 'icon' => 'dashicons-admin-customizer',
272
+ 'deleteable' => false,
273
+ ];
274
+ seopress_notification($args);
275
+ }
276
  }
277
+ if (is_plugin_active('swift-performance-lite/performance.php')) {
278
+ function seopress_get_swift_performance_sitemap_option()
279
  {
280
+ $seopress_get_swift_performance_sitemap_option = get_option('swift_performance_options');
281
+ if (! empty($seopress_get_swift_performance_sitemap_option)) {
282
+ foreach ($seopress_get_swift_performance_sitemap_option as $key => $seopress_get_swift_performance_sitemap_value) {
283
+ $options[$key] = $seopress_get_swift_performance_sitemap_value;
284
  }
285
+ if (isset($seopress_get_swift_performance_sitemap_option['cache-sitemap'])) {
286
+ return $seopress_get_swift_performance_sitemap_option['cache-sitemap'];
287
  }
288
  }
289
  }
290
+ if (seopress_get_swift_performance_sitemap_option() === "1") {
291
+ function seopress_get_hidden_notices_swift_option()
292
+ {
293
+ $seopress_get_hidden_notices_swift_option = get_option('seopress_notices');
294
+ if (! empty($seopress_get_hidden_notices_swift_option)) {
295
+ foreach ($seopress_get_hidden_notices_swift_option as $key => $seopress_get_hidden_notices_swift_value) {
296
+ $options[$key] = $seopress_get_hidden_notices_swift_value;
297
+ }
298
+ if (isset($seopress_get_hidden_notices_swift_option['notice-swift'])) {
299
+ return $seopress_get_hidden_notices_swift_option['notice-swift'];
300
+ }
301
+ }
302
+ }
303
+ $args = [
304
+ 'id' => 'notice-swift',
305
+ 'title' => __('Your XML sitemap is cached!', 'wp-seopress'),
306
+ 'desc' => __('Swift Performance is caching your XML sitemap. You must disable this option to prevent any compatibility issue (Swift Performance > Settings > Caching, General tab).', 'wp-seopress'),
307
+ 'impact' => [
308
+ 'high' => __('High impact', 'wp-seopress'),
309
+ ],
310
+ 'link' => [
311
+ 'en' => admin_url('tools.php?page=swift-performance'),
312
+ 'title' => __('Fix this!', 'wp-seopress'),
313
+ 'external' => false,
314
+ ],
315
+ 'icon' => 'dashicons-media-spreadsheet',
316
+ 'deleteable' => false,
317
+ ];
318
+ seopress_notification($args);
319
+ }
320
+ }
321
+ $seo_plugins = [
322
+ 'wordpress-seo/wp-seo.php' => 'Yoast SEO',
323
+ 'wordpress-seo-premium/wp-seo-premium.php' => 'Yoast SEO Premium',
324
+ 'all-in-one-seo-pack/all_in_one_seo_pack.php' => 'All In One SEO',
325
+ 'autodescription/autodescription.php' => 'The SEO Framework',
326
+ 'squirrly-seo/squirrly.php' => 'Squirrly SEO',
327
+ 'seo-by-rank-math/rank-math.php' => 'Rank Math',
328
+ 'seo-ultimate/seo-ultimate.php' => 'SEO Ultimate',
329
+ 'wp-meta-seo/wp-meta-seo.php' => 'WP Meta SEO',
330
+ 'premium-seo-pack/plugin.php' => 'Premium SEO Pack',
331
+ 'wpseo/wpseo.php' => 'wpSEO',
332
+ 'platinum-seo-pack/platinum-seo-pack.php' => 'Platinum SEO Pack',
333
+ 'smartcrawl-seo/wpmu-dev-seo.php' => 'SmartCrawl',
334
+ 'seo-pressor/seo-pressor.php' => 'SEOPressor',
335
+ ];
336
+
337
+ foreach ($seo_plugins as $key => $value) {
338
+ if (is_plugin_active($key)) {
339
+ $args = [
340
+ 'id' => 'notice-seo-plugins',
341
+ /* translators: %s name of a SEO plugin (eg: Yoast SEO) */
342
+ 'title' => sprintf(__('We noticed that you use <strong>%s</strong> plugin.', 'wp-seopress'), $value),
343
+ 'desc' => __('Do you want to migrate all your metadata to SEOPress? Do not use multiple SEO plugins at once to avoid conflicts!', 'wp-seopress'),
344
  'impact' => [
345
  'high' => __('High impact', 'wp-seopress'),
346
  ],
347
  'link' => [
348
+ 'en' => admin_url('admin.php?page=seopress-import-export'),
349
+ 'title' => __('Migrate!', 'wp-seopress'),
350
  'external' => false,
351
  ],
352
+ 'icon' => 'dashicons-admin-plugins',
353
  'deleteable' => false,
354
  ];
355
+ seopress_notification($args);
356
+ }
357
+ }
358
+ if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
359
+ if (1 == seopress_404_cleaning_option() && ! wp_next_scheduled('seopress_404_cron_cleaning')) {
360
+ $args = [
361
+ 'id' => 'notice-title-tag',
362
+ 'title' => __('You have enabled 404 cleaning BUT the scheduled task is not running.', 'wp-seopress'),
363
+ 'desc' => __('To solve this, please disable and re-enable SEOPress PRO. No data will be lost.', 'wp-seopress'),
364
+ 'icon' => 'dashicons-clock',
365
+ 'deleteable' => false,
366
+ ];
367
+ seopress_notification($args);
368
+ }
369
+ }
370
+ //Enfold theme
371
+ $avia_options_enfold = get_option('avia_options_enfold');
372
+ $avia_options_enfold_child = get_option('avia_options_enfold_child');
373
+ $theme = wp_get_theme();
374
+ if ('enfold' == $theme->template || 'enfold' == $theme->parent_theme) {
375
+ if ('plugin' != $avia_options_enfold['avia']['seo_robots'] || 'plugin' != $avia_options_enfold_child['avia']['seo_robots']) {
376
+ function seopress_get_hidden_notices_enfold_option()
377
+ {
378
+ $seopress_get_hidden_notices_enfold_option = get_option('seopress_notices');
379
+ if (! empty($seopress_get_hidden_notices_enfold_option)) {
380
+ foreach ($seopress_get_hidden_notices_enfold_option as $key => $seopress_get_hidden_notices_enfold_value) {
381
+ $options[$key] = $seopress_get_hidden_notices_enfold_value;
382
+ }
383
+ if (isset($seopress_get_hidden_notices_enfold_option['notice-enfold'])) {
384
+ return $seopress_get_hidden_notices_enfold_option['notice-enfold'];
385
+ }
386
+ }
387
+ }
388
+ if ('1' != seopress_get_hidden_notices_enfold_option()) {
389
+ $args = [
390
+ 'id' => 'notice-enfold',
391
+ 'title' => __('Enfold theme is not correctly setup for SEO!', 'wp-seopress'),
392
+ 'desc' => __('You must disable "Meta tag robots" option from Enfold settings (SEO Support tab) to avoid any SEO issues.', 'wp-seopress'),
393
+ 'impact' => [
394
+ 'low' => __('High impact', 'wp-seopress'),
395
+ ],
396
+ 'link' => [
397
+ 'en' => admin_url('admin.php?avia_welcome=true&page=avia'),
398
+ 'title' => __('Fix this!', 'wp-seopress'),
399
+ 'external' => true,
400
+ ],
401
+ 'icon' => 'dashicons-admin-tools',
402
+ 'deleteable' => true,
403
+ ];
404
+ seopress_notification($args);
405
+ }
406
+ }
407
+ }
408
+ if (seopress_get_empty_templates('cpt', 'title')) {
409
+ $args = [
410
+ 'id' => 'notice-cpt-empty-title',
411
+ 'title' => __('Global meta title missing for several custom post types!', 'wp-seopress'),
412
+ 'desc' => seopress_get_empty_templates('cpt', 'title', false),
413
+ 'impact' => [
414
+ 'high' => __('High impact', 'wp-seopress'),
415
+ ],
416
+ 'link' => [
417
+ 'en' => admin_url('admin.php?page=seopress-titles#tab=tab_seopress_titles_single'),
418
+ 'title' => __('Fix this!', 'wp-seopress'),
419
+ 'external' => false,
420
+ ],
421
+ 'icon' => 'dashicons-editor-table',
422
+ 'deleteable' => false,
423
+ 'wrap' => false,
424
+ ];
425
  seopress_notification($args);
426
  }
427
+ if (seopress_get_empty_templates('cpt', 'description')) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
428
  $args = [
429
+ 'id' => 'notice-cpt-empty-desc',
430
+ 'title' => __('Global meta description missing for several custom post types!', 'wp-seopress'),
431
+ 'desc' => seopress_get_empty_templates('cpt', 'description', false),
 
432
  'impact' => [
433
  'high' => __('High impact', 'wp-seopress'),
434
  ],
435
  'link' => [
436
+ 'en' => admin_url('admin.php?page=seopress-titles#tab=tab_seopress_titles_single'),
437
+ 'title' => __('Fix this!', 'wp-seopress'),
438
  'external' => false,
439
  ],
440
+ 'icon' => 'dashicons-editor-table',
441
  'deleteable' => false,
442
+ 'wrap' => false,
443
  ];
444
  seopress_notification($args);
445
  }
446
+ if (seopress_get_empty_templates('tax', 'title')) {
 
 
447
  $args = [
448
+ 'id' => 'notice-tax-empty-title',
449
+ 'title' => __('Global meta title missing for several taxonomies!', 'wp-seopress'),
450
+ 'desc' => seopress_get_empty_templates('tax', 'title', false),
451
+ 'impact' => [
452
+ 'high' => __('High impact', 'wp-seopress'),
453
+ ],
454
+ 'link' => [
455
+ 'en' => admin_url('admin.php?page=seopress-titles#tab=tab_seopress_titles_tax'),
456
+ 'title' => __('Fix this!', 'wp-seopress'),
457
+ 'external' => false,
458
+ ],
459
+ 'icon' => 'dashicons-editor-table',
460
  'deleteable' => false,
461
+ 'wrap' => false,
462
  ];
463
  seopress_notification($args);
464
  }
465
+ if (seopress_get_empty_templates('tax', 'description')) {
466
+ $args = [
467
+ 'id' => 'notice-tax-empty-templates',
468
+ 'title' => __('Global meta description missing for several taxonomies!', 'wp-seopress'),
469
+ 'desc' => seopress_get_empty_templates('tax', 'description', false),
470
+ 'impact' => [
471
+ 'high' => __('High impact', 'wp-seopress'),
472
+ ],
473
+ 'link' => [
474
+ 'en' => admin_url('admin.php?page=seopress-titles#tab=tab_seopress_titles_tax'),
475
+ 'title' => __('Fix this!', 'wp-seopress'),
476
+ 'external' => false,
477
+ ],
478
+ 'icon' => 'dashicons-editor-table',
479
+ 'deleteable' => false,
480
+ 'wrap' => false,
481
+ ];
482
+ seopress_notification($args);
483
+ }
484
+
485
+ if (! is_ssl()) {
486
+ function seopress_get_hidden_notices_ssl_option()
487
  {
488
+ $seopress_get_hidden_notices_ssl_option = get_option('seopress_notices');
489
+ if (! empty($seopress_get_hidden_notices_ssl_option)) {
490
+ foreach ($seopress_get_hidden_notices_ssl_option as $key => $seopress_get_hidden_notices_ssl_value) {
491
+ $options[$key] = $seopress_get_hidden_notices_ssl_value;
492
  }
493
+ if (isset($seopress_get_hidden_notices_ssl_option['notice-ssl'])) {
494
+ return $seopress_get_hidden_notices_ssl_option['notice-ssl'];
495
  }
496
  }
497
  }
498
+ if ('1' != seopress_get_hidden_notices_ssl_option()) {
499
  $args = [
500
+ 'id' => 'notice-ssl',
501
+ 'title' => __('Your site doesn\'t use an SSL certificate!', 'wp-seopress'),
502
+ 'desc' => __('Https is considered by Google as a positive signal for the ranking of your site. It also reassures your visitors for data security, and improves trust.', 'wp-seopress') . '</a>',
503
  'impact' => [
504
+ 'low' => __('Low impact', 'wp-seopress'),
505
  ],
506
  'link' => [
507
+ 'en' => 'https://webmasters.googleblog.com/2014/08/https-as-ranking-signal.html',
508
+ 'title' => __('Learn more', 'wp-seopress'),
509
  'external' => true,
510
  ],
511
+ 'icon' => 'dashicons-unlock',
512
  'deleteable' => true,
513
  ];
514
  seopress_notification($args);
515
  }
516
  }
517
+ if (function_exists('extension_loaded') && ! extension_loaded('dom')) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
518
  $args = [
519
+ 'id' => 'notice-ssl-alert',
520
+ 'title' => __('PHP module "DOM" is missing on your server.', 'wp-seopress'),
521
+ 'desc' => __('This PHP module, installed by default with PHP, is required by many plugins including SEOPress. Please contact your host as soon as possible to solve this.', 'wp-seopress'),
522
  'impact' => [
523
+ 'high' => __('High impact', 'wp-seopress'),
524
  ],
525
  'link' => [
526
+ 'fr' => 'https://www.seopress.org/fr/support/guides/debutez-seopress/',
527
+ 'en' => 'https://www.seopress.org/support/guides/get-started-seopress/',
528
+ 'title' => __('Learn more', 'wp-seopress'),
529
  'external' => true,
530
  ],
 
531
  'deleteable' => true,
532
  ];
533
  seopress_notification($args);
534
  }
535
+ if (! function_exists('seopress_titles_noindex_option')) {
536
+ function seopress_titles_noindex_option()
537
+ {
538
+ $seopress_titles_noindex_option = get_option('seopress_titles_option_name');
539
+ if (! empty($seopress_titles_noindex_option)) {
540
+ foreach ($seopress_titles_noindex_option as $key => $seopress_titles_noindex_value) {
541
+ $options[$key] = $seopress_titles_noindex_value;
542
+ }
543
+ if (isset($seopress_titles_noindex_option['seopress_titles_noindex'])) {
544
+ return $seopress_titles_noindex_option['seopress_titles_noindex'];
545
+ }
546
+ }
547
+ }
548
+ }
549
+ function seopress_get_hidden_notices_noindex_option()
 
 
 
 
 
 
550
  {
551
+ $seopress_get_hidden_notices_noindex_option = get_option('seopress_notices');
552
+ if (! empty($seopress_get_hidden_notices_noindex_option)) {
553
+ foreach ($seopress_get_hidden_notices_noindex_option as $key => $seopress_get_hidden_notices_noindex_value) {
554
+ $options[$key] = $seopress_get_hidden_notices_noindex_value;
555
  }
556
+ if (isset($seopress_get_hidden_notices_noindex_option['notice-noindex'])) {
557
+ return $seopress_get_hidden_notices_noindex_option['notice-noindex'];
558
  }
559
  }
560
  }
561
+ if ('1' != seopress_get_hidden_notices_noindex_option()) {
562
+ if ('1' == seopress_titles_noindex_option() || '1' != get_option('blog_public')) {
563
+ $args = [
564
+ 'id' => 'notice-noindex',
565
+ 'title' => __('Your site is not visible to Search Engines!', 'wp-seopress'),
566
+ 'desc' => __('You have activated the blocking of the indexing of your site. If your site is under development, this is probably normal. Otherwise, check your settings. Delete this notification using the cross on the right if you are not concerned.', 'wp-seopress'),
567
+ 'impact' => [
568
+ 'high' => __('High impact', 'wp-seopress'),
569
+ ],
570
+ 'link' => [
571
+ 'en' => admin_url('options-reading.php'),
572
+ 'title' => __('Fix this!', 'wp-seopress'),
573
+ 'external' => false,
574
+ ],
575
+ 'icon' => 'dashicons-warning',
576
+ 'deleteable' => true,
577
+ ];
578
+ seopress_notification($args);
579
  }
580
  }
581
+ if ('' == get_option('blogname')) {
 
 
582
  $args = [
583
+ 'id' => 'notice-title-empty',
584
+ 'title' => __('Your site title is empty!', 'wp-seopress'),
585
+ 'desc' => __('Your Site Title is used by WordPress, your theme and your plugins including SEOPress. It is an essential component in the generation of title tags, but not only. Enter one!', 'wp-seopress'),
586
  'impact' => [
587
  'high' => __('High impact', 'wp-seopress'),
588
  ],
589
  'link' => [
590
+ 'en' => admin_url('options-general.php'),
591
  'title' => __('Fix this!', 'wp-seopress'),
592
  'external' => false,
593
  ],
594
+ 'deleteable' => false,
 
595
  ];
596
  seopress_notification($args);
597
  }
598
+ if ('' == get_option('permalink_structure')) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
599
  $args = [
600
+ 'id' => 'notice-permalinks',
601
+ 'title' => __('Your permalinks are not SEO Friendly! Enable pretty permalinks to fix this.', 'wp-seopress'),
602
  'desc' => __('Why is this important? Showing only the summary of each article significantly reduces the theft of your content by third party sites. Not to mention, the increase in your traffic, your advertising revenue, conversions...', 'wp-seopress'),
603
  'impact' => [
604
+ 'high' => __('High impact', 'wp-seopress'),
605
  ],
606
  'link' => [
607
+ 'en' => admin_url('options-permalink.php'),
608
  'title' => __('Fix this!', 'wp-seopress'),
609
  'external' => false,
610
  ],
611
+ 'icon' => 'dashicons-admin-links',
612
+ 'deleteable' => false,
613
  ];
614
  seopress_notification($args);
615
  }
616
+ if ('0' == get_option('rss_use_excerpt')) {
617
+ function seopress_get_hidden_notices_rss_use_excerpt_option()
618
+ {
619
+ $seopress_get_hidden_notices_rss_use_excerpt_option = get_option('seopress_notices');
620
+ if (! empty($seopress_get_hidden_notices_rss_use_excerpt_option)) {
621
+ foreach ($seopress_get_hidden_notices_rss_use_excerpt_option as $key => $seopress_get_hidden_notices_rss_use_excerpt_value) {
622
+ $options[$key] = $seopress_get_hidden_notices_rss_use_excerpt_value;
623
+ }
624
+ if (isset($seopress_get_hidden_notices_rss_use_excerpt_option['notice-rss-use-excerpt'])) {
625
+ return $seopress_get_hidden_notices_rss_use_excerpt_option['notice-rss-use-excerpt'];
626
+ }
627
+ }
628
+ }
629
+ if ('1' != seopress_get_hidden_notices_rss_use_excerpt_option()) {
630
+ $args = [
631
+ 'id' => 'notice-rss-use-excerpt',
632
+ 'title' => __('Your RSS feed shows full text!', 'wp-seopress'),
633
+ 'desc' => __('Why is this important? Showing only the summary of each article significantly reduces the theft of your content by third party sites. Not to mention, the increase in your traffic, your advertising revenue, conversions...', 'wp-seopress'),
634
+ 'impact' => [
635
+ 'medium' => __('Medium impact', 'wp-seopress'),
636
+ ],
637
+ 'link' => [
638
+ 'en' => admin_url('options-reading.php'),
639
+ 'title' => __('Fix this!', 'wp-seopress'),
640
+ 'external' => false,
641
+ ],
642
+ 'icon' => 'dashicons-rss',
643
+ 'deleteable' => true,
644
+ ];
645
+ seopress_notification($args);
646
  }
647
+ }
648
+
649
+ function seopress_ga_enable_option()
650
+ {
651
+ $seopress_ga_enable_option = get_option('seopress_google_analytics_option_name');
652
+ if (! empty($seopress_ga_enable_option)) {
653
+ foreach ($seopress_ga_enable_option as $key => $seopress_ga_enable_value) {
654
+ $options[$key] = $seopress_ga_enable_value;
655
+ }
656
+ if (isset($seopress_ga_enable_option['seopress_google_analytics_enable'])) {
657
+ return $seopress_ga_enable_option['seopress_google_analytics_enable'];
658
+ }
659
  }
660
  }
661
+ function seopress_ga_ua_option()
662
+ {
663
+ $seopress_ga_ua_option = get_option('seopress_google_analytics_option_name');
664
+ if (! empty($seopress_ga_ua_option)) {
665
+ foreach ($seopress_ga_ua_option as $key => $seopress_ga_ua_value) {
666
+ $options[$key] = $seopress_ga_ua_value;
667
+ }
668
+ if (isset($seopress_ga_ua_option['seopress_google_analytics_ua'])) {
669
+ return $seopress_ga_ua_option['seopress_google_analytics_ua'];
670
+ }
671
  }
672
+ }
673
+ function seopress_ga4_option()
674
+ {
675
+ $seopress_ga4_option = get_option('seopress_google_analytics_option_name');
676
+ if (! empty($seopress_ga4_option)) {
677
+ foreach ($seopress_ga4_option as $key => $seopress_ga4_value) {
678
+ $options[$key] = $seopress_ga4_value;
679
+ }
680
+ if (isset($seopress_ga4_option['seopress_google_analytics_ga4'])) {
681
+ return $seopress_ga4_option['seopress_google_analytics_ga4'];
682
+ }
683
  }
684
  }
685
+ if ('' === seopress_ga_ua_option() && '' === seopress_ga4_option() && '1' === seopress_ga_enable_option()) {
686
+ function seopress_get_hidden_notices_analytics_option()
687
+ {
688
+ $seopress_get_hidden_notices_analytics_option = get_option('seopress_notices');
689
+ if (! empty($seopress_get_hidden_notices_analytics_option)) {
690
+ foreach ($seopress_get_hidden_notices_analytics_option as $key => $seopress_get_hidden_notices_analytics_value) {
691
+ $options[$key] = $seopress_get_hidden_notices_analytics_value;
692
+ }
693
+ if (isset($seopress_get_hidden_notices_analytics_option['notice-ga-ids'])) {
694
+ return $seopress_get_hidden_notices_analytics_option['notice-ga-ids'];
695
+ }
696
+ }
697
  }
698
+ if ('1' != seopress_get_hidden_notices_analytics_option()) {
699
+ $args = [
700
+ 'id' => 'notice-ga-ids',
701
+ 'title' => __('You have activated Google Analytics tracking without adding identifiers!', 'wp-seopress'),
702
+ 'desc' => __('Google Analytics will not track your visitors until you finish the configuration.', 'wp-seopress'),
703
+ 'impact' => [
704
+ 'medium' => __('Medium impact', 'wp-seopress'),
705
+ ],
706
+ 'link' => [
707
+ 'en' => admin_url('admin.php?page=seopress-google-analytics'),
708
+ 'title' => __('Fix this!', 'wp-seopress'),
709
+ 'external' => false,
710
+ ],
711
+ 'icon' => 'dashicons-chart-area',
712
+ 'deleteable' => true,
713
+ ];
714
+ seopress_notification($args);
715
  }
716
  }
717
+
718
+ function seopress_get_hidden_notices_review_option()
 
719
  {
720
+ $seopress_get_hidden_notices_review_option = get_option('seopress_notices');
721
+ if (! empty($seopress_get_hidden_notices_review_option)) {
722
+ foreach ($seopress_get_hidden_notices_review_option as $key => $seopress_get_hidden_notices_review_value) {
723
+ $options[$key] = $seopress_get_hidden_notices_review_value;
724
  }
725
+ if (isset($seopress_get_hidden_notices_review_option['notice-review'])) {
726
+ return $seopress_get_hidden_notices_review_option['notice-review'];
727
  }
728
  }
729
  }
730
+ if ('1' != seopress_get_hidden_notices_review_option()) {
731
  $args = [
732
+ 'id' => 'notice-review',
733
+ 'title' => __('You like SEOPress? Please help us by rating us 5 stars!', 'wp-seopress'),
734
+ 'desc' => __('Support the development and improvement of the plugin by taking 15 seconds of your time to leave us a user review on the official WordPress plugins repository. Thank you!', 'wp-seopress'),
735
  'impact' => [
736
+ 'info' => __('Information', 'wp-seopress'),
737
  ],
738
  'link' => [
739
+ 'en' => 'https://wordpress.org/support/view/plugin-reviews/wp-seopress?rate=5#postform',
740
+ 'title' => __('Rate us!', 'wp-seopress'),
741
+ 'external' => true,
742
  ],
743
+ 'icon' => 'dashicons-thumbs-up',
744
  'deleteable' => true,
745
  ];
746
  seopress_notification($args);
747
  }
748
+ if ('1' == get_option('page_comments')) {
749
+ function seopress_get_hidden_notices_divide_comments_option()
750
+ {
751
+ $seopress_get_hidden_notices_divide_comments_option = get_option('seopress_notices');
752
+ if (! empty($seopress_get_hidden_notices_divide_comments_option)) {
753
+ foreach ($seopress_get_hidden_notices_divide_comments_option as $key => $seopress_get_hidden_notices_divide_comments_value) {
754
+ $options[$key] = $seopress_get_hidden_notices_divide_comments_value;
755
+ }
756
+ if (isset($seopress_get_hidden_notices_divide_comments_option['notice-divide-comments'])) {
757
+ return $seopress_get_hidden_notices_divide_comments_option['notice-divide-comments'];
758
+ }
759
+ }
760
  }
761
+ if ('1' != seopress_get_hidden_notices_divide_comments_option()) {
762
+ $args = [
763
+ 'id' => 'notice-divide-comments',
764
+ 'title' => __('Break comments into pages is ON!', 'wp-seopress'),
765
+ 'desc' => __('Enabling this option will create duplicate content for each article beyond x comments. This can have a disastrous effect by creating a large number of poor quality pages, and slowing the Google bot unnecessarily, so your ranking in search results.', 'wp-seopress'),
766
+ 'impact' => [
767
+ 'high' => __('High impact', 'wp-seopress'),
768
+ ],
769
+ 'link' => [
770
+ 'en' => admin_url('options-discussion.php'),
771
+ 'title' => __('Disable this!', 'wp-seopress'),
772
+ 'external' => false,
773
+ ],
774
+ 'icon' => 'dashicons-admin-comments',
775
+ 'deleteable' => true,
776
+ ];
777
+ seopress_notification($args);
778
  }
779
  }
780
+ if (get_option('posts_per_page') < '16') {
781
+ function seopress_get_hidden_notices_posts_number_option()
782
+ {
783
+ $seopress_get_hidden_notices_posts_number_option = get_option('seopress_notices');
784
+ if (! empty($seopress_get_hidden_notices_posts_number_option)) {
785
+ foreach ($seopress_get_hidden_notices_posts_number_option as $key => $seopress_get_hidden_notices_posts_number_value) {
786
+ $options[$key] = $seopress_get_hidden_notices_posts_number_value;
787
+ }
788
+ if (isset($seopress_get_hidden_notices_posts_number_option['notice-posts-number'])) {
789
+ return $seopress_get_hidden_notices_posts_number_option['notice-posts-number'];
790
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
791
  }
792
  }
793
+ if ('1' != seopress_get_hidden_notices_posts_number_option()) {
794
+ $args = [
795
+ 'id' => 'notice-posts-number',
796
+ 'title' => __('Display more posts per page on homepage and archives', 'wp-seopress'),
797
+ 'desc' => __('To reduce the number pages search engines have to crawl to find all your articles, it is recommended displaying more posts per page. This should not be a problem for your users. Using mobile, we prefer to scroll down rather than clicking on next page links.', 'wp-seopress'),
798
+ 'impact' => [
799
+ 'medium' => __('Medium impact', 'wp-seopress'),
800
+ ],
801
+ 'link' => [
802
+ 'en' => admin_url('options-reading.php'),
803
+ 'title' => __('Fix this!', 'wp-seopress'),
804
+ 'external' => false,
805
+ ],
806
+ 'deleteable' => true,
807
+ ];
808
+ seopress_notification($args);
809
+ }
810
  }
811
+ if ('1' != seopress_xml_sitemap_general_enable_option()) {
812
  $args = [
813
+ 'id' => 'notice-xml-sitemaps',
814
+ 'title' => __('You don\'t have an XML Sitemap!', 'wp-seopress'),
815
+ 'desc' => __('XML Sitemaps are useful to facilitate the crawling of your content by search engine robots. Indirectly, this can benefit your ranking by reducing the crawl bugdet.', 'wp-seopress'),
816
  'impact' => [
817
+ 'medium' => __('Medium impact', 'wp-seopress'),
818
  ],
819
  'link' => [
820
+ 'en' => admin_url('admin.php?page=seopress-xml-sitemap'),
821
+ 'title' => __('Fix this!', 'wp-seopress'),
822
  'external' => false,
823
  ],
824
+ 'icon' => 'dashicons-warning',
825
+ 'deleteable' => false,
826
  ];
827
  seopress_notification($args);
828
  }
829
+ function seopress_get_hidden_notices_google_business_option()
 
 
830
  {
831
+ $seopress_get_hidden_notices_google_business_option = get_option('seopress_notices');
832
+ if (! empty($seopress_get_hidden_notices_google_business_option)) {
833
+ foreach ($seopress_get_hidden_notices_google_business_option as $key => $seopress_get_hidden_notices_google_business_value) {
834
+ $options[$key] = $seopress_get_hidden_notices_google_business_value;
835
  }
836
+ if (isset($seopress_get_hidden_notices_google_business_option['notice-google-business'])) {
837
+ return $seopress_get_hidden_notices_google_business_option['notice-google-business'];
838
  }
839
  }
840
  }
841
+ if ('1' != seopress_get_hidden_notices_google_business_option()) {
842
  $args = [
843
+ 'id' => 'notice-google-business',
844
+ 'title' => __('Do you have a Google My Business page? It\'s free!', 'wp-seopress'),
845
+ 'desc' => __('Local Business websites should have a My Business page to improve visibility in search results. Click on the cross on the right to delete this notification if you are not concerned.', 'wp-seopress'),
846
  'impact' => [
847
+ 'high' => __('High impact', 'wp-seopress'),
848
  ],
849
  'link' => [
850
+ 'en' => 'https://www.google.com/business/go/',
851
+ 'title' => __('Create your page now!', 'wp-seopress'),
852
+ 'external' => true,
853
  ],
854
  'deleteable' => true,
855
  ];
856
  seopress_notification($args);
857
  }
858
+ function seopress_get_hidden_notices_search_console_option()
859
+ {
860
+ $seopress_get_hidden_notices_search_console_option = get_option('seopress_notices');
861
+ if (! empty($seopress_get_hidden_notices_search_console_option)) {
862
+ foreach ($seopress_get_hidden_notices_search_console_option as $key => $seopress_get_hidden_notices_search_console_value) {
863
+ $options[$key] = $seopress_get_hidden_notices_search_console_value;
864
+ }
865
+ if (isset($seopress_get_hidden_notices_search_console_option['notice-search-console'])) {
866
+ return $seopress_get_hidden_notices_search_console_option['notice-search-console'];
867
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
868
  }
869
  }
870
+ function seopress_get_google_site_verification_option()
871
+ {
872
+ $seopress_get_google_site_verification_option = get_option('seopress_advanced_option_name');
873
+ if (! empty($seopress_get_google_site_verification_option)) {
874
+ foreach ($seopress_get_google_site_verification_option as $key => $seopress_get_google_site_verification_value) {
875
+ $options[$key] = $seopress_get_google_site_verification_value;
876
+ }
877
+ if (isset($seopress_get_google_site_verification_option['seopress_advanced_advanced_google'])) {
878
+ return $seopress_get_google_site_verification_option['seopress_advanced_advanced_google'];
879
+ }
880
  }
881
  }
882
+ if ('1' != seopress_get_hidden_notices_search_console_option() && '' == seopress_get_google_site_verification_option()) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
883
  $args = [
884
+ 'id' => 'notice-search-console',
885
+ 'title' => __('Add your site to Google. It\'s free!', 'wp-seopress'),
886
+ 'desc' => __('Is your brand new site online? So reference it as quickly as possible on Google to get your first visitors via Google Search Console. Already the case? Click on the cross on the right to remove this alert.', 'wp-seopress'),
887
  'impact' => [
888
  'high' => __('High impact', 'wp-seopress'),
889
  ],
890
  'link' => [
891
+ 'en' => 'https://www.google.com/webmasters/tools/home',
892
+ 'title' => __('Add your site to Search Console!', 'wp-seopress'),
893
+ 'external' => true,
894
  ],
895
+ 'deleteable' => true,
 
896
  ];
897
  seopress_notification($args);
898
  }
899
+ if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
900
+ if (function_exists('seopress_rich_snippets_enable_option') && '1' != seopress_rich_snippets_enable_option()) {
901
+ $args = [
902
+ 'id' => 'notice-schemas-metabox',
903
+ 'title' => __('Structured data types is not correctly enabled', 'wp-seopress'),
904
+ 'desc' => __('Please enable <strong>Structured Data Types metabox for your posts, pages and custom post types</strong> option in order to use automatic and manual schemas. (SEO > PRO > Structured Data Types (schema.org)', 'wp-seopress'),
905
+ 'impact' => [
906
+ 'high' => __('High impact', 'wp-seopress'),
907
+ ],
908
+ 'link' => [
909
+ 'en' => esc_url(admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_rich_snippets')),
910
+ 'title' => __('Fix this!', 'wp-seopress'),
911
+ 'external' => false,
912
+ ],
913
+ 'icon' => 'dashicons-warning',
914
+ 'deleteable' => false,
915
+ ];
916
+ seopress_notification($args);
 
 
 
 
 
 
 
 
 
 
 
 
917
  }
918
  }
919
+ if ('valid' != get_option('seopress_pro_license_status') && is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
920
  $args = [
921
+ 'id' => 'notice-license',
922
+ 'title' => __('You have to enter your licence key to get updates and support', 'wp-seopress'),
923
+ 'desc' => __('Please activate the SEOPress PRO license key to automatically receive updates to guarantee you the best user experience possible.', 'wp-seopress'),
924
  'impact' => [
925
+ 'info' => __('License', 'wp-seopress'),
926
  ],
927
  'link' => [
928
+ 'en' => admin_url('admin.php?page=seopress-license'),
929
+ 'title' => __('Fix this!', 'wp-seopress'),
930
+ 'external' => false,
 
931
  ],
932
+ 'icon' => 'dashicons-admin-network',
933
+ 'deleteable' => false,
934
  ];
935
  seopress_notification($args);
936
  }
937
+ if (! is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
938
+ function seopress_get_hidden_notices_go_pro_option()
939
+ {
940
+ $seopress_get_hidden_notices_go_pro_option = get_option('seopress_notices');
941
+ if (! empty($seopress_get_hidden_notices_go_pro_option)) {
942
+ foreach ($seopress_get_hidden_notices_go_pro_option as $key => $seopress_get_hidden_notices_go_pro_value) {
943
+ $options[$key] = $seopress_get_hidden_notices_go_pro_value;
944
+ }
945
+ if (isset($seopress_get_hidden_notices_go_pro_option['notice-go-pro'])) {
946
+ return $seopress_get_hidden_notices_go_pro_option['notice-go-pro'];
947
+ }
948
+ }
949
+ }
950
+ if ('1' != seopress_get_hidden_notices_go_pro_option() && '' == seopress_get_hidden_notices_go_pro_option()) {
951
+ $args = [
952
+ 'id' => 'notice-go-pro',
953
+ 'title' => __('Take your SEO to the next level with SEOPress PRO!', 'wp-seopress'),
954
+ 'desc' => __('The PRO version of SEOPress allows you to easily manage your structured data (schemas), add a breadcrumb optimized for SEO and accessibility, improve SEO for WooCommerce, gain productivity with our import / export tool from a CSV of your metadata and so much more.', 'wp-seopress'),
955
+ 'impact' => [
956
+ 'info' => __('PRO', 'wp-seopress'),
957
+ ],
958
+ 'link' => [
959
+ 'fr' => 'https://www.seopress.org/fr?utm_source=plugin&utm_medium=notification&utm_campaign=dashboard',
960
+ 'en' => 'https://www.seopress.org/?utm_source=plugin&utm_medium=notification&utm_campaign=dashboard',
961
+ 'title' => __('Upgrade now!', 'wp-seopress'),
962
+ 'external' => true,
963
+ ],
964
+ 'deleteable' => true,
965
+ ];
966
+ seopress_notification($args);
967
+ }
968
+ }
969
+ if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
970
+ function seopress_get_hidden_notices_robots_txt_option()
971
+ {
972
+ $options = get_option('seopress_notices');
973
+ if (empty($options)) {
974
+ return;
975
+ }
976
+ if (!isset($options['notice-robots-txt'])) {
977
+ return;
978
+ }
979
+
980
+ return $options['notice-robots-txt'];
981
+ }
982
+
983
+ function seopress_get_hidden_notices_robots_txt_valid()
984
+ {
985
+ $options = get_option('seopress_notices');
986
+ if (empty($options)) {
987
+ return;
988
+ }
989
+ if (!isset($options['notice-robots-txt-valid'])) {
990
+ return;
991
+ }
992
+
993
+ return $options['notice-robots-txt-valid'];
994
+ }
995
+
996
+ if(file_exists(ABSPATH . 'robots.txt') && '1' !== seopress_get_hidden_notices_robots_txt_option() && empty(seopress_get_hidden_notices_robots_txt_option())){
997
+
998
+ $args = [
999
+ 'id' => 'notice-robots-txt',
1000
+ 'title' => __('A physical robots.txt file has been found', 'wp-seopress'),
1001
+ 'desc' => __('A robots.txt file already exists at the root of your site. We invite you to remove it so SEOPress can handle it virtually.', 'wp-seopress'),
1002
+ 'impact' => [
1003
+ 'high' => __('High impact', 'wp-seopress'),
1004
+ ],
1005
+ 'deleteable' => true,
1006
+ ];
1007
+ seopress_notification($args);
1008
+ }
1009
+
1010
+ try {
1011
+ $contentRobotsTxt = @file_get_contents(site_url('robots.txt'));
1012
+ if(!empty($contentRobotsTxt)){
1013
+ $contentRobotsTxt = explode("\n", $contentRobotsTxt);
1014
+
1015
+ $checkDisallowAfter = false;
1016
+ $validRobotsTxt = true;
1017
+ foreach($contentRobotsTxt as $line){
1018
+ if(strpos($line, 'User-agent:') !== false && strpos($line, '*') !== false){
1019
+ $checkDisallowAfter = true;
1020
+ }
1021
+
1022
+ if(trim($line) === 'Disallow: /' && $checkDisallowAfter){
1023
+ $validRobotsTxt = false;
1024
+ }
1025
+ }
1026
+
1027
+ if(!$validRobotsTxt && '1' !== seopress_get_hidden_notices_robots_txt_valid() && empty(seopress_get_hidden_notices_robots_txt_valid())){
1028
+ $args = [
1029
+ 'id' => 'notice-robots-txt-valid',
1030
+ 'title' => __('Your site is not indexable!', 'wp-seopress'),
1031
+ 'desc' => __('Your robots.txt file contains a rule that prevents search engines to index your all site: <code>Disallow: /</code>', 'wp-seopress'),
1032
+ 'impact' => [
1033
+ 'high' => __('High impact', 'wp-seopress'),
1034
+ ],
1035
+ 'link' => [
1036
+ 'en' => admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_robots'),
1037
+ 'title' => __('Fix this!', 'wp-seopress'),
1038
+ 'external' => false,
1039
+ ],
1040
+ 'deleteable' => true,
1041
+ ];
1042
+ seopress_notification($args);
1043
+ }
1044
+ }
1045
+
1046
+
1047
+ } catch (\Exception $e) {
1048
+
1049
+ }
1050
+ }
1051
+ ?>
1052
+ </div>
1053
+ <!--#seopress-notifications-center-->
1054
  <?php }
1055
+ }
inc/admin/blocks/tasks.php CHANGED
@@ -4,111 +4,115 @@
4
  echo 'Please don&rsquo;t call the plugin directly. Thanks :)';
5
  exit;
6
  }
 
 
 
7
 
8
- function seopress_get_hidden_notices_tasks_option()
9
- {
10
- $seopress_get_hidden_notices_tasks_option = get_option('seopress_notices');
11
- if (! empty($seopress_get_hidden_notices_tasks_option)) {
12
- foreach ($seopress_get_hidden_notices_tasks_option as $key => $seopress_get_hidden_notices_tasks_value) {
13
- $options[$key] = $seopress_get_hidden_notices_tasks_value;
14
- }
15
- if (isset($seopress_get_hidden_notices_tasks_option['notice-tasks'])) {
16
- return $seopress_get_hidden_notices_tasks_option['notice-tasks'];
 
17
  }
18
  }
19
- }
20
 
21
- if ('1' != seopress_get_hidden_notices_tasks_option()) {
22
- ?>
23
 
24
- <div id="notice-tasks-alert" class="seopress-card">
25
- <div class="seopress-card-title">
26
- <h2><?php _e('Get ready to improve your SEO', 'wp-seopress'); ?>
27
- </h2>
28
 
29
- <span class="seopress-item-toggle-options"></span>
30
- <div class="seopress-card-popover">
31
- <?php
32
- $options = get_option('seopress_dashboard_option_name');
33
- $value = isset($options['hide_tasks']) ? esc_attr($options['hide_tasks']) : 5;
34
- ?>
35
 
36
- <button id="notice-tasks" name="notice-tasks" data-notice="notice-tasks" type="submit" class="btn btnSecondary">
37
- <?php _e('Hide this', 'wp-seopress'); ?>
38
- </button>
 
39
  </div>
40
- </div>
41
- <div class="seopress-card-content">
42
- <ul class="seopress-list-items" role="menu">
43
- <?php $done = '';
44
- if ('valid' === get_option('seopress_pro_license_status') && is_plugin_active('wp-seopress-pro/seopress-pro.php') && ! is_multisite()) {
45
- $done = 'done'; ?>
46
- <li class="seopress-item has-action seopress-item-inner">
47
- <a href="<?php echo admin_url('admin.php?page=seopress-license'); ?>"
48
- class="seopress-item-inner check <?php echo $done; ?>">
49
- <?php _e('Activate your license key', 'wp-seopress'); ?>
50
- </a>
51
- </li>
52
- <?php
53
- }
54
- $done = '';
55
- $options = get_option('seopress_xml_sitemap_option_name');
56
- $check = isset($options['seopress_xml_sitemap_general_enable']);
57
- if ('1' == $check) {
58
- $done = 'done';
59
  }
60
- ?>
61
- <li class="seopress-item has-action seopress-item-inner">
62
- <a href="<?php echo admin_url('admin.php?page=seopress-xml-sitemap'); ?>"
63
- class="seopress-item-inner check <?php echo $done; ?>">
64
- <?php _e('Generate XML sitemaps', 'wp-seopress'); ?>
65
- </a>
66
- </li>
67
- <?php $done = '';
68
- $options = get_option('seopress_social_option_name');
69
- $check = isset($options['seopress_social_facebook_og']);
70
- if ('1' == $check) {
71
- $done = 'done';
72
- }
73
- ?>
74
- <li class="seopress-item has-action seopress-item-inner">
75
- <a href="<?php echo admin_url('admin.php?page=seopress-social'); ?>"
76
- class="seopress-item-inner check <?php echo $done; ?>">
77
- <?php _e('Be social', 'wp-seopress'); ?>
78
- </a>
79
- </li>
80
- <?php
81
- $done = '';
82
- if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
83
- if ('1' === seopress_get_toggle_option('local-business')) {
84
- $done = 'done';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  } ?>
86
- <li class="seopress-item has-action seopress-item-inner">
87
- <a href="<?php echo admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_local_business'); ?>"
88
- class="seopress-item-inner check <?php echo $done; ?>">
89
- <?php _e('Improve Local SEO', 'wp-seopress'); ?>
90
- </a>
91
- </li>
92
- <?php
93
- } ?>
94
- <?php
95
- $done = '';
96
- if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
97
- $options = get_option('seopress_pro_option_name');
98
- $check = isset($options['seopress_rich_snippets_enable']);
99
- if ('1' === seopress_get_toggle_option('rich-snippets') && '1' == $check) {
100
- $done = 'done';
101
  } ?>
102
- <li class="seopress-item has-action seopress-item-inner">
103
- <a href="<?php echo admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_rich_snippets'); ?>"
104
- class="seopress-item-inner check <?php echo $done; ?>">
105
- <?php _e('Add Structured Data Types to increase visibility in SERPs', 'wp-seopress'); ?>
106
- </a>
107
- </li>
108
- <?php
109
- } ?>
110
- </ul>
111
  </div>
112
- </div>
113
 
114
  <?php }
 
4
  echo 'Please don&rsquo;t call the plugin directly. Thanks :)';
5
  exit;
6
  }
7
+ if (defined('SEOPRESS_WL_ADMIN_HEADER') && SEOPRESS_WL_ADMIN_HEADER === false) {
8
+ //do nothing
9
+ } else {
10
 
11
+ function seopress_get_hidden_notices_tasks_option()
12
+ {
13
+ $seopress_get_hidden_notices_tasks_option = get_option('seopress_notices');
14
+ if (! empty($seopress_get_hidden_notices_tasks_option)) {
15
+ foreach ($seopress_get_hidden_notices_tasks_option as $key => $seopress_get_hidden_notices_tasks_value) {
16
+ $options[$key] = $seopress_get_hidden_notices_tasks_value;
17
+ }
18
+ if (isset($seopress_get_hidden_notices_tasks_option['notice-tasks'])) {
19
+ return $seopress_get_hidden_notices_tasks_option['notice-tasks'];
20
+ }
21
  }
22
  }
 
23
 
24
+ if ('1' != seopress_get_hidden_notices_tasks_option()) {
25
+ ?>
26
 
27
+ <div id="notice-tasks-alert" class="seopress-card">
28
+ <div class="seopress-card-title">
29
+ <h2><?php _e('Get ready to improve your SEO', 'wp-seopress'); ?>
30
+ </h2>
31
 
32
+ <span class="seopress-item-toggle-options"></span>
33
+ <div class="seopress-card-popover">
34
+ <?php
35
+ $options = get_option('seopress_dashboard_option_name');
36
+ $value = isset($options['hide_tasks']) ? esc_attr($options['hide_tasks']) : 5;
37
+ ?>
38
 
39
+ <button id="notice-tasks" name="notice-tasks" data-notice="notice-tasks" type="submit" class="btn btnSecondary">
40
+ <?php _e('Hide this', 'wp-seopress'); ?>
41
+ </button>
42
+ </div>
43
  </div>
44
+ <div class="seopress-card-content">
45
+ <ul class="seopress-list-items" role="menu">
46
+ <?php $done = '';
47
+ if ('valid' === get_option('seopress_pro_license_status') && is_plugin_active('wp-seopress-pro/seopress-pro.php') && ! is_multisite()) {
48
+ $done = 'done'; ?>
49
+ <li class="seopress-item has-action seopress-item-inner">
50
+ <a href="<?php echo admin_url('admin.php?page=seopress-license'); ?>"
51
+ class="seopress-item-inner check <?php echo $done; ?>">
52
+ <?php _e('Activate your license key', 'wp-seopress'); ?>
53
+ </a>
54
+ </li>
55
+ <?php
 
 
 
 
 
 
 
56
  }
57
+ $done = '';
58
+ $options = get_option('seopress_xml_sitemap_option_name');
59
+ $check = isset($options['seopress_xml_sitemap_general_enable']);
60
+ if ('1' == $check) {
61
+ $done = 'done';
62
+ }
63
+ ?>
64
+ <li class="seopress-item has-action seopress-item-inner">
65
+ <a href="<?php echo admin_url('admin.php?page=seopress-xml-sitemap'); ?>"
66
+ class="seopress-item-inner check <?php echo $done; ?>">
67
+ <?php _e('Generate XML sitemaps', 'wp-seopress'); ?>
68
+ </a>
69
+ </li>
70
+ <?php $done = '';
71
+ $options = get_option('seopress_social_option_name');
72
+ $check = isset($options['seopress_social_facebook_og']);
73
+ if ('1' == $check) {
74
+ $done = 'done';
75
+ }
76
+ ?>
77
+ <li class="seopress-item has-action seopress-item-inner">
78
+ <a href="<?php echo admin_url('admin.php?page=seopress-social'); ?>"
79
+ class="seopress-item-inner check <?php echo $done; ?>">
80
+ <?php _e('Be social', 'wp-seopress'); ?>
81
+ </a>
82
+ </li>
83
+ <?php
84
+ $done = '';
85
+ if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
86
+ if ('1' === seopress_get_toggle_option('local-business')) {
87
+ $done = 'done';
88
+ } ?>
89
+ <li class="seopress-item has-action seopress-item-inner">
90
+ <a href="<?php echo admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_local_business'); ?>"
91
+ class="seopress-item-inner check <?php echo $done; ?>">
92
+ <?php _e('Improve Local SEO', 'wp-seopress'); ?>
93
+ </a>
94
+ </li>
95
+ <?php
96
  } ?>
97
+ <?php
98
+ $done = '';
99
+ if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
100
+ $options = get_option('seopress_pro_option_name');
101
+ $check = isset($options['seopress_rich_snippets_enable']);
102
+ if ('1' === seopress_get_toggle_option('rich-snippets') && '1' == $check) {
103
+ $done = 'done';
104
+ } ?>
105
+ <li class="seopress-item has-action seopress-item-inner">
106
+ <a href="<?php echo admin_url('admin.php?page=seopress-pro-page#tab=tab_seopress_rich_snippets'); ?>"
107
+ class="seopress-item-inner check <?php echo $done; ?>">
108
+ <?php _e('Add Structured Data Types to increase visibility in SERPs', 'wp-seopress'); ?>
109
+ </a>
110
+ </li>
111
+ <?php
112
  } ?>
113
+ </ul>
114
+ </div>
 
 
 
 
 
 
 
115
  </div>
 
116
 
117
  <?php }
118
+ }
inc/admin/callbacks/Advanced.php CHANGED
@@ -568,7 +568,7 @@ function seopress_advanced_appearance_seo_tools_callback() {
568
  <?php } ?>
569
  value="1"/>
570
 
571
- <?php _e('Hide SEO tools in SEO Dashboard page', 'wp-seopress'); ?></label>
572
 
573
  <?php if (isset($options['seopress_advanced_appearance_seo_tools'])) {
574
  esc_attr($options['seopress_advanced_appearance_seo_tools']);
568
  <?php } ?>
569
  value="1"/>
570
 
571
+ <?php _e('Hide Site Overview in SEO Dashboard page', 'wp-seopress'); ?></label>
572
 
573
  <?php if (isset($options['seopress_advanced_appearance_seo_tools'])) {
574
  esc_attr($options['seopress_advanced_appearance_seo_tools']);
inc/admin/callbacks/Analytics.php CHANGED
@@ -614,7 +614,7 @@ function seopress_google_analytics_ads_callback() {
614
  '<input type="text" name="seopress_google_analytics_option_name[seopress_google_analytics_ads]" placeholder="' . esc_html__('Enter your Google Ads conversion ID (eg: AW-123456789)', 'wp-seopress') . '" value="%s" aria-label="' . __('AW-XXXXXXXXX', 'wp-seopress') . '"/>',
615
  esc_html($check)); ?>
616
  <p class="description">
617
- <a class="seopress-help" href="' . $docs['analytics']['gads'] . '" target="_blank">
618
  <?php _e('Learn how to find your Google Ads Conversion ID', 'wp-seopress'); ?>
619
  </a>
620
  <span class="seopress-help dashicons dashicons-external"></span>
614
  '<input type="text" name="seopress_google_analytics_option_name[seopress_google_analytics_ads]" placeholder="' . esc_html__('Enter your Google Ads conversion ID (eg: AW-123456789)', 'wp-seopress') . '" value="%s" aria-label="' . __('AW-XXXXXXXXX', 'wp-seopress') . '"/>',
615
  esc_html($check)); ?>
616
  <p class="description">
617
+ <a class="seopress-help" href="<?php echo $docs['analytics']['gads']; ?>" target="_blank">
618
  <?php _e('Learn how to find your Google Ads Conversion ID', 'wp-seopress'); ?>
619
  </a>
620
  <span class="seopress-help dashicons dashicons-external"></span>
inc/admin/callbacks/Social.php CHANGED
@@ -344,8 +344,8 @@ value="1"/>
344
 
345
  function seopress_social_facebook_img_cpt_callback()
346
  {
347
- if (! empty(seopress_get_post_types())) {
348
- $post_types = seopress_get_post_types();
349
  unset($post_types['post'], $post_types['page']);
350
 
351
  if (! empty($post_types)) {
344
 
345
  function seopress_social_facebook_img_cpt_callback()
346
  {
347
+ $post_types = seopress_get_service('WordPressData')->getPostTypes();
348
+ if (! empty($post_types)) {
349
  unset($post_types['post'], $post_types['page']);
350
 
351
  if (! empty($post_types)) {
inc/admin/callbacks/Titles.php CHANGED
@@ -85,7 +85,8 @@ function seopress_titles_single_titles_callback()
85
 
86
  $docs = seopress_get_docs_links();
87
 
88
- foreach (seopress_get_post_types() as $seopress_cpt_key => $seopress_cpt_value) {
 
89
  ?>
90
  <h3>
91
  <?php echo $seopress_cpt_value->labels->name; ?>
@@ -790,7 +791,8 @@ function seopress_titles_archives_titles_callback()
790
  {
791
  $options = get_option('seopress_titles_option_name');
792
 
793
- foreach (seopress_get_post_types() as $seopress_cpt_key => $seopress_cpt_value) {
 
794
  if (! in_array($seopress_cpt_key, ['post', 'page'])) {
795
  $check = isset($options['seopress_titles_archive_titles'][$seopress_cpt_key]['title']) ? $options['seopress_titles_archive_titles'][$seopress_cpt_key]['title'] : null; ?>
796
  <h3><?php echo $seopress_cpt_value->labels->name; ?>
85
 
86
  $docs = seopress_get_docs_links();
87
 
88
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
89
+ foreach ($postTypes as $seopress_cpt_key => $seopress_cpt_value) {
90
  ?>
91
  <h3>
92
  <?php echo $seopress_cpt_value->labels->name; ?>
791
  {
792
  $options = get_option('seopress_titles_option_name');
793
 
794
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
795
+ foreach ($postTypes as $seopress_cpt_key => $seopress_cpt_value) {
796
  if (! in_array($seopress_cpt_key, ['post', 'page'])) {
797
  $check = isset($options['seopress_titles_archive_titles'][$seopress_cpt_key]['title']) ? $options['seopress_titles_archive_titles'][$seopress_cpt_key]['title'] : null; ?>
798
  <h3><?php echo $seopress_cpt_value->labels->name; ?>
inc/admin/cron.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined('ABSPATH')) {
4
+ exit;
5
+ }
6
+
7
+ /**
8
+ * Automatically ping Google / Bing daily for XML sitemaps
9
+ *
10
+ * @since 5.3.0
11
+ *
12
+ */
13
+ function seopress_xml_sitemaps_ping_cron_action() {
14
+
15
+ //If site is set to noindex globally
16
+ if ('1' === seopress_global_noindex_option() || '0' === get_option('blog_public')) {
17
+ return;
18
+ }
19
+ //Check if XML sitemaps is enabled
20
+ if ('1' !== seopress_xml_sitemap_general_enable_option() || '1' !== seopress_get_toggle_option('xml-sitemap')) {
21
+ return;
22
+ }
23
+ $url = rawurlencode(get_option('home').'/sitemaps.xml/');
24
+
25
+ $url = apply_filters( 'seopress_sitemaps_xml_ping_url', $url);
26
+
27
+ $args = [
28
+ 'blocking' => false,
29
+ ];
30
+
31
+ $args = apply_filters( 'seopress_sitemaps_xml_ping_args', $args);
32
+
33
+ wp_remote_get('https://www.google.com/ping?sitemap='.$url, $args);
34
+ wp_remote_get('https://www.bing.com/ping?sitemap='.$url, $args);
35
+ }
36
+ add_action('seopress_xml_sitemaps_ping_cron', 'seopress_xml_sitemaps_ping_cron_action');
inc/admin/docs/DocsLinks.php CHANGED
@@ -9,6 +9,7 @@ function seopress_get_docs_links()
9
  $docs = [];
10
  $utm = '?utm_source=plugin&utm_medium=wp-admin-help-tab&utm_campaign=seopress';
11
  $utm2 = '?utm_source=plugin&utm_medium=wizard&utm_campaign=seopress';
 
12
 
13
  if (function_exists('seopress_get_locale') && 'fr' == seopress_get_locale()) {
14
  $docs = [
@@ -17,47 +18,58 @@ function seopress_get_docs_links()
17
  'support' => 'https://www.seopress.org/fr/support/' . $utm,
18
  'guides' => 'https://www.seopress.org/fr/support/guides/' . $utm,
19
  'faq' => 'https://www.seopress.org/fr/support/faq/' . $utm,
20
- 'insights' => 'https://www.seopress.org/insights/' . $utm2,
21
  'get_started' => [
22
- 'installation' => ['Installation de SEOPress' => 'https://www.seopress.org/fr/support/guides/debutez-seopress/' . $utm],
23
- 'license' => ['Activater votre clé de licence pour recevoir les mises à jours automatiques' => 'https://www.seopress.org/fr/support/guides/activer-licence-seopress-pro/' . $utm],
24
  'wizard' => ['Configurez SEOPress en 5 minutes' => 'https://youtu.be/uwgS5zTk0j0' . $utm],
25
- 'migration' => ['Migrer vos métadonnées SEO depuis d\'autres extensions' => 'https://www.seopress.org/fr/migrate-vers-seopress/' . $utm],
26
- 'sitemaps' => ['Favoriser l\'exploration de votre site WordPress par les robots des moteurs de recherche' => 'https://www.seopress.org/fr/support/guides/activer-sitemap-xml/' . $utm],
27
- 'content' => ['Optimiser un contenu de A à Z avec SEOPress' => 'https://www.seopress.org/fr/blog/optimisez-votre-article-wordpress-pour-un-mot-cle/' . $utm],
28
- 'analytics' => ['Mesurez votre trafic avec Google Analytics' => 'https://www.seopress.org/fr/support/guides/debutez-google-analytics/' . $utm],
29
- 'search_console' => ['Ajouter votre site WordPress à l’index de Google' => 'https://www.seopress.org/fr/support/guides/google-search-console/' . $utm],
30
  'social' => ['Optimisez votre taux de clics sur les réseaux sociaux' => 'https://www.seopress.org/fr/support/guides/gerer-les-metas-facebook-open-graph-et-twitter-cards/' . $utm],
31
  ],
 
 
 
 
 
 
 
 
 
32
  'titles' => [
33
  'thumbnail' => 'https://support.google.com/programmable-search/answer/1626955?hl=fr',
34
- 'wrong_meta' => 'https://www.seopress.org/fr/support/guides/meta-titre-description-incorrectes-dans-google/' . $utm,
35
  ],
36
  'sitemaps' => [
37
  'error' => [
38
- 'blank' => 'https://www.seopress.org/fr/support/guides/xml-sitemap-page-blanche/' . $utm,
39
  '404' => 'https://www.seopress.org/fr/support/guides/plan-de-site-xml-retourne-erreur-404/' . $utm,
40
- 'html' => 'https://www.seopress.org/fr/support/guides/exclure-fichiers-xml-xsl-extensions-cache/' . $utm,
41
  ],
42
- 'html' => 'https://www.seopress.org/fr/support/guides/activer-plan-de-site-html/' . $utm,
43
- 'xml' => 'https://www.seopress.org/fr/support/guides/activer-sitemap-xml/' . $utm,
44
- 'image' => 'https://www.seopress.org/fr/support/guides/activer-sitemap-xml-images/' . $utm,
45
- 'video' => 'https://www.seopress.org/fr/support/guides/plan-de-site-xml-video/' . $utm,
46
  ],
47
  'social' => [
48
  'og' => 'https://www.seopress.org/fr/support/guides/gerer-les-metas-facebook-open-graph-et-twitter-cards/' . $utm,
49
  ],
50
  'analytics' => [
51
- 'connect' => 'https://www.seopress.org/fr/support/guides/connectez-site-wordpress-a-google-analytics/' . $utm,
52
- 'custom_dimensions' => 'https://www.seopress.org/fr/support/guides/creer-dimensions-personnalisees-google-analytics/' . $utm,
53
  'custom_tracking' => 'https://www.seopress.org/fr/support/hooks/ajouter-votre-code-de-suivi-personnalise-avec-le-consentement-utilisateur/' . $utm,
54
  'consent_msg' => 'https://www.seopress.org/fr/support/hooks/filtrer-le-message-du-consentement-utilisateur/' . $utm,
55
  'gads' => 'https://www.seopress.org/fr/support/guides/trouver-votre-id-de-conversion-google-ads/' . $utm,
56
- 'gtm' => 'https://www.seopress.org/fr/support/guides/google-tag-manager-site-wordpress-seopress/' . $utm,
57
  'ecommerce' => 'https://www.seopress.org/fr/support/guides/configurer-le-commerce-electronique-ameliore-pour-google-analytics/' . $utm,
 
 
58
  ],
59
  'compatibility' => [
60
- 'automatic' => 'https://www.seopress.org/fr/support/guides/generez-automatiquement-meta-descriptions-divi-oxygen-builder/' . $utm,
61
  ],
62
  'security' => [
63
  'metaboxe_seo' => 'https://www.seopress.org/fr/support/hooks/filtrer-lappel-de-la-metaboxe-seo-par-types-de-contenu/' . $utm,
@@ -67,54 +79,66 @@ function seopress_get_docs_links()
67
  'google_preview' => [
68
  'authentification' => 'https://www.seopress.org/fr/support/hooks/filtrer-la-requete-distante-google-snippet-preview/' . $utm,
69
  ],
70
- 'bot' => 'https://www.seopress.org/fr/support/guides/detecter-liens-casses/' . $utm,
71
  'lb' => [
72
- 'eat' => 'https://www.seopress.org/fr/blog/optimiser-site-wordpress-google-eat/' . $utm,
73
  ],
74
  'robots' => [
75
- 'file' => 'https://www.seopress.org/fr/support/guides/editer-fichier-robots-txt/' . $utm,
76
  ],
77
  'breadcrumbs' => [
78
  'sep' => 'https://www.seopress.org/fr/support/hooks/filtrer-le-separateur-du-fil-dariane/' . $utm,
79
  ],
80
  'redirects' => [
81
- 'enable' => 'https://www.seopress.org/fr/support/guides/activer-redirections-301-surveillance-404/' . $utm,
82
  'query' => 'https://www.seopress.org/fr/support/guides/nettoyez-vos-erreurs-404-a-laide-dune-requete-mysql/' . $utm,
83
  ],
84
  'schemas' => [
85
  'ebook' => 'https://www.seopress.org/fr/support/ebooks/types-de-donnees-structurees-de-google-schemas/' . $utm,
86
- 'add' => 'https://www.seopress.org/fr/blog/comment-utiliser-les-schemas-dans-votre-site-wordpress-avec-seopress-pro-1/' . $utm,
87
- 'faq_acf' => 'https://www.seopress.org/fr/support/guides/schema-faq-automatique-champs-repeteurs-acf/' . $utm,
88
- 'dynamic' => 'https://www.seopress.org/fr/support/guides/gerez-vos-balises-titres-metas/' . $utm,
 
 
 
89
  ],
90
  'tools' => [
91
  'csv_import' => 'https://www.seopress.org/fr/support/guides/importer-metadonnees-csv-seopress-pro/' . $utm,
92
  'csv_export' => 'https://www.seopress.org/fr/support/guides/exporter-vos-metadonnees-vers-un-fichier-csv-avec-seopress-pro/' . $utm,
93
  ],
94
  'license' => [
95
- 'account' => 'https://www.seopress.org/fr/compte/' . $utm,
96
- 'license_errors' => 'https://www.seopress.org/fr/support/guides/activer-licence-seopress-pro/' . $utm,
97
  ],
98
  ];
99
  } else {
100
  $docs = [
101
  'website' => 'https://www.seopress.org/' . $utm,
102
- 'blog' => 'https://www.seopress.org/blog/' . $utm,
103
  'support' => 'https://www.seopress.org/support/' . $utm,
104
  'guides' => 'https://www.seopress.org/support/guides/' . $utm,
105
  'faq' => 'https://www.seopress.org/support/faq/' . $utm,
106
- 'insights' => 'https://www.seopress.org/insights/' . $utm2,
107
  'get_started' => [
108
  'installation' => [__('Installation of SEOPress', 'wp-seopress') => 'https://www.seopress.org/support/guides/get-started-seopress/' . $utm],
109
  'license' => [__('Activate your license key to receive automatic updates', 'wp-seopress') => 'https://www.seopress.org/support/guides/activate-seopress-pro-license/' . $utm],
110
  'wizard' => [__('Configure SEOPress in 5 minutes', 'wp-seopress') => 'https://youtu.be/uwgS5zTk0j0' . $utm],
111
- 'migration' => [__('Migrate your SEO metadata from other plugins', 'wp-seopress') => 'https://www.seopress.org/migrate-to-seopress/' . $utm],
112
  'sitemaps' => [__('Promote the exploration of your WordPress site by search engine robots', 'wp-seopress') => 'https://www.seopress.org/support/guides/enable-xml-sitemaps/' . $utm],
113
- 'content' => [__('Optimize content from A to Z with SEOPress', 'wp-seopress') => 'https://www.seopress.org/blog/optimize-wordpress-posts-for-a-keyword/' . $utm],
114
  'analytics' => [__('Measure your traffic with Google Analytics', 'wp-seopress') => 'https://www.seopress.org/support/guides/google-analytics/' . $utm],
115
  'search_console' => [__('Add your WordPress site to Google’s index', 'wp-seopress') => 'https://www.seopress.org/support/guides/google-search-console/' . $utm],
116
  'social' => [__('Optimize your click-through rate on social networks', 'wp-seopress') => 'https://www.seopress.org/support/guides/manage-facebook-open-graph-and-twitter-cards-metas/' . $utm],
117
  ],
 
 
 
 
 
 
 
 
 
118
  'titles' => [
119
  'thumbnail' => 'https://support.google.com/programmable-search/answer/1626955?hl=en',
120
  'wrong_meta' => 'https://www.seopress.org/support/guides/google-uses-the-wrong-meta-title-meta-description-in-search-results/' . $utm,
@@ -141,21 +165,23 @@ function seopress_get_docs_links()
141
  'gads' => 'https://www.seopress.org/support/guides/how-to-find-your-google-ads-conversions-id/' . $utm,
142
  'gtm' => 'https://www.seopress.org/support/guides/google-tag-manager-wordpress-seopress/' . $utm,
143
  'ecommerce' => 'https://www.seopress.org/support/guides/how-to-setup-google-enhanced-ecommerce/' . $utm,
 
 
144
  ],
145
  'compatibility' => [
146
  'automatic' => 'https://www.seopress.org/support/guides/generate-automatic-meta-description-from-page-builders/' . $utm,
147
  ],
148
  'security' => [
149
  'metaboxe_seo' => 'https://www.seopress.org/support/hooks/filter-seo-metaboxe-call-by-post-type/' . $utm,
150
- 'metaboxe_ca' => 'https://www.seopress.org/support/hooks/filter-content-analysis-metaboxe-call-by-post-type/' . $utm,
151
- 'metaboxe_data_types' => 'https://www.seopress.org/support/hooks/filter-structured-data-types-metaboxe-call-by-post-type/' . $utm,
152
  ],
153
  'google_preview' => [
154
  'authentification' => 'https://www.seopress.org/support/hooks/filter-google-snippet-preview-remote-request/' . $utm,
155
  ],
156
- 'bot' => 'https://www.seopress.org/support/guides/detect-broken-links/?utm_source=plugin&utm_medium=wp-admin&utm_campaign=seopress' . $utm,
157
  'lb' => [
158
- 'eat' => 'https://www.seopress.org/blog/optimizing-wordpress-sites-for-google-eat/' . $utm,
159
  ],
160
  'robots' => [
161
  'file' => 'https://www.seopress.org/support/guides/edit-robots-txt-file/' . $utm,
@@ -169,10 +195,13 @@ function seopress_get_docs_links()
169
  ],
170
  'schemas' => [
171
  'ebook' => 'https://www.seopress.org/support/ebooks/master-google-structured-data-types-schemas/' . $utm,
172
- 'add' => 'https://www.seopress.org/blog/how-to-add-schema-to-wordpress-with-seopress-1/' . $utm,
173
  'faq_acf' => 'https://www.seopress.org/support/guides/create-an-automatic-faq-schema-with-acf-repeater-fields/' . $utm,
174
  'dynamic' => 'https://www.seopress.org/support/guides/manage-titles-meta-descriptions/' . $utm,
175
  ],
 
 
 
176
  'tools' => [
177
  'csv_import' => 'https://www.seopress.org/support/guides/import-metadata-from-a-csv-file-with-seopress-pro/' . $utm,
178
  'csv_export' => 'https://www.seopress.org/support/guides/export-metadata-from-seopress-to-a-csv-file/' . $utm,
9
  $docs = [];
10
  $utm = '?utm_source=plugin&utm_medium=wp-admin-help-tab&utm_campaign=seopress';
11
  $utm2 = '?utm_source=plugin&utm_medium=wizard&utm_campaign=seopress';
12
+ $utm3 = '?utm_source=plugin&utm_medium=wp-admin-insights&utm_campaign=seopress';
13
 
14
  if (function_exists('seopress_get_locale') && 'fr' == seopress_get_locale()) {
15
  $docs = [
18
  'support' => 'https://www.seopress.org/fr/support/' . $utm,
19
  'guides' => 'https://www.seopress.org/fr/support/guides/' . $utm,
20
  'faq' => 'https://www.seopress.org/fr/support/faq/' . $utm,
21
+ 'insights' => 'https://www.seopress.org/fr/extensions-seo-wordpress/seopress-insights/' . $utm2,
22
  'get_started' => [
23
+ 'installation' => ['Installation de SEOPress' => 'https://www.seopress.org/fr/support/guides/debutez-avec-seopress/' . $utm],
24
+ 'license' => ['Activater votre clé de licence pour recevoir les mises à jours automatiques' => 'https://www.seopress.org/fr/support/guides/activer-votre-licence-seopress-pro-insights/' . $utm],
25
  'wizard' => ['Configurez SEOPress en 5 minutes' => 'https://youtu.be/uwgS5zTk0j0' . $utm],
26
+ 'migration' => ['Migrer vos métadonnées SEO depuis d\'autres extensions' => 'https://www.seopress.org/fr/solutions/migrer-vers-seopress/' . $utm],
27
+ 'sitemaps' => ['Favoriser l\'exploration de votre site WordPress par les robots des moteurs de recherche' => 'https://www.seopress.org/fr/support/guides/activer-le-sitemap-xml/' . $utm],
28
+ 'content' => ['Optimiser un contenu de A à Z avec SEOPress' => 'https://www.seopress.org/fr/support/tutoriels/optimisez-votre-article-wordpress-pour-un-mot-cle/' . $utm],
29
+ 'analytics' => ['Mesurez votre trafic avec Google Analytics' => 'https://www.seopress.org/fr/support/guides/debutez-avec-google-analytics/' . $utm],
30
+ 'search_console' => ['Ajouter votre site WordPress à l’index de Google' => 'https://www.seopress.org/fr/support/guides/ajouter-votre-site-a-google-search-console/' . $utm],
31
  'social' => ['Optimisez votre taux de clics sur les réseaux sociaux' => 'https://www.seopress.org/fr/support/guides/gerer-les-metas-facebook-open-graph-et-twitter-cards/' . $utm],
32
  ],
33
+ 'get_started_insights' => [
34
+ 'installation' => ['Activer votre licence SEOPress PRO / Insights' => 'https://www.seopress.org/fr/support/guides/activer-votre-licence-seopress-pro-insights/' . $utm3],
35
+ 'track_kw' => ['Suivez les positions de vos mots clés dans Google avec SEOPress Insights' => 'https://www.seopress.org/fr/support/guides/suivez-les-positions-de-vos-mots-cles-dans-google-avec-seopress-insights/' . $utm3],
36
+ 'track_bl' => ['Surveiller et analyser vos backlinks avec SEOPress Insights' => 'https://www.seopress.org/fr/support/guides/surveiller-et-analyser-vos-backlinks-avec-seopress-insights/' . $utm3],
37
+ 'find_kw' => ['Trouver les bons mots clés pour le référencement de votre site' => 'https://www.seopress.org/fr/support/tutoriels/trouver-les-bons-mots-cles-pour-le-referencement-de-votre-site/' . $utm3],
38
+ 'optimize_kw' => ['Optimisez votre article WordPress pour un mot clé' => 'https://www.seopress.org/fr/support/tutoriels/optimisez-votre-article-wordpress-pour-un-mot-cle/' . $utm3],
39
+ 'audit_bl' => ['Auditer les backlinks de votre site WordPress (dans WordPress)' => 'https://www.seopress.org/fr/support/tutoriels/auditer-les-backlinks-de-votre-site-wordpress-dans-wordpress/' . $utm3],
40
+ 'importance_bl' => ['L’importance des backlinks' => 'https://www.seopress.org/fr/support/tutoriels/limportance-des-backlinks/' . $utm3],
41
+ ],
42
  'titles' => [
43
  'thumbnail' => 'https://support.google.com/programmable-search/answer/1626955?hl=fr',
44
+ 'wrong_meta' => 'https://www.seopress.org/fr/support/guides/google-utilise-une-balise-titre-meta-description-incorrecte-dans-les-resultats-de-recherche/' . $utm,
45
  ],
46
  'sitemaps' => [
47
  'error' => [
48
+ 'blank' => 'https://www.seopress.org/fr/support/guides/mon-plan-de-site-xml-retourne-une-page-blanche/' . $utm,
49
  '404' => 'https://www.seopress.org/fr/support/guides/plan-de-site-xml-retourne-erreur-404/' . $utm,
50
+ 'html' => 'https://www.seopress.org/fr/support/guides/exclure-les-fichiers-xml-et-xsl-des-extensions-de-cache/' . $utm,
51
  ],
52
+ 'html' => 'https://www.seopress.org/fr/support/guides/activer-le-plan-de-site-html/' . $utm,
53
+ 'xml' => 'https://www.seopress.org/fr/support/guides/activer-le-sitemap-xml/' . $utm,
54
+ 'image' => 'https://www.seopress.org/fr/support/guides/activer-le-sitemap-xml-pour-images/' . $utm,
55
+ 'video' => 'https://www.seopress.org/fr/support/guides/activer-le-sitemap-xml-pour-les-videos/' . $utm,
56
  ],
57
  'social' => [
58
  'og' => 'https://www.seopress.org/fr/support/guides/gerer-les-metas-facebook-open-graph-et-twitter-cards/' . $utm,
59
  ],
60
  'analytics' => [
61
+ 'connect' => 'https://www.seopress.org/fr/support/guides/connectez-votre-site-wordpress-a-google-analytics/' . $utm,
62
+ 'custom_dimensions' => 'https://www.seopress.org/fr/support/guides/creer-des-dimensions-personnalisees-dans-google-analytics/' . $utm,
63
  'custom_tracking' => 'https://www.seopress.org/fr/support/hooks/ajouter-votre-code-de-suivi-personnalise-avec-le-consentement-utilisateur/' . $utm,
64
  'consent_msg' => 'https://www.seopress.org/fr/support/hooks/filtrer-le-message-du-consentement-utilisateur/' . $utm,
65
  'gads' => 'https://www.seopress.org/fr/support/guides/trouver-votre-id-de-conversion-google-ads/' . $utm,
66
+ 'gtm' => 'https://www.seopress.org/fr/support/guides/ajouter-google-tag-manager-a-votre-site-wordpress-avec-seopress/' . $utm,
67
  'ecommerce' => 'https://www.seopress.org/fr/support/guides/configurer-le-commerce-electronique-ameliore-pour-google-analytics/' . $utm,
68
+ 'events' => 'https://www.seopress.org/fr/support/guides/suivre-vos-telechargements-liens-affilies-sortants-et-externes-google-analytics/' . $utm,
69
+ 'ga4_property' => 'https://support.google.com/analytics/answer/9744165?hl=en&ref_topic=9303319#analyticsjs',
70
  ],
71
  'compatibility' => [
72
+ 'automatic' => 'https://www.seopress.org/fr/support/guides/generez-automatiquement-les-metas-descriptions-depuis-divi-oxygen-builder-fusion-builder/' . $utm,
73
  ],
74
  'security' => [
75
  'metaboxe_seo' => 'https://www.seopress.org/fr/support/hooks/filtrer-lappel-de-la-metaboxe-seo-par-types-de-contenu/' . $utm,
79
  'google_preview' => [
80
  'authentification' => 'https://www.seopress.org/fr/support/hooks/filtrer-la-requete-distante-google-snippet-preview/' . $utm,
81
  ],
82
+ 'bot' => 'https://www.seopress.org/fr/support/guides/detecter-les-liens-casses-dans-vos-contenus/' . $utm,
83
  'lb' => [
84
+ 'eat' => 'https://www.seopress.org/fr/newsroom/reportage/optimiser-votre-site-wordpress-pour-google-eat/' . $utm,
85
  ],
86
  'robots' => [
87
+ 'file' => 'https://www.seopress.org/fr/support/guides/editer-votre-fichier-robots-txt/' . $utm,
88
  ],
89
  'breadcrumbs' => [
90
  'sep' => 'https://www.seopress.org/fr/support/hooks/filtrer-le-separateur-du-fil-dariane/' . $utm,
91
  ],
92
  'redirects' => [
93
+ 'enable' => 'https://www.seopress.org/fr/support/guides/activer-les-redirections-301-et-la-surveillance-des-404/' . $utm,
94
  'query' => 'https://www.seopress.org/fr/support/guides/nettoyez-vos-erreurs-404-a-laide-dune-requete-mysql/' . $utm,
95
  ],
96
  'schemas' => [
97
  'ebook' => 'https://www.seopress.org/fr/support/ebooks/types-de-donnees-structurees-de-google-schemas/' . $utm,
98
+ 'add' => 'https://www.seopress.org/fr/support/tutoriels/comment-utiliser-les-schemas-dans-votre-site-wordpress-avec-seopress-pro-1/' . $utm,
99
+ 'faq_acf' => 'https://www.seopress.org/fr/support/guides/creer-un-schema-faq-automatique-avec-les-champs-repeteurs-dacf/' . $utm,
100
+ 'dynamic' => 'https://www.seopress.org/fr/support/guides/gerez-vos-balises-titres-et-metas/' . $utm,
101
+ ],
102
+ 'page_speed' => [
103
+ 'cwv' => 'https://www.seopress.org/fr/newsroom/reportage/les-core-web-vitals-et-leurs-effets-sur-le-seo-des-sites-wordpress/' . $utm,
104
  ],
105
  'tools' => [
106
  'csv_import' => 'https://www.seopress.org/fr/support/guides/importer-metadonnees-csv-seopress-pro/' . $utm,
107
  'csv_export' => 'https://www.seopress.org/fr/support/guides/exporter-vos-metadonnees-vers-un-fichier-csv-avec-seopress-pro/' . $utm,
108
  ],
109
  'license' => [
110
+ 'account' => 'https://www.seopress.org/fr/mon-compte/' . $utm,
111
+ 'license_errors' => 'https://www.seopress.org/fr/support/guides/activer-votre-licence-seopress-pro-insights/' . $utm,
112
  ],
113
  ];
114
  } else {
115
  $docs = [
116
  'website' => 'https://www.seopress.org/' . $utm,
117
+ 'blog' => 'https://www.seopress.org/newsroom/' . $utm,
118
  'support' => 'https://www.seopress.org/support/' . $utm,
119
  'guides' => 'https://www.seopress.org/support/guides/' . $utm,
120
  'faq' => 'https://www.seopress.org/support/faq/' . $utm,
121
+ 'insights' => 'https://www.seopress.org/wordpress-seo-plugins/insights/' . $utm2,
122
  'get_started' => [
123
  'installation' => [__('Installation of SEOPress', 'wp-seopress') => 'https://www.seopress.org/support/guides/get-started-seopress/' . $utm],
124
  'license' => [__('Activate your license key to receive automatic updates', 'wp-seopress') => 'https://www.seopress.org/support/guides/activate-seopress-pro-license/' . $utm],
125
  'wizard' => [__('Configure SEOPress in 5 minutes', 'wp-seopress') => 'https://youtu.be/uwgS5zTk0j0' . $utm],
126
+ 'migration' => [__('Migrate your SEO metadata from other plugins', 'wp-seopress') => 'https://www.seopress.org/solutions/migrate-from/' . $utm],
127
  'sitemaps' => [__('Promote the exploration of your WordPress site by search engine robots', 'wp-seopress') => 'https://www.seopress.org/support/guides/enable-xml-sitemaps/' . $utm],
128
+ 'content' => [__('Optimize content from A to Z with SEOPress', 'wp-seopress') => 'https://www.seopress.org/support/tutorials/optimize-wordpress-posts-for-a-keyword/' . $utm],
129
  'analytics' => [__('Measure your traffic with Google Analytics', 'wp-seopress') => 'https://www.seopress.org/support/guides/google-analytics/' . $utm],
130
  'search_console' => [__('Add your WordPress site to Google’s index', 'wp-seopress') => 'https://www.seopress.org/support/guides/google-search-console/' . $utm],
131
  'social' => [__('Optimize your click-through rate on social networks', 'wp-seopress') => 'https://www.seopress.org/support/guides/manage-facebook-open-graph-and-twitter-cards-metas/' . $utm],
132
  ],
133
+ 'get_started_insights' => [
134
+ 'installation' => ['Activate your SEOPress Insights license' => 'https://www.seopress.org/support/guides/activate-seopress-pro-license/' . $utm3],
135
+ 'track_kw' => ['Track your keyword rankings in Google with SEOPress Insights' => 'https://www.seopress.org/support/guides/track-keyword-rankings-google-seopress-insights/' . $utm3],
136
+ 'track_bl' => ['Monitor and analyse your Backlinks with SEOPress Insights' => 'https://www.seopress.org/support/guides/monitor-and-analyse-your-backlinks-with-seopress-insights/' . $utm3],
137
+ 'find_kw' => ['Finding SEO keywords for your WordPress site' => 'https://www.seopress.org/support/tutorials/finding-seo-keywords-for-your-blog/' . $utm3],
138
+ 'optimize_kw' => ['Optimize WordPress posts for a keyword' => 'https://www.seopress.org/support/tutorials/optimize-wordpress-posts-for-a-keyword/' . $utm3],
139
+ 'audit_bl' => ['Audit the backlinks of your WordPress site (in WordPress)' => 'https://www.seopress.org/support/tutorials/audit-the-backlinks-of-your-wordpress-site-in-wordpress/' . $utm3],
140
+ 'importance_bl' => ['The importance of backlinks' => 'https://www.seopress.org/support/tutorials/the-importance-of-backlinks/' . $utm3],
141
+ ],
142
  'titles' => [
143
  'thumbnail' => 'https://support.google.com/programmable-search/answer/1626955?hl=en',
144
  'wrong_meta' => 'https://www.seopress.org/support/guides/google-uses-the-wrong-meta-title-meta-description-in-search-results/' . $utm,
165
  'gads' => 'https://www.seopress.org/support/guides/how-to-find-your-google-ads-conversions-id/' . $utm,
166
  'gtm' => 'https://www.seopress.org/support/guides/google-tag-manager-wordpress-seopress/' . $utm,
167
  'ecommerce' => 'https://www.seopress.org/support/guides/how-to-setup-google-enhanced-ecommerce/' . $utm,
168
+ 'events' => 'https://www.seopress.org/support/guides/how-to-track-file-downloads-affiliates-outbound-and-external-links-with-google-analytics/' . $utm,
169
+ 'ga4_property' => 'https://support.google.com/analytics/answer/9744165?hl=en&ref_topic=9303319#analyticsjs',
170
  ],
171
  'compatibility' => [
172
  'automatic' => 'https://www.seopress.org/support/guides/generate-automatic-meta-description-from-page-builders/' . $utm,
173
  ],
174
  'security' => [
175
  'metaboxe_seo' => 'https://www.seopress.org/support/hooks/filter-seo-metaboxe-call-by-post-type/' . $utm,
176
+ 'metaboxe_ca' => 'https://www.seopress.org/support/hooks/filter-content-analysis-metabox-call-by-post-type/' . $utm,
177
+ 'metaboxe_data_types' => 'https://www.seopress.org/support/hooks/filter-structured-data-types-metabox-call-by-post-type/' . $utm,
178
  ],
179
  'google_preview' => [
180
  'authentification' => 'https://www.seopress.org/support/hooks/filter-google-snippet-preview-remote-request/' . $utm,
181
  ],
182
+ 'bot' => 'https://www.seopress.org/support/guides/detect-broken-links/' . $utm,
183
  'lb' => [
184
+ 'eat' => 'https://www.seopress.org/newsroom/featured-stories/optimizing-wordpress-sites-for-google-eat/' . $utm,
185
  ],
186
  'robots' => [
187
  'file' => 'https://www.seopress.org/support/guides/edit-robots-txt-file/' . $utm,
195
  ],
196
  'schemas' => [
197
  'ebook' => 'https://www.seopress.org/support/ebooks/master-google-structured-data-types-schemas/' . $utm,
198
+ 'add' => 'https://www.seopress.org/support/tutorials/how-to-add-schema-to-wordpress-with-seopress-1/' . $utm,
199
  'faq_acf' => 'https://www.seopress.org/support/guides/create-an-automatic-faq-schema-with-acf-repeater-fields/' . $utm,
200
  'dynamic' => 'https://www.seopress.org/support/guides/manage-titles-meta-descriptions/' . $utm,
201
  ],
202
+ 'page_speed' => [
203
+ 'cwv' => 'https://www.seopress.org/newsroom/featured-stories/core-web-vitals-and-wordpress-seo/' . $utm,
204
+ ],
205
  'tools' => [
206
  'csv_import' => 'https://www.seopress.org/support/guides/import-metadata-from-a-csv-file-with-seopress-pro/' . $utm,
207
  'csv_export' => 'https://www.seopress.org/support/guides/export-metadata-from-seopress-to-a-csv-file/' . $utm,
inc/admin/metaboxes/admin-metaboxes-form.php CHANGED
@@ -403,7 +403,7 @@ if ('term.php' == $pagenow || 'edit-tags.php' == $pagenow) { ?>
403
  <?php _e('Facebook Thumbnail', 'wp-seopress'); ?>
404
  </label>
405
  <input id="seopress_social_fb_img_meta" type="text" name="seopress_social_fb_img"
406
- class="components-text-control__input"
407
  placeholder="<?php esc_html_e('Select your default thumbnail', 'wp-seopress'); ?>"
408
  aria-label="<?php _e('Facebook Thumbnail', 'wp-seopress'); ?>"
409
  value="<?php echo $seopress_social_fb_img; ?>" />
@@ -459,11 +459,11 @@ if ('term.php' == $pagenow || 'edit-tags.php' == $pagenow) { ?>
459
  </p>
460
  </div>
461
  <div class="snippet-fb-img"><img src="" width="524" height="274" alt=""
462
- aria-label="" /></div>
463
  <div class="snippet-fb-img-custom" style="display:none"><img src="" width="524"
464
- height="274" alt="" aria-label="" /></div>
465
  <div class="snippet-fb-img-default" style="display:none"><img src="" width="524"
466
- height="274" alt="" aria-label="" /></div>
467
  <div class="facebook-snippet-text">
468
  <div class="snippet-meta">
469
  <div class="snippet-fb-url"></div>
@@ -523,7 +523,7 @@ if ('term.php' == $pagenow || 'edit-tags.php' == $pagenow) { ?>
523
  <p>
524
  <label for="seopress_social_twitter_img_meta"><?php _e('Twitter Thumbnail', 'wp-seopress'); ?></label>
525
  <input id="seopress_social_twitter_img_meta" type="text"
526
- class="components-text-control__input" name="seopress_social_twitter_img"
527
  placeholder="<?php esc_html_e('Select your default thumbnail', 'wp-seopress'); ?>"
528
  value="<?php echo $seopress_social_twitter_img; ?>" />
529
  </p>
@@ -576,11 +576,11 @@ if ('term.php' == $pagenow || 'edit-tags.php' == $pagenow) { ?>
576
  </p>
577
  </div>
578
  <div class="snippet-twitter-img"><img src="" width="524" height="274" alt=""
579
- aria-label="" /></div>
580
  <div class="snippet-twitter-img-custom" style="display:none"><img src="" width="600"
581
- height="314" alt="" aria-label="" /></div>
582
  <div class="snippet-twitter-img-default" style="display:none"><img src=""
583
- width="600" height="314" alt="" aria-label="" /></div>
584
 
585
  <div class="twitter-snippet-text">
586
  <div class="title-desc">
@@ -611,7 +611,9 @@ if ('term.php' == $pagenow || 'edit-tags.php' == $pagenow) { ?>
611
  <?php }
612
  }
613
 
614
- if (array_key_exists('redirect-tab', $seo_tabs)) { ?>
 
 
615
  <div id="tabs-4">
616
  <p>
617
  <label for="seopress_redirections_enabled_meta" id="seopress_redirections_enabled">
@@ -621,6 +623,29 @@ if ('term.php' == $pagenow || 'edit-tags.php' == $pagenow) { ?>
621
  <?php _e('Enable redirection?', 'wp-seopress'); ?>
622
  </label>
623
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
624
  <p>
625
 
626
  <label for="seopress_redirections_type"><?php _e('Select a redirection type: ', 'wp-seopress'); ?></label>
@@ -646,12 +671,43 @@ if ('term.php' == $pagenow || 'edit-tags.php' == $pagenow) { ?>
646
  <p>
647
  <label for="seopress_redirections_value_meta"><?php _e('URL redirection', 'wp-seopress'); ?></label>
648
  <input id="seopress_redirections_value_meta" type="text" name="seopress_redirections_value"
649
- class="components-text-control__input"
650
  placeholder="<?php esc_html_e('Enter your new URL in absolute (eg: https://www.example.com/)', 'wp-seopress'); ?>"
651
  aria-label="<?php _e('URL redirection', 'wp-seopress'); ?>"
652
  value="<?php echo $seopress_redirections_value; ?>" />
653
 
654
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
  <?php if ('seopress_404' == $typenow) { ?>
656
  <p>
657
  <label for="seopress_redirections_param_meta"><?php _e('Query parameters', 'wp-seopress'); ?></label>
403
  <?php _e('Facebook Thumbnail', 'wp-seopress'); ?>
404
  </label>
405
  <input id="seopress_social_fb_img_meta" type="text" name="seopress_social_fb_img"
406
+ class="components-text-control__input seopress_social_fb_img_meta"
407
  placeholder="<?php esc_html_e('Select your default thumbnail', 'wp-seopress'); ?>"
408
  aria-label="<?php _e('Facebook Thumbnail', 'wp-seopress'); ?>"
409
  value="<?php echo $seopress_social_fb_img; ?>" />
459
  </p>
460
  </div>
461
  <div class="snippet-fb-img"><img src="" width="524" height="274" alt=""
462
+ aria-label="" /><span class="seopress_social_fb_img_upload"></span></div>
463
  <div class="snippet-fb-img-custom" style="display:none"><img src="" width="524"
464
+ height="274" alt="" aria-label="" /><span class="seopress_social_fb_img_upload"></span></div>
465
  <div class="snippet-fb-img-default" style="display:none"><img src="" width="524"
466
+ height="274" alt="" aria-label="" /><span class="seopress_social_fb_img_upload"></span></div>
467
  <div class="facebook-snippet-text">
468
  <div class="snippet-meta">
469
  <div class="snippet-fb-url"></div>
523
  <p>
524
  <label for="seopress_social_twitter_img_meta"><?php _e('Twitter Thumbnail', 'wp-seopress'); ?></label>
525
  <input id="seopress_social_twitter_img_meta" type="text"
526
+ class="components-text-control__input seopress_social_twitter_img_meta" name="seopress_social_twitter_img"
527
  placeholder="<?php esc_html_e('Select your default thumbnail', 'wp-seopress'); ?>"
528
  value="<?php echo $seopress_social_twitter_img; ?>" />
529
  </p>
576
  </p>
577
  </div>
578
  <div class="snippet-twitter-img"><img src="" width="524" height="274" alt=""
579
+ aria-label="" /><span class="seopress_social_twitter_img_upload"></span></div>
580
  <div class="snippet-twitter-img-custom" style="display:none"><img src="" width="600"
581
+ height="314" alt="" aria-label="" /><span class="seopress_social_twitter_img_upload"></span></div>
582
  <div class="snippet-twitter-img-default" style="display:none"><img src=""
583
+ width="600" height="314" alt="" aria-label="" /><span class="seopress_social_twitter_img_upload"></span></div>
584
 
585
  <div class="twitter-snippet-text">
586
  <div class="title-desc">
611
  <?php }
612
  }
613
 
614
+ if (array_key_exists('redirect-tab', $seo_tabs)) {
615
+
616
+ ?>
617
  <div id="tabs-4">
618
  <p>
619
  <label for="seopress_redirections_enabled_meta" id="seopress_redirections_enabled">
623
  <?php _e('Enable redirection?', 'wp-seopress'); ?>
624
  </label>
625
  </p>
626
+ <p>
627
+ <label for="seopress_redirections_enabled_regex_meta" id="seopress_redirections_enabled_regex">
628
+ <input type="checkbox" name="seopress_redirections_enabled_regex"
629
+ id="seopress_redirections_enabled_regex_meta" value="yes" <?php echo checked($seopress_redirections_enabled_regex, 'yes', false); ?>
630
+ />
631
+ <?php _e('Regex?', 'wp-seopress'); ?>
632
+ </label>
633
+ </p>
634
+ <p>
635
+ <label for="seopress_redirections_logged_status"><?php _e('Select a login status: ', 'wp-seopress'); ?></label>
636
+
637
+ <select id="seopress_redirections_logged_status" name="seopress_redirections_logged_status">
638
+ <option <?php echo selected('both', $seopress_redirections_logged_status); ?>
639
+ value="both"><?php _e('All', 'wp-seopress'); ?>
640
+ </option>
641
+ <option <?php echo selected('only_logged_in', $seopress_redirections_logged_status); ?>
642
+ value="only_logged_in"><?php _e('Only Logged In', 'wp-seopress'); ?>
643
+ </option>
644
+ <option <?php echo selected('only_not_logged_in', $seopress_redirections_logged_status); ?>
645
+ value="only_not_logged_in"><?php _e('Only Not Logged In', 'wp-seopress'); ?>
646
+ </option>
647
+ </select>
648
+ </p>
649
  <p>
650
 
651
  <label for="seopress_redirections_type"><?php _e('Select a redirection type: ', 'wp-seopress'); ?></label>
671
  <p>
672
  <label for="seopress_redirections_value_meta"><?php _e('URL redirection', 'wp-seopress'); ?></label>
673
  <input id="seopress_redirections_value_meta" type="text" name="seopress_redirections_value"
674
+ class="components-text-control__input js-seopress_redirections_value_meta"
675
  placeholder="<?php esc_html_e('Enter your new URL in absolute (eg: https://www.example.com/)', 'wp-seopress'); ?>"
676
  aria-label="<?php _e('URL redirection', 'wp-seopress'); ?>"
677
  value="<?php echo $seopress_redirections_value; ?>" />
678
 
679
  </p>
680
+
681
+ <script>
682
+ document.addEventListener('DOMContentLoaded', function(){
683
+
684
+ var cache = {};
685
+ jQuery( ".js-seopress_redirections_value_meta" ).autocomplete({
686
+ source: async function( request, response ) {
687
+ var term = request.term;
688
+ if ( term in cache ) {
689
+ response( cache[ term ] );
690
+ return;
691
+ }
692
+
693
+ const dataResponse = await fetch("<?php echo rest_url(); ?>seopress/v1/search-url?url=" + term)
694
+ const data = await dataResponse.json();
695
+
696
+ cache[ term ] = data.map(item => {
697
+ return {
698
+ label: item.post_title + " (" + item.guid + ")",
699
+ value: item.guid
700
+ }
701
+ });
702
+ response( cache[term] );
703
+ },
704
+
705
+ minLength: 3,
706
+ });
707
+
708
+
709
+ })
710
+ </script>
711
  <?php if ('seopress_404' == $typenow) { ?>
712
  <p>
713
  <label for="seopress_redirections_param_meta"><?php _e('Query parameters', 'wp-seopress'); ?></label>
inc/admin/metaboxes/admin-metaboxes.php CHANGED
@@ -228,7 +228,7 @@ function seopress_display_seo_metaboxe()
228
  }
229
 
230
  if (function_exists('seopress_get_post_types')) {
231
- $seopress_get_post_types = seopress_get_post_types();
232
 
233
  $seopress_get_post_types = apply_filters('seopress_metaboxe_seo', $seopress_get_post_types);
234
 
@@ -347,16 +347,18 @@ function seopress_display_seo_metaboxe()
347
  $seopress_social_fb_title = get_post_meta($post->ID, '_seopress_social_fb_title', true);
348
  $seopress_social_fb_desc = get_post_meta($post->ID, '_seopress_social_fb_desc', true);
349
  $seopress_social_fb_img = get_post_meta($post->ID, '_seopress_social_fb_img', true);
350
- $seopress_social_fb_img_attachment_id = get_post_meta($post->ID, '_seopress_social_fb_img_attachment_id', true);
351
- $seopress_social_fb_img_width = get_post_meta($post->ID, '_seopress_social_fb_img_width', true);
352
- $seopress_social_fb_img_height = get_post_meta($post->ID, '_seopress_social_fb_img_height', true);
353
  $seopress_social_twitter_title = get_post_meta($post->ID, '_seopress_social_twitter_title', true);
354
  $seopress_social_twitter_desc = get_post_meta($post->ID, '_seopress_social_twitter_desc', true);
355
  $seopress_social_twitter_img = get_post_meta($post->ID, '_seopress_social_twitter_img', true);
356
  $seopress_social_twitter_img_attachment_id = get_post_meta($post->ID, '_seopress_social_twitter_img_attachment_id', true);
357
- $seopress_social_twitter_img_width = get_post_meta($post->ID, '_seopress_social_twitter_img_width', true);
358
- $seopress_social_twitter_img_height = get_post_meta($post->ID, '_seopress_social_twitter_img_height', true);
359
  $seopress_redirections_enabled = get_post_meta($post->ID, '_seopress_redirections_enabled', true);
 
 
360
  $seopress_redirections_type = get_post_meta($post->ID, '_seopress_redirections_type', true);
361
  $seopress_redirections_value = get_post_meta($post->ID, '_seopress_redirections_value', true);
362
  $seopress_redirections_param = get_post_meta($post->ID, '_seopress_redirections_param', true);
@@ -495,6 +497,17 @@ function seopress_display_seo_metaboxe()
495
  } else {
496
  delete_post_meta($post_id, '_seopress_redirections_enabled', '');
497
  }
 
 
 
 
 
 
 
 
 
 
 
498
  }
499
  if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
500
  if (in_array('news-tab', $seo_tabs)) {
@@ -616,7 +629,7 @@ function seopress_display_ca_metaboxe()
616
  $seopress_advanced_appearance_metaboxe_position_option = 'default';
617
  }
618
  if (function_exists('seopress_get_post_types')) {
619
- $seopress_get_post_types = seopress_get_post_types();
620
 
621
  $seopress_get_post_types = apply_filters('seopress_metaboxe_content_analysis', $seopress_get_post_types);
622
 
228
  }
229
 
230
  if (function_exists('seopress_get_post_types')) {
231
+ $seopress_get_post_types = seopress_get_service('WordPressData')->getPostTypes();
232
 
233
  $seopress_get_post_types = apply_filters('seopress_metaboxe_seo', $seopress_get_post_types);
234
 
347
  $seopress_social_fb_title = get_post_meta($post->ID, '_seopress_social_fb_title', true);
348
  $seopress_social_fb_desc = get_post_meta($post->ID, '_seopress_social_fb_desc', true);
349
  $seopress_social_fb_img = get_post_meta($post->ID, '_seopress_social_fb_img', true);
350
+ $seopress_social_fb_img_attachment_id = get_post_meta($post->ID, '_seopress_social_fb_img_attachment_id', true);
351
+ $seopress_social_fb_img_width = get_post_meta($post->ID, '_seopress_social_fb_img_width', true);
352
+ $seopress_social_fb_img_height = get_post_meta($post->ID, '_seopress_social_fb_img_height', true);
353
  $seopress_social_twitter_title = get_post_meta($post->ID, '_seopress_social_twitter_title', true);
354
  $seopress_social_twitter_desc = get_post_meta($post->ID, '_seopress_social_twitter_desc', true);
355
  $seopress_social_twitter_img = get_post_meta($post->ID, '_seopress_social_twitter_img', true);
356
  $seopress_social_twitter_img_attachment_id = get_post_meta($post->ID, '_seopress_social_twitter_img_attachment_id', true);
357
+ $seopress_social_twitter_img_width = get_post_meta($post->ID, '_seopress_social_twitter_img_width', true);
358
+ $seopress_social_twitter_img_height = get_post_meta($post->ID, '_seopress_social_twitter_img_height', true);
359
  $seopress_redirections_enabled = get_post_meta($post->ID, '_seopress_redirections_enabled', true);
360
+ $seopress_redirections_enabled_regex = get_post_meta($post->ID, '_seopress_redirections_enabled_regex', true);
361
+ $seopress_redirections_logged_status = get_post_meta($post->ID, '_seopress_redirections_logged_status', true);
362
  $seopress_redirections_type = get_post_meta($post->ID, '_seopress_redirections_type', true);
363
  $seopress_redirections_value = get_post_meta($post->ID, '_seopress_redirections_value', true);
364
  $seopress_redirections_param = get_post_meta($post->ID, '_seopress_redirections_param', true);
497
  } else {
498
  delete_post_meta($post_id, '_seopress_redirections_enabled', '');
499
  }
500
+ if (isset($_POST['seopress_redirections_enabled_regex'])) {
501
+ update_post_meta($post_id, '_seopress_redirections_enabled_regex', 'yes');
502
+ } else {
503
+ delete_post_meta($post_id, '_seopress_redirections_enabled_regex');
504
+ }
505
+ if (isset($_POST['seopress_redirections_logged_status'])) {
506
+ update_post_meta($post_id, '_seopress_redirections_logged_status', $_POST['seopress_redirections_logged_status']);
507
+
508
+ } else {
509
+ delete_post_meta($post_id, '_seopress_redirections_logged_status');
510
+ }
511
  }
512
  if (is_plugin_active('wp-seopress-pro/seopress-pro.php')) {
513
  if (in_array('news-tab', $seo_tabs)) {
629
  $seopress_advanced_appearance_metaboxe_position_option = 'default';
630
  }
631
  if (function_exists('seopress_get_post_types')) {
632
+ $seopress_get_post_types = seopress_get_service('WordPressData')->getPostTypes();
633
 
634
  $seopress_get_post_types = apply_filters('seopress_metaboxe_content_analysis', $seopress_get_post_types);
635
 
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.asset.php CHANGED
@@ -1 +1 @@
1
- <?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '10d17760a800ed812a8b44fc9a21df48');
1
+ <?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '31d0e88c486b722bec9c2b5c34fe4e45');
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.css CHANGED
@@ -1,26 +1,2 @@
1
- .wpseopress-answer-meta .wp-block-wp-seopress-image .components-button.editor-post-featured-image__preview {
2
- text-align: left; }
3
 
4
- .wpseopress-faq-cta {
5
- display: flex;
6
- justify-content: flex-end; }
7
- .wpseopress-faq-cta .button-link-delete, .wpseopress-faq-cta .button-link-delete:hover {
8
- border: 1px solid #a00; }
9
-
10
- .wpseopress-faqs-list-style button.components-button.is-primary,
11
- .wpseopress-faqs-title-wrapper button.components-button.is-primary,
12
- .wpseopress-faqs-image-size button.components-button.is-primary {
13
- background-color: #007cba;
14
- color: #ffffff;
15
- border-color: #007cba;
16
- box-shadow: inset 0 0 0 1px #007cba; }
17
- .wpseopress-faqs-list-style button.components-button.is-primary:hover:not(:disabled),
18
- .wpseopress-faqs-title-wrapper button.components-button.is-primary:hover:not(:disabled),
19
- .wpseopress-faqs-image-size button.components-button.is-primary:hover:not(:disabled) {
20
- color: #ffffff; }
21
-
22
- .components-panel__body > p {
23
- margin: 15px 0 0 0; }
24
-
25
-
26
- /*# sourceMappingURL=index.css.map*/
1
+ .wpseopress-faqs-actions{border:1px solid #1e1e1e;padding:1rem;background:#fff;margin-top:1rem}.wpseopress-answer-meta .wp-block-wp-seopress-image .components-button.editor-post-featured-image__preview{text-align:left}.wpseopress-faq-cta{display:flex;justify-content:flex-end}.wpseopress-faqs-list-style button.components-button.is-primary,.wpseopress-faqs-title-wrapper button.components-button.is-primary,.wpseopress-faqs-image-size button.components-button.is-primary{background-color:#007cba;color:#ffffff;border-color:#007cba;box-shadow:inset 0 0 0 1px #007cba}.wpseopress-faqs-list-style button.components-button.is-primary:hover:not(:disabled),.wpseopress-faqs-title-wrapper button.components-button.is-primary:hover:not(:disabled),.wpseopress-faqs-image-size button.components-button.is-primary:hover:not(:disabled){color:#ffffff}.components-panel__body>p{margin:15px 0 0 0}
 
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.css.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///editor.scss"],"names":[],"mappings":"AAAA;EACE,gBAAgB,EAAE;;AAEpB;EACE,aAAa;EACb,yBAAyB,EAAE;EAC3B;IACE,sBAAsB,EAAE;;AAE5B;;;EAGE,yBAAyB;EACzB,cAAc;EACd,qBAAqB;EACrB,mCAAmC,EAAE;EACrC;;;IAGE,cAAc,EAAE;;AAEpB;EACE,kBAAkB,EAAE","file":"index.css","sourcesContent":[".wpseopress-answer-meta .wp-block-wp-seopress-image .components-button.editor-post-featured-image__preview {\n text-align: left; }\n\n.wpseopress-faq-cta {\n display: flex;\n justify-content: flex-end; }\n .wpseopress-faq-cta .button-link-delete, .wpseopress-faq-cta .button-link-delete:hover {\n border: 1px solid #a00; }\n\n.wpseopress-faqs-list-style button.components-button.is-primary,\n.wpseopress-faqs-title-wrapper button.components-button.is-primary,\n.wpseopress-faqs-image-size button.components-button.is-primary {\n background-color: #007cba;\n color: #ffffff;\n border-color: #007cba;\n box-shadow: inset 0 0 0 1px #007cba; }\n .wpseopress-faqs-list-style button.components-button.is-primary:hover:not(:disabled),\n .wpseopress-faqs-title-wrapper button.components-button.is-primary:hover:not(:disabled),\n .wpseopress-faqs-image-size button.components-button.is-primary:hover:not(:disabled) {\n color: #ffffff; }\n\n.components-panel__body > p {\n margin: 15px 0 0 0; }\n"],"sourceRoot":""}
 
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.js CHANGED
@@ -1,891 +1 @@
1
- (window["webpackJsonp"] = window["webpackJsonp"] || []).push([["style-index"],{
2
-
3
- /***/ "./src/style.scss":
4
- /*!************************!*\
5
- !*** ./src/style.scss ***!
6
- \************************/
7
- /*! no static exports found */
8
- /***/ (function(module, exports, __webpack_require__) {
9
-
10
- // extracted by mini-css-extract-plugin
11
-
12
- /***/ })
13
-
14
- }]);
15
-
16
- /******/ (function(modules) { // webpackBootstrap
17
- /******/ // install a JSONP callback for chunk loading
18
- /******/ function webpackJsonpCallback(data) {
19
- /******/ var chunkIds = data[0];
20
- /******/ var moreModules = data[1];
21
- /******/ var executeModules = data[2];
22
- /******/
23
- /******/ // add "moreModules" to the modules object,
24
- /******/ // then flag all "chunkIds" as loaded and fire callback
25
- /******/ var moduleId, chunkId, i = 0, resolves = [];
26
- /******/ for(;i < chunkIds.length; i++) {
27
- /******/ chunkId = chunkIds[i];
28
- /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
29
- /******/ resolves.push(installedChunks[chunkId][0]);
30
- /******/ }
31
- /******/ installedChunks[chunkId] = 0;
32
- /******/ }
33
- /******/ for(moduleId in moreModules) {
34
- /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
35
- /******/ modules[moduleId] = moreModules[moduleId];
36
- /******/ }
37
- /******/ }
38
- /******/ if(parentJsonpFunction) parentJsonpFunction(data);
39
- /******/
40
- /******/ while(resolves.length) {
41
- /******/ resolves.shift()();
42
- /******/ }
43
- /******/
44
- /******/ // add entry modules from loaded chunk to deferred list
45
- /******/ deferredModules.push.apply(deferredModules, executeModules || []);
46
- /******/
47
- /******/ // run deferred modules when all chunks ready
48
- /******/ return checkDeferredModules();
49
- /******/ };
50
- /******/ function checkDeferredModules() {
51
- /******/ var result;
52
- /******/ for(var i = 0; i < deferredModules.length; i++) {
53
- /******/ var deferredModule = deferredModules[i];
54
- /******/ var fulfilled = true;
55
- /******/ for(var j = 1; j < deferredModule.length; j++) {
56
- /******/ var depId = deferredModule[j];
57
- /******/ if(installedChunks[depId] !== 0) fulfilled = false;
58
- /******/ }
59
- /******/ if(fulfilled) {
60
- /******/ deferredModules.splice(i--, 1);
61
- /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
62
- /******/ }
63
- /******/ }
64
- /******/
65
- /******/ return result;
66
- /******/ }
67
- /******/
68
- /******/ // The module cache
69
- /******/ var installedModules = {};
70
- /******/
71
- /******/ // object to store loaded and loading chunks
72
- /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
73
- /******/ // Promise = chunk loading, 0 = chunk loaded
74
- /******/ var installedChunks = {
75
- /******/ "index": 0
76
- /******/ };
77
- /******/
78
- /******/ var deferredModules = [];
79
- /******/
80
- /******/ // The require function
81
- /******/ function __webpack_require__(moduleId) {
82
- /******/
83
- /******/ // Check if module is in cache
84
- /******/ if(installedModules[moduleId]) {
85
- /******/ return installedModules[moduleId].exports;
86
- /******/ }
87
- /******/ // Create a new module (and put it into the cache)
88
- /******/ var module = installedModules[moduleId] = {
89
- /******/ i: moduleId,
90
- /******/ l: false,
91
- /******/ exports: {}
92
- /******/ };
93
- /******/
94
- /******/ // Execute the module function
95
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
96
- /******/
97
- /******/ // Flag the module as loaded
98
- /******/ module.l = true;
99
- /******/
100
- /******/ // Return the exports of the module
101
- /******/ return module.exports;
102
- /******/ }
103
- /******/
104
- /******/
105
- /******/ // expose the modules object (__webpack_modules__)
106
- /******/ __webpack_require__.m = modules;
107
- /******/
108
- /******/ // expose the module cache
109
- /******/ __webpack_require__.c = installedModules;
110
- /******/
111
- /******/ // define getter function for harmony exports
112
- /******/ __webpack_require__.d = function(exports, name, getter) {
113
- /******/ if(!__webpack_require__.o(exports, name)) {
114
- /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
115
- /******/ }
116
- /******/ };
117
- /******/
118
- /******/ // define __esModule on exports
119
- /******/ __webpack_require__.r = function(exports) {
120
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
121
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
122
- /******/ }
123
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
124
- /******/ };
125
- /******/
126
- /******/ // create a fake namespace object
127
- /******/ // mode & 1: value is a module id, require it
128
- /******/ // mode & 2: merge all properties of value into the ns
129
- /******/ // mode & 4: return value when already ns object
130
- /******/ // mode & 8|1: behave like require
131
- /******/ __webpack_require__.t = function(value, mode) {
132
- /******/ if(mode & 1) value = __webpack_require__(value);
133
- /******/ if(mode & 8) return value;
134
- /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
135
- /******/ var ns = Object.create(null);
136
- /******/ __webpack_require__.r(ns);
137
- /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
138
- /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
139
- /******/ return ns;
140
- /******/ };
141
- /******/
142
- /******/ // getDefaultExport function for compatibility with non-harmony modules
143
- /******/ __webpack_require__.n = function(module) {
144
- /******/ var getter = module && module.__esModule ?
145
- /******/ function getDefault() { return module['default']; } :
146
- /******/ function getModuleExports() { return module; };
147
- /******/ __webpack_require__.d(getter, 'a', getter);
148
- /******/ return getter;
149
- /******/ };
150
- /******/
151
- /******/ // Object.prototype.hasOwnProperty.call
152
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
153
- /******/
154
- /******/ // __webpack_public_path__
155
- /******/ __webpack_require__.p = "";
156
- /******/
157
- /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
158
- /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
159
- /******/ jsonpArray.push = webpackJsonpCallback;
160
- /******/ jsonpArray = jsonpArray.slice();
161
- /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
162
- /******/ var parentJsonpFunction = oldJsonpFunction;
163
- /******/
164
- /******/
165
- /******/ // add entry module to deferred list
166
- /******/ deferredModules.push(["./src/index.js","style-index"]);
167
- /******/ // run deferred modules when ready
168
- /******/ return checkDeferredModules();
169
- /******/ })
170
- /************************************************************************/
171
- /******/ ({
172
-
173
- /***/ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
174
- /*!*****************************************************************!*\
175
- !*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
176
- \*****************************************************************/
177
- /*! no static exports found */
178
- /***/ (function(module, exports) {
179
-
180
- function _arrayLikeToArray(arr, len) {
181
- if (len == null || len > arr.length) len = arr.length;
182
-
183
- for (var i = 0, arr2 = new Array(len); i < len; i++) {
184
- arr2[i] = arr[i];
185
- }
186
-
187
- return arr2;
188
- }
189
-
190
- module.exports = _arrayLikeToArray;
191
-
192
- /***/ }),
193
-
194
- /***/ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js":
195
- /*!******************************************************************!*\
196
- !*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***!
197
- \******************************************************************/
198
- /*! no static exports found */
199
- /***/ (function(module, exports, __webpack_require__) {
200
-
201
- var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
202
-
203
- function _arrayWithoutHoles(arr) {
204
- if (Array.isArray(arr)) return arrayLikeToArray(arr);
205
- }
206
-
207
- module.exports = _arrayWithoutHoles;
208
-
209
- /***/ }),
210
-
211
- /***/ "./node_modules/@babel/runtime/helpers/defineProperty.js":
212
- /*!***************************************************************!*\
213
- !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***!
214
- \***************************************************************/
215
- /*! no static exports found */
216
- /***/ (function(module, exports) {
217
-
218
- function _defineProperty(obj, key, value) {
219
- if (key in obj) {
220
- Object.defineProperty(obj, key, {
221
- value: value,
222
- enumerable: true,
223
- configurable: true,
224
- writable: true
225
- });
226
- } else {
227
- obj[key] = value;
228
- }
229
-
230
- return obj;
231
- }
232
-
233
- module.exports = _defineProperty;
234
-
235
- /***/ }),
236
-
237
- /***/ "./node_modules/@babel/runtime/helpers/iterableToArray.js":
238
- /*!****************************************************************!*\
239
- !*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***!
240
- \****************************************************************/
241
- /*! no static exports found */
242
- /***/ (function(module, exports) {
243
-
244
- function _iterableToArray(iter) {
245
- if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
246
- }
247
-
248
- module.exports = _iterableToArray;
249
-
250
- /***/ }),
251
-
252
- /***/ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js":
253
- /*!******************************************************************!*\
254
- !*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***!
255
- \******************************************************************/
256
- /*! no static exports found */
257
- /***/ (function(module, exports) {
258
-
259
- function _nonIterableSpread() {
260
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
261
- }
262
-
263
- module.exports = _nonIterableSpread;
264
-
265
- /***/ }),
266
-
267
- /***/ "./node_modules/@babel/runtime/helpers/toConsumableArray.js":
268
- /*!******************************************************************!*\
269
- !*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***!
270
- \******************************************************************/
271
- /*! no static exports found */
272
- /***/ (function(module, exports, __webpack_require__) {
273
-
274
- var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles */ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js");
275
-
276
- var iterableToArray = __webpack_require__(/*! ./iterableToArray */ "./node_modules/@babel/runtime/helpers/iterableToArray.js");
277
-
278
- var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray */ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
279
-
280
- var nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread */ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js");
281
-
282
- function _toConsumableArray(arr) {
283
- return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
284
- }
285
-
286
- module.exports = _toConsumableArray;
287
-
288
- /***/ }),
289
-
290
- /***/ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":
291
- /*!***************************************************************************!*\
292
- !*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!
293
- \***************************************************************************/
294
- /*! no static exports found */
295
- /***/ (function(module, exports, __webpack_require__) {
296
-
297
- var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
298
-
299
- function _unsupportedIterableToArray(o, minLen) {
300
- if (!o) return;
301
- if (typeof o === "string") return arrayLikeToArray(o, minLen);
302
- var n = Object.prototype.toString.call(o).slice(8, -1);
303
- if (n === "Object" && o.constructor) n = o.constructor.name;
304
- if (n === "Map" || n === "Set") return Array.from(o);
305
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
306
- }
307
-
308
- module.exports = _unsupportedIterableToArray;
309
-
310
- /***/ }),
311
-
312
- /***/ "./src/edit.js":
313
- /*!*********************!*\
314
- !*** ./src/edit.js ***!
315
- \*********************/
316
- /*! exports provided: default */
317
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
318
-
319
- "use strict";
320
- __webpack_require__.r(__webpack_exports__);
321
- /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
322
- /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
323
- /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/toConsumableArray.js");
324
- /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);
325
- /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
326
- /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__);
327
- /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
328
- /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__);
329
- /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor");
330
- /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__);
331
- /* harmony import */ var _image_control__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./image-control */ "./src/image-control.js");
332
-
333
-
334
-
335
-
336
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
337
-
338
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
339
-
340
- var _wp$element = wp.element,
341
- Component = _wp$element.Component,
342
- Fragment = _wp$element.Fragment;
343
-
344
- var _wp$i18n = wp.i18n,
345
- __ = _wp$i18n.__,
346
- _x = _wp$i18n._x;
347
-
348
-
349
- var compose = wp.compose.compose;
350
- var withSelect = wp.data.withSelect;
351
-
352
- function WPSeopress_FAQ(props) {
353
- var attributes = props.attributes;
354
- var listStyle = attributes.listStyle,
355
- titleWrapper = attributes.titleWrapper,
356
- imageSize = attributes.imageSize,
357
- showFAQScheme = attributes.showFAQScheme;
358
-
359
- var showFAQs = function showFAQs() {
360
- return attributes.listStyle === 'none' && attributes.faqs.map(function (faq, i) {
361
- return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
362
- key: i,
363
- className: "wpseopress-faqs-area"
364
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
365
- className: "wpseopress-faq"
366
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__["RichText"], {
367
- tagName: attributes.titleWrapper,
368
- className: "wpseopress-faq-question",
369
- placeholder: __('Question...', 'wp-seopress'),
370
- value: !!faq ? faq.question : '',
371
- onChange: function onChange(value) {
372
- return handleQuestionChange(value, i);
373
- }
374
- }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
375
- className: "wpseopress-answer-meta"
376
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_image_control__WEBPACK_IMPORTED_MODULE_5__["default"], {
377
- value: !!faq ? faq.image : '',
378
- onSelect: handleImageChange,
379
- onRemoveImage: onRemoveImage,
380
- imageSize: attributes.imageSize,
381
- index: i
382
- }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__["RichText"], {
383
- tagName: "p",
384
- className: "wpseopress-faq-answer",
385
- placeholder: __('Answer...', 'wp-seopress'),
386
- value: !!faq ? faq.answer : '',
387
- onChange: function onChange(value) {
388
- return handleAnswerChange(value, i);
389
- }
390
- }))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
391
- className: "wpseopress-faq-cta"
392
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("button", {
393
- className: "button button-link-delete",
394
- value: __('Remove', 'wp-seopress'),
395
- onClick: function onClick() {
396
- return removeFAQ(i);
397
- }
398
- }, __('Remove', 'wp-seopress'))));
399
- }) || (attributes.listStyle === 'ul' || attributes.listStyle === 'ol') && attributes.faqs.map(function (faq, i) {
400
- return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("li", {
401
- key: i,
402
- className: "wpseopress-faqs-area"
403
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
404
- className: "wpseopress-faq"
405
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__["RichText"], {
406
- tagName: attributes.titleWrapper,
407
- className: "wpseopress-faq-question",
408
- placeholder: __('Question...', 'wp-seopress'),
409
- value: !!faq ? faq.question : '',
410
- onChange: function onChange(value) {
411
- return handleQuestionChange(value, i);
412
- }
413
- }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
414
- className: "wpseopress-answer-meta"
415
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_image_control__WEBPACK_IMPORTED_MODULE_5__["default"], {
416
- value: !!faq ? faq.image : '',
417
- onSelect: handleImageChange,
418
- onRemoveImage: onRemoveImage,
419
- imageSize: attributes.imageSize,
420
- index: i
421
- }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__["RichText"], {
422
- tagName: "div",
423
- className: "wpseopress-faq-answer",
424
- placeholder: __('Answer...', 'wp-seopress'),
425
- value: !!faq ? faq.answer : '',
426
- onChange: function onChange(value) {
427
- return handleAnswerChange(value, i);
428
- }
429
- }))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
430
- className: "wpseopress-faq-cta"
431
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("button", {
432
- className: "button button-link-delete",
433
- value: __('Remove', 'wp-seopress'),
434
- onClick: function onClick() {
435
- return removeFAQ(i);
436
- }
437
- }, __('Remove', 'wp-seopress'))));
438
- }); // End return
439
- };
440
-
441
- var addFAQ = function addFAQ() {
442
- props.setAttributes({
443
- faqs: [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(attributes.faqs), [{
444
- question: '',
445
- answer: '',
446
- image: ''
447
- }])
448
- });
449
- };
450
-
451
- var removeFAQ = function removeFAQ(i) {
452
- var faqs = attributes.faqs.filter(function (item, key) {
453
- return key !== i;
454
- });
455
- props.setAttributes({
456
- faqs: faqs
457
- });
458
- };
459
-
460
- var handleQuestionChange = function handleQuestionChange(value, i) {
461
- var faqs = attributes.faqs.map(function (faq, key) {
462
- if (key !== i) {
463
- return faq;
464
- }
465
-
466
- return _objectSpread(_objectSpread({}, faq), {}, {
467
- question: value
468
- });
469
- });
470
- props.setAttributes({
471
- faqs: faqs
472
- });
473
- };
474
-
475
- var handleAnswerChange = function handleAnswerChange(value, i) {
476
- var faqs = attributes.faqs.map(function (faq, key) {
477
- if (key !== i) {
478
- return faq;
479
- }
480
-
481
- return _objectSpread(_objectSpread({}, faq), {}, {
482
- answer: value
483
- });
484
- });
485
- props.setAttributes({
486
- faqs: faqs
487
- });
488
- };
489
-
490
- var handleImageChange = function handleImageChange(value, i) {
491
- var faqs = attributes.faqs.map(function (faq, key) {
492
- if (key !== i) {
493
- return faq;
494
- }
495
-
496
- return _objectSpread(_objectSpread({}, faq), {}, {
497
- image: value
498
- });
499
- });
500
- props.setAttributes({
501
- faqs: faqs
502
- });
503
- };
504
-
505
- var onRemoveImage = function onRemoveImage(i) {
506
- var faqs = attributes.faqs.map(function (faq, key) {
507
- if (key !== i) {
508
- return faq;
509
- }
510
-
511
- return _objectSpread(_objectSpread({}, faq), {}, {
512
- image: null
513
- });
514
- });
515
- props.setAttributes({
516
- faqs: faqs
517
- });
518
- };
519
-
520
- var inspectorControls = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__["InspectorControls"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelBody"], {
521
- title: __('FAQ Settings', 'wp-seopress')
522
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("p", null, __('List Style', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelRow"], {
523
- className: "wpseopress-faqs-list-style"
524
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["ButtonGroup"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
525
- isSecondary: true,
526
- isPrimary: 'none' == listStyle ? true : false,
527
- onClick: function onClick(e) {
528
- props.setAttributes({
529
- listStyle: 'none'
530
- });
531
- }
532
- }, _x('NONE', 'Div tag List', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
533
- isSecondary: true,
534
- isPrimary: 'ol' == listStyle ? true : false,
535
- onClick: function onClick(e) {
536
- props.setAttributes({
537
- listStyle: 'ol'
538
- });
539
- }
540
- }, _x('OL', 'Numbered List', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
541
- isSecondary: true,
542
- isPrimary: 'ul' == listStyle ? true : false,
543
- onClick: function onClick(e) {
544
- props.setAttributes({
545
- listStyle: 'ul'
546
- });
547
- }
548
- }, _x('UL', 'Unordered List', 'wp-seopress')))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("p", null, __('Title Wrapper', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelRow"], {
549
- className: "wpseopress-faqs-title-wrapper"
550
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["ButtonGroup"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
551
- isSecondary: true,
552
- isPrimary: 'h2' == titleWrapper ? true : false,
553
- onClick: function onClick(e) {
554
- props.setAttributes({
555
- titleWrapper: 'h2'
556
- });
557
- }
558
- }, _x('H2', 'H2 title tag', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
559
- isSecondary: true,
560
- isPrimary: 'h3' == titleWrapper ? true : false,
561
- onClick: function onClick(e) {
562
- props.setAttributes({
563
- titleWrapper: 'h3'
564
- });
565
- }
566
- }, _x('H3', 'H3 title tag', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
567
- isSecondary: true,
568
- isPrimary: 'h4' == titleWrapper ? true : false,
569
- onClick: function onClick(e) {
570
- props.setAttributes({
571
- titleWrapper: 'h4'
572
- });
573
- }
574
- }, _x('H4', 'H4 title tag', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
575
- isSecondary: true,
576
- isPrimary: 'h5' == titleWrapper ? true : false,
577
- onClick: function onClick(e) {
578
- props.setAttributes({
579
- titleWrapper: 'h5'
580
- });
581
- }
582
- }, _x('H5', 'H5 title tag', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
583
- isSecondary: true,
584
- isPrimary: 'h6' == titleWrapper ? true : false,
585
- onClick: function onClick(e) {
586
- props.setAttributes({
587
- titleWrapper: 'h6'
588
- });
589
- }
590
- }, _x('H6', 'H6 title tag', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
591
- isSecondary: true,
592
- isPrimary: 'p' == titleWrapper ? true : false,
593
- onClick: function onClick(e) {
594
- props.setAttributes({
595
- titleWrapper: 'p'
596
- });
597
- }
598
- }, _x('P', 'P title tag', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
599
- isSecondary: true,
600
- isPrimary: 'div' == titleWrapper ? true : false,
601
- onClick: function onClick(e) {
602
- props.setAttributes({
603
- titleWrapper: 'div'
604
- });
605
- }
606
- }, _x('DIV', 'DIV title tag', 'wp-seopress')))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("p", null, __('Image Size', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelRow"], {
607
- className: "wpseopress-faqs-image-size"
608
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["ButtonGroup"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
609
- isSecondary: true,
610
- isPrimary: 'thumbnail' == imageSize ? true : false,
611
- onClick: function onClick(e) {
612
- props.setAttributes({
613
- imageSize: 'thumbnail'
614
- });
615
- }
616
- }, _x('S', 'Thubmnail Size', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
617
- isSecondary: true,
618
- isPrimary: 'medium' == imageSize ? true : false,
619
- onClick: function onClick(e) {
620
- props.setAttributes({
621
- imageSize: 'medium'
622
- });
623
- }
624
- }, _x('M', 'Medium Size', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
625
- isSecondary: true,
626
- isPrimary: 'large' == imageSize ? true : false,
627
- onClick: function onClick(e) {
628
- props.setAttributes({
629
- imageSize: 'large'
630
- });
631
- }
632
- }, _x('L', 'Large Size', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["Button"], {
633
- isSecondary: true,
634
- isPrimary: 'full' == imageSize ? true : false,
635
- onClick: function onClick(e) {
636
- props.setAttributes({
637
- imageSize: 'full'
638
- });
639
- }
640
- }, _x('XL', 'Original Size', 'wp-seopress')))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("p", null, __('SEO Settings', 'wp-seopress')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["PanelRow"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__["ToggleControl"], {
641
- label: __('Enable FAQ Schema', 'wp-seopress'),
642
- checked: !!showFAQScheme,
643
- onChange: function onChange(e) {
644
- props.setAttributes({
645
- showFAQScheme: !showFAQScheme
646
- });
647
- }
648
- }))));
649
- return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(Fragment, null, inspectorControls, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
650
- className: "wpseopress-faqs"
651
- }, listStyle === 'ul' && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("ul", null, showFAQs()), listStyle === 'ol' && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("ol", null, showFAQs()), listStyle === 'none' && showFAQs(), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", {
652
- className: "wpseopress-faqs-actions"
653
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])("button", {
654
- type: "button",
655
- title: __('Add FAQ', 'wp-seopress'),
656
- className: "add-faq button button-link-add",
657
- onClick: function onClick(e) {
658
- e.preventDefault();
659
- addFAQ();
660
- }
661
- }, __('Add FAQ', 'wp-seopress')))));
662
- }
663
-
664
- /* harmony default export */ __webpack_exports__["default"] = (compose(withSelect(function (select, _ref) {
665
- var attributes = _ref.attributes;
666
-
667
- var _select = select('core'),
668
- getMedia = _select.getMedia;
669
-
670
- var selectedImageId = attributes.selectedImageId;
671
- return {
672
- selectedImage: selectedImageId ? getMedia(selectedImageId) : 0
673
- };
674
- }))(WPSeopress_FAQ));
675
-
676
- /***/ }),
677
-
678
- /***/ "./src/editor.scss":
679
- /*!*************************!*\
680
- !*** ./src/editor.scss ***!
681
- \*************************/
682
- /*! no static exports found */
683
- /***/ (function(module, exports, __webpack_require__) {
684
-
685
- // extracted by mini-css-extract-plugin
686
-
687
- /***/ }),
688
-
689
- /***/ "./src/image-control.js":
690
- /*!******************************!*\
691
- !*** ./src/image-control.js ***!
692
- \******************************/
693
- /*! exports provided: default */
694
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
695
-
696
- "use strict";
697
- __webpack_require__.r(__webpack_exports__);
698
- /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
699
- /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
700
- /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor");
701
- /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__);
702
-
703
- var wp = window.wp;
704
- var withSelect = wp.data.withSelect;
705
- var Component = wp.element.Component;
706
-
707
- var _wp$components = wp.components,
708
- Spinner = _wp$components.Spinner,
709
- Button = _wp$components.Button,
710
- ResponsiveWrapper = _wp$components.ResponsiveWrapper;
711
- var compose = wp.compose.compose;
712
- var __ = wp.i18n.__;
713
- var ALLOWED_MEDIA_TYPES = ['image'];
714
-
715
- function ImageControl(props) {
716
- var value = props.value,
717
- image = props.image;
718
-
719
- var onUpdateImage = function onUpdateImage(image) {
720
- props.onSelect(image.id, props.index);
721
- };
722
-
723
- var onRemoveImage = function onRemoveImage() {
724
- props.onRemoveImage(props.index);
725
- };
726
-
727
- var getImageSize = function getImageSize(image) {
728
- var imgSize = null;
729
-
730
- try {
731
- if (undefined != image) {
732
- imgSize = {};
733
- imgSize.source_url = image.guid.raw;
734
-
735
- if (undefined != image.media_details.sizes) {
736
- imgSize = null;
737
-
738
- switch (props.imageSize) {
739
- case 'thumbnail':
740
- imgSize = undefined != image ? image.media_details.sizes.thumbnail : null;
741
- break;
742
-
743
- case 'medium':
744
- imgSize = undefined != image ? image.media_details.sizes.medium : null;
745
- break;
746
-
747
- case 'large':
748
- imgSize = undefined != image ? undefined != image.media_details.sizes.large ? image.media_details.sizes.large : image.media_details.sizes.medium_large : null;
749
- break;
750
-
751
- default:
752
- imgSize = undefined != image ? image.media_details.sizes.full : null;
753
- }
754
- }
755
- }
756
-
757
- return imgSize;
758
- } catch (error) {
759
- return imgSize;
760
- }
761
- };
762
-
763
- var instructions = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, __('To edit the background image, you need permission to upload media.', 'wp-seopress'));
764
- return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", {
765
- className: "wp-block-wp-seopress-image"
766
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__["MediaUploadCheck"], {
767
- fallback: instructions
768
- }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__["MediaUpload"], {
769
- title: __('Set Image', 'wp-seopress'),
770
- onSelect: onUpdateImage,
771
- allowedTypes: ALLOWED_MEDIA_TYPES,
772
- value: value,
773
- render: function render(_ref) {
774
- var open = _ref.open;
775
- var imageSize = getImageSize(image);
776
- return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(Button, {
777
- className: !value ? 'editor-post-featured-image__toggle' : 'editor-post-featured-image__preview',
778
- onClick: open
779
- }, !value && __('Set Image', 'wp-seopress'), !!value && !image && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(Spinner, null), !!value && image && imageSize && imageSize.source_url && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("img", {
780
- src: imageSize.source_url,
781
- alt: __('Set Image', 'wp-seopress')
782
- }));
783
- }
784
- })), !!value && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__["MediaUploadCheck"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(Button, {
785
- onClick: onRemoveImage,
786
- isLink: true,
787
- isDestructive: true
788
- }, __('Remove Image', 'wp-seopress'))));
789
- }
790
-
791
- /* harmony default export */ __webpack_exports__["default"] = (compose(withSelect(function (select, ownProps) {
792
- return {
793
- image: ownProps.value ? select('core').getMedia(ownProps.value) : null
794
- };
795
- }))(ImageControl));
796
-
797
- /***/ }),
798
-
799
- /***/ "./src/index.js":
800
- /*!**********************!*\
801
- !*** ./src/index.js ***!
802
- \**********************/
803
- /*! no exports provided */
804
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
805
-
806
- "use strict";
807
- __webpack_require__.r(__webpack_exports__);
808
- /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss");
809
- /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_0__);
810
- /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ "./src/style.scss");
811
- /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_1__);
812
- /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/edit.js");
813
- /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
814
- /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);
815
- /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
816
- /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
817
-
818
-
819
-
820
-
821
-
822
- Object(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__["registerBlockType"])('wpseopress/faq-block', {
823
- title: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__["__"])('FAQ', 'wp-seopress'),
824
- icon: 'index-card',
825
- category: 'wpseopress',
826
- example: {},
827
- edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"],
828
- save: function save() {
829
- return null;
830
- }
831
- });
832
-
833
- /***/ }),
834
-
835
- /***/ "@wordpress/block-editor":
836
- /*!**********************************************!*\
837
- !*** external {"this":["wp","blockEditor"]} ***!
838
- \**********************************************/
839
- /*! no static exports found */
840
- /***/ (function(module, exports) {
841
-
842
- (function() { module.exports = this["wp"]["blockEditor"]; }());
843
-
844
- /***/ }),
845
-
846
- /***/ "@wordpress/blocks":
847
- /*!*****************************************!*\
848
- !*** external {"this":["wp","blocks"]} ***!
849
- \*****************************************/
850
- /*! no static exports found */
851
- /***/ (function(module, exports) {
852
-
853
- (function() { module.exports = this["wp"]["blocks"]; }());
854
-
855
- /***/ }),
856
-
857
- /***/ "@wordpress/components":
858
- /*!*********************************************!*\
859
- !*** external {"this":["wp","components"]} ***!
860
- \*********************************************/
861
- /*! no static exports found */
862
- /***/ (function(module, exports) {
863
-
864
- (function() { module.exports = this["wp"]["components"]; }());
865
-
866
- /***/ }),
867
-
868
- /***/ "@wordpress/element":
869
- /*!******************************************!*\
870
- !*** external {"this":["wp","element"]} ***!
871
- \******************************************/
872
- /*! no static exports found */
873
- /***/ (function(module, exports) {
874
-
875
- (function() { module.exports = this["wp"]["element"]; }());
876
-
877
- /***/ }),
878
-
879
- /***/ "@wordpress/i18n":
880
- /*!***************************************!*\
881
- !*** external {"this":["wp","i18n"]} ***!
882
- \***************************************/
883
- /*! no static exports found */
884
- /***/ (function(module, exports) {
885
-
886
- (function() { module.exports = this["wp"]["i18n"]; }());
887
-
888
- /***/ })
889
-
890
- /******/ });
891
- //# sourceMappingURL=index.js.map
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[1],{9:function(e,t,n){}}]),function(e){function t(t){for(var r,o,i=t[0],c=t[1],l=t[2],p=0,m=[];p<i.length;p++)o=i[p],Object.prototype.hasOwnProperty.call(s,o)&&s[o]&&m.push(s[o][0]),s[o]=0;for(r in c)Object.prototype.hasOwnProperty.call(c,r)&&(e[r]=c[r]);for(u&&u(t);m.length;)m.shift()();return a.push.apply(a,l||[]),n()}function n(){for(var e,t=0;t<a.length;t++){for(var n=a[t],r=!0,i=1;i<n.length;i++){var c=n[i];0!==s[c]&&(r=!1)}r&&(a.splice(t--,1),e=o(o.s=n[0]))}return e}var r={},s={0:0},a=[];function o(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=e,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="";var i=window.webpackJsonp=window.webpackJsonp||[],c=i.push.bind(i);i.push=t,i=i.slice();for(var l=0;l<i.length;l++)t(i[l]);var u=c;a.push([14,1]),n()}([function(e,t){!function(){e.exports=this.wp.element}()},function(e,t){!function(){e.exports=this.wp.components}()},function(e,t){!function(){e.exports=this.wp.blockEditor}()},function(e,t){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){var r=n(10),s=n(11),a=n(12),o=n(13);e.exports=function(e){return r(e)||s(e)||a(e)||o()}},function(e,t){!function(){e.exports=this.wp.blocks}()},function(e,t){!function(){e.exports=this.wp.i18n}()},function(e,t,n){},,function(e,t,n){var r=n(3);e.exports=function(e){if(Array.isArray(e))return r(e)}},function(e,t){e.exports=function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}},function(e,t,n){var r=n(3);e.exports=function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},function(e,t,n){"use strict";n.r(t);n(8),n(9);var r=n(4),s=n.n(r),a=n(5),o=n.n(a),i=n(0),c=n(1),l=n(2),u=window.wp,p=u.data.withSelect,m=(u.element.Component,u.components),f=m.Spinner,b=m.Button,d=(m.ResponsiveWrapper,u.compose.compose),w=u.i18n.__,O=["image"];var g=d(p((function(e,t){return{image:t.value?e("core").getMedia(t.value):null}})))((function(e){var t=e.value,n=e.image,r=Object(i.createElement)("p",null,w("To edit the background image, you need permission to upload media.","wp-seopress"));return Object(i.createElement)("div",{className:"wp-block-wp-seopress-image"},Object(i.createElement)(l.MediaUploadCheck,{fallback:r},Object(i.createElement)(l.MediaUpload,{title:w("Set Image","wp-seopress"),onSelect:function(t){e.onSelect(t.id,e.index)},allowedTypes:O,value:t,render:function(r){var s=r.open,a=function(t){var n=null;try{if(null!=t&&((n={}).source_url=t.guid.raw,null!=t.media_details.sizes))switch(n=null,e.imageSize){case"thumbnail":n=null!=t?t.media_details.sizes.thumbnail:null;break;case"medium":n=null!=t?t.media_details.sizes.medium:null;break;case"large":n=null!=t?null!=t.media_details.sizes.large?t.media_details.sizes.large:t.media_details.sizes.medium_large:null;break;default:n=null!=t?t.media_details.sizes.full:null}return n}catch(e){return n}}(n);return Object(i.createElement)(b,{className:t?"editor-post-featured-image__preview":"editor-post-featured-image__toggle",onClick:s},!t&&w("Set Image","wp-seopress"),!!t&&!n&&Object(i.createElement)(f,null),!!t&&n&&a&&a.source_url&&Object(i.createElement)("img",{src:a.source_url,alt:w("Set Image","wp-seopress")}))}})),!!t&&Object(i.createElement)(l.MediaUploadCheck,null,Object(i.createElement)(b,{onClick:function(){e.onRemoveImage(e.index)},isLink:!0,isDestructive:!0},w("Remove Image","wp-seopress"))))}));function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach((function(t){s()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var v=wp.element,h=(v.Component,v.Fragment),E=wp.i18n,S=E.__,A=E._x;var k=(0,wp.compose.compose)((0,wp.data.withSelect)((function(e,t){var n=t.attributes,r=e("core").getMedia,s=n.selectedImageId;return{selectedImage:s?r(s):0}})))((function(e){var t=e.attributes,n=t.listStyle,r=t.titleWrapper,s=t.imageSize,a=t.showFAQScheme,u=t.showAccordion,p=function(){return"none"===t.listStyle&&t.faqs.map((function(e,n){return Object(i.createElement)("div",{key:n,className:"wpseopress-faqs-area"},Object(i.createElement)("div",{className:"wpseopress-faq"},Object(i.createElement)(l.RichText,{tagName:t.titleWrapper,className:"wpseopress-faq-question",placeholder:S("Question...","wp-seopress"),value:e?e.question:"",onChange:function(e){return f(e,n)}}),Object(i.createElement)("div",{className:"wpseopress-answer-meta"},Object(i.createElement)(g,{value:e?e.image:"",onSelect:d,onRemoveImage:w,imageSize:t.imageSize,index:n}),Object(i.createElement)(l.RichText,{tagName:"p",className:"wpseopress-faq-answer",placeholder:S("Answer...","wp-seopress"),value:e?e.answer:"",onChange:function(e){return b(e,n)}}))),Object(i.createElement)("div",{className:"wpseopress-faq-cta"},Object(i.createElement)("button",{className:"components-button is-tertiary is-destructive",value:S("Remove","wp-seopress"),onClick:function(){return m(n)}},S("Remove","wp-seopress"))))}))||("ul"===t.listStyle||"ol"===t.listStyle)&&t.faqs.map((function(e,n){return Object(i.createElement)("li",{key:n,className:"wpseopress-faqs-area"},Object(i.createElement)("div",{className:"wpseopress-faq"},Object(i.createElement)(l.RichText,{tagName:t.titleWrapper,className:"wpseopress-faq-question",placeholder:S("Question...","wp-seopress"),value:e?e.question:"",onChange:function(e){return f(e,n)}}),Object(i.createElement)("div",{className:"wpseopress-answer-meta"},Object(i.createElement)(g,{value:e?e.image:"",onSelect:d,onRemoveImage:w,imageSize:t.imageSize,index:n}),Object(i.createElement)(l.RichText,{tagName:"div",className:"wpseopress-faq-answer",placeholder:S("Answer...","wp-seopress"),value:e?e.answer:"",onChange:function(e){return b(e,n)}}))),Object(i.createElement)("div",{className:"wpseopress-faq-cta"},Object(i.createElement)("button",{className:"components-button is-tertiary is-destructive",value:S("Remove","wp-seopress"),onClick:function(){return m(n)}},S("Remove","wp-seopress"))))}))},m=function(n){var r=t.faqs.filter((function(e,t){return t!==n}));e.setAttributes({faqs:r})},f=function(n,r){var s=t.faqs.map((function(e,t){return t!==r?e:j(j({},e),{},{question:n})}));e.setAttributes({faqs:s})},b=function(n,r){var s=t.faqs.map((function(e,t){return t!==r?e:j(j({},e),{},{answer:n})}));e.setAttributes({faqs:s})},d=function(n,r){var s=t.faqs.map((function(e,t){return t!==r?e:j(j({},e),{},{image:n})}));e.setAttributes({faqs:s})},w=function(n){var r=t.faqs.map((function(e,t){return t!==n?e:j(j({},e),{},{image:null})}));e.setAttributes({faqs:r})},O=Object(i.createElement)(l.InspectorControls,null,Object(i.createElement)(c.PanelBody,{title:S("FAQ Settings","wp-seopress")},Object(i.createElement)("p",null,S("List Style","wp-seopress")),Object(i.createElement)(c.PanelRow,{className:"wpseopress-faqs-list-style"},Object(i.createElement)(c.ButtonGroup,null,Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"none"==n,onClick:function(t){e.setAttributes({listStyle:"none"})}},A("NONE","Div tag List","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"ol"==n,onClick:function(t){e.setAttributes({listStyle:"ol"})}},A("OL","Numbered List","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"ul"==n,onClick:function(t){e.setAttributes({listStyle:"ul"})}},A("UL","Unordered List","wp-seopress")))),Object(i.createElement)("p",null,S("Title Wrapper","wp-seopress")),Object(i.createElement)(c.PanelRow,{className:"wpseopress-faqs-title-wrapper"},Object(i.createElement)(c.ButtonGroup,null,Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"h2"==r,onClick:function(t){e.setAttributes({titleWrapper:"h2"})}},A("H2","H2 title tag","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"h3"==r,onClick:function(t){e.setAttributes({titleWrapper:"h3"})}},A("H3","H3 title tag","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"h4"==r,onClick:function(t){e.setAttributes({titleWrapper:"h4"})}},A("H4","H4 title tag","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"h5"==r,onClick:function(t){e.setAttributes({titleWrapper:"h5"})}},A("H5","H5 title tag","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"h6"==r,onClick:function(t){e.setAttributes({titleWrapper:"h6"})}},A("H6","H6 title tag","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"p"==r,onClick:function(t){e.setAttributes({titleWrapper:"p"})}},A("P","P title tag","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"div"==r,onClick:function(t){e.setAttributes({titleWrapper:"div"})}},A("DIV","DIV title tag","wp-seopress")))),Object(i.createElement)("p",null,S("Image Size","wp-seopress")),Object(i.createElement)(c.PanelRow,{className:"wpseopress-faqs-image-size"},Object(i.createElement)(c.ButtonGroup,null,Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"thumbnail"==s,onClick:function(t){e.setAttributes({imageSize:"thumbnail"})}},A("S","Thubmnail Size","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"medium"==s,onClick:function(t){e.setAttributes({imageSize:"medium"})}},A("M","Medium Size","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"large"==s,onClick:function(t){e.setAttributes({imageSize:"large"})}},A("L","Large Size","wp-seopress")),Object(i.createElement)(c.Button,{isSecondary:!0,isPrimary:"full"==s,onClick:function(t){e.setAttributes({imageSize:"full"})}},A("XL","Original Size","wp-seopress")))),Object(i.createElement)("p",null,S("SEO Settings","wp-seopress")),Object(i.createElement)(c.PanelRow,null,Object(i.createElement)(c.ToggleControl,{label:S("Enable FAQ Schema","wp-seopress"),checked:!!a,onChange:function(t){e.setAttributes({showFAQScheme:!a})}})),Object(i.createElement)("p",null,S("Display","wp-seopress")),Object(i.createElement)(c.PanelRow,null,Object(i.createElement)(c.ToggleControl,{label:S("Enable accordion","wp-seopress"),checked:!!u,onChange:function(t){e.setAttributes({showAccordion:!u})}}))));return Object(i.createElement)(h,null,O,Object(i.createElement)("div",{className:"wpseopress-faqs"},"ul"===n&&Object(i.createElement)("ul",null,p()),"ol"===n&&Object(i.createElement)("ol",null,p()),"none"===n&&p(),Object(i.createElement)("div",{className:"wpseopress-faqs-actions"},Object(i.createElement)("button",{type:"button",title:S("Add FAQ","wp-seopress"),className:"add-faq components-button is-secondary",onClick:function(n){n.preventDefault(),e.setAttributes({faqs:[].concat(o()(t.faqs),[{question:"",answer:"",image:""}])})}},S("Add FAQ","wp-seopress")))))})),P=n(6),q=n(7);Object(P.registerBlockType)("wpseopress/faq-block",{title:Object(q.__)("FAQ","wp-seopress"),icon:"index-card",category:"wpseopress",example:{},edit:k,save:function(){return null}})}]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./src/edit.js","webpack:///./src/editor.scss","webpack:///./src/image-control.js","webpack:///./src/index.js","webpack:///external {\"this\":[\"wp\",\"blockEditor\"]}","webpack:///external {\"this\":[\"wp\",\"blocks\"]}","webpack:///external {\"this\":[\"wp\",\"components\"]}","webpack:///external {\"this\":[\"wp\",\"element\"]}","webpack:///external {\"this\":[\"wp\",\"i18n\"]}"],"names":["wp","element","Component","Fragment","i18n","__","_x","compose","withSelect","data","WPSeopress_FAQ","props","attributes","listStyle","titleWrapper","imageSize","showFAQScheme","showFAQs","faqs","map","faq","i","question","value","handleQuestionChange","image","handleImageChange","onRemoveImage","answer","handleAnswerChange","removeFAQ","addFAQ","setAttributes","filter","item","key","inspectorControls","e","preventDefault","select","getMedia","selectedImageId","selectedImage","window","components","Spinner","Button","ResponsiveWrapper","ALLOWED_MEDIA_TYPES","ImageControl","onUpdateImage","onSelect","id","index","getImageSize","imgSize","undefined","source_url","guid","raw","media_details","sizes","thumbnail","medium","large","medium_large","full","error","instructions","open","ownProps","registerBlockType","title","icon","category","example","edit","save"],"mappings":";;;;;;;;;;;;;;;;QAAA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA,QAAQ,oBAAoB;QAC5B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA,iBAAiB,4BAA4B;QAC7C;QACA;QACA,kBAAkB,2BAA2B;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA;QACA;QACA;QACA,gBAAgB,uBAAuB;QACvC;;;QAGA;QACA;QACA;QACA;;;;;;;;;;;;ACvJA;AACA;;AAEA,wCAAwC,SAAS;AACjD;AACA;;AAEA;AACA;;AAEA,mC;;;;;;;;;;;ACVA,uBAAuB,mBAAO,CAAC,qFAAoB;;AAEnD;AACA;AACA;;AAEA,oC;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;;AAEA,iC;;;;;;;;;;;ACfA;AACA;AACA;;AAEA,kC;;;;;;;;;;;ACJA;AACA;AACA;;AAEA,oC;;;;;;;;;;;ACJA,wBAAwB,mBAAO,CAAC,uFAAqB;;AAErD,sBAAsB,mBAAO,CAAC,mFAAmB;;AAEjD,iCAAiC,mBAAO,CAAC,yGAA8B;;AAEvE,wBAAwB,mBAAO,CAAC,uFAAqB;;AAErD;AACA;AACA;;AAEA,oC;;;;;;;;;;;ACZA,uBAAuB,mBAAO,CAAC,qFAAoB;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBCXgCA,EAAE,CAACC,O;IAA3BC,S,eAAAA,S;IAAWC,Q,eAAAA,Q;AAEnB;eAQmBH,EAAE,CAACI,I;IAAdC,E,YAAAA,E;IAAIC,E,YAAAA,E;AAEZ;AACA;IAEQC,O,GAAYP,EAAE,CAACO,O,CAAfA,O;IACAC,U,GAAeR,EAAE,CAACS,I,CAAlBD,U;;AAER,SAASE,cAAT,CAAwBC,KAAxB,EAA+B;AAAA,MACnBC,UADmB,GACJD,KADI,CACnBC,UADmB;AAAA,MAEnBC,SAFmB,GAEmCD,UAFnC,CAEnBC,SAFmB;AAAA,MAERC,YAFQ,GAEmCF,UAFnC,CAERE,YAFQ;AAAA,MAEMC,SAFN,GAEmCH,UAFnC,CAEMG,SAFN;AAAA,MAEiBC,aAFjB,GAEmCJ,UAFnC,CAEiBI,aAFjB;;AAI3B,MAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAM;AACnB,WACKL,UAAU,CAACC,SAAX,KAAyB,MAAzB,IACGD,UAAU,CAACM,IAAX,CAAgBC,GAAhB,CAAoB,UAACC,GAAD,EAAMC,CAAN;AAAA,aAChB;AAAK,WAAG,EAAEA,CAAV;AAAa,iBAAS,EAAC;AAAvB,SACI;AAAK,iBAAS,EAAC;AAAf,SACI,yEAAC,gEAAD;AACI,eAAO,EAAET,UAAU,CAACE,YADxB;AAEI,iBAAS,EAAC,yBAFd;AAGI,mBAAW,EAAET,EAAE,CAAC,aAAD,EAAgB,aAAhB,CAHnB;AAII,aAAK,EAAE,CAAC,CAACe,GAAF,GAAQA,GAAG,CAACE,QAAZ,GAAuB,EAJlC;AAKI,gBAAQ,EAAE,kBAACC,KAAD;AAAA,iBACNC,oBAAoB,CAACD,KAAD,EAAQF,CAAR,CADd;AAAA;AALd,QADJ,EAUI;AAAK,iBAAS,EAAC;AAAf,SACI,yEAAC,sDAAD;AACI,aAAK,EAAE,CAAC,CAACD,GAAF,GAAQA,GAAG,CAACK,KAAZ,GAAoB,EAD/B;AAEI,gBAAQ,EAAEC,iBAFd;AAGI,qBAAa,EAAEC,aAHnB;AAII,iBAAS,EAAEf,UAAU,CAACG,SAJ1B;AAKI,aAAK,EAAEM;AALX,QADJ,EAQI,yEAAC,gEAAD;AACI,eAAO,EAAC,GADZ;AAEI,iBAAS,EAAC,uBAFd;AAGI,mBAAW,EAAEhB,EAAE,CAAC,WAAD,EAAc,aAAd,CAHnB;AAII,aAAK,EAAE,CAAC,CAACe,GAAF,GAAQA,GAAG,CAACQ,MAAZ,GAAqB,EAJhC;AAKI,gBAAQ,EAAE,kBAACL,KAAD;AAAA,iBACNM,kBAAkB,CAACN,KAAD,EAAQF,CAAR,CADZ;AAAA;AALd,QARJ,CAVJ,CADJ,EA8BI;AAAK,iBAAS,EAAC;AAAf,SACI;AACI,iBAAS,EAAC,2BADd;AAEI,aAAK,EAAEhB,EAAE,CAAC,QAAD,EAAW,aAAX,CAFb;AAGI,eAAO,EAAE;AAAA,iBAAMyB,SAAS,CAACT,CAAD,CAAf;AAAA;AAHb,SAKKhB,EAAE,CAAC,QAAD,EAAW,aAAX,CALP,CADJ,CA9BJ,CADgB;AAAA,KAApB,CADJ,IA2CC,CAACO,UAAU,CAACC,SAAX,KAAyB,IAAzB,IAAiCD,UAAU,CAACC,SAAX,KAAyB,IAA3D,KACGD,UAAU,CAACM,IAAX,CAAgBC,GAAhB,CAAoB,UAACC,GAAD,EAAMC,CAAN;AAAA,aAChB;AAAI,WAAG,EAAEA,CAAT;AAAY,iBAAS,EAAC;AAAtB,SACI;AAAK,iBAAS,EAAC;AAAf,SACI,yEAAC,gEAAD;AACI,eAAO,EAAET,UAAU,CAACE,YADxB;AAEI,iBAAS,EAAC,yBAFd;AAGI,mBAAW,EAAET,EAAE,CAAC,aAAD,EAAgB,aAAhB,CAHnB;AAII,aAAK,EAAE,CAAC,CAACe,GAAF,GAAQA,GAAG,CAACE,QAAZ,GAAuB,EAJlC;AAKI,gBAAQ,EAAE,kBAACC,KAAD;AAAA,iBACNC,oBAAoB,CAACD,KAAD,EAAQF,CAAR,CADd;AAAA;AALd,QADJ,EAUI;AAAK,iBAAS,EAAC;AAAf,SACI,yEAAC,sDAAD;AACI,aAAK,EAAE,CAAC,CAACD,GAAF,GAAQA,GAAG,CAACK,KAAZ,GAAoB,EAD/B;AAEI,gBAAQ,EAAEC,iBAFd;AAGI,qBAAa,EAAEC,aAHnB;AAII,iBAAS,EAAEf,UAAU,CAACG,SAJ1B;AAKI,aAAK,EAAEM;AALX,QADJ,EAQI,yEAAC,gEAAD;AACI,eAAO,EAAC,KADZ;AAEI,iBAAS,EAAC,uBAFd;AAGI,mBAAW,EAAEhB,EAAE,CAAC,WAAD,EAAc,aAAd,CAHnB;AAII,aAAK,EAAE,CAAC,CAACe,GAAF,GAAQA,GAAG,CAACQ,MAAZ,GAAqB,EAJhC;AAKI,gBAAQ,EAAE,kBAACL,KAAD;AAAA,iBACNM,kBAAkB,CAACN,KAAD,EAAQF,CAAR,CADZ;AAAA;AALd,QARJ,CAVJ,CADJ,EA8BI;AAAK,iBAAS,EAAC;AAAf,SACI;AACI,iBAAS,EAAC,2BADd;AAEI,aAAK,EAAEhB,EAAE,CAAC,QAAD,EAAW,aAAX,CAFb;AAGI,eAAO,EAAE;AAAA,iBAAMyB,SAAS,CAACT,CAAD,CAAf;AAAA;AAHb,SAKKhB,EAAE,CAAC,QAAD,EAAW,aAAX,CALP,CADJ,CA9BJ,CADgB;AAAA,KAApB,CA7CR,CADmB,CAwFjB;AACL,GAzFD;;AA2FA,MAAM0B,MAAM,GAAG,SAATA,MAAS,GAAM;AACjBpB,SAAK,CAACqB,aAAN,CAAoB;AAChBd,UAAI,4FAAMN,UAAU,CAACM,IAAjB,IAAuB;AAAEI,gBAAQ,EAAE,EAAZ;AAAgBM,cAAM,EAAE,EAAxB;AAA4BH,aAAK,EAAE;AAAnC,OAAvB;AADY,KAApB;AAGH,GAJD;;AAMA,MAAMK,SAAS,GAAG,SAAZA,SAAY,CAACT,CAAD,EAAO;AACrB,QAAMH,IAAI,GAAGN,UAAU,CAACM,IAAX,CAAgBe,MAAhB,CAAuB,UAACC,IAAD,EAAOC,GAAP;AAAA,aAAeA,GAAG,KAAKd,CAAvB;AAAA,KAAvB,CAAb;AACAV,SAAK,CAACqB,aAAN,CAAoB;AAAEd,UAAI,EAAEA;AAAR,KAApB;AACH,GAHD;;AAKA,MAAMM,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACD,KAAD,EAAQF,CAAR,EAAc;AACvC,QAAMH,IAAI,GAAGN,UAAU,CAACM,IAAX,CAAgBC,GAAhB,CAAoB,UAACC,GAAD,EAAMe,GAAN,EAAc;AAC3C,UAAIA,GAAG,KAAKd,CAAZ,EAAe;AACX,eAAOD,GAAP;AACH;;AAED,6CACOA,GADP;AAEIE,gBAAQ,EAAEC;AAFd;AAIH,KATY,CAAb;AAUAZ,SAAK,CAACqB,aAAN,CAAoB;AAAEd,UAAI,EAAEA;AAAR,KAApB;AACH,GAZD;;AAcA,MAAMW,kBAAkB,GAAG,SAArBA,kBAAqB,CAACN,KAAD,EAAQF,CAAR,EAAc;AACrC,QAAMH,IAAI,GAAGN,UAAU,CAACM,IAAX,CAAgBC,GAAhB,CAAoB,UAACC,GAAD,EAAMe,GAAN,EAAc;AAC3C,UAAIA,GAAG,KAAKd,CAAZ,EAAe;AACX,eAAOD,GAAP;AACH;;AAED,6CACOA,GADP;AAEIQ,cAAM,EAAEL;AAFZ;AAIH,KATY,CAAb;AAWAZ,SAAK,CAACqB,aAAN,CAAoB;AAAEd,UAAI,EAAEA;AAAR,KAApB;AACH,GAbD;;AAeA,MAAMQ,iBAAiB,GAAG,SAApBA,iBAAoB,CAACH,KAAD,EAAQF,CAAR,EAAc;AACpC,QAAMH,IAAI,GAAGN,UAAU,CAACM,IAAX,CAAgBC,GAAhB,CAAoB,UAACC,GAAD,EAAMe,GAAN,EAAc;AAC3C,UAAIA,GAAG,KAAKd,CAAZ,EAAe;AACX,eAAOD,GAAP;AACH;;AAED,6CACOA,GADP;AAEIK,aAAK,EAAEF;AAFX;AAIH,KATY,CAAb;AAWAZ,SAAK,CAACqB,aAAN,CAAoB;AAAEd,UAAI,EAAEA;AAAR,KAApB;AACH,GAbD;;AAeA,MAAMS,aAAa,GAAG,SAAhBA,aAAgB,CAACN,CAAD,EAAO;AACzB,QAAMH,IAAI,GAAGN,UAAU,CAACM,IAAX,CAAgBC,GAAhB,CAAoB,UAACC,GAAD,EAAMe,GAAN,EAAc;AAC3C,UAAIA,GAAG,KAAKd,CAAZ,EAAe;AACX,eAAOD,GAAP;AACH;;AAED,6CACOA,GADP;AAEIK,aAAK,EAAE;AAFX;AAIH,KATY,CAAb;AAUAd,SAAK,CAACqB,aAAN,CAAoB;AAAEd,UAAI,EAAEA;AAAR,KAApB;AACH,GAZD;;AAcA,MAAMkB,iBAAiB,GACnB,yEAAC,yEAAD,QACI,yEAAC,+DAAD;AAAW,SAAK,EAAE/B,EAAE,CAAC,cAAD,EAAiB,aAAjB;AAApB,KACI,oFAAIA,EAAE,CAAC,YAAD,EAAe,aAAf,CAAN,CADJ,EAEI,yEAAC,8DAAD;AAAU,aAAS,EAAC;AAApB,KACI,yEAAC,iEAAD,QACI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,UAAUQ,SAAV,GAAsB,IAAtB,GAA6B,KAF5C;AAGI,WAAO,EAAE,iBAACwB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBnB,iBAAS,EAAE;AADK,OAApB;AAGH;AAPL,KASKP,EAAE,CAAC,MAAD,EAAS,cAAT,EAAyB,aAAzB,CATP,CADJ,EAYI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,QAAQO,SAAR,GAAoB,IAApB,GAA2B,KAF1C;AAGI,WAAO,EAAE,iBAACwB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBnB,iBAAS,EAAE;AADK,OAApB;AAGH;AAPL,KASKP,EAAE,CAAC,IAAD,EAAO,eAAP,EAAwB,aAAxB,CATP,CAZJ,EAuBI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,QAAQO,SAAR,GAAoB,IAApB,GAA2B,KAF1C;AAGI,WAAO,EAAE,iBAACwB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBnB,iBAAS,EAAE;AADK,OAApB;AAGH;AAPL,KASKP,EAAE,CAAC,IAAD,EAAO,gBAAP,EAAyB,aAAzB,CATP,CAvBJ,CADJ,CAFJ,EAuCI,oFAAID,EAAE,CAAC,eAAD,EAAkB,aAAlB,CAAN,CAvCJ,EAwCI,yEAAC,8DAAD;AAAU,aAAS,EAAC;AAApB,KACI,yEAAC,iEAAD,QACI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,QAAQS,YAAR,GAAuB,IAAvB,GAA8B,KAF7C;AAGI,WAAO,EAAE,iBAACuB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBlB,oBAAY,EAAE;AADE,OAApB;AAGH;AAPL,KASKR,EAAE,CAAC,IAAD,EAAO,cAAP,EAAuB,aAAvB,CATP,CADJ,EAYI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,QAAQQ,YAAR,GAAuB,IAAvB,GAA8B,KAF7C;AAGI,WAAO,EAAE,iBAACuB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBlB,oBAAY,EAAE;AADE,OAApB;AAGH;AAPL,KASKR,EAAE,CAAC,IAAD,EAAO,cAAP,EAAuB,aAAvB,CATP,CAZJ,EAuBI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,QAAQQ,YAAR,GAAuB,IAAvB,GAA8B,KAF7C;AAGI,WAAO,EAAE,iBAACuB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBlB,oBAAY,EAAE;AADE,OAApB;AAGH;AAPL,KASKR,EAAE,CAAC,IAAD,EAAO,cAAP,EAAuB,aAAvB,CATP,CAvBJ,EAkCI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,QAAQQ,YAAR,GAAuB,IAAvB,GAA8B,KAF7C;AAGI,WAAO,EAAE,iBAACuB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBlB,oBAAY,EAAE;AADE,OAApB;AAGH;AAPL,KASKR,EAAE,CAAC,IAAD,EAAO,cAAP,EAAuB,aAAvB,CATP,CAlCJ,EA6CI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,QAAQQ,YAAR,GAAuB,IAAvB,GAA8B,KAF7C;AAGI,WAAO,EAAE,iBAACuB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBlB,oBAAY,EAAE;AADE,OAApB;AAGH;AAPL,KASKR,EAAE,CAAC,IAAD,EAAO,cAAP,EAAuB,aAAvB,CATP,CA7CJ,EAwDI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,OAAOQ,YAAP,GAAsB,IAAtB,GAA6B,KAF5C;AAGI,WAAO,EAAE,iBAACuB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBlB,oBAAY,EAAE;AADE,OAApB;AAGH;AAPL,KASKR,EAAE,CAAC,GAAD,EAAM,aAAN,EAAqB,aAArB,CATP,CAxDJ,EAmEI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,SAASQ,YAAT,GAAwB,IAAxB,GAA+B,KAF9C;AAGI,WAAO,EAAE,iBAACuB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBlB,oBAAY,EAAE;AADE,OAApB;AAGH;AAPL,KASKR,EAAE,CAAC,KAAD,EAAQ,eAAR,EAAyB,aAAzB,CATP,CAnEJ,CADJ,CAxCJ,EAyHI,oFAAID,EAAE,CAAC,YAAD,EAAe,aAAf,CAAN,CAzHJ,EA0HI,yEAAC,8DAAD;AAAU,aAAS,EAAC;AAApB,KACI,yEAAC,iEAAD,QACI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,eAAeU,SAAf,GAA2B,IAA3B,GAAkC,KAFjD;AAGI,WAAO,EAAE,iBAACsB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBjB,iBAAS,EAAE;AADK,OAApB;AAGH;AAPL,KASKT,EAAE,CAAC,GAAD,EAAM,gBAAN,EAAwB,aAAxB,CATP,CADJ,EAYI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,YAAYS,SAAZ,GAAwB,IAAxB,GAA+B,KAF9C;AAGI,WAAO,EAAE,iBAACsB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBjB,iBAAS,EAAE;AADK,OAApB;AAGH;AAPL,KASKT,EAAE,CAAC,GAAD,EAAM,aAAN,EAAqB,aAArB,CATP,CAZJ,EAuBI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,WAAWS,SAAX,GAAuB,IAAvB,GAA8B,KAF7C;AAGI,WAAO,EAAE,iBAACsB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBjB,iBAAS,EAAE;AADK,OAApB;AAGH;AAPL,KASKT,EAAE,CAAC,GAAD,EAAM,YAAN,EAAoB,aAApB,CATP,CAvBJ,EAkCI,yEAAC,4DAAD;AACI,eAAW,MADf;AAEI,aAAS,EAAE,UAAUS,SAAV,GAAsB,IAAtB,GAA6B,KAF5C;AAGI,WAAO,EAAE,iBAACsB,CAAD,EAAO;AACZ1B,WAAK,CAACqB,aAAN,CAAoB;AAChBjB,iBAAS,EAAE;AADK,OAApB;AAGH;AAPL,KASKT,EAAE,CAAC,IAAD,EAAO,eAAP,EAAwB,aAAxB,CATP,CAlCJ,CADJ,CA1HJ,EA0KI,oFAAID,EAAE,CAAC,cAAD,EAAiB,aAAjB,CAAN,CA1KJ,EA2KI,yEAAC,8DAAD,QACI,yEAAC,mEAAD;AACI,SAAK,EAAEA,EAAE,CAAC,mBAAD,EAAsB,aAAtB,CADb;AAEI,WAAO,EAAE,CAAC,CAACW,aAFf;AAGI,YAAQ,EAAE,kBAACqB,CAAD,EAAO;AACb1B,WAAK,CAACqB,aAAN,CAAoB;AAChBhB,qBAAa,EAAE,CAACA;AADA,OAApB;AAGH;AAPL,IADJ,CA3KJ,CADJ,CADJ;AA4LA,SACI,yEAAC,QAAD,QACKoB,iBADL,EAEI;AAAK,aAAS,EAAC;AAAf,KACKvB,SAAS,KAAK,IAAd,IAAsB,qFAAKI,QAAQ,EAAb,CAD3B,EAEKJ,SAAS,KAAK,IAAd,IAAsB,qFAAKI,QAAQ,EAAb,CAF3B,EAGKJ,SAAS,KAAK,MAAd,IAAwBI,QAAQ,EAHrC,EAII;AAAK,aAAS,EAAC;AAAf,KACI;AACI,QAAI,EAAC,QADT;AAEI,SAAK,EAAEZ,EAAE,CAAC,SAAD,EAAY,aAAZ,CAFb;AAGI,aAAS,EAAC,gCAHd;AAII,WAAO,EAAE,iBAACgC,CAAD,EAAO;AACZA,OAAC,CAACC,cAAF;AACAP,YAAM;AACT;AAPL,KASK1B,EAAE,CAAC,SAAD,EAAY,aAAZ,CATP,CADJ,CAJJ,CAFJ,CADJ;AAuBH;;AAEcE,sEAAO,CAClBC,UAAU,CAAC,UAAC+B,MAAD,QAA4B;AAAA,MAAjB3B,UAAiB,QAAjBA,UAAiB;;AAAA,gBACd2B,MAAM,CAAC,MAAD,CADQ;AAAA,MAC3BC,QAD2B,WAC3BA,QAD2B;;AAAA,MAE3BC,eAF2B,GAEP7B,UAFO,CAE3B6B,eAF2B;AAInC,SAAO;AACHC,iBAAa,EAAED,eAAe,GAAGD,QAAQ,CAACC,eAAD,CAAX,GAA+B;AAD1D,GAAP;AAGH,CAPS,CADQ,CAAP,CASb/B,cATa,CAAf,E;;;;;;;;;;;AC3YA,uC;;;;;;;;;;;;;;;;;;ACAA,IAAMV,EAAE,GAAG2C,MAAM,CAAC3C,EAAlB;IACQQ,U,GAAeR,EAAE,CAACS,I,CAAlBD,U;IACAN,S,GAAcF,EAAE,CAACC,O,CAAjBC,S;AACR;qBAC+CF,EAAE,CAAC4C,U;IAA1CC,O,kBAAAA,O;IAASC,M,kBAAAA,M;IAAQC,iB,kBAAAA,iB;IACjBxC,O,GAAYP,EAAE,CAACO,O,CAAfA,O;IACAF,E,GAAOL,EAAE,CAACI,I,CAAVC,E;AAER,IAAM2C,mBAAmB,GAAG,CAAC,OAAD,CAA5B;;AAEA,SAASC,YAAT,CAAsBtC,KAAtB,EAA6B;AAAA,MACjBY,KADiB,GACAZ,KADA,CACjBY,KADiB;AAAA,MACVE,KADU,GACAd,KADA,CACVc,KADU;;AAGzB,MAAMyB,aAAa,GAAG,SAAhBA,aAAgB,CAACzB,KAAD,EAAW;AAC7Bd,SAAK,CAACwC,QAAN,CAAe1B,KAAK,CAAC2B,EAArB,EAAyBzC,KAAK,CAAC0C,KAA/B;AACH,GAFD;;AAIA,MAAM1B,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AACxBhB,SAAK,CAACgB,aAAN,CAAoBhB,KAAK,CAAC0C,KAA1B;AACH,GAFD;;AAIA,MAAMC,YAAY,GAAG,SAAfA,YAAe,CAAC7B,KAAD,EAAW;AAC5B,QAAI8B,OAAO,GAAG,IAAd;;AAEA,QAAI;AACA,UAAIC,SAAS,IAAI/B,KAAjB,EAAwB;AACpB8B,eAAO,GAAG,EAAV;AACAA,eAAO,CAACE,UAAR,GAAqBhC,KAAK,CAACiC,IAAN,CAAWC,GAAhC;;AAEA,YAAIH,SAAS,IAAI/B,KAAK,CAACmC,aAAN,CAAoBC,KAArC,EAA4C;AACxCN,iBAAO,GAAG,IAAV;;AACA,kBAAQ5C,KAAK,CAACI,SAAd;AACI,iBAAK,WAAL;AACIwC,qBAAO,GACHC,SAAS,IAAI/B,KAAb,GACMA,KAAK,CAACmC,aAAN,CAAoBC,KAApB,CAA0BC,SADhC,GAEM,IAHV;AAIA;;AACJ,iBAAK,QAAL;AACIP,qBAAO,GACHC,SAAS,IAAI/B,KAAb,GACMA,KAAK,CAACmC,aAAN,CAAoBC,KAApB,CAA0BE,MADhC,GAEM,IAHV;AAIA;;AACJ,iBAAK,OAAL;AACIR,qBAAO,GACHC,SAAS,IAAI/B,KAAb,GACM+B,SAAS,IACT/B,KAAK,CAACmC,aAAN,CAAoBC,KAApB,CAA0BG,KAD1B,GAEIvC,KAAK,CAACmC,aAAN,CAAoBC,KAApB,CAA0BG,KAF9B,GAGIvC,KAAK,CAACmC,aAAN,CAAoBC,KAApB,CAA0BI,YAJpC,GAKM,IANV;AAOA;;AACJ;AACIV,qBAAO,GACHC,SAAS,IAAI/B,KAAb,GACMA,KAAK,CAACmC,aAAN,CAAoBC,KAApB,CAA0BK,IADhC,GAEM,IAHV;AAvBR;AA4BH;AACJ;;AACD,aAAOX,OAAP;AACH,KAtCD,CAsCE,OAAOY,KAAP,EAAc;AACZ,aAAOZ,OAAP;AACH;AACJ,GA5CD;;AA8CA,MAAMa,YAAY,GACd,oFACK/D,EAAE,CACC,oEADD,EAEC,aAFD,CADP,CADJ;AASA,SACI;AAAK,aAAS,EAAC;AAAf,KACI,yEAAC,wEAAD;AAAkB,YAAQ,EAAE+D;AAA5B,KACI,yEAAC,mEAAD;AACI,SAAK,EAAE/D,EAAE,CAAC,WAAD,EAAc,aAAd,CADb;AAEI,YAAQ,EAAE6C,aAFd;AAGI,gBAAY,EAAEF,mBAHlB;AAII,SAAK,EAAEzB,KAJX;AAKI,UAAM,EAAE,sBAAc;AAAA,UAAX8C,IAAW,QAAXA,IAAW;AAClB,UAAMtD,SAAS,GAAGuC,YAAY,CAAC7B,KAAD,CAA9B;AACA,aACI,yEAAC,MAAD;AACI,iBAAS,EACL,CAACF,KAAD,GACM,oCADN,GAEM,qCAJd;AAMI,eAAO,EAAE8C;AANb,SAQK,CAAC9C,KAAD,IAAUlB,EAAE,CAAC,WAAD,EAAc,aAAd,CARjB,EASK,CAAC,CAACkB,KAAF,IAAW,CAACE,KAAZ,IAAqB,yEAAC,OAAD,OAT1B,EAUK,CAAC,CAACF,KAAF,IACGE,KADH,IAEGV,SAFH,IAGGA,SAAS,CAAC0C,UAHb,IAIO;AACI,WAAG,EAAE1C,SAAS,CAAC0C,UADnB;AAEI,WAAG,EAAEpD,EAAE,CAAC,WAAD,EAAc,aAAd;AAFX,QAdZ,CADJ;AAsBH;AA7BL,IADJ,CADJ,EAkCK,CAAC,CAACkB,KAAF,IACG,yEAAC,wEAAD,QACI,yEAAC,MAAD;AAAQ,WAAO,EAAEI,aAAjB;AAAgC,UAAM,MAAtC;AAAuC,iBAAa;AAApD,KACKtB,EAAE,CAAC,cAAD,EAAiB,aAAjB,CADP,CADJ,CAnCR,CADJ;AA4CH;;AAEcE,sEAAO,CAClBC,UAAU,CAAC,UAAC+B,MAAD,EAAS+B,QAAT,EAAsB;AAC7B,SAAO;AACH7C,SAAK,EAAE6C,QAAQ,CAAC/C,KAAT,GACDgB,MAAM,CAAC,MAAD,CAAN,CAAeC,QAAf,CAAwB8B,QAAQ,CAAC/C,KAAjC,CADC,GAED;AAHH,GAAP;AAKH,CANS,CADQ,CAAP,CAQb0B,YARa,CAAf,E;;;;;;;;;;;;AC1HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEAsB,2EAAiB,CAAC,sBAAD,EAAyB;AACtCC,OAAK,EAAEnE,0DAAE,CAAC,KAAD,EAAQ,aAAR,CAD6B;AAEtCoE,MAAI,EAAE,YAFgC;AAGtCC,UAAQ,EAAE,YAH4B;AAItCC,SAAO,EAAE,EAJ6B;AAKtCC,MAAI,EAAEA,6CALgC;AAMtCC,MANsC,kBAM/B;AACH,WAAO,IAAP;AACH;AARqC,CAAzB,CAAjB,C;;;;;;;;;;;ACNA,aAAa,4CAA4C,EAAE,I;;;;;;;;;;;ACA3D,aAAa,uCAAuC,EAAE,I;;;;;;;;;;;ACAtD,aAAa,2CAA2C,EAAE,I;;;;;;;;;;;ACA1D,aAAa,wCAAwC,EAAE,I;;;;;;;;;;;ACAvD,aAAa,qCAAqC,EAAE,I","file":"index.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"index\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"./src/index.js\",\"style-index\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","const { Component, Fragment } = wp.element\n\nimport {\n PanelBody,\n Button,\n ButtonGroup,\n PanelRow,\n ToggleControl,\n} from '@wordpress/components'\n\nconst { __, _x } = wp.i18n\n\nimport { RichText, InspectorControls } from '@wordpress/block-editor'\nimport ImageControl from './image-control'\n\nconst { compose } = wp.compose\nconst { withSelect } = wp.data\n\nfunction WPSeopress_FAQ(props) {\n const { attributes } = props\n const { listStyle, titleWrapper, imageSize, showFAQScheme } = attributes\n\n const showFAQs = () => {\n return (\n (attributes.listStyle === 'none' &&\n attributes.faqs.map((faq, i) => (\n <div key={i} className=\"wpseopress-faqs-area\">\n <div className=\"wpseopress-faq\">\n <RichText\n tagName={attributes.titleWrapper}\n className=\"wpseopress-faq-question\"\n placeholder={__('Question...', 'wp-seopress')}\n value={!!faq ? faq.question : ''}\n onChange={(value) =>\n handleQuestionChange(value, i)\n }\n />\n <div className=\"wpseopress-answer-meta\">\n <ImageControl\n value={!!faq ? faq.image : ''}\n onSelect={handleImageChange}\n onRemoveImage={onRemoveImage}\n imageSize={attributes.imageSize}\n index={i}\n />\n <RichText\n tagName=\"p\"\n className=\"wpseopress-faq-answer\"\n placeholder={__('Answer...', 'wp-seopress')}\n value={!!faq ? faq.answer : ''}\n onChange={(value) =>\n handleAnswerChange(value, i)\n }\n />\n </div>\n </div>\n <div className=\"wpseopress-faq-cta\">\n <button\n className=\"button button-link-delete\"\n value={__('Remove', 'wp-seopress')}\n onClick={() => removeFAQ(i)}\n >\n {__('Remove', 'wp-seopress')}\n </button>\n </div>\n </div>\n ))) ||\n ((attributes.listStyle === 'ul' || attributes.listStyle === 'ol') &&\n attributes.faqs.map((faq, i) => (\n <li key={i} className=\"wpseopress-faqs-area\">\n <div className=\"wpseopress-faq\">\n <RichText\n tagName={attributes.titleWrapper}\n className=\"wpseopress-faq-question\"\n placeholder={__('Question...', 'wp-seopress')}\n value={!!faq ? faq.question : ''}\n onChange={(value) =>\n handleQuestionChange(value, i)\n }\n />\n <div className=\"wpseopress-answer-meta\">\n <ImageControl\n value={!!faq ? faq.image : ''}\n onSelect={handleImageChange}\n onRemoveImage={onRemoveImage}\n imageSize={attributes.imageSize}\n index={i}\n />\n <RichText\n tagName=\"div\"\n className=\"wpseopress-faq-answer\"\n placeholder={__('Answer...', 'wp-seopress')}\n value={!!faq ? faq.answer : ''}\n onChange={(value) =>\n handleAnswerChange(value, i)\n }\n />\n </div>\n </div>\n <div className=\"wpseopress-faq-cta\">\n <button\n className=\"button button-link-delete\"\n value={__('Remove', 'wp-seopress')}\n onClick={() => removeFAQ(i)}\n >\n {__('Remove', 'wp-seopress')}\n </button>\n </div>\n </li>\n )))\n ) // End return\n }\n\n const addFAQ = () => {\n props.setAttributes({\n faqs: [...attributes.faqs, { question: '', answer: '', image: '' }],\n })\n }\n\n const removeFAQ = (i) => {\n const faqs = attributes.faqs.filter((item, key) => key !== i)\n props.setAttributes({ faqs: faqs })\n }\n\n const handleQuestionChange = (value, i) => {\n const faqs = attributes.faqs.map((faq, key) => {\n if (key !== i) {\n return faq\n }\n\n return {\n ...faq,\n question: value,\n }\n })\n props.setAttributes({ faqs: faqs })\n }\n\n const handleAnswerChange = (value, i) => {\n const faqs = attributes.faqs.map((faq, key) => {\n if (key !== i) {\n return faq\n }\n\n return {\n ...faq,\n answer: value,\n }\n })\n\n props.setAttributes({ faqs: faqs })\n }\n\n const handleImageChange = (value, i) => {\n const faqs = attributes.faqs.map((faq, key) => {\n if (key !== i) {\n return faq\n }\n\n return {\n ...faq,\n image: value,\n }\n })\n\n props.setAttributes({ faqs: faqs })\n }\n\n const onRemoveImage = (i) => {\n const faqs = attributes.faqs.map((faq, key) => {\n if (key !== i) {\n return faq\n }\n\n return {\n ...faq,\n image: null,\n }\n })\n props.setAttributes({ faqs: faqs })\n }\n\n const inspectorControls = (\n <InspectorControls>\n <PanelBody title={__('FAQ Settings', 'wp-seopress')}>\n <p>{__('List Style', 'wp-seopress')}</p>\n <PanelRow className=\"wpseopress-faqs-list-style\">\n <ButtonGroup>\n <Button\n isSecondary\n isPrimary={'none' == listStyle ? true : false}\n onClick={(e) => {\n props.setAttributes({\n listStyle: 'none',\n })\n }}\n >\n {_x('NONE', 'Div tag List', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'ol' == listStyle ? true : false}\n onClick={(e) => {\n props.setAttributes({\n listStyle: 'ol',\n })\n }}\n >\n {_x('OL', 'Numbered List', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'ul' == listStyle ? true : false}\n onClick={(e) => {\n props.setAttributes({\n listStyle: 'ul',\n })\n }}\n >\n {_x('UL', 'Unordered List', 'wp-seopress')}\n </Button>\n </ButtonGroup>\n </PanelRow>\n <p>{__('Title Wrapper', 'wp-seopress')}</p>\n <PanelRow className=\"wpseopress-faqs-title-wrapper\">\n <ButtonGroup>\n <Button\n isSecondary\n isPrimary={'h2' == titleWrapper ? true : false}\n onClick={(e) => {\n props.setAttributes({\n titleWrapper: 'h2',\n })\n }}\n >\n {_x('H2', 'H2 title tag', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'h3' == titleWrapper ? true : false}\n onClick={(e) => {\n props.setAttributes({\n titleWrapper: 'h3',\n })\n }}\n >\n {_x('H3', 'H3 title tag', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'h4' == titleWrapper ? true : false}\n onClick={(e) => {\n props.setAttributes({\n titleWrapper: 'h4',\n })\n }}\n >\n {_x('H4', 'H4 title tag', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'h5' == titleWrapper ? true : false}\n onClick={(e) => {\n props.setAttributes({\n titleWrapper: 'h5',\n })\n }}\n >\n {_x('H5', 'H5 title tag', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'h6' == titleWrapper ? true : false}\n onClick={(e) => {\n props.setAttributes({\n titleWrapper: 'h6',\n })\n }}\n >\n {_x('H6', 'H6 title tag', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'p' == titleWrapper ? true : false}\n onClick={(e) => {\n props.setAttributes({\n titleWrapper: 'p',\n })\n }}\n >\n {_x('P', 'P title tag', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'div' == titleWrapper ? true : false}\n onClick={(e) => {\n props.setAttributes({\n titleWrapper: 'div',\n })\n }}\n >\n {_x('DIV', 'DIV title tag', 'wp-seopress')}\n </Button>\n </ButtonGroup>\n </PanelRow>\n <p>{__('Image Size', 'wp-seopress')}</p>\n <PanelRow className=\"wpseopress-faqs-image-size\">\n <ButtonGroup>\n <Button\n isSecondary\n isPrimary={'thumbnail' == imageSize ? true : false}\n onClick={(e) => {\n props.setAttributes({\n imageSize: 'thumbnail',\n })\n }}\n >\n {_x('S', 'Thubmnail Size', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'medium' == imageSize ? true : false}\n onClick={(e) => {\n props.setAttributes({\n imageSize: 'medium',\n })\n }}\n >\n {_x('M', 'Medium Size', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'large' == imageSize ? true : false}\n onClick={(e) => {\n props.setAttributes({\n imageSize: 'large',\n })\n }}\n >\n {_x('L', 'Large Size', 'wp-seopress')}\n </Button>\n <Button\n isSecondary\n isPrimary={'full' == imageSize ? true : false}\n onClick={(e) => {\n props.setAttributes({\n imageSize: 'full',\n })\n }}\n >\n {_x('XL', 'Original Size', 'wp-seopress')}\n </Button>\n </ButtonGroup>\n </PanelRow>\n <p>{__('SEO Settings', 'wp-seopress')}</p>\n <PanelRow>\n <ToggleControl\n label={__('Enable FAQ Schema', 'wp-seopress')}\n checked={!!showFAQScheme}\n onChange={(e) => {\n props.setAttributes({\n showFAQScheme: !showFAQScheme,\n })\n }}\n />\n </PanelRow>\n </PanelBody>\n </InspectorControls>\n )\n\n return (\n <Fragment>\n {inspectorControls}\n <div className=\"wpseopress-faqs\">\n {listStyle === 'ul' && <ul>{showFAQs()}</ul>}\n {listStyle === 'ol' && <ol>{showFAQs()}</ol>}\n {listStyle === 'none' && showFAQs()}\n <div className=\"wpseopress-faqs-actions\">\n <button\n type=\"button\"\n title={__('Add FAQ', 'wp-seopress')}\n className=\"add-faq button button-link-add\"\n onClick={(e) => {\n e.preventDefault()\n addFAQ()\n }}\n >\n {__('Add FAQ', 'wp-seopress')}\n </button>\n </div>\n </div>\n </Fragment>\n )\n}\n\nexport default compose(\n withSelect((select, { attributes }) => {\n const { getMedia } = select('core')\n const { selectedImageId } = attributes\n\n return {\n selectedImage: selectedImageId ? getMedia(selectedImageId) : 0,\n }\n })\n)(WPSeopress_FAQ)\n","// extracted by mini-css-extract-plugin","const wp = window.wp\nconst { withSelect } = wp.data\nconst { Component } = wp.element\nimport { MediaUpload, MediaUploadCheck } from '@wordpress/block-editor'\nconst { Spinner, Button, ResponsiveWrapper } = wp.components\nconst { compose } = wp.compose\nconst { __ } = wp.i18n\n\nconst ALLOWED_MEDIA_TYPES = ['image']\n\nfunction ImageControl(props) {\n const { value, image } = props\n\n const onUpdateImage = (image) => {\n props.onSelect(image.id, props.index)\n }\n\n const onRemoveImage = () => {\n props.onRemoveImage(props.index)\n }\n\n const getImageSize = (image) => {\n let imgSize = null\n\n try {\n if (undefined != image) {\n imgSize = {}\n imgSize.source_url = image.guid.raw\n\n if (undefined != image.media_details.sizes) {\n imgSize = null\n switch (props.imageSize) {\n case 'thumbnail':\n imgSize =\n undefined != image\n ? image.media_details.sizes.thumbnail\n : null\n break\n case 'medium':\n imgSize =\n undefined != image\n ? image.media_details.sizes.medium\n : null\n break\n case 'large':\n imgSize =\n undefined != image\n ? undefined !=\n image.media_details.sizes.large\n ? image.media_details.sizes.large\n : image.media_details.sizes.medium_large\n : null\n break\n default:\n imgSize =\n undefined != image\n ? image.media_details.sizes.full\n : null\n }\n }\n }\n return imgSize\n } catch (error) {\n return imgSize\n }\n }\n\n const instructions = (\n <p>\n {__(\n 'To edit the background image, you need permission to upload media.',\n 'wp-seopress'\n )}\n </p>\n )\n\n return (\n <div className=\"wp-block-wp-seopress-image\">\n <MediaUploadCheck fallback={instructions}>\n <MediaUpload\n title={__('Set Image', 'wp-seopress')}\n onSelect={onUpdateImage}\n allowedTypes={ALLOWED_MEDIA_TYPES}\n value={value}\n render={({ open }) => {\n const imageSize = getImageSize(image)\n return (\n <Button\n className={\n !value\n ? 'editor-post-featured-image__toggle'\n : 'editor-post-featured-image__preview'\n }\n onClick={open}\n >\n {!value && __('Set Image', 'wp-seopress')}\n {!!value && !image && <Spinner />}\n {!!value &&\n image &&\n imageSize &&\n imageSize.source_url && (\n <img\n src={imageSize.source_url}\n alt={__('Set Image', 'wp-seopress')}\n />\n )}\n </Button>\n )\n }}\n />\n </MediaUploadCheck>\n {!!value && (\n <MediaUploadCheck>\n <Button onClick={onRemoveImage} isLink isDestructive>\n {__('Remove Image', 'wp-seopress')}\n </Button>\n </MediaUploadCheck>\n )}\n </div>\n )\n}\n\nexport default compose(\n withSelect((select, ownProps) => {\n return {\n image: ownProps.value\n ? select('core').getMedia(ownProps.value)\n : null,\n }\n })\n)(ImageControl)\n","import './editor.scss'\nimport './style.scss'\nimport edit from './edit'\nimport { registerBlockType } from '@wordpress/blocks'\nimport { __ } from '@wordpress/i18n'\n\nregisterBlockType('wpseopress/faq-block', {\n title: __('FAQ', 'wp-seopress'),\n icon: 'index-card',\n category: 'wpseopress',\n example: {},\n edit: edit,\n save() {\n return null\n },\n})\n","(function() { module.exports = this[\"wp\"][\"blockEditor\"]; }());","(function() { module.exports = this[\"wp\"][\"blocks\"]; }());","(function() { module.exports = this[\"wp\"][\"components\"]; }());","(function() { module.exports = this[\"wp\"][\"element\"]; }());","(function() { module.exports = this[\"wp\"][\"i18n\"]; }());"],"sourceRoot":""}
 
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/style-index.css CHANGED
@@ -1,3 +1 @@
1
 
2
-
3
- /*# sourceMappingURL=style-index.css.map*/
1
 
 
 
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/build/style-index.css.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"style-index.css","sourceRoot":""}
 
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/package-lock.json CHANGED
@@ -2878,6 +2878,43 @@
2878
  "webpack-bundle-analyzer": "^3.6.1",
2879
  "webpack-cli": "^3.3.11",
2880
  "webpack-livereload-plugin": "^2.3.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2881
  }
2882
  },
2883
  "@wordpress/warning": {
@@ -12490,12 +12527,6 @@
12490
  "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
12491
  "dev": true
12492
  },
12493
- "prettier": {
12494
- "version": "npm:wp-prettier@2.0.5",
12495
- "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-2.0.5.tgz",
12496
- "integrity": "sha512-5GCgdeevIXwR3cW4Qj5XWC5MO1iSCz8+IPn0mMw6awAt/PBiey8yyO7MhePRsaMqghJAhg6Q3QLYWSnUHWkG6A==",
12497
- "dev": true
12498
- },
12499
  "prettier-linter-helpers": {
12500
  "version": "1.0.0",
12501
  "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
@@ -12700,37 +12731,6 @@
12700
  "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
12701
  "dev": true
12702
  },
12703
- "puppeteer": {
12704
- "version": "npm:puppeteer-core@3.0.0",
12705
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-3.0.0.tgz",
12706
- "integrity": "sha512-oWjZFGMc0q2ak+8OxdmMffS79LIT0UEtmpV4h1/AARvESIqqKljf8mrfP+dQ2kas7XttsAZIxRBuWu7Y5JH8KQ==",
12707
- "dev": true,
12708
- "requires": {
12709
- "@types/mime-types": "^2.1.0",
12710
- "debug": "^4.1.0",
12711
- "extract-zip": "^2.0.0",
12712
- "https-proxy-agent": "^4.0.0",
12713
- "mime": "^2.0.3",
12714
- "mime-types": "^2.1.25",
12715
- "progress": "^2.0.1",
12716
- "proxy-from-env": "^1.0.0",
12717
- "rimraf": "^3.0.2",
12718
- "tar-fs": "^2.0.0",
12719
- "unbzip2-stream": "^1.3.3",
12720
- "ws": "^7.2.3"
12721
- },
12722
- "dependencies": {
12723
- "rimraf": {
12724
- "version": "3.0.2",
12725
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
12726
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
12727
- "dev": true,
12728
- "requires": {
12729
- "glob": "^7.1.3"
12730
- }
12731
- }
12732
- }
12733
- },
12734
  "q": {
12735
  "version": "1.5.1",
12736
  "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
2878
  "webpack-bundle-analyzer": "^3.6.1",
2879
  "webpack-cli": "^3.3.11",
2880
  "webpack-livereload-plugin": "^2.3.0"
2881
+ },
2882
+ "dependencies": {
2883
+ "prettier": {
2884
+ "version": "npm:wp-prettier@2.0.5",
2885
+ "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-2.0.5.tgz",
2886
+ "integrity": "sha512-5GCgdeevIXwR3cW4Qj5XWC5MO1iSCz8+IPn0mMw6awAt/PBiey8yyO7MhePRsaMqghJAhg6Q3QLYWSnUHWkG6A==",
2887
+ "dev": true
2888
+ },
2889
+ "puppeteer": {
2890
+ "version": "npm:puppeteer-core@3.0.0",
2891
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-3.0.0.tgz",
2892
+ "integrity": "sha512-oWjZFGMc0q2ak+8OxdmMffS79LIT0UEtmpV4h1/AARvESIqqKljf8mrfP+dQ2kas7XttsAZIxRBuWu7Y5JH8KQ==",
2893
+ "dev": true,
2894
+ "requires": {
2895
+ "@types/mime-types": "^2.1.0",
2896
+ "debug": "^4.1.0",
2897
+ "extract-zip": "^2.0.0",
2898
+ "https-proxy-agent": "^4.0.0",
2899
+ "mime": "^2.0.3",
2900
+ "mime-types": "^2.1.25",
2901
+ "progress": "^2.0.1",
2902
+ "proxy-from-env": "^1.0.0",
2903
+ "rimraf": "^3.0.2",
2904
+ "tar-fs": "^2.0.0",
2905
+ "unbzip2-stream": "^1.3.3",
2906
+ "ws": "^7.2.3"
2907
+ }
2908
+ },
2909
+ "rimraf": {
2910
+ "version": "3.0.2",
2911
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2912
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2913
+ "dev": true,
2914
+ "requires": {
2915
+ "glob": "^7.1.3"
2916
+ }
2917
+ }
2918
  }
2919
  },
2920
  "@wordpress/warning": {
12527
  "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
12528
  "dev": true
12529
  },
 
 
 
 
 
 
12530
  "prettier-linter-helpers": {
12531
  "version": "1.0.0",
12532
  "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
12731
  "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
12732
  "dev": true
12733
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12734
  "q": {
12735
  "version": "1.5.1",
12736
  "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/accordion.css ADDED
File without changes
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/accordion.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ const accordions = document.querySelectorAll(".wpseopress-wrap-faq-question");
2
+ for (let i = 0; i < accordions.length; i++) {
3
+ accordions[i].addEventListener('click', function (e) {
4
+ var btn = this.nextElementSibling;
5
+ var aria = this.querySelector('.wpseopress-accordion-button');
6
+ btn.classList.toggle('wpseopress-hide');
7
+ aria.getAttribute('aria-expanded') === 'true' ? aria.setAttribute('aria-expanded', 'false') : aria.setAttribute('aria-expanded', 'true');
8
+ });
9
+ }
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/edit.js CHANGED
@@ -18,7 +18,7 @@ const { withSelect } = wp.data
18
 
19
  function WPSeopress_FAQ(props) {
20
  const { attributes } = props
21
- const { listStyle, titleWrapper, imageSize, showFAQScheme } = attributes
22
 
23
  const showFAQs = () => {
24
  return (
@@ -56,7 +56,7 @@ function WPSeopress_FAQ(props) {
56
  </div>
57
  <div className="wpseopress-faq-cta">
58
  <button
59
- className="button button-link-delete"
60
  value={__('Remove', 'wp-seopress')}
61
  onClick={() => removeFAQ(i)}
62
  >
@@ -99,7 +99,7 @@ function WPSeopress_FAQ(props) {
99
  </div>
100
  <div className="wpseopress-faq-cta">
101
  <button
102
- className="button button-link-delete"
103
  value={__('Remove', 'wp-seopress')}
104
  onClick={() => removeFAQ(i)}
105
  >
@@ -364,6 +364,18 @@ function WPSeopress_FAQ(props) {
364
  }}
365
  />
366
  </PanelRow>
 
 
 
 
 
 
 
 
 
 
 
 
367
  </PanelBody>
368
  </InspectorControls>
369
  )
@@ -379,7 +391,7 @@ function WPSeopress_FAQ(props) {
379
  <button
380
  type="button"
381
  title={__('Add FAQ', 'wp-seopress')}
382
- className="add-faq button button-link-add"
383
  onClick={(e) => {
384
  e.preventDefault()
385
  addFAQ()
18
 
19
  function WPSeopress_FAQ(props) {
20
  const { attributes } = props
21
+ const { listStyle, titleWrapper, imageSize, showFAQScheme, showAccordion } = attributes
22
 
23
  const showFAQs = () => {
24
  return (
56
  </div>
57
  <div className="wpseopress-faq-cta">
58
  <button
59
+ className="components-button is-tertiary is-destructive"
60
  value={__('Remove', 'wp-seopress')}
61
  onClick={() => removeFAQ(i)}
62
  >
99
  </div>
100
  <div className="wpseopress-faq-cta">
101
  <button
102
+ className="components-button is-tertiary is-destructive"
103
  value={__('Remove', 'wp-seopress')}
104
  onClick={() => removeFAQ(i)}
105
  >
364
  }}
365
  />
366
  </PanelRow>
367
+ <p>{__('Display', 'wp-seopress')}</p>
368
+ <PanelRow>
369
+ <ToggleControl
370
+ label={__('Enable accordion', 'wp-seopress')}
371
+ checked={!!showAccordion}
372
+ onChange={(e) => {
373
+ props.setAttributes({
374
+ showAccordion: !showAccordion,
375
+ })
376
+ }}
377
+ />
378
+ </PanelRow>
379
  </PanelBody>
380
  </InspectorControls>
381
  )
391
  <button
392
  type="button"
393
  title={__('Add FAQ', 'wp-seopress')}
394
+ className="add-faq components-button is-secondary"
395
  onClick={(e) => {
396
  e.preventDefault()
397
  addFAQ()
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/editor.scss CHANGED
@@ -1,5 +1,11 @@
 
 
 
 
 
 
1
  .wpseopress-answer-meta {
2
- .wp-block-wp-seopress-image {
3
  .components-button.editor-post-featured-image__preview {
4
  text-align: left;
5
  }
@@ -8,14 +14,10 @@
8
  .wpseopress-faq-cta {
9
  display: flex;
10
  justify-content: flex-end;
11
-
12
- .button-link-delete, .button-link-delete:hover {
13
- border: 1px solid #a00;
14
- }
15
  }
16
 
17
- .wpseopress-faqs-list-style,
18
- .wpseopress-faqs-title-wrapper,
19
  .wpseopress-faqs-image-size {
20
  button.components-button.is-primary {
21
  background-color: #007cba;
@@ -32,4 +34,4 @@
32
  & > p {
33
  margin: 15px 0 0 0;
34
  }
35
- }
1
+ .wpseopress-faqs-actions {
2
+ border: 1px solid #1e1e1e;
3
+ padding: 1rem;
4
+ background: #fff;
5
+ margin-top: 1rem;
6
+ }
7
  .wpseopress-answer-meta {
8
+ .wp-block-wp-seopress-image {
9
  .components-button.editor-post-featured-image__preview {
10
  text-align: left;
11
  }
14
  .wpseopress-faq-cta {
15
  display: flex;
16
  justify-content: flex-end;
 
 
 
 
17
  }
18
 
19
+ .wpseopress-faqs-list-style,
20
+ .wpseopress-faqs-title-wrapper,
21
  .wpseopress-faqs-image-size {
22
  button.components-button.is-primary {
23
  background-color: #007cba;
34
  & > p {
35
  margin: 15px 0 0 0;
36
  }
37
+ }
inc/admin/page-builders/gutenberg/inc/blocks/faq-block/src/register-block.php CHANGED
@@ -46,6 +46,10 @@ function seopress_register_block_faq($asset_file)
46
  'showFAQScheme' => array(
47
  'type' => 'boolean',
48
  'default' => false
 
 
 
 
49
  )
50
  ),
51
  'render_callback' => 'seopress_block_faq_render_frontend',
@@ -115,13 +119,14 @@ function seopress_block_faq_render_frontend($attributes)
115
  ob_start(); ?>
116
  <?php echo $listStyleTag; ?>
117
  <?php
 
118
  foreach ($attributes['faqs'] as $faq) :
119
 
120
  if (empty($faq['question'])) {
121
  continue;
122
  }
123
 
124
- $entity = [
125
  '@type' => 'Question',
126
  'name' => $faq['question'],
127
  'acceptedAnswer' => [
@@ -129,35 +134,64 @@ function seopress_block_faq_render_frontend($attributes)
129
  'text' => ! empty($faq['answer']) ? $faq['answer'] : ''
130
  ]
131
  ];
132
- $entities[] = $entity;
133
 
134
- $image = '';
135
- $image_alt = '';
136
- if ( isset( $faq['image'] ) && is_int( $faq['image'] ) ) {
137
- $image = wp_get_attachment_image_src( $faq['image'], $attributes['imageSize'] );
138
- $image_alt = get_post_meta($faq['image'], '_wp_attachment_image_alt', true);
139
- }
 
 
 
 
 
 
140
 
141
- $image_url = '';
142
- if ( isset( $image ) && ! empty( $image ) ) {
143
- $image_url = $image[0];
144
- } ?>
145
- <?php echo $listItemStyle; ?>
146
- <?php echo $titleTag . $faq['question'] . $titleCloseTag; ?>
147
- <div class="wpseopress-faq-answer">
148
- <div class="wpseopress-faq-answer-image">
149
- <?php if (! empty($image_url)): ?>
150
- <img src="<?php echo $image_url; ?>" alt="<?php echo $image_alt; ?>">
151
- <?php endif; ?>
152
- </div>
153
- <?php if (! empty($faq['answer'])): ?>
154
- <p class="wpseopress-faq-answer-desc"><?php echo $faq['answer']; ?></p>
155
- <?php endif; ?>
156
- </div>
157
- <?php echo $listItemStyleClosingTag; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  <?php endforeach; ?>
159
- <?php echo $listStyleCloseTag; ?>
160
- <?php
 
161
  $seopress_get_toggle_rich_snippets_option = get_option('seopress_toggle');
162
  $seopress_get_toggle_rich_snippets_option = isset($seopress_get_toggle_rich_snippets_option['toggle-rich-snippets']) ? $seopress_get_toggle_rich_snippets_option['toggle-rich-snippets'] : '0';
163
  if ('0' != $seopress_get_toggle_rich_snippets_option && (int) $attributes['showFAQScheme']) {
@@ -170,6 +204,7 @@ function seopress_block_faq_render_frontend($attributes)
170
  </script>';
171
 
172
  echo apply_filters('seopress_schemas_faq_html', $schema);
173
- } ?>
174
- <?php return ob_get_clean();
 
175
  }
46
  'showFAQScheme' => array(
47
  'type' => 'boolean',
48
  'default' => false
49
+ ),
50
+ 'showAccordion' => array(
51
+ 'type' => 'boolean',
52
+ 'default' => false
53
  )
54
  ),
55
  'render_callback' => 'seopress_block_faq_render_frontend',
119
  ob_start(); ?>
120
  <?php echo $listStyleTag; ?>
121
  <?php
122
+ $i = 1;
123
  foreach ($attributes['faqs'] as $faq) :
124
 
125
  if (empty($faq['question'])) {
126
  continue;
127
  }
128
 
129
+ $entity = [
130
  '@type' => 'Question',
131
  'name' => $faq['question'],
132
  'acceptedAnswer' => [
134
  'text' => ! empty($faq['answer']) ? $faq['answer'] : ''
135
  ]
136
  ];
137
+ $entities[] = $entity;
138
 
139
+ $accordion = $attributes['showAccordion'];
140
+
141
+ if ($accordion) {
142
+ //Load our inline CSS only once
143
+ if (!isset($css)) {
144
+ $css = '<style>.wpseopress-hide {display: none;}.wpseopress-accordion-button{width:100%}</style>';
145
+ $css = apply_filters( 'seopress_faq_block_inline_css', $css );
146
+ echo $css;
147
+ }
148
+ //Our simple accordion JS
149
+ wp_enqueue_script('seopress-accordion', plugins_url('accordion.js', __FILE__), '', SEOPRESS_VERSION, true);
150
+ }
151
 
152
+ $image = '';
153
+ $image_alt = '';
154
+ if ( isset( $faq['image'] ) && is_int( $faq['image'] ) ) {
155
+ $image = wp_get_attachment_image_src( $faq['image'], $attributes['imageSize'] );
156
+ $image_alt = get_post_meta($faq['image'], '_wp_attachment_image_alt', true);
157
+ }
158
+
159
+ $image_url = '';
160
+ if ( isset( $image ) && ! empty( $image ) ) {
161
+ $image_url = $image[0];
162
+ } ?>
163
+ <?php echo $listItemStyle; ?>
164
+ <?php if ($accordion) { ?>
165
+ <div id="wpseopress-faq-title-<?php echo $i; ?>" class="wpseopress-wrap-faq-question">
166
+ <button class="wpseopress-accordion-button" type="button" aria-expanded="false" aria-controls="wpseopress-faq-answer-<?php echo $i; ?>">
167
+ <?php } ?>
168
+ <?php echo $titleTag . $faq['question'] . $titleCloseTag; ?>
169
+ <?php if ($accordion) { ?>
170
+ </button>
171
+ </div>
172
+ <?php } ?>
173
+
174
+ <?php if ($accordion) { ?>
175
+ <div id="wpseopress-faq-answer-<?php echo $i; ?>" class="wpseopress-faq-answer wpseopress-hide" aria-labelledby="wpseopress-faq-title-<?php echo $i; ?>">
176
+ <?php } else { ?>
177
+ <div class="wpseopress-faq-answer">
178
+ <?php } ?>
179
+ <div class="wpseopress-faq-answer-image">
180
+ <?php if (! empty($image_url)): ?>
181
+ <img src="<?php echo $image_url; ?>" alt="<?php echo $image_alt; ?>">
182
+ <?php endif; ?>
183
+ </div>
184
+ <?php if (! empty($faq['answer'])): ?>
185
+ <p class="wpseopress-faq-answer-desc"><?php echo $faq['answer']; ?></p>
186
+ <?php endif; ?>
187
+ </div>
188
+ <?php echo $listItemStyleClosingTag;
189
+ $i = $i++;
190
+ ?>
191
  <?php endforeach; ?>
192
+ <?php echo $listStyleCloseTag;
193
+
194
+ //FAQ Schema
195
  $seopress_get_toggle_rich_snippets_option = get_option('seopress_toggle');
196
  $seopress_get_toggle_rich_snippets_option = isset($seopress_get_toggle_rich_snippets_option['toggle-rich-snippets']) ? $seopress_get_toggle_rich_snippets_option['toggle-rich-snippets'] : '0';
197
  if ('0' != $seopress_get_toggle_rich_snippets_option && (int) $attributes['showFAQScheme']) {
204
  </script>';
205
 
206
  echo apply_filters('seopress_schemas_faq_html', $schema);
207
+ }
208
+ $html = apply_filters('seopress_faq_block_html', ob_get_clean());
209
+ return $html;
210
  }
inc/admin/sections/Analytics.php CHANGED
@@ -53,6 +53,7 @@ function print_section_info_google_analytics_features()
53
 
54
  function print_section_info_google_analytics_events()
55
  {
 
56
  ?>
57
  <div class="sp-section-header">
58
  <h2>
@@ -63,6 +64,12 @@ function print_section_info_google_analytics_events()
63
  <?php _e('Track events in Google Analytics.', 'wp-seopress'); ?>
64
  </p>
65
 
 
 
 
 
 
 
66
  <?php
67
  }
68
 
53
 
54
  function print_section_info_google_analytics_events()
55
  {
56
+ $docs = seopress_get_docs_links();
57
  ?>
58
  <div class="sp-section-header">
59
  <h2>
64
  <?php _e('Track events in Google Analytics.', 'wp-seopress'); ?>
65
  </p>
66
 
67
+ <p class="seopress-help description">
68
+ <span class="dashicons dashicons-external"></span>
69
+ <a href="<?php echo $docs['analytics']['events']; ?>" target="_blank">
70
+ <?php _e('Learn how to track events with Google Analytics','wp-seopress'); ?>
71
+ </a>
72
+ </p>
73
  <?php
74
  }
75
 
inc/admin/sections/Sitemaps.php CHANGED
@@ -33,6 +33,10 @@ function print_section_info_xml_sitemap_general()
33
  <p>
34
  <?php _e('The XML sitemap is an <strong>exploration aid</strong>. Not having a sitemap will absolutely <strong>NOT prevent engines from indexing your content</strong>. For this, opt for meta robots.', 'wp-seopress'); ?>
35
  </p>
 
 
 
 
36
  </div>
37
 
38
  <p>
@@ -85,6 +89,10 @@ rewrite ^.*/sitemaps/([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?seopress_cpt=$1&s
85
  <a href="<?php echo $docs['sitemaps']['error']['html']; ?>"
86
  target="_blank">
87
  <?php _e('HTML error? Exclude XML and XSL from caching plugins!', 'wp-seopress'); ?></a>
 
 
 
 
88
  </p>
89
 
90
  <p>
33
  <p>
34
  <?php _e('The XML sitemap is an <strong>exploration aid</strong>. Not having a sitemap will absolutely <strong>NOT prevent engines from indexing your content</strong>. For this, opt for meta robots.', 'wp-seopress'); ?>
35
  </p>
36
+
37
+ <p>
38
+ <?php _e('This is the URL of your index sitemaps to submit to search engines:','wp-seopress'); ?>
39
+ <pre><?php echo get_option('home'); ?>/sitemaps.xml</pre></p>
40
  </div>
41
 
42
  <p>
89
  <a href="<?php echo $docs['sitemaps']['error']['html']; ?>"
90
  target="_blank">
91
  <?php _e('HTML error? Exclude XML and XSL from caching plugins!', 'wp-seopress'); ?></a>
92
+ <span class="dashicons dashicons-external"></span>
93
+ <a href="<?php echo array_shift($docs['get_started']['sitemaps']); ?>"
94
+ target="_blank">
95
+ <?php _e('Add your XML sitemaps to Google Search Console (video)', 'wp-seopress'); ?></a>
96
  </p>
97
 
98
  <p>
inc/admin/settings/Advanced.php CHANGED
@@ -215,7 +215,7 @@ add_settings_field(
215
 
216
  add_settings_field(
217
  'seopress_advanced_appearance_seo_tools', // ID
218
- __('Hide SEO tools', 'wp-seopress'), // Title
219
  'seopress_advanced_appearance_seo_tools_callback', // Callback
220
  'seopress-settings-admin-advanced-appearance', // Page
221
  'seopress_setting_section_advanced_appearance' // Section
215
 
216
  add_settings_field(
217
  'seopress_advanced_appearance_seo_tools', // ID
218
+ __('Hide Site Overview', 'wp-seopress'), // Title
219
  'seopress_advanced_appearance_seo_tools_callback', // Callback
220
  'seopress-settings-admin-advanced-appearance', // Page
221
  'seopress_setting_section_advanced_appearance' // Section
inc/admin/wizard/admin-wizard.php CHANGED
@@ -579,7 +579,9 @@ class SEOPRESS_Admin_Setup_Wizard {
579
  </p>
580
 
581
  <form method="post" class="seopress-wizard-indexing-form">
582
- <?php if ( ! empty(seopress_get_post_types())) { ?>
 
 
583
  <div class="seopress-wizard-services">
584
  <h2>
585
  <?php _e('For which single post types, should indexing be disabled?', 'wp-seopress'); ?>
@@ -588,7 +590,7 @@ class SEOPRESS_Admin_Setup_Wizard {
588
  <ul>
589
  <?php
590
  //Post Types
591
- foreach (seopress_get_post_types() as $seopress_cpt_key => $seopress_cpt_value) {
592
  $seopress_titles_single_titles = isset($seopress_titles_option['seopress_titles_single_titles'][$seopress_cpt_key]['noindex']); ?>
593
 
594
  <h3><?php echo $seopress_cpt_value->labels->name; ?>
@@ -615,8 +617,10 @@ class SEOPRESS_Admin_Setup_Wizard {
615
  </div>
616
  <?php } ?>
617
 
618
- <?php if ( ! empty(seopress_get_post_types())) {
619
- $cpt = seopress_get_post_types();
 
 
620
  unset($cpt['post']);
621
  unset($cpt['page']);
622
  ?>
@@ -715,9 +719,9 @@ class SEOPRESS_Admin_Setup_Wizard {
715
 
716
  //Get options
717
  $seopress_titles_option = get_option('seopress_titles_option_name');
718
-
719
  //Post Types noindex
720
- foreach (seopress_get_post_types() as $seopress_cpt_key => $seopress_cpt_value) {
721
  if (isset($_POST['seopress_titles_option_name']['seopress_titles_single_titles'][$seopress_cpt_key]['noindex'])) {
722
  $noindex = esc_attr(wp_unslash($_POST['seopress_titles_option_name']['seopress_titles_single_titles'][$seopress_cpt_key]['noindex']));
723
  } else {
@@ -727,7 +731,7 @@ class SEOPRESS_Admin_Setup_Wizard {
727
  }
728
 
729
  //Post Type archives noindex
730
- foreach (seopress_get_post_types() as $seopress_cpt_key => $seopress_cpt_value) {
731
  if (isset($_POST['seopress_titles_option_name']['seopress_titles_archive_titles'][$seopress_cpt_key]['noindex'])) {
732
  $noindex = esc_attr(wp_unslash($_POST['seopress_titles_option_name']['seopress_titles_archive_titles'][$seopress_cpt_key]['noindex']));
733
  } else {
579
  </p>
580
 
581
  <form method="post" class="seopress-wizard-indexing-form">
582
+ <?php
583
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
584
+ if ( ! empty($postTypes)) { ?>
585
  <div class="seopress-wizard-services">
586
  <h2>
587
  <?php _e('For which single post types, should indexing be disabled?', 'wp-seopress'); ?>
590
  <ul>
591
  <?php
592
  //Post Types
593
+ foreach ($postTypes as $seopress_cpt_key => $seopress_cpt_value) {
594
  $seopress_titles_single_titles = isset($seopress_titles_option['seopress_titles_single_titles'][$seopress_cpt_key]['noindex']); ?>
595
 
596
  <h3><?php echo $seopress_cpt_value->labels->name; ?>
617
  </div>
618
  <?php } ?>
619
 
620
+ <?php
621
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
622
+ if ( ! empty($postTypes)) {
623
+ $cpt = $postTypes;
624
  unset($cpt['post']);
625
  unset($cpt['page']);
626
  ?>
719
 
720
  //Get options
721
  $seopress_titles_option = get_option('seopress_titles_option_name');
722
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
723
  //Post Types noindex
724
+ foreach ($postTypes as $seopress_cpt_key => $seopress_cpt_value) {
725
  if (isset($_POST['seopress_titles_option_name']['seopress_titles_single_titles'][$seopress_cpt_key]['noindex'])) {
726
  $noindex = esc_attr(wp_unslash($_POST['seopress_titles_option_name']['seopress_titles_single_titles'][$seopress_cpt_key]['noindex']));
727
  } else {
731
  }
732
 
733
  //Post Type archives noindex
734
+ foreach ($postTypes as $seopress_cpt_key => $seopress_cpt_value) {
735
  if (isset($_POST['seopress_titles_option_name']['seopress_titles_archive_titles'][$seopress_cpt_key]['noindex'])) {
736
  $noindex = esc_attr(wp_unslash($_POST['seopress_titles_option_name']['seopress_titles_archive_titles'][$seopress_cpt_key]['noindex']));
737
  } else {
inc/functions/options-advanced-admin.php CHANGED
@@ -389,22 +389,26 @@ if ('' != seopress_advanced_appearance_title_col_option()
389
  || '' != seopress_advanced_appearance_score_col_option()) {
390
  function seopress_add_columns()
391
  {
392
- if (isset(get_current_screen()->post_type)) {
393
- $key = get_current_screen()->post_type;
394
- if (null === seopress_titles_single_cpt_enable_option($key) && '' != $key) {
395
- if (array_key_exists($key, seopress_get_post_types())) {
396
- add_filter('manage_' . $key . '_posts_columns', 'seopress_title_columns');
397
- add_action('manage_' . $key . '_posts_custom_column', 'seopress_title_display_column', 10, 2);
398
- if (is_plugin_active('easy-digital-downloads/easy-digital-downloads.php')) {
399
- add_filter('manage_edit-' . $key . '_columns', 'seopress_title_columns');
400
- }
 
 
 
401
  }
402
  }
403
  }
404
  }
405
 
 
406
  //Sortable columns
407
- foreach (seopress_get_post_types() as $key => $value) {
408
  add_filter('manage_edit-' . $key . '_sortable_columns', 'seopress_admin_sortable_columns');
409
  }
410
 
@@ -501,9 +505,11 @@ if ('' != seopress_advanced_appearance_genesis_seo_menu_option()) {
501
  add_action('init', 'seopress_advanced_appearance_genesis_seo_menu_hook', 999);
502
  }
503
 
 
 
504
  //Bulk actions
505
  //noindex
506
- foreach (seopress_get_post_types() as $key => $value) {
507
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_noindex');
508
  }
509
  foreach (seopress_get_taxonomies() as $key => $value) {
@@ -521,7 +527,7 @@ function seopress_bulk_actions_noindex($bulk_actions)
521
  return $bulk_actions;
522
  }
523
 
524
- foreach (seopress_get_post_types() as $key => $value) {
525
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_noindex_handler', 10, 3);
526
  }
527
  foreach (seopress_get_taxonomies() as $key => $value) {
@@ -562,8 +568,10 @@ function seopress_bulk_action_noindex_admin_notice()
562
  }
563
  }
564
 
 
 
565
  //index
566
- foreach (seopress_get_post_types() as $key => $value) {
567
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_index');
568
  }
569
  foreach (seopress_get_taxonomies() as $key => $value) {
@@ -580,7 +588,7 @@ function seopress_bulk_actions_index($bulk_actions)
580
  return $bulk_actions;
581
  }
582
 
583
- foreach (seopress_get_post_types() as $key => $value) {
584
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_index_handler', 10, 3);
585
  }
586
  foreach (seopress_get_taxonomies() as $key => $value) {
@@ -622,7 +630,7 @@ function seopress_bulk_action_index_admin_notice()
622
  }
623
 
624
  //nofollow
625
- foreach (seopress_get_post_types() as $key => $value) {
626
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_nofollow');
627
  }
628
  foreach (seopress_get_taxonomies() as $key => $value) {
@@ -638,7 +646,7 @@ function seopress_bulk_actions_nofollow($bulk_actions)
638
 
639
  return $bulk_actions;
640
  }
641
- foreach (seopress_get_post_types() as $key => $value) {
642
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_nofollow_handler', 10, 3);
643
  }
644
  foreach (seopress_get_taxonomies() as $key => $value) {
@@ -680,7 +688,7 @@ function seopress_bulk_action_nofollow_admin_notice()
680
  }
681
 
682
  //follow
683
- foreach (seopress_get_post_types() as $key => $value) {
684
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_follow');
685
  }
686
  foreach (seopress_get_taxonomies() as $key => $value) {
@@ -697,7 +705,7 @@ function seopress_bulk_actions_follow($bulk_actions)
697
  return $bulk_actions;
698
  }
699
 
700
- foreach (seopress_get_post_types() as $key => $value) {
701
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_follow_handler', 10, 3);
702
  }
703
  foreach (seopress_get_taxonomies() as $key => $value) {
@@ -739,7 +747,7 @@ function seopress_bulk_action_follow_admin_notice()
739
  }
740
 
741
  //enable 301
742
- foreach (seopress_get_post_types() as $key => $value) {
743
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_redirect_enable');
744
  }
745
 
@@ -749,7 +757,7 @@ function seopress_bulk_actions_redirect_enable($bulk_actions)
749
 
750
  return $bulk_actions;
751
  }
752
- foreach (seopress_get_post_types() as $key => $value) {
753
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_redirect_enable_handler', 10, 3);
754
  }
755
 
@@ -784,7 +792,7 @@ function seopress_bulk_action_redirect_enable_admin_notice()
784
  }
785
 
786
  //disable 301
787
- foreach (seopress_get_post_types() as $key => $value) {
788
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_redirect_disable');
789
  }
790
 
@@ -794,7 +802,7 @@ function seopress_bulk_actions_redirect_disable($bulk_actions)
794
 
795
  return $bulk_actions;
796
  }
797
- foreach (seopress_get_post_types() as $key => $value) {
798
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_redirect_disable_handler', 10, 3);
799
  }
800
 
389
  || '' != seopress_advanced_appearance_score_col_option()) {
390
  function seopress_add_columns()
391
  {
392
+ if (!isset(get_current_screen()->post_type)) {
393
+ return;
394
+ }
395
+
396
+ $key = get_current_screen()->post_type;
397
+ if (null === seopress_titles_single_cpt_enable_option($key) && '' != $key) {
398
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
399
+ if (array_key_exists($key, $postTypes)) {
400
+ add_filter('manage_' . $key . '_posts_columns', 'seopress_title_columns');
401
+ add_action('manage_' . $key . '_posts_custom_column', 'seopress_title_display_column', 10, 2);
402
+ if (is_plugin_active('easy-digital-downloads/easy-digital-downloads.php')) {
403
+ add_filter('manage_edit-' . $key . '_columns', 'seopress_title_columns');
404
  }
405
  }
406
  }
407
  }
408
 
409
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
410
  //Sortable columns
411
+ foreach ($postTypes as $key => $value) {
412
  add_filter('manage_edit-' . $key . '_sortable_columns', 'seopress_admin_sortable_columns');
413
  }
414
 
505
  add_action('init', 'seopress_advanced_appearance_genesis_seo_menu_hook', 999);
506
  }
507
 
508
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
509
+
510
  //Bulk actions
511
  //noindex
512
+ foreach ($postTypes as $key => $value) {
513
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_noindex');
514
  }
515
  foreach (seopress_get_taxonomies() as $key => $value) {
527
  return $bulk_actions;
528
  }
529
 
530
+ foreach ($postTypes as $key => $value) {
531
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_noindex_handler', 10, 3);
532
  }
533
  foreach (seopress_get_taxonomies() as $key => $value) {
568
  }
569
  }
570
 
571
+
572
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
573
  //index
574
+ foreach ($postTypes as $key => $value) {
575
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_index');
576
  }
577
  foreach (seopress_get_taxonomies() as $key => $value) {
588
  return $bulk_actions;
589
  }
590
 
591
+ foreach ($postTypes as $key => $value) {
592
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_index_handler', 10, 3);
593
  }
594
  foreach (seopress_get_taxonomies() as $key => $value) {
630
  }
631
 
632
  //nofollow
633
+ foreach ($postTypes as $key => $value) {
634
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_nofollow');
635
  }
636
  foreach (seopress_get_taxonomies() as $key => $value) {
646
 
647
  return $bulk_actions;
648
  }
649
+ foreach ($postTypes as $key => $value) {
650
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_nofollow_handler', 10, 3);
651
  }
652
  foreach (seopress_get_taxonomies() as $key => $value) {
688
  }
689
 
690
  //follow
691
+ foreach ($postTypes as $key => $value) {
692
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_follow');
693
  }
694
  foreach (seopress_get_taxonomies() as $key => $value) {
705
  return $bulk_actions;
706
  }
707
 
708
+ foreach ($postTypes as $key => $value) {
709
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_follow_handler', 10, 3);
710
  }
711
  foreach (seopress_get_taxonomies() as $key => $value) {
747
  }
748
 
749
  //enable 301
750
+ foreach ($postTypes as $key => $value) {
751
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_redirect_enable');
752
  }
753
 
757
 
758
  return $bulk_actions;
759
  }
760
+ foreach ($postTypes as $key => $value) {
761
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_redirect_enable_handler', 10, 3);
762
  }
763
 
792
  }
793
 
794
  //disable 301
795
+ foreach ($postTypes as $key => $value) {
796
  add_filter('bulk_actions-edit-' . $key, 'seopress_bulk_actions_redirect_disable');
797
  }
798
 
802
 
803
  return $bulk_actions;
804
  }
805
+ foreach ($postTypes as $key => $value) {
806
  add_filter('handle_bulk_actions-edit-' . $key, 'seopress_bulk_action_redirect_disable_handler', 10, 3);
807
  }
808
 
inc/functions/options-import-export.php CHANGED
@@ -31,6 +31,7 @@ function seopress_export_settings() {
31
  $settings['seopress_toggle'] = get_option('seopress_toggle');
32
  $settings['seopress_google_analytics_lock_option_name'] = get_option('seopress_google_analytics_lock_option_name');
33
  $settings['seopress_tools_option_name'] = get_option('seopress_tools_option_name');
 
34
 
35
  ignore_user_abort(true);
36
  nocache_headers();
@@ -188,6 +189,18 @@ function seopress_import_redirections_settings() {
188
  $cats = array_unique($cats);
189
  }
190
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  if ( ! empty($csv_line[0])) {
192
  $count = null;
193
  if ( ! empty($csv_line[5])) {
@@ -201,6 +214,7 @@ function seopress_import_redirections_settings() {
201
  '_seopress_redirections_value' => rawurldecode($csv_line[1]),
202
  '_seopress_redirections_type' => $csv_type_redirects[2],
203
  '_seopress_redirections_enabled' => $csv_type_redirects[3],
 
204
  '_seopress_redirections_param' => $csv_type_redirects[4],
205
  'seopress_404_count' => $count,
206
  ],
@@ -257,6 +271,11 @@ function seopress_import_yoast_redirections() {
257
  //Fifth column: redirections query param
258
  $csv_type_redirects[4] = 'exact_match';
259
 
 
 
 
 
 
260
  if ( ! empty($csv_line[0])) {
261
  $csv_line[0] = substr($csv_line[0], 1);
262
  if ( ! empty($csv_line[1])) {
@@ -274,6 +293,7 @@ function seopress_import_yoast_redirections() {
274
  '_seopress_redirections_value' => urldecode($csv_line[1]),
275
  '_seopress_redirections_type' => $csv_type_redirects[2],
276
  '_seopress_redirections_enabled' => $csv_type_redirects[3],
 
277
  '_seopress_redirections_param' => $csv_type_redirects[4],
278
  ],
279
  ]);
@@ -340,6 +360,8 @@ function seopress_export_redirections_settings() {
340
  $redirects_html .= get_post_meta(get_the_ID(), 'seopress_404_count', true);
341
  $redirects_html .= ';';
342
  $redirects_html .= $redirect_categories;
 
 
343
  $redirects_html .= "\n";
344
  }
345
  wp_reset_postdata();
@@ -474,6 +496,10 @@ function seopress_import_redirections_plugin_settings() {
474
  if ( ! empty(true == $redirect_value['enabled'])) {
475
  $enabled ='yes';
476
  }
 
 
 
 
477
 
478
  wp_insert_post([
479
  'post_title' => ltrim(urldecode($redirect_value['url']), '/'),
@@ -483,6 +509,7 @@ function seopress_import_redirections_plugin_settings() {
483
  '_seopress_redirections_value' => urldecode($redirect_value['action_data']['url']),
484
  '_seopress_redirections_type' => $type,
485
  '_seopress_redirections_enabled' => $enabled,
 
486
  '_seopress_redirections_param' => $param,
487
  ],
488
  ]);
31
  $settings['seopress_toggle'] = get_option('seopress_toggle');
32
  $settings['seopress_google_analytics_lock_option_name'] = get_option('seopress_google_analytics_lock_option_name');
33
  $settings['seopress_tools_option_name'] = get_option('seopress_tools_option_name');
34
+ $settings['seopress_dashboard_option_name'] = get_option('seopress_dashboard_option_name');
35
 
36
  ignore_user_abort(true);
37
  nocache_headers();
189
  $cats = array_unique($cats);
190
  }
191
 
192
+ $regex_enable = '';
193
+ //regex enabled
194
+ $csv_line[7]= strtolower($csv_line[7]);
195
+ if ('yes' === $csv_line[3]) {
196
+ $regex_enable = 'yes';
197
+ }
198
+ if ( ! empty($csv_line[7])) {
199
+ $cats = array_values(explode(',', $csv_line[6]));
200
+ $cats = array_map('intval', $cats);
201
+ $cats = array_unique($cats);
202
+ }
203
+
204
  if ( ! empty($csv_line[0])) {
205
  $count = null;
206
  if ( ! empty($csv_line[5])) {
214
  '_seopress_redirections_value' => rawurldecode($csv_line[1]),
215
  '_seopress_redirections_type' => $csv_type_redirects[2],
216
  '_seopress_redirections_enabled' => $csv_type_redirects[3],
217
+ '_seopress_redirections_enabled_regex' => $regex_enable,
218
  '_seopress_redirections_param' => $csv_type_redirects[4],
219
  'seopress_404_count' => $count,
220
  ],
271
  //Fifth column: redirections query param
272
  $csv_type_redirects[4] = 'exact_match';
273
 
274
+ $regex_enable = '';
275
+ if(isset($_value[3]) && $_value[3] == 'regex') {
276
+ $regex_enable = 'yes';
277
+ }
278
+
279
  if ( ! empty($csv_line[0])) {
280
  $csv_line[0] = substr($csv_line[0], 1);
281
  if ( ! empty($csv_line[1])) {
293
  '_seopress_redirections_value' => urldecode($csv_line[1]),
294
  '_seopress_redirections_type' => $csv_type_redirects[2],
295
  '_seopress_redirections_enabled' => $csv_type_redirects[3],
296
+ '_seopress_redirections_enabled_regex' => $regex_enable,
297
  '_seopress_redirections_param' => $csv_type_redirects[4],
298
  ],
299
  ]);
360
  $redirects_html .= get_post_meta(get_the_ID(), 'seopress_404_count', true);
361
  $redirects_html .= ';';
362
  $redirects_html .= $redirect_categories;
363
+ $redirects_html .= ';';
364
+ $redirects_html .= get_post_meta(get_the_ID(), '_seopress_redirections_enabled_regex', true);
365
  $redirects_html .= "\n";
366
  }
367
  wp_reset_postdata();
496
  if ( ! empty(true == $redirect_value['enabled'])) {
497
  $enabled ='yes';
498
  }
499
+ $regex_enable ='';
500
+ if ( ! empty($redirect_value['regex'])) {
501
+ $regex_enable ='yes';
502
+ }
503
 
504
  wp_insert_post([
505
  'post_title' => ltrim(urldecode($redirect_value['url']), '/'),
509
  '_seopress_redirections_value' => urldecode($redirect_value['action_data']['url']),
510
  '_seopress_redirections_type' => $type,
511
  '_seopress_redirections_enabled' => $enabled,
512
+ '_seopress_redirections_enabled_regex' => $regex_enable,
513
  '_seopress_redirections_param' => $param,
514
  ],
515
  ]);
inc/functions/options.php CHANGED
@@ -485,7 +485,7 @@ if ('1' == seopress_get_toggle_option('google-analytics')) {
485
  add_action('wp', 'seopress_load_redirections_options', 0);
486
  function seopress_load_redirections_options()
487
  {
488
- if (function_exists('is_plugin_active') && is_plugin_active('thrive-visual-editor/thrive-visual-editor.php')) {
489
  return;
490
  }
491
  if (! is_admin()) {
@@ -604,7 +604,6 @@ if ('1' == seopress_get_toggle_option('advanced')) {
604
  function seopress_titles_primary_cat_hook($cats_0, $cats, $post)
605
  {
606
  $primary_cat = null;
607
- global $post;
608
 
609
  if ($post) {
610
  $_seopress_robots_primary_cat = get_post_meta($post->ID, '_seopress_robots_primary_cat', true);
@@ -744,6 +743,9 @@ if ('1' == seopress_get_toggle_option('advanced')) {
744
  add_action('template_redirect', 'seopress_category_redirect', 1);
745
  function seopress_category_redirect()
746
  {
 
 
 
747
  global $wp;
748
 
749
  if (seopress_advanced_advanced_trailingslash_option()) {
485
  add_action('wp', 'seopress_load_redirections_options', 0);
486
  function seopress_load_redirections_options()
487
  {
488
+ if (function_exists('is_plugin_active') && is_plugin_active('thrive-visual-editor/thrive-visual-editor.php') && is_admin()) {
489
  return;
490
  }
491
  if (! is_admin()) {
604
  function seopress_titles_primary_cat_hook($cats_0, $cats, $post)
605
  {
606
  $primary_cat = null;
 
607
 
608
  if ($post) {
609
  $_seopress_robots_primary_cat = get_post_meta($post->ID, '_seopress_robots_primary_cat', true);
743
  add_action('template_redirect', 'seopress_category_redirect', 1);
744
  function seopress_category_redirect()
745
  {
746
+ if (!is_category()) {
747
+ return;
748
+ }
749
  global $wp;
750
 
751
  if (seopress_advanced_advanced_trailingslash_option()) {
inc/functions/sitemap/template-xml-sitemaps-single-term.php CHANGED
@@ -22,6 +22,53 @@ add_filter('seopress_sitemaps_single_term_query', function ($args) {
22
  return $args;
23
  });
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  function seopress_xml_sitemap_single_term() {
26
  if ('' !== get_query_var('seopress_cpt')) {
27
  $path = get_query_var('seopress_cpt');
@@ -61,10 +108,12 @@ function seopress_xml_sitemap_single_term() {
61
  'offset' => $offset,
62
  'hide_empty' => false,
63
  'number' => 1000,
64
- 'fields' => 'ids',
65
  'lang' => '',
66
  ];
67
 
 
 
68
  $args = apply_filters('seopress_sitemaps_single_term_query', $args, $path);
69
 
70
  $termslist = new WP_Term_Query($args);
@@ -80,16 +129,20 @@ function seopress_xml_sitemap_single_term() {
80
  'images' => [],
81
  ];
82
 
83
- $seopress_sitemaps_url .= "\n";
84
- $seopress_sitemaps_url .= '<url>';
85
- $seopress_sitemaps_url .= "\n";
86
- $seopress_sitemaps_url .= '<loc>';
87
- $seopress_sitemaps_url .= $seopress_url['loc'];
88
- $seopress_sitemaps_url .= '</loc>';
89
- $seopress_sitemaps_url .= "\n";
90
- $seopress_sitemaps_url .= '</url>';
 
 
 
91
 
92
- $seopress_sitemaps .= apply_filters('seopress_sitemaps_url', $seopress_sitemaps_url, $seopress_url);
 
93
  }
94
  }
95
  }
22
  return $args;
23
  });
24
 
25
+ add_filter('seopress_sitemaps_term_single_url', function($url, $term) {
26
+ //Exclude custom canonical from sitemaps
27
+ if (get_term_meta($term->term_id, '_seopress_robots_canonical', true)) {
28
+ return null;
29
+ }
30
+
31
+ //Exclude hidden languages
32
+ //@credits WPML compatibility team
33
+ if (function_exists('icl_object_id') && defined('ICL_SITEPRESS_VERSION')) { //WPML
34
+ global $sitepress, $sitepress_settings;
35
+
36
+ // Check that at least ID is set in post object.
37
+ if ( ! isset( $term->term_id ) ) {
38
+ return $url;
39
+ }
40
+
41
+ // Get list of hidden languages.
42
+ $hidden_languages = $sitepress->get_setting( 'hidden_languages', array() );
43
+
44
+ // If there are no hidden languages return original URL.
45
+ if ( empty( $hidden_languages ) ) {
46
+ return $url;
47
+ }
48
+
49
+ // Get language information for post.
50
+ $language_info = $sitepress->term_translations()->get_element_lang_code( $term->term_id );
51
+
52
+ // If language code is one of the hidden languages return null to skip the post.
53
+ if ( in_array( $language_info, $hidden_languages, true ) ) {
54
+ return null;
55
+ }
56
+ }
57
+
58
+ return $url;
59
+ }, 10, 2);
60
+
61
+ // Polylang: remove hidden languages
62
+ function seopress_pll_exclude_hidden_lang($args) {
63
+ if (function_exists('get_languages_list') && is_plugin_active('polylang/polylang.php') || is_plugin_active('polylang-pro/polylang.php')) {
64
+ $languages = PLL()->model->get_languages_list();
65
+ if ( wp_list_filter( $languages, array( 'active' => false ) ) ) {
66
+ $args['lang'] = wp_list_pluck( wp_list_filter( $languages, array( 'active' => false ), 'NOT' ), 'slug' );
67
+ }
68
+ }
69
+ return $args;
70
+ }
71
+
72
  function seopress_xml_sitemap_single_term() {
73
  if ('' !== get_query_var('seopress_cpt')) {
74
  $path = get_query_var('seopress_cpt');
108
  'offset' => $offset,
109
  'hide_empty' => false,
110
  'number' => 1000,
111
+ //'fields' => 'ids',
112
  'lang' => '',
113
  ];
114
 
115
+ $args = seopress_pll_exclude_hidden_lang($args);
116
+
117
  $args = apply_filters('seopress_sitemaps_single_term_query', $args, $path);
118
 
119
  $termslist = new WP_Term_Query($args);
129
  'images' => [],
130
  ];
131
 
132
+ $seopress_url = apply_filters( 'seopress_sitemaps_term_single_url', $seopress_url, $term );
133
+
134
+ if (!empty($seopress_url['loc'])) {
135
+ $seopress_sitemaps_url .= "\n";
136
+ $seopress_sitemaps_url .= '<url>';
137
+ $seopress_sitemaps_url .= "\n";
138
+ $seopress_sitemaps_url .= '<loc>';
139
+ $seopress_sitemaps_url .= $seopress_url['loc'];
140
+ $seopress_sitemaps_url .= '</loc>';
141
+ $seopress_sitemaps_url .= "\n";
142
+ $seopress_sitemaps_url .= '</url>';
143
 
144
+ $seopress_sitemaps .= apply_filters('seopress_sitemaps_url', $seopress_sitemaps_url, $seopress_url);
145
+ }
146
  }
147
  }
148
  }
inc/functions/sitemap/template-xml-sitemaps-xsl.php CHANGED
@@ -13,11 +13,11 @@ add_filter( 'wpml_get_home_url', 'seopress_remove_wpml_home_url_filter', 20, 5 )
13
 
14
  function seopress_xml_sitemap_index_xsl() {
15
  $home_url = home_url().'/';
16
-
17
  if (function_exists('pll_home_url')) {
18
  $home_url = site_url().'/';
19
  }
20
-
21
  $home_url = apply_filters( 'seopress_sitemaps_home_url', $home_url );
22
 
23
  $seopress_sitemaps_xsl ='<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="2.0"
@@ -34,7 +34,9 @@ function seopress_xml_sitemap_index_xsl() {
34
  $seopress_sitemaps_xsl .='<title>XML Sitemaps</title>';
35
  $seopress_sitemaps_xsl .='<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';
36
  $seopress_sitemaps_xsl .="\n";
37
- $seopress_sitemaps_xsl .='<style type="text/css">
 
 
38
  * {
39
  margin: 0;
40
  padding: 0;
@@ -116,9 +118,11 @@ function seopress_xml_sitemap_index_xsl() {
116
  width: 30%;
117
  display: inline-block;
118
  padding: 0 10px;
119
- }
120
- </style>';
121
-
 
 
122
  $seopress_sitemaps_xsl .='</head>';
123
  $seopress_sitemaps_xsl .='<body>';
124
  $seopress_sitemaps_xsl .='<div id="main">';
@@ -152,7 +156,7 @@ function seopress_xml_sitemap_index_xsl() {
152
  $seopress_sitemaps_xsl .='<li>';
153
  $seopress_sitemaps_xsl .='<xsl:variable name="url_loc"><xsl:value-of select="sitemap:loc"/></xsl:variable>';
154
  $seopress_sitemaps_xsl .='<span class="item-loc"><a href="{$url_loc}"><xsl:value-of select="sitemap:loc" /></a></span>';
155
-
156
  $seopress_sitemaps_xsl .= '<xsl:if test="sitemap:lastmod">';
157
  $seopress_sitemaps_xsl .='<span class="item-lastmod"><xsl:value-of select="sitemap:lastmod" /></span>';
158
  $seopress_sitemaps_xsl .='</xsl:if>';
@@ -169,6 +173,8 @@ function seopress_xml_sitemap_index_xsl() {
169
 
170
  $seopress_sitemaps_xsl .='</xsl:stylesheet>';
171
 
 
 
172
  return $seopress_sitemaps_xsl;
173
  }
174
- echo seopress_xml_sitemap_index_xsl();
13
 
14
  function seopress_xml_sitemap_index_xsl() {
15
  $home_url = home_url().'/';
16
+
17
  if (function_exists('pll_home_url')) {
18
  $home_url = site_url().'/';
19
  }
20
+
21
  $home_url = apply_filters( 'seopress_sitemaps_home_url', $home_url );
22
 
23
  $seopress_sitemaps_xsl ='<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="2.0"
34
  $seopress_sitemaps_xsl .='<title>XML Sitemaps</title>';
35
  $seopress_sitemaps_xsl .='<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';
36
  $seopress_sitemaps_xsl .="\n";
37
+ $seopress_sitemaps_xsl_css = '<style type="text/css">';
38
+
39
+ $seopress_sitemaps_xsl_css .= apply_filters('seopress_sitemaps_xsl_css', '
40
  * {
41
  margin: 0;
42
  padding: 0;
118
  width: 30%;
119
  display: inline-block;
120
  padding: 0 10px;
121
+ }');
122
+
123
+ $seopress_sitemaps_xsl_css .= '</style>';
124
+
125
+ $seopress_sitemaps_xsl .= $seopress_sitemaps_xsl_css;
126
  $seopress_sitemaps_xsl .='</head>';
127
  $seopress_sitemaps_xsl .='<body>';
128
  $seopress_sitemaps_xsl .='<div id="main">';
156
  $seopress_sitemaps_xsl .='<li>';
157
  $seopress_sitemaps_xsl .='<xsl:variable name="url_loc"><xsl:value-of select="sitemap:loc"/></xsl:variable>';
158
  $seopress_sitemaps_xsl .='<span class="item-loc"><a href="{$url_loc}"><xsl:value-of select="sitemap:loc" /></a></span>';
159
+
160
  $seopress_sitemaps_xsl .= '<xsl:if test="sitemap:lastmod">';
161
  $seopress_sitemaps_xsl .='<span class="item-lastmod"><xsl:value-of select="sitemap:lastmod" /></span>';
162
  $seopress_sitemaps_xsl .='</xsl:if>';
173
 
174
  $seopress_sitemaps_xsl .='</xsl:stylesheet>';
175
 
176
+ $seopress_sitemaps_xsl = apply_filters('seopress_sitemaps_xsl', $seopress_sitemaps_xsl);
177
+
178
  return $seopress_sitemaps_xsl;
179
  }
180
+ echo seopress_xml_sitemap_index_xsl();
inc/functions/sitemap/template-xml-sitemaps.php CHANGED
@@ -32,6 +32,46 @@ add_action('the_post', function ($post) {
32
  do_action('wpml_switch_language', $language);
33
  });
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  function seopress_xml_sitemap_index() {
36
  $home_url = home_url() . '/';
37
 
@@ -73,6 +113,9 @@ function seopress_xml_sitemap_index() {
73
  'has_password' => false,
74
  ];
75
 
 
 
 
76
  $args = apply_filters('seopress_sitemaps_index_post_types_query', $args, $cpt_key);
77
 
78
  $count_posts = count(get_posts($args));
@@ -139,6 +182,8 @@ function seopress_xml_sitemap_index() {
139
  'has_password' => false,
140
  ];
141
 
 
 
142
  $args = apply_filters('seopress_sitemaps_index_cpt_query', $args, $cpt_key);
143
 
144
  $get_latest_post = new WP_Query($args);
@@ -185,6 +230,9 @@ function seopress_xml_sitemap_index() {
185
  ],
186
  ];
187
 
 
 
 
188
  $args = apply_filters('seopress_sitemaps_index_tax_query', $args, $tax_key);
189
 
190
  $termsData = get_terms($args);
@@ -276,6 +324,9 @@ function seopress_xml_sitemap_index() {
276
  'has_password' => false,
277
  ];
278
 
 
 
 
279
  $args = apply_filters('seopress_sitemaps_index_gnews_query', $args);
280
 
281
  $get_latest_post = new WP_Query($args);
@@ -338,6 +389,9 @@ function seopress_xml_sitemap_index() {
338
  'fields' => 'ids',
339
  ];
340
 
 
 
 
341
  $args = apply_filters('seopress_sitemaps_index_video_query', $args, $cpt_key);
342
 
343
  $ids = get_posts($args);
@@ -366,6 +420,9 @@ function seopress_xml_sitemap_index() {
366
  'fields' => 'ids',
367
  ];
368
 
 
 
 
369
  $posts = get_posts($args);
370
  $count_posts = count($posts);
371
 
32
  do_action('wpml_switch_language', $language);
33
  });
34
 
35
+ // Polylang: remove hidden languages
36
+ function seopress_pll_exclude_hidden_lang($args) {
37
+ if (function_exists('get_languages_list') && is_plugin_active('polylang/polylang.php') || is_plugin_active('polylang-pro/polylang.php')) {
38
+ $languages = PLL()->model->get_languages_list();
39
+ if ( wp_list_filter( $languages, array( 'active' => false ) ) ) {
40
+ $args['lang'] = wp_list_pluck( wp_list_filter( $languages, array( 'active' => false ), 'NOT' ), 'slug' );
41
+ }
42
+ }
43
+ return $args;
44
+ }
45
+
46
+ //WPML: remove hidden languages
47
+ function seopress_wpml_exclude_hidden_lang($url) {
48
+ //@credits WPML compatibility team
49
+ if (function_exists('get_setting') && is_plugin_active('sitepress-multilingual-cms/sitepress.php')) { //WPML
50
+ global $sitepress, $sitepress_settings;
51
+
52
+ // Check that at least ID is set in post object.
53
+ if ( ! isset( $post->ID ) ) {
54
+ return $url;
55
+ }
56
+
57
+ // Get list of hidden languages.
58
+ $hidden_languages = $sitepress->get_setting( 'hidden_languages', array() );
59
+
60
+ // If there are no hidden languages return original URL.
61
+ if ( empty( $hidden_languages ) ) {
62
+ return $url;
63
+ }
64
+
65
+ // Get language information for post.
66
+ $language_info = $sitepress->post_translations()->get_element_lang_code( $post->ID );
67
+
68
+ // If language code is one of the hidden languages return null to skip the post.
69
+ if ( in_array( $language_info, $hidden_languages, true ) ) {
70
+ return null;
71
+ }
72
+ }
73
+ }
74
+
75
  function seopress_xml_sitemap_index() {
76
  $home_url = home_url() . '/';
77
 
113
  'has_password' => false,
114
  ];
115
 
116
+ //Polylang: exclude hidden languages
117
+ $args = seopress_pll_exclude_hidden_lang($args);
118
+
119
  $args = apply_filters('seopress_sitemaps_index_post_types_query', $args, $cpt_key);
120
 
121
  $count_posts = count(get_posts($args));
182
  'has_password' => false,
183
  ];
184
 
185
+ $args = seopress_pll_exclude_hidden_lang($args);
186
+
187
  $args = apply_filters('seopress_sitemaps_index_cpt_query', $args, $cpt_key);
188
 
189
  $get_latest_post = new WP_Query($args);
230
  ],
231
  ];
232
 
233
+ //Polylang: exclude hidden languages
234
+ $args = seopress_pll_exclude_hidden_lang($args);
235
+
236
  $args = apply_filters('seopress_sitemaps_index_tax_query', $args, $tax_key);
237
 
238
  $termsData = get_terms($args);
324
  'has_password' => false,
325
  ];
326
 
327
+ //Polylang: exclude hidden languages
328
+ $args = seopress_pll_exclude_hidden_lang($args);
329
+
330
  $args = apply_filters('seopress_sitemaps_index_gnews_query', $args);
331
 
332
  $get_latest_post = new WP_Query($args);
389
  'fields' => 'ids',
390
  ];
391
 
392
+ //Polylang: exclude hidden languages
393
+ $args = seopress_pll_exclude_hidden_lang($args);
394
+
395
  $args = apply_filters('seopress_sitemaps_index_video_query', $args, $cpt_key);
396
 
397
  $ids = get_posts($args);
420
  'fields' => 'ids',
421
  ];
422
 
423
+ //Polylang: exclude hidden languages
424
+ $args = seopress_pll_exclude_hidden_lang($args);
425
+
426
  $posts = get_posts($args);
427
  $count_posts = count($posts);
428
 
languages/wp-seopress.pot CHANGED
@@ -3,7 +3,7 @@ msgid ""
3
  msgstr ""
4
  "Project-Id-Version: SEOPress\n"
5
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-cloudy\n"
6
- "POT-Creation-Date: 2021-10-28 15:39+0200\n"
7
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8
  "Last-Translator: \n"
9
  "Language-Team: Benjamin DENIS <contact@seopress.org>\n"
3
  msgstr ""
4
  "Project-Id-Version: SEOPress\n"
5
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/wp-cloudy\n"
6
+ "POT-Creation-Date: 2021-12-16 11:03+0100\n"
7
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8
  "Last-Translator: \n"
9
  "Language-Team: Benjamin DENIS <contact@seopress.org>\n"
public/metaboxe.js CHANGED
@@ -25846,11 +25846,35 @@ var SCInput = styled_components_browser_esm(Forms_FilteredPropsInputField).withC
25846
  componentId: "sc-1bv2xq-1"
25847
  })(["&&&&{width:100%;font-family:var(--fontFamily);padding:6px 8px;margin:0;box-shadow:0 0 0 transparent;transition:box-shadow 0.1s linear;background:none;color:var(--colorP);border-radius:2px;border:1px solid var(--color);font-size:var(--fontSize);line-height:normal;appearance:none;&:focus,&:active{border-color:var(--backgroundPrimary);box-shadow:0 0 0 1px var(--backgroundPrimary);outline:2px solid transparent;}}"]);
25848
  /* harmony default export */ const Input = (SCInput);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25849
  ;// CONCATENATED MODULE: ./app/react/components/Forms/components/Input/index.js
25850
 
25851
 
25852
 
25853
- var Input_excluded = ["name", "id", "value", "type", "emptyIcon", "setFieldValue"];
 
25854
 
25855
  function Input_extends() { Input_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return Input_extends.apply(this, arguments); }
25856
 
@@ -25874,6 +25898,8 @@ function Input_objectWithoutPropertiesLoose(source, excluded) { if (source == nu
25874
 
25875
 
25876
 
 
 
25877
  var FieldInput = function FieldInput(_ref) {
25878
  var name = _ref.name,
25879
  id = _ref.id,
@@ -25883,6 +25909,7 @@ var FieldInput = function FieldInput(_ref) {
25883
  _ref$emptyIcon = _ref.emptyIcon,
25884
  emptyIcon = _ref$emptyIcon === void 0 ? false : _ref$emptyIcon,
25885
  setFieldValue = _ref.setFieldValue,
 
25886
  rest = Input_objectWithoutProperties(_ref, Input_excluded);
25887
 
25888
  var _useState = (0,react.useState)(value),
@@ -25901,7 +25928,7 @@ var FieldInput = function FieldInput(_ref) {
25901
  }, 200), []);
25902
 
25903
  if (!emptyIcon) {
25904
- return /*#__PURE__*/react.createElement(Input, Input_extends({
25905
  name: name,
25906
  id: id,
25907
  type: type,
@@ -25909,10 +25936,18 @@ var FieldInput = function FieldInput(_ref) {
25909
  onChange: function onChange(e) {
25910
  setFormValue(e.target.value);
25911
  }
25912
- }, rest));
 
 
 
 
 
 
 
 
25913
  }
25914
 
25915
- return /*#__PURE__*/react.createElement("div", {
25916
  style: {
25917
  position: "relative",
25918
  width: "100%"
@@ -25946,7 +25981,15 @@ var FieldInput = function FieldInput(_ref) {
25946
 
25947
  setFieldValue(name, "");
25948
  }
25949
- }));
 
 
 
 
 
 
 
 
25950
  };
25951
 
25952
  /* harmony default export */ const components_Input = (FieldInput);
@@ -25954,7 +25997,9 @@ var FieldInput = function FieldInput(_ref) {
25954
  var classnames = __webpack_require__(4184);
25955
  var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
25956
  ;// CONCATENATED MODULE: ./app/react/components/Forms/components/TextArea/index.js
25957
- var TextArea_excluded = ["name", "className"];
 
 
25958
 
25959
  function TextArea_extends() { TextArea_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return TextArea_extends.apply(this, arguments); }
25960
 
@@ -25966,18 +26011,29 @@ function TextArea_objectWithoutPropertiesLoose(source, excluded) { if (source ==
25966
 
25967
 
25968
 
 
 
25969
  var FieldTextarea = function FieldTextarea(_ref) {
25970
  var name = _ref.name,
25971
  _ref$className = _ref.className,
25972
  className = _ref$className === void 0 ? "" : _ref$className,
 
25973
  rest = TextArea_objectWithoutProperties(_ref, TextArea_excluded);
25974
 
25975
- return /*#__PURE__*/react.createElement(Field, TextArea_extends({
25976
  name: name,
25977
  type: "textarea",
25978
  as: "textarea",
25979
  className: classnames_default()(className, "form-textarea")
25980
- }, rest));
 
 
 
 
 
 
 
 
25981
  };
25982
 
25983
  /* harmony default export */ const TextArea = (FieldTextarea);
@@ -28041,24 +28097,12 @@ var TagsChoice = function TagsChoice(_ref) {
28041
  };
28042
 
28043
  /* harmony default export */ const components_TagsChoice = (TagsChoice);
28044
- ;// CONCATENATED MODULE: ./app/react/ui/ProgressBar/index.js
28045
-
28046
- var SCProgressBar = styled_components_browser_esm.div.withConfig({
28047
- componentId: "sc-8f3q3f-0"
28048
- })(["&&&{overflow:hidden;font-size:0.75rem;background-color:#e9ecef;border-radius:0.25rem;}"]);
28049
- /* harmony default export */ const ProgressBar = (SCProgressBar);
28050
  ;// CONCATENATED MODULE: ./app/react/ui/ProgressBar/CurrentProgress/index.js
28051
 
28052
  var SCCurrentProgress = styled_components_browser_esm.div.withConfig({
28053
  componentId: "sc-djzxn7-0"
28054
  })(["&&&{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0085ba;transition:width 0.6s ease;font-size:12px;}"]);
28055
  /* harmony default export */ const CurrentProgress = (SCCurrentProgress);
28056
- ;// CONCATENATED MODULE: ./app/react/ui/ProgressBar/ProgressInformation/index.js
28057
-
28058
- var SCProgressInformation = styled_components_browser_esm.div.withConfig({
28059
- componentId: "sc-1jd5cu1-0"
28060
- })(["&&&{text-align:right;background:#e9ecef;padding:2px 5px;display:flex;font-size:12px;justify-content:flex-end;border-radius:0 0 0.25rem 0.25rem;}"]);
28061
- /* harmony default export */ const ProgressInformation = (SCProgressInformation);
28062
  ;// CONCATENATED MODULE: ./app/react/components/RecommendedLimit/index.js
28063
 
28064
 
@@ -29388,28 +29432,305 @@ var FieldDate = function FieldDate(_ref) {
29388
 
29389
  var OpeningHours_excluded = ["name", "id", "value"];
29390
 
 
 
 
 
29391
  function OpeningHours_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
29392
 
29393
  function OpeningHours_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { OpeningHours_ownKeys(Object(source), true).forEach(function (key) { OpeningHours_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { OpeningHours_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29394
 
29395
  function OpeningHours_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29396
 
29397
- function OpeningHours_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = OpeningHours_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
29398
-
29399
- function OpeningHours_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
29400
-
29401
 
29402
 
29403
 
 
29404
  var DAYS = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"];
29405
  var HOURS = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"];
29406
  var MINUTES = ["00", "15", "30", "45", "59"];
29407
 
29408
- var FieldOpeningHours = function FieldOpeningHours(_ref) {
29409
  var name = _ref.name,
29410
- id = _ref.id,
29411
- value = _ref.value,
29412
- rest = OpeningHours_objectWithoutProperties(_ref, OpeningHours_excluded);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29413
 
29414
  var getDefaultValue = function getDefaultValue(value) {
29415
  if (isEmpty_default()(value) || isNil_default()(value)) {
@@ -29596,288 +29917,21 @@ var FieldOpeningHours = function FieldOpeningHours(_ref) {
29596
  })
29597
  }));
29598
  }
29599
- }), "Closed all the day?"), /*#__PURE__*/react.createElement("div", {
29600
- className: "flex items-center",
29601
- style: {
29602
- marginBottom: 8
29603
- }
29604
- }, /*#__PURE__*/react.createElement(SCCheckboxDefault, {
29605
- type: "checkbox",
29606
- value: "1",
29607
- checked: get_default()(legacyValue, [key, "am", "open"]),
29608
- onChange: function onChange(e) {
29609
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29610
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29611
- if (keyItem !== key) {
29612
- return item;
29613
- }
29614
-
29615
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29616
- am: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am), {}, {
29617
- open: e.target.checked ? "1" : ""
29618
- })
29619
- });
29620
- })
29621
- }));
29622
- }
29623
- }), "Open in the morning?", /*#__PURE__*/react.createElement(SCSelectDefault, {
29624
- name: "".concat(name, "[seopress_local_business_opening_hours][").concat(key, "][am][start][hours]"),
29625
- value: get_default()(legacyValue, [key, "am", "start", "hours"]),
29626
- style: {
29627
- marginLeft: 10
29628
- },
29629
- onChange: function onChange(e) {
29630
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29631
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29632
- if (keyItem !== key) {
29633
- return item;
29634
- }
29635
-
29636
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29637
- am: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am), {}, {
29638
- start: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am.start), {}, {
29639
- hours: e.target.value
29640
- })
29641
- })
29642
- });
29643
- })
29644
- }));
29645
- }
29646
- }, HOURS.map(function (hour, key) {
29647
- return /*#__PURE__*/react.createElement("option", {
29648
- key: "day_".concat(day, "_hour_am_start_").concat(hour),
29649
- value: hour
29650
- }, hour);
29651
- })), /*#__PURE__*/react.createElement("span", {
29652
- style: {
29653
- marginLeft: 5,
29654
- marginRight: 5
29655
- }
29656
- }, ":"), /*#__PURE__*/react.createElement(SCSelectDefault, {
29657
- style: {
29658
- marginRight: 10
29659
- },
29660
- onChange: function onChange(e) {
29661
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29662
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29663
- if (keyItem !== key) {
29664
- return item;
29665
- }
29666
-
29667
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29668
- am: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am), {}, {
29669
- start: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am.start), {}, {
29670
- mins: e.target.value
29671
- })
29672
- })
29673
- });
29674
- })
29675
- }));
29676
- },
29677
- name: "".concat(name, "[seopress_local_business_opening_hours][am][start][mins]"),
29678
- value: get_default()(legacyValue, [key, "am", "start", "mins"])
29679
- }, MINUTES.map(function (hour, key) {
29680
- return /*#__PURE__*/react.createElement("option", {
29681
- key: "day_".concat(day, "_min_am_start_").concat(hour),
29682
- value: hour
29683
- }, hour);
29684
- })), "-", /*#__PURE__*/react.createElement(SCSelectDefault, {
29685
- name: "".concat(name, "[seopress_local_business_opening_hours][").concat(key, "][am][end][hours]"),
29686
- style: {
29687
- marginLeft: 10
29688
- },
29689
- value: get_default()(legacyValue, [key, "am", "end", "hours"]),
29690
- onChange: function onChange(e) {
29691
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29692
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29693
- if (keyItem !== key) {
29694
- return item;
29695
- }
29696
-
29697
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29698
- am: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am), {}, {
29699
- end: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am.end), {}, {
29700
- hours: e.target.value
29701
- })
29702
- })
29703
- });
29704
- })
29705
- }));
29706
- }
29707
- }, HOURS.map(function (hour, key) {
29708
- return /*#__PURE__*/react.createElement("option", {
29709
- key: "day_".concat(day, "_hour_am_end_").concat(hour),
29710
- value: hour
29711
- }, hour);
29712
- })), /*#__PURE__*/react.createElement("span", {
29713
- style: {
29714
- marginLeft: 5,
29715
- marginRight: 5
29716
- }
29717
- }, ":"), /*#__PURE__*/react.createElement(SCSelectDefault, {
29718
- name: "".concat(name, "[seopress_local_business_opening_hours][").concat(key, "][am][end][mins]"),
29719
- value: get_default()(legacyValue, [key, "am", "end", "mins"]),
29720
- onChange: function onChange(e) {
29721
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29722
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29723
- if (keyItem !== key) {
29724
- return item;
29725
- }
29726
-
29727
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29728
- am: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am), {}, {
29729
- end: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am.end), {}, {
29730
- mins: e.target.value
29731
- })
29732
- })
29733
- });
29734
- })
29735
- }));
29736
- }
29737
- }, MINUTES.map(function (min, key) {
29738
- return /*#__PURE__*/react.createElement("option", {
29739
- key: "day_".concat(day, "_min_am_end_").concat(min),
29740
- value: min
29741
- }, min);
29742
- }))), /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement(SCCheckboxDefault, {
29743
- type: "checkbox",
29744
- value: "1",
29745
- checked: get_default()(legacyValue, [key, "pm", "open"]),
29746
- onChange: function onChange(e) {
29747
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29748
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29749
- if (keyItem !== key) {
29750
- return item;
29751
- }
29752
-
29753
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29754
- pm: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm), {}, {
29755
- open: e.target.checked ? "1" : ""
29756
- })
29757
- });
29758
- })
29759
- }));
29760
- }
29761
- }), "Open in the afternoon?", /*#__PURE__*/react.createElement(SCSelectDefault, {
29762
- name: "".concat(name, "[seopress_local_business_opening_hours][").concat(key, "][pm][start][hours]"),
29763
- style: {
29764
- marginLeft: 10
29765
- },
29766
- value: get_default()(legacyValue, [key, "pm", "start", "hours"]),
29767
- onChange: function onChange(e) {
29768
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29769
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29770
- if (keyItem !== key) {
29771
- return item;
29772
- }
29773
-
29774
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29775
- pm: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm), {}, {
29776
- start: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm.start), {}, {
29777
- hours: e.target.value
29778
- })
29779
- })
29780
- });
29781
- })
29782
- }));
29783
- }
29784
- }, HOURS.map(function (hour, key) {
29785
- return /*#__PURE__*/react.createElement("option", {
29786
- key: "day_".concat(day, "_hour_pm_start_").concat(hour),
29787
- value: hour
29788
- }, hour);
29789
- })), /*#__PURE__*/react.createElement("span", {
29790
- style: {
29791
- marginLeft: 5,
29792
- marginRight: 5
29793
- }
29794
- }, ":"), /*#__PURE__*/react.createElement(SCSelectDefault, {
29795
- name: "".concat(name, "[seopress_local_business_opening_hours][").concat(key, "][pm][start][mins]"),
29796
- style: {
29797
- marginRight: 10
29798
- },
29799
- value: get_default()(legacyValue, [key, "pm", "start", "mins"]),
29800
- onChange: function onChange(e) {
29801
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29802
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29803
- if (keyItem !== key) {
29804
- return item;
29805
- }
29806
-
29807
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29808
- pm: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm), {}, {
29809
- start: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm.start), {}, {
29810
- mins: e.target.value
29811
- })
29812
- })
29813
- });
29814
- })
29815
- }));
29816
- }
29817
- }, MINUTES.map(function (min, key) {
29818
- return /*#__PURE__*/react.createElement("option", {
29819
- key: "day_".concat(day, "_min_pm_start_").concat(min),
29820
- value: min
29821
- }, min);
29822
- })), "-", /*#__PURE__*/react.createElement(SCSelectDefault, {
29823
- name: "".concat(name, "[seopress_local_business_opening_hours][").concat(key, "][pm][end][hours]"),
29824
- style: {
29825
- marginLeft: 10
29826
- },
29827
- value: get_default()(legacyValue, [key, "pm", "end", "hours"]),
29828
- onChange: function onChange(e) {
29829
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29830
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29831
- if (keyItem !== key) {
29832
- return item;
29833
- }
29834
-
29835
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29836
- pm: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm), {}, {
29837
- end: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm.end), {}, {
29838
- hours: e.target.value
29839
- })
29840
- })
29841
- });
29842
- })
29843
- }));
29844
- }
29845
- }, HOURS.map(function (hour, key) {
29846
- return /*#__PURE__*/react.createElement("option", {
29847
- key: "day_".concat(day, "_hour_pm_end_").concat(hour),
29848
- value: hour
29849
- }, hour);
29850
- })), /*#__PURE__*/react.createElement("span", {
29851
- style: {
29852
- marginLeft: 5,
29853
- marginRight: 5
29854
- }
29855
- }, ":"), /*#__PURE__*/react.createElement(SCSelectDefault, {
29856
- name: "".concat(name, "[seopress_local_business_opening_hours][").concat(key, "][pm][end][mins]"),
29857
- value: get_default()(legacyValue, [key, "pm", "end", "mins"]),
29858
- onChange: function onChange(e) {
29859
- rest.setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29860
- seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29861
- if (keyItem !== key) {
29862
- return item;
29863
- }
29864
-
29865
- return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29866
- pm: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm), {}, {
29867
- end: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm.end), {}, {
29868
- mins: e.target.value
29869
- })
29870
- })
29871
- });
29872
- })
29873
- }));
29874
- }
29875
- }, MINUTES.map(function (min, key) {
29876
- return /*#__PURE__*/react.createElement("option", {
29877
- key: "day_".concat(day, "_min_pm_end_").concat(min),
29878
- value: min
29879
- }, min);
29880
- }))));
29881
  }));
29882
  };
29883
 
@@ -31072,7 +31126,11 @@ var FieldRepeaterFaq = function FieldRepeaterFaq(_ref) {
31072
  }, /*#__PURE__*/react.createElement(Heading, null, /*#__PURE__*/react.createElement(AccordionItemHeadingWrapper, null, /*#__PURE__*/react.createElement(AccordionItemButtonWrapper, null, /*#__PURE__*/react.createElement(Button, null, /*#__PURE__*/react.createElement("div", null, "#", key + 1, " - ", item.question), /*#__PURE__*/react.createElement("span", {
31073
  className: "seopress-arrow",
31074
  "aria-hidden": "true"
31075
- })))), /*#__PURE__*/react.createElement(AccordionItemPanel, null, /*#__PURE__*/react.createElement("p", null, Faq_("Question (required)", "wp-seopress-pro")), /*#__PURE__*/react.createElement(SCInputDefault, {
 
 
 
 
31076
  type: "text",
31077
  value: item.question,
31078
  onChange: function onChange(e) {
@@ -31086,7 +31144,11 @@ var FieldRepeaterFaq = function FieldRepeaterFaq(_ref) {
31086
  });
31087
  }));
31088
  }
31089
- }), /*#__PURE__*/react.createElement("p", null, Faq_("Answer (required)", "wp-seopress-pro")), /*#__PURE__*/react.createElement("textarea", {
 
 
 
 
31090
  className: "form-textarea",
31091
  style: {
31092
  width: "100%"
@@ -31133,6 +31195,34 @@ var FieldRepeaterFaq = function FieldRepeaterFaq(_ref) {
31133
  };
31134
 
31135
  /* harmony default export */ const Faq = (FieldRepeaterFaq);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31136
  ;// CONCATENATED MODULE: ./app/react/components/Forms/components/DynamicField/index.js
31137
 
31138
 
@@ -31161,6 +31251,7 @@ function DynamicField_objectWithoutPropertiesLoose(source, excluded) { if (sourc
31161
 
31162
 
31163
 
 
31164
  var DynamicField = function DynamicField(_ref) {
31165
  var item = _ref.item,
31166
  _ref$nameInput = _ref.nameInput,
@@ -31178,7 +31269,7 @@ var DynamicField = function DynamicField(_ref) {
31178
  var nameForm = isNil_default()(nameInput) ? item.key : nameInput;
31179
  var valueForm = isNil_default()(itemValue) ? values[item.key] : itemValue;
31180
  (0,react.useEffect)(function () {
31181
- if ((isNil_default()(valueForm) || isEmpty_default()(valueForm)) && !isNil_default()(item.value)) {
31182
  rest.setFieldValue(nameForm, get_default()(item, "value", ""));
31183
  }
31184
  }, [valueForm]);
@@ -31206,23 +31297,26 @@ var DynamicField = function DynamicField(_ref) {
31206
  className: classnames_default()({
31207
  "w-full": item.type === "input" || item.type === "select" || item.type === "textarea"
31208
  }),
31209
- value: checkboxLegacyValue ? "yes" : null,
31210
- onChange: rest.handleChange
 
 
31211
  }), item.label)), item.type === "input" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(components_Input, {
31212
  id: nameForm,
31213
  name: nameForm,
31214
  placeholder: placeholder ? placeholder : item.placeholder,
31215
  value: valueForm || "",
31216
- className: "w-full",
31217
  emptyIcon: emptyIcon,
31218
- setFieldValue: rest.setFieldValue
 
31219
  })), item.type === "number" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(components_Input, {
31220
  id: nameForm,
31221
  name: nameForm,
31222
  placeholder: placeholder ? placeholder : item.placeholder,
31223
  type: "number",
31224
  value: valueForm || "",
31225
- className: "w-full",
31226
  emptyIcon: emptyIcon,
31227
  setFieldValue: rest.setFieldValue,
31228
  step: get_default()(item, "step", null),
@@ -31233,16 +31327,17 @@ var DynamicField = function DynamicField(_ref) {
31233
  name: nameForm,
31234
  placeholder: placeholder ? placeholder : item.placeholder,
31235
  value: valueForm || "",
31236
- className: "w-full",
31237
  style: {
31238
  resize: "vertical"
31239
- }
 
31240
  })), item.type === "select" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(components_Select, DynamicField_extends({
31241
  id: nameForm,
31242
  name: nameForm,
31243
  placeholder: item.placeholder,
31244
  value: valueForm || "",
31245
- className: "w-full",
31246
  options: item.options,
31247
  onChange: rest.handleChange
31248
  }, rest))), item.type === "upload" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(MediaUpload, DynamicField_extends({
@@ -31250,7 +31345,7 @@ var DynamicField = function DynamicField(_ref) {
31250
  name: nameForm,
31251
  placeholder: placeholder ? placeholder : item.placeholder,
31252
  value: valueForm || "",
31253
- className: "w-full",
31254
  emptyIcon: emptyIcon,
31255
  setFieldValue: rest.setFieldValue,
31256
  combinedValuesForm: combinedValuesForm
@@ -31258,22 +31353,27 @@ var DynamicField = function DynamicField(_ref) {
31258
  id: nameForm,
31259
  name: nameForm,
31260
  value: valueForm || "",
31261
- className: "w-full"
 
 
 
 
 
31262
  }, rest))), item.type === "opening_hours" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(OpeningHours, DynamicField_extends({
31263
  id: nameForm,
31264
  name: nameForm,
31265
  value: valueForm || "",
31266
- className: "w-full"
31267
  }, rest))), item.type === "repeater_how_to" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(HowTo, DynamicField_extends({
31268
  id: nameForm,
31269
  name: nameForm,
31270
  value: valueForm || "",
31271
- className: "w-full"
31272
  }, rest))), item.type === "repeater_faq" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Faq, DynamicField_extends({
31273
  id: nameForm,
31274
  name: nameForm,
31275
  value: valueForm || "",
31276
- className: "w-full"
31277
  }, rest))));
31278
  };
31279
 
@@ -32025,52 +32125,230 @@ var saveRedirectionSettings = /*#__PURE__*/function () {
32025
  return _ref.apply(this, arguments);
32026
  };
32027
  }();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32028
  ;// CONCATENATED MODULE: ./app/react/layout/Main/components/Redirection/index.js
32029
 
32030
 
32031
 
32032
- var Redirection_excluded = ["values"];
 
 
 
 
 
 
 
 
 
32033
 
32034
  function Redirection_extends() { Redirection_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return Redirection_extends.apply(this, arguments); }
32035
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32036
  function Redirection_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = Redirection_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
32037
 
32038
- function Redirection_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
 
 
 
 
 
 
 
 
 
 
32039
 
32040
- function Redirection_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
32041
 
32042
- function Redirection_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Redirection_ownKeys(Object(source), true).forEach(function (key) { Redirection_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Redirection_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
32043
 
32044
- function Redirection_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
32045
 
32046
- function Redirection_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
32047
 
32048
- function Redirection_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { Redirection_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { Redirection_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
32049
 
32050
- function Redirection_slicedToArray(arr, i) { return Redirection_arrayWithHoles(arr) || Redirection_iterableToArrayLimit(arr, i) || Redirection_unsupportedIterableToArray(arr, i) || Redirection_nonIterableRest(); }
 
 
 
 
32051
 
32052
- function Redirection_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
32053
 
32054
- function Redirection_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Redirection_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Redirection_arrayLikeToArray(o, minLen); }
32055
 
32056
- function Redirection_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
 
 
 
32057
 
32058
- function Redirection_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
 
 
32059
 
32060
- function Redirection_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
 
 
 
32061
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32062
 
 
 
 
 
32063
 
 
 
 
 
 
 
 
 
 
32064
 
 
 
 
 
 
 
 
32065
 
 
 
 
 
 
 
 
 
 
32066
 
 
32067
 
 
 
 
32068
 
 
 
 
 
 
 
32069
 
32070
- var Redirection_ = wp.i18n.__;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32071
 
32072
- var RedirectionLayout = function RedirectionLayout(_ref) {
32073
- var mainBarRef = _ref.mainBarRef;
32074
  var postId = getCurrentPostId();
32075
 
32076
  var _useRedirectionSettin = metas_useRedirectionSettings({
@@ -32086,43 +32364,43 @@ var RedirectionLayout = function RedirectionLayout(_ref) {
32086
  };
32087
  });
32088
 
32089
- var _useState = (0,react.useState)(false),
32090
- _useState2 = Redirection_slicedToArray(_useState, 2),
32091
- loading = _useState2[0],
32092
- setLoading = _useState2[1];
32093
 
32094
  var _useContext = (0,react.useContext)(NotificationContext),
32095
  actions = _useContext.actions;
32096
 
32097
  var handleOnSubmit = /*#__PURE__*/function () {
32098
- var _ref2 = Redirection_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(values) {
32099
  var data;
32100
- return regeneratorRuntime.wrap(function _callee$(_context) {
32101
  while (1) {
32102
- switch (_context.prev = _context.next) {
32103
  case 0:
32104
  setLoading(true);
32105
- _context.next = 3;
32106
  return saveRedirectionSettings(postId, Redirection_objectSpread(Redirection_objectSpread({}, values), {}, {
32107
  _seopress_redirections_enabled: values._seopress_redirections_enabled ? "yes" : ""
32108
  }));
32109
 
32110
  case 3:
32111
- data = _context.sent;
32112
  mutate();
32113
  setLoading(false);
32114
  actions.setMessage(Redirection_("Your settings have been saved.", "wp-seopress"));
32115
 
32116
  case 7:
32117
  case "end":
32118
- return _context.stop();
32119
  }
32120
  }
32121
- }, _callee);
32122
  }));
32123
 
32124
- return function handleOnSubmit(_x) {
32125
- return _ref2.apply(this, arguments);
32126
  };
32127
  }();
32128
 
@@ -32137,29 +32415,15 @@ var RedirectionLayout = function RedirectionLayout(_ref) {
32137
  enableReinitialize: true,
32138
  onSubmit: handleOnSubmit,
32139
  initialValues: initialValues
32140
- }, function (_ref3) {
32141
- var values = _ref3.values,
32142
- rest = Redirection_objectWithoutProperties(_ref3, Redirection_excluded);
32143
-
32144
- return /*#__PURE__*/react.createElement(Form, null, data.map(function (item, key) {
32145
- if (!item.visible) {
32146
- return;
32147
- }
32148
 
32149
- return /*#__PURE__*/react.createElement(react.Fragment, {
32150
- key: "social_form_".concat(key)
32151
- }, /*#__PURE__*/react.createElement("div", {
32152
- className: "mt-3"
32153
- }, /*#__PURE__*/react.createElement(components_DynamicField, Redirection_extends({
32154
- item: item,
32155
- values: values,
32156
- checkboxLegacyValue: item.key === "_seopress_redirections_enabled"
32157
- }, rest))));
32158
- }), /*#__PURE__*/react.createElement("div", {
32159
- className: "sp-fixed"
32160
- }, /*#__PURE__*/react.createElement(components_ButtonSubmit, {
32161
  loading: loading
32162
- }, Redirection_("Save", "wp-seopress"))));
32163
  }));
32164
  };
32165
 
@@ -41537,7 +41801,7 @@ var saveVideoSitemapSettings = /*#__PURE__*/function () {
41537
 
41538
 
41539
  var VideoSitemap_excluded = ["fields", "values"],
41540
- _excluded2 = ["values"];
41541
 
41542
  function VideoSitemap_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
41543
 
@@ -41739,7 +42003,7 @@ var VideoSitemapLayout = function VideoSitemapLayout(_ref2) {
41739
  })
41740
  }, function (_ref4) {
41741
  var values = _ref4.values,
41742
- rest = VideoSitemap_objectWithoutProperties(_ref4, _excluded2);
41743
 
41744
  return /*#__PURE__*/react.createElement(Form, null, responseVideoSitemap.data.map(function (item, key) {
41745
  if (!item.visible) {
@@ -41962,18 +42226,21 @@ var saveSchemasManual = /*#__PURE__*/function () {
41962
 
41963
 
41964
 
41965
- var SchemasManual_excluded = ["schemasAvailable", "fields", "schema", "arrayHelpers", "index", "fieldsAvailable"],
41966
- SchemasManual_excluded2 = ["values"];
 
41967
 
41968
- function SchemasManual_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
41969
 
41970
- function SchemasManual_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { SchemasManual_ownKeys(Object(source), true).forEach(function (key) { SchemasManual_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { SchemasManual_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
41971
 
41972
- function SchemasManual_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
41973
 
41974
- function SchemasManual_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
41975
 
41976
- function SchemasManual_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { SchemasManual_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { SchemasManual_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
 
 
41977
 
41978
  function SchemasManual_slicedToArray(arr, i) { return SchemasManual_arrayWithHoles(arr) || SchemasManual_iterableToArrayLimit(arr, i) || SchemasManual_unsupportedIterableToArray(arr, i) || SchemasManual_nonIterableRest(); }
41979
 
@@ -41989,6 +42256,12 @@ function SchemasManual_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr;
41989
 
41990
  function SchemasManual_extends() { SchemasManual_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return SchemasManual_extends.apply(this, arguments); }
41991
 
 
 
 
 
 
 
41992
  function SchemasManual_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = SchemasManual_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
41993
 
41994
  function SchemasManual_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
@@ -42014,6 +42287,8 @@ var RepeaterSchema = /*#__PURE__*/react.memo(function RepeaterSchema(_ref) {
42014
  arrayHelpers = _ref.arrayHelpers,
42015
  index = _ref.index,
42016
  fieldsAvailable = _ref.fieldsAvailable,
 
 
42017
  rest = SchemasManual_objectWithoutProperties(_ref, SchemasManual_excluded);
42018
 
42019
  var type = get_default()(schema, "_seopress_pro_rich_snippets_type", null);
@@ -42024,7 +42299,34 @@ var RepeaterSchema = /*#__PURE__*/react.memo(function RepeaterSchema(_ref) {
42024
 
42025
  var notices = get_default()(itemSchemaAvailable, "notices", []);
42026
 
42027
- return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(AccordionItem, null, /*#__PURE__*/react.createElement(Heading, null, /*#__PURE__*/react.createElement(AccordionItemHeadingWrapper, null, /*#__PURE__*/react.createElement(AccordionItemButtonWrapper, null, /*#__PURE__*/react.createElement(Button, null, /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("p", {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42028
  style: {
42029
  fontWeight: "bold",
42030
  marginBottom: 5
@@ -42047,11 +42349,22 @@ var RepeaterSchema = /*#__PURE__*/react.memo(function RepeaterSchema(_ref) {
42047
  color: "#cc1818",
42048
  boxShadow: "inset 0 0 0 1px #cc1818",
42049
  marginLeft: "auto",
42050
- marginRight: 50
 
42051
  },
42052
  onClick: function onClick(e) {
42053
  e.stopPropagation;
42054
  arrayHelpers.remove(index);
 
 
 
 
 
 
 
 
 
 
42055
  }
42056
  }, SchemasManual_("Delete schema", "wp-seopress")), /*#__PURE__*/react.createElement("span", {
42057
  className: "seopress-arrow",
@@ -42083,14 +42396,124 @@ var RepeaterSchema = /*#__PURE__*/react.memo(function RepeaterSchema(_ref) {
42083
  });
42084
  var DEFAULT_TYPE = "articles";
42085
 
42086
- var SchemasManualLayout = function SchemasManualLayout(_ref3) {
42087
- var mainBarRef = _ref3.mainBarRef;
42088
- var postId = getCurrentPostId();
 
 
 
42089
 
42090
- var _useState = (0,react.useState)(false),
 
 
 
 
 
42091
  _useState2 = SchemasManual_slicedToArray(_useState, 2),
42092
- loading = _useState2[0],
42093
- setLoading = _useState2[1];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42094
 
42095
  var _useContext = (0,react.useContext)(NotificationContext),
42096
  actions = _useContext.actions;
@@ -42109,7 +42532,7 @@ var SchemasManualLayout = function SchemasManualLayout(_ref3) {
42109
  });
42110
 
42111
  var handleOnSubmit = /*#__PURE__*/function () {
42112
- var _ref4 = SchemasManual_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(values) {
42113
  var data;
42114
  return regeneratorRuntime.wrap(function _callee$(_context) {
42115
  while (1) {
@@ -42134,24 +42557,13 @@ var SchemasManualLayout = function SchemasManualLayout(_ref3) {
42134
  }));
42135
 
42136
  return function handleOnSubmit(_x) {
42137
- return _ref4.apply(this, arguments);
42138
  };
42139
  }();
42140
 
42141
  var data = responseSchemas.data,
42142
  fields = responseSchemas.fields,
42143
  schemas = responseSchemas.schemas;
42144
-
42145
- var getSchemaDefault = function getSchemaDefault() {
42146
- var item = get_default()(fields, DEFAULT_TYPE, []).reduce(function (previous, current) {
42147
- return SchemasManual_objectSpread(SchemasManual_objectSpread({}, previous), {}, SchemasManual_defineProperty({}, current.key, get_default()(current, "value", "")));
42148
- }, {});
42149
-
42150
- return SchemasManual_objectSpread(SchemasManual_objectSpread({}, item), {}, {
42151
- _seopress_pro_rich_snippets_type: DEFAULT_TYPE
42152
- });
42153
- };
42154
-
42155
  return /*#__PURE__*/react.createElement("div", {
42156
  ref: mainBarRef,
42157
  tabIndex: "0"
@@ -42161,53 +42573,16 @@ var SchemasManualLayout = function SchemasManualLayout(_ref3) {
42161
  initialValues: {
42162
  schemas: isNil_default()(data) ? [] : data
42163
  }
42164
- }, function (_ref5) {
42165
- var values = _ref5.values,
42166
- rest = SchemasManual_objectWithoutProperties(_ref5, SchemasManual_excluded2);
42167
-
42168
- return /*#__PURE__*/react.createElement(Form, null, /*#__PURE__*/react.createElement(Accordion, {
42169
- style: {
42170
- marginTop: 10
42171
- },
42172
- allowMultipleExpanded: true,
42173
- allowZeroExpanded: true
42174
- }, /*#__PURE__*/react.createElement(FieldArray, {
42175
- name: "schemas",
42176
- render: function render(arrayHelpers) {
42177
- return /*#__PURE__*/react.createElement(react.Fragment, null, values.schemas.map(function (schema, key) {
42178
- var fieldsSchema = get_default()(fields, schema._seopress_pro_rich_snippets_type, null);
42179
-
42180
- if (isNil_default()(fieldsSchema)) {
42181
- return;
42182
- }
42183
 
42184
- return /*#__PURE__*/react.createElement(react.Fragment, {
42185
- key: "schema_manual_".concat(key)
42186
- }, /*#__PURE__*/react.createElement(RepeaterSchema, SchemasManual_extends({
42187
- arrayHelpers: arrayHelpers,
42188
- fields: fieldsSchema,
42189
- schema: schema,
42190
- index: key,
42191
- schemasAvailable: schemas,
42192
- fieldsAvailable: fields
42193
- }, rest)));
42194
- }), /*#__PURE__*/react.createElement("div", {
42195
- className: "sp-fixed"
42196
- }, /*#__PURE__*/react.createElement(ui_Button, {
42197
- style: {
42198
- marginRight: 12
42199
- },
42200
- type: "button",
42201
- secondary: true,
42202
- onClick: function onClick(e) {
42203
- e.stopPropagation;
42204
- arrayHelpers.push(getSchemaDefault());
42205
- }
42206
- }, SchemasManual_("Add a schema", "wp-seopress")), /*#__PURE__*/react.createElement(components_ButtonSubmit, {
42207
- loading: loading
42208
- }, SchemasManual_("Save", "wp-seopress"))));
42209
- }
42210
- })));
42211
  }));
42212
  };
42213
 
@@ -42561,7 +42936,7 @@ function GlobalStyle_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
42561
 
42562
 
42563
  var METABOX_MODULE_NAME = "seopress-js-module-seo-metabox";
42564
- var SCGlobalStyle = We(["&&&{.seopress-ui-datepicker{--primaryColor:#007cba;--paragraphColor:#757575;--fontSize:13px;--fontFamily:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;--color:#757575;--colorDark:#1e1e1e;--colorAlert:#a00;--colorWarning:#ffba00;--colorSuccess:#4ab866;--colorLowAlert:#e39f48;--colorPre:#37864b;--colorIcon:#d7dade;--lineHeight:24px;--titleColor:#3c434a;--titleFontSize:20px;--titleFontWeight:normal;--titleMargin:10px 0;--backgroundPrimary:#007cba;--backgroundPrimaryHover:#006ba1;--backgroundSecondaryHover:#f0f0f0;--borderColor:#a7aaad;--borderColorLight:#dcdcde;--borderColorLight40:rgba(220,220,222,0.4);--borderColorCard:#e2e4e7;--borderColorTab:#c3c4c7;}.seopress-ui-datepicker{padding:0;margin:0;border-radius:0;background-color:#fff;border:1px solid var(--borderColorLight);border-top:none;box-shadow:0 3px 6px rgba(0,0,0,0.075);min-width:17em;width:auto !important;z-index:999999 !important;}body.wp-admin:not(.rtl) .seopress-ui-datepicker{margin-left:-1px;}body.wp-admin.rtl .seopress-ui-datepicker{margin-right:-1px;}.seopress-ui-datepicker *{padding:0;font-family:var(--fontFamily);border-radius:0;}.seopress-ui-datepicker table{font-size:--var(--fontSize);margin:0;border:none;border-collapse:collapse;}.seopress-ui-datepicker .ui-widget-header,.seopress-ui-datepicker .ui-datepicker-header{background-image:none;border:none;color:var(--primaryColor);font-weight:normal;}.seopress-ui-datepicker .ui-datepicker-header .ui-state-hover{background:transparent;border-color:transparent;cursor:pointer;}.seopress-ui-datepicker .ui-datepicker-title{margin:0;padding:10px 0;color:var(--colorDark);font-size:var(--fontSize);line-height:14px;text-align:center;font-weight:bold;}.seopress-ui-datepicker .ui-datepicker-prev,.seopress-ui-datepicker .ui-datepicker-next{position:relative;top:0;height:34px;width:34px;}.seopress-ui-datepicker .ui-state-hover.ui-datepicker-prev,.seopress-ui-datepicker .ui-state-hover.ui-datepicker-next{border:none;}.seopress-ui-datepicker .ui-datepicker-prev,.seopress-ui-datepicker .ui-datepicker-prev-hover{left:0;}.seopress-ui-datepicker .ui-datepicker-next,.seopress-ui-datepicker .ui-datepicker-next-hover{right:0;}.seopress-ui-datepicker .ui-datepicker-next span,.seopress-ui-datepicker .ui-datepicker-prev span{display:none;}.seopress-ui-datepicker .ui-datepicker-prev{float:left;}.seopress-ui-datepicker .ui-datepicker-next{float:right;}.seopress-ui-datepicker .ui-datepicker-prev:before,.seopress-ui-datepicker .ui-datepicker-next:before{font:normal 20px/34px \"dashicons\";padding-left:0;color:var(--primaryColor);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:34px;height:34px;}.seopress-ui-datepicker .ui-datepicker-prev:before{content:\"\f341\";}.seopress-ui-datepicker .ui-datepicker-next:before{content:\"\f345\";}.seopress-ui-datepicker .ui-datepicker-prev-hover:before,.seopress-ui-datepicker .ui-datepicker-next-hover:before{opacity:0.7;}.seopress-ui-datepicker select.ui-datepicker-month,.seopress-ui-datepicker select.ui-datepicker-year{width:33%;}.seopress-ui-datepicker thead{color:#fff;font-weight:600;}.seopress-ui-datepicker th{padding:10px;}.seopress-ui-datepicker td{padding:0;border:1px solid var(--borderColorCard);}.seopress-ui-datepicker td.ui-datepicker-other-month{border:transparent;}.seopress-ui-datepicker tr:first-of-type td{border-top:1px solid #f0f0f0;}.seopress-ui-datepicker td.ui-datepicker-week-end{background-color:var(--borderColorCard);border:1px solid #f0f0f0;}.seopress-ui-datepicker td.ui-datepicker-today{background-color:var(--backgroundSecondaryHover);}.seopress-ui-datepicker td.ui-datepicker-current-day{background:#bbdd88;}.seopress-ui-datepicker td .ui-state-default{background:transparent;border:none;text-align:center;text-decoration:none;width:auto;display:block;padding:5px 10px;font-weight:normal;color:#444;}.seopress-ui-datepicker td.ui-state-disabled .ui-state-default{opacity:0.5;}.seopress-ui-datepicker thead{background:var(--backgroundPrimary);}.seopress-ui-datepicker td .ui-state-hover{background:var(--backgroundPrimary);color:#fff;}}body #", "{--primaryColor:#007cba;--paragraphColor:#757575;--fontSize:13px;--fontFamily:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;--color:#757575;--colorP:#3c434a;--colorDark:#1e1e1e;--colorAlert:#a00;--colorWarning:#ffba00;--colorSuccess:#4ab866;--colorLowAlert:#e39f48;--colorPre:#37864b;--colorIcon:#d7dade;--lineHeight:24px;--titleColor:#3c434a;--titleFontSize:20px;--titleFontWeight:normal;--titleMargin:10px 0;--backgroundPrimary:#007cba;--backgroundPrimaryHover:#006ba1;--backgroundSecondaryHover:#f0f0f0;--borderColor:#a7aaad;--borderColorLight:#dcdcde;--borderColorLight40:rgba(220,220,222,0.4);--borderColorCard:#e2e4e7;--borderColorTab:#c3c4c7;--fontWeight:normal;.sp-tooltip{position:relative;margin-left:5px;display:inline-block;cursor:help;vertical-align:bottom;text-align:left;background:none;border:none;padding:0;.dashicons{color:var(--colorDark);}.sp-tooltiptext{visibility:hidden;position:absolute;z-index:999999999;width:350px;left:-20px;padding:20px;top:25px;font-weight:400;box-shadow:0 3px 30px rgb(25 30 35 / 10%);border:1px solid var(--borderColorLight40);background:#fff;word-break:break-word;text-transform:none;&::before{top:-8px;}&::after{border:8px solid #fff;top:-6px;}&::after{border-bottom-style:solid;border-left-color:transparent;border-right-color:transparent;border-top:none;margin-left:-10px;content:\"\";position:absolute;height:0;width:0;line-height:0;left:30px;}}&:hover .sp-tooltiptext,&:focus .sp-tooltiptext,&:active .sp-tooltiptext{visibility:visible;}.sp-tooltip-headings{font-size:18px;font-weight:600;margin-bottom:20px;display:block;}.sp-tooltip-desc{margin-bottom:20px;display:block;border-bottom:1px solid var(--borderColorLight40);padding-bottom:20px;font-size:var(--fontSize);line-height:1.5;}.sp-tooltip-code{font-family:Menlo,Monaco,Andale Mono,Courier New,monospace;display:block;word-break:break-all;color:var(--colorPre);font-size:11px;}}.flex{display:flex;}.inline-flex{display:inline-flex;}.flex-wrap{flex-wrap:wrap;}.items-center{align-items:center;}.justify-content{justify-content:space-evenly;}.mt-0{margin-top:0 !important;}.mt-1{margin-top:0.25rem !important;}.mt-2{margin-top:0.5rem !important;}.mt-3{margin-top:1rem !important;}.mt-4{margin-top:1.5rem !important;}.mt-5{margin-top:3rem !important;}.mt-auto{margin-top:auto !important;}.me-0{margin-right:0 !important;}.me-1{margin-right:0.25rem !important;}.me-2{margin-right:0.5rem !important;}.me-3{margin-right:1rem !important;}.me-4{margin-right:1.5rem !important;}.me-5{margin-right:3rem !important;}.me-auto{margin-right:auto !important;}.mb-0{margin-bottom:0 !important;}.mb-1{margin-bottom:0.25rem !important;}.mb-2{margin-bottom:0.5rem !important;}.mb-3{margin-bottom:1rem !important;}.mb-4{margin-bottom:1.5rem !important;}.mb-5{margin-bottom:3rem !important;}.mb-auto{margin-bottom:auto !important;}.ms-0{margin-left:0 !important;}.ms-1{margin-left:0.25rem !important;}.ms-2{margin-left:0.5rem !important;}.ms-3{margin-left:1rem !important;}.ms-4{margin-left:1.5rem !important;}.ms-5{margin-left:3rem !important;}.ms-auto{margin-left:auto !important;}.w-1\\/2{width:50%;}.w-1\\/5{width:20%;}.w-2\\/5{width:40%;}.w-3\\/5{width:60%;}.w-4\\/5{width:80%;}.w-1\\/4{width:25%;}.w-2\\/4{width:50%;}.w-3\\/4{width:75%;}.w-1\\/12{width:8.3%;}.w-2\\/12{width:16.6%;}.w-3\\/12{width:25%;}.w-4\\/12{width:33%;}.w-5\\/12{width:41.6%;}.w-6\\/12{width:50%;}.w-7\\/12{width:58.3%;}.w-8\\/12{width:66%;}.w-9\\/12{width:75%;}.w-10\\/12{width:83.3%;}.w-11\\/12{width:91.6%;}.w-full{width:100%;}.relative{position:relative;}.absolute{position:absolute;}.form-textarea{font-family:var(--fontFamily);padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow 0.1s linear;color:var(--colorP);border-radius:2px;border:1px solid var(--color);font-size:var(--fontSize);line-height:normal;appearance:none;background:none;}.form-textarea:focus,.form-textarea:active{border-color:var(--backgroundPrimary);box-shadow:0 0 0 1px var(--backgroundPrimary);outline:2px solid transparent;}.form-input-date{width:100%;font-family:var(--fontFamily);padding:6px 8px;margin:0;box-shadow:0 0 0 transparent;transition:box-shadow 0.1s linear;background:none;color:var(--colorP);border-radius:2px;border:1px solid var(--color);font-size:var(--fontSize);line-height:normal;appearance:none;&:focus,&:active{border-color:var(--backgroundPrimary);box-shadow:0 0 0 1px var(--backgroundPrimary);outline:2px solid transparent;}}@keyframes sp-fade-in-out{0%{opacity:0;bottom:0;visibility:hidden;}25%{opacity:1;bottom:40px;visibility:visible;}75%{opacity:1;visibility:visible;}100%{opacity:0;visibility:hidden;}}@keyframes sp-beacon-toggle{0%{opacity:0;bottom:-20px;visibility:hidden;}100%{opacity:1;bottom:0px;visibility:visible;}}font-size:var(--fontSize);font-family:var(--fontFamily);font-weight:var(--fontWeight);line-height:var(--lineHeight);-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;color:var(--colorP);letter-spacing:inherit;input[type=\"checkbox\"]{font-family:var(--fontFamily);padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow 0.1s linear;border-radius:2px;border:1px solid var(--color);font-size:16px;line-height:normal;border:1px solid var(--colorDark);margin-right:12px;transition:none;border-radius:2px;background:#fff;color:var(--colorDark);clear:none;cursor:pointer;display:inline-block;line-height:0;margin:-1px 4px 0 0 !important;outline:0;padding:0 !important;text-align:center;vertical-align:top;width:20px;height:20px;-webkit-appearance:none;appearance:none;transition:0.1s border-color ease-in-out;}input[type=\"checkbox\"]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--primaryColor);outline:2px solid transparent;}input[type=\"checkbox\"]:checked::before{content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");background:var(--primaryColor);margin:-1px;width:20px;height:20px;left:0;top:0;}h1,h2,h3,h4,h5,h6{display:block;font-weight:600;text-align:left;}h1:not(*):before,h1:before,h2:before,h3:before,h4:before,h5:before,h6:before,h1:after,h2:after,h3:after,h4:after,h5:after,h6:after{content:none;}p{font-family:var(--fontFamily);font-size:var(--fontSize);font-weight:var(--fontWeight);color:var(--colorP);line-height:1.5;margin:1em 0;}a{color:var(--primaryColor);text-decoration:underline;}ul{list-style:none;padding:0;margin:0;}a:hover{text-decoration:underline;}.description{display:block;font-size:12px;color:var(--color);margin:0.5em 0;}.description-alt{padding:1em 0;border-top:1px solid var(--borderColorLight);border-bottom:1px solid var(--borderColorLight);display:flex;}.description-alt svg{vertical-align:middle;align-self:center;fill:#f0b849;flex-shrink:0;margin-right:16px;}.sp-fixed{position:sticky;width:100%;left:0px;bottom:-21px;display:flex;background:#fff;border-top:1px solid var(--borderColorLight);margin-top:20px;padding:15px 0 5px 0;}.resizable{position:relative;}.resizable::after{content:\"\";transition:all 150ms linear;opacity:0;background:var(--backgroundPrimary);position:absolute;top:0;left:0;height:5px;width:100%;}.resizable:hover::after,.resizable:focus::after,.resizable:active::after{opacity:1;}.sp-seo-metabox{position:fixed;left:10%;bottom:0;z-index:100100;background-color:rgb(255,255,255);width:70%;height:400px;box-sizing:border-box;flex-shrink:0;box-shadow:rgb(0 0 0 / 5%) 0px 0px 0px 1px,rgb(0 0 0 / 15%) 0px 5px 30px 0px,rgb(0 0 0 / 5%) 0px 3px 3px 0px;border-radius:4px;border:none;animation-name:sp-beacon-toggle;animation-duration:200ms;animation-iteration-count:1;animation-fill-mode:forwards;max-height:calc(100% - 93px);}.sp-cursor-pointer{cursor:pointer;}@media only screen and (max-width:600px){.sp-seo-metabox{height:auto;overflow-y:auto;}.flex{flex-wrap:wrap;}[class^=\"w-\"]{width:100%;}}.seopress-notice{margin:5px 0 35px 0px;background:rgb(0 124 186 / 10%);border-left:4px solid var(--primaryColor);padding:8px 12px;position:static !important;top:0 !important;left:0 !important;&.is-warning{border-left-color:#f0b849;background:#fef8ee;}pre{background:none !important;}}.seopress-list{margin:0 !important;li::before{content:\"\" !important;}}}@keyframes anim-loading{0%{transform:rotate(0deg);}100%{transform:rotate(360deg);}}.anim-loading-layout{animation-name:anim-loading-layout;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:forwards;}@keyframes anim-loading-layout{0%{opacity:0;}50%{opacity:1;}100%{opacity:0;}}.analysis-score{svg{display:inline-block;height:30px;width:30px;margin:0;border-radius:100%;position:relative;font-weight:600;shape-rendering:geometricprecision;font-size:.5rem;vertical-align:middle;margin-right:15px;circle{stroke-dashoffset:0;transition:stroke-dashoffset 1s linear;stroke:#ccc;stroke-width:2em;}}&.notgood #bar{stroke-dashoffset:565;stroke:var(--colorWarning);}&.good #bar{stroke-dashoffset:0;stroke:var(--colorSuccess);}}.dashicons{vertical-align:middle;}.sp-dashicons-ok,.sp-dashicons-not{color:#fff;background:var(--colorSuccess);border-radius:50px;margin-right:10px;}.sp-dashicons-not{background:var(--colorAlert);}.seopress-arrow::after{content:\"\f343\";font-family:\"Dashicons\";position:absolute;right:10px;top:calc(50% - 12px);fontSize:14px;}.sp-seo-metabox .accordion__button[aria-expanded=true] .seopress-arrow:after{content:\"\f347\";}.sp-google-preview{margin-left:10px;flex-grow:1;}@media only screen and (max-width:600px){.sp-google-preview{margin-left:0;}}.media-frame-title h1::after,.media-frame-title h1::before,.media-attachments-filter-heading::before,.media-sidebar h2::before{content:none;}.media-router .media-menu-item{text-transform:none;background:inherit;color:inherit;font-weight:normal;letter-spacing:inherit;}.media-modal .delete-attachment,.media-modal .trash-attachment,.media-modal .untrash-attachment{font-size:inherit;text-transform:none;}body.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox,body.block-editor-page.folded #seopress-js-module-seo-metabox .sp-seo-metabox,body.is-fullscreen-mode.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox{max-width:100%;width:100% !important;left:0px;box-shadow:none;border-right:1px solid var(--borderColorLight);", "}body.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox{max-width:calc(100% - 160px);left:160px;", "}body.block-editor-page.folded:not(.is-fullscreen-mode) #seopress-js-module-seo-metabox .sp-seo-metabox{left:36px;max-width:calc(100% - 36px);", "}@media only screen and (max-width:1400px){body:not(.wp-admin) #seopress-js-module-seo-metabox .sp-seo-metabox{width:100%;max-width:100%;min-width:100%;left:0;}}@media only screen and (max-width:782px){body.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox,body.block-editor-page.folded #seopress-js-module-seo-metabox .sp-seo-metabox,body.block-editor-page.auto-fold #seopress-js-module-seo-metabox .sp-seo-metabox,body.is-fullscreen-mode.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox,body.block-editor-page.folded:not(.is-fullscreen-mode) #seopress-js-module-seo-metabox .sp-seo-metabox{width:100%;max-width:100%;min-width:100%;left:0;}}"], METABOX_MODULE_NAME, function (_ref) {
42565
  var isSidebarGutenbergOpened = _ref.isSidebarGutenbergOpened;
42566
  return isSidebarGutenbergOpened && "\n max-width: calc(100% - 280px);\n ";
42567
  }, function (_ref2) {
25846
  componentId: "sc-1bv2xq-1"
25847
  })(["&&&&{width:100%;font-family:var(--fontFamily);padding:6px 8px;margin:0;box-shadow:0 0 0 transparent;transition:box-shadow 0.1s linear;background:none;color:var(--colorP);border-radius:2px;border:1px solid var(--color);font-size:var(--fontSize);line-height:normal;appearance:none;&:focus,&:active{border-color:var(--backgroundPrimary);box-shadow:0 0 0 1px var(--backgroundPrimary);outline:2px solid transparent;}}"]);
25848
  /* harmony default export */ const Input = (SCInput);
25849
+ ;// CONCATENATED MODULE: ./app/react/ui/ProgressBar/index.js
25850
+
25851
+ var SCProgressBar = styled_components_browser_esm.div.withConfig({
25852
+ componentId: "sc-8f3q3f-0"
25853
+ })(["&&&{overflow:hidden;font-size:0.75rem;background-color:#e9ecef;border-radius:0.25rem;}"]);
25854
+ /* harmony default export */ const ProgressBar = (SCProgressBar);
25855
+ ;// CONCATENATED MODULE: ./app/react/ui/ProgressBar/ProgressInformation/index.js
25856
+
25857
+ var SCProgressInformation = styled_components_browser_esm.div.withConfig({
25858
+ componentId: "sc-1jd5cu1-0"
25859
+ })(["&&&{text-align:right;background:#e9ecef;padding:2px 5px;display:flex;font-size:12px;justify-content:flex-end;border-radius:0 0 0.25rem 0.25rem;}"]);
25860
+ /* harmony default export */ const ProgressInformation = (SCProgressInformation);
25861
+ ;// CONCATENATED MODULE: ./app/react/components/RecommendedLimitField/index.js
25862
+
25863
+
25864
+
25865
+
25866
+ var RecommendedLimitField = function RecommendedLimitField(_ref) {
25867
+ var children = _ref.children;
25868
+ return /*#__PURE__*/react.createElement(ProgressBar, null, /*#__PURE__*/react.createElement(ProgressInformation, null, children));
25869
+ };
25870
+
25871
+ /* harmony default export */ const components_RecommendedLimitField = (RecommendedLimitField);
25872
  ;// CONCATENATED MODULE: ./app/react/components/Forms/components/Input/index.js
25873
 
25874
 
25875
 
25876
+
25877
+ var Input_excluded = ["name", "id", "value", "type", "emptyIcon", "setFieldValue", "item"];
25878
 
25879
  function Input_extends() { Input_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return Input_extends.apply(this, arguments); }
25880
 
25898
 
25899
 
25900
 
25901
+ var Input_ = wp.i18n.__;
25902
+
25903
  var FieldInput = function FieldInput(_ref) {
25904
  var name = _ref.name,
25905
  id = _ref.id,
25909
  _ref$emptyIcon = _ref.emptyIcon,
25910
  emptyIcon = _ref$emptyIcon === void 0 ? false : _ref$emptyIcon,
25911
  setFieldValue = _ref.setFieldValue,
25912
+ item = _ref.item,
25913
  rest = Input_objectWithoutProperties(_ref, Input_excluded);
25914
 
25915
  var _useState = (0,react.useState)(value),
25928
  }, 200), []);
25929
 
25930
  if (!emptyIcon) {
25931
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Input, Input_extends({
25932
  name: name,
25933
  id: id,
25934
  type: type,
25936
  onChange: function onChange(e) {
25937
  setFormValue(e.target.value);
25938
  }
25939
+ }, rest)), !isNil_default()(get_default()(item, "recommended_limit", null)) && /*#__PURE__*/react.createElement("div", {
25940
+ style: {
25941
+ marginTop: 5
25942
+ }
25943
+ }, /*#__PURE__*/react.createElement(components_RecommendedLimitField, null, /*#__PURE__*/react.createElement("span", {
25944
+ style: {
25945
+ color: ""
25946
+ }
25947
+ }, formValue.length), " ", "/\xA0", /*#__PURE__*/react.createElement("strong", null, item.recommended_limit), " ", /*#__PURE__*/react.createElement("span", null, " (", Input_("maximum limit", "wp-seopress"), ")"))));
25948
  }
25949
 
25950
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
25951
  style: {
25952
  position: "relative",
25953
  width: "100%"
25981
 
25982
  setFieldValue(name, "");
25983
  }
25984
+ })), !isNil_default()(get_default()(item, "recommended_limit", null)) && /*#__PURE__*/react.createElement("div", {
25985
+ style: {
25986
+ marginTop: 5
25987
+ }
25988
+ }, /*#__PURE__*/react.createElement(components_RecommendedLimitField, null, /*#__PURE__*/react.createElement("span", {
25989
+ style: {
25990
+ color: ""
25991
+ }
25992
+ }, formValue.length), " ", "/\xA0", /*#__PURE__*/react.createElement("strong", null, item.recommended_limit), " ", /*#__PURE__*/react.createElement("span", null, " (", Input_("maximum limit", "wp-seopress"), ")"))));
25993
  };
25994
 
25995
  /* harmony default export */ const components_Input = (FieldInput);
25997
  var classnames = __webpack_require__(4184);
25998
  var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
25999
  ;// CONCATENATED MODULE: ./app/react/components/Forms/components/TextArea/index.js
26000
+
26001
+
26002
+ var TextArea_excluded = ["name", "className", "item"];
26003
 
26004
  function TextArea_extends() { TextArea_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return TextArea_extends.apply(this, arguments); }
26005
 
26011
 
26012
 
26013
 
26014
+ var TextArea_ = wp.i18n.__;
26015
+
26016
  var FieldTextarea = function FieldTextarea(_ref) {
26017
  var name = _ref.name,
26018
  _ref$className = _ref.className,
26019
  className = _ref$className === void 0 ? "" : _ref$className,
26020
+ item = _ref.item,
26021
  rest = TextArea_objectWithoutProperties(_ref, TextArea_excluded);
26022
 
26023
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Field, TextArea_extends({
26024
  name: name,
26025
  type: "textarea",
26026
  as: "textarea",
26027
  className: classnames_default()(className, "form-textarea")
26028
+ }, rest)), !isNil_default()(get_default()(item, "recommended_limit", null)) && /*#__PURE__*/react.createElement("div", {
26029
+ style: {
26030
+ marginTop: 5
26031
+ }
26032
+ }, /*#__PURE__*/react.createElement(components_RecommendedLimitField, null, /*#__PURE__*/react.createElement("span", {
26033
+ style: {
26034
+ color: ""
26035
+ }
26036
+ }, formValue.length), " ", "/\xA0", /*#__PURE__*/react.createElement("strong", null, item.recommended_limit), " ", /*#__PURE__*/react.createElement("span", null, " (", TextArea_("maximum limit", "wp-seopress"), ")"))));
26037
  };
26038
 
26039
  /* harmony default export */ const TextArea = (FieldTextarea);
28097
  };
28098
 
28099
  /* harmony default export */ const components_TagsChoice = (TagsChoice);
 
 
 
 
 
 
28100
  ;// CONCATENATED MODULE: ./app/react/ui/ProgressBar/CurrentProgress/index.js
28101
 
28102
  var SCCurrentProgress = styled_components_browser_esm.div.withConfig({
28103
  componentId: "sc-djzxn7-0"
28104
  })(["&&&{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0085ba;transition:width 0.6s ease;font-size:12px;}"]);
28105
  /* harmony default export */ const CurrentProgress = (SCCurrentProgress);
 
 
 
 
 
 
28106
  ;// CONCATENATED MODULE: ./app/react/components/RecommendedLimit/index.js
28107
 
28108
 
29432
 
29433
  var OpeningHours_excluded = ["name", "id", "value"];
29434
 
29435
+ function OpeningHours_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = OpeningHours_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
29436
+
29437
+ function OpeningHours_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
29438
+
29439
  function OpeningHours_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
29440
 
29441
  function OpeningHours_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { OpeningHours_ownKeys(Object(source), true).forEach(function (key) { OpeningHours_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { OpeningHours_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29442
 
29443
  function OpeningHours_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29444
 
 
 
 
 
29445
 
29446
 
29447
 
29448
+ var OpeningHours_ = wp.i18n.__;
29449
  var DAYS = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"];
29450
  var HOURS = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"];
29451
  var MINUTES = ["00", "15", "30", "45", "59"];
29452
 
29453
+ var OpeningHoursMorning = function OpeningHoursMorning(_ref) {
29454
  var name = _ref.name,
29455
+ currentValue = _ref.currentValue,
29456
+ legacyValue = _ref.legacyValue,
29457
+ setFieldValue = _ref.setFieldValue,
29458
+ index = _ref.index,
29459
+ day = _ref.day;
29460
+
29461
+ var handleChangeOpening = function handleChangeOpening(checked) {
29462
+ setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29463
+ seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29464
+ if (keyItem !== index) {
29465
+ return item;
29466
+ }
29467
+
29468
+ return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29469
+ am: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am), {}, {
29470
+ open: checked ? "1" : ""
29471
+ })
29472
+ });
29473
+ })
29474
+ }));
29475
+ };
29476
+
29477
+ var handleChangeHour = function handleChangeHour(value, type) {
29478
+ setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29479
+ seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29480
+ if (keyItem !== index) {
29481
+ return item;
29482
+ }
29483
+
29484
+ return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29485
+ am: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am), {}, OpeningHours_defineProperty({}, type, OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am[type]), {}, {
29486
+ hours: value
29487
+ })))
29488
+ });
29489
+ })
29490
+ }));
29491
+ };
29492
+
29493
+ var handleChangeMinutes = function handleChangeMinutes(value, type) {
29494
+ setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29495
+ seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29496
+ if (keyItem !== index) {
29497
+ return item;
29498
+ }
29499
+
29500
+ return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29501
+ am: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am), {}, OpeningHours_defineProperty({}, type, OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.am[type]), {}, {
29502
+ mins: value
29503
+ })))
29504
+ });
29505
+ })
29506
+ }));
29507
+ };
29508
+
29509
+ return /*#__PURE__*/react.createElement("div", {
29510
+ className: "flex items-center",
29511
+ style: {
29512
+ marginBottom: 8
29513
+ }
29514
+ }, /*#__PURE__*/react.createElement(SCCheckboxDefault, {
29515
+ type: "checkbox",
29516
+ value: "1",
29517
+ checked: get_default()(legacyValue, [index, "am", "open"]),
29518
+ onChange: function onChange(e) {
29519
+ return handleChangeOpening(e.target.checked);
29520
+ }
29521
+ }), /*#__PURE__*/react.createElement("span", {
29522
+ style: {
29523
+ minWidth: "14%"
29524
+ }
29525
+ }, OpeningHours_("Open in the morning?", "wp-seopress")), /*#__PURE__*/react.createElement(SCSelectDefault, {
29526
+ name: "".concat(name, "[seopress_local_business_opening_hours][").concat(index, "][am][start][hours]"),
29527
+ value: get_default()(legacyValue, [index, "am", "start", "hours"]),
29528
+ style: {
29529
+ marginLeft: 10
29530
+ },
29531
+ onChange: function onChange(e) {
29532
+ handleChangeHour(e.target.value, "start");
29533
+ }
29534
+ }, HOURS.map(function (hour) {
29535
+ return /*#__PURE__*/react.createElement("option", {
29536
+ key: "day_".concat(day, "_hour_am_start_").concat(hour),
29537
+ value: hour
29538
+ }, hour);
29539
+ })), /*#__PURE__*/react.createElement("span", {
29540
+ style: {
29541
+ marginLeft: 5,
29542
+ marginRight: 5
29543
+ }
29544
+ }, ":"), /*#__PURE__*/react.createElement(SCSelectDefault, {
29545
+ style: {
29546
+ marginRight: 10
29547
+ },
29548
+ onChange: function onChange(e) {
29549
+ handleChangeMinutes(e.target.value, "start");
29550
+ },
29551
+ name: "".concat(name, "[seopress_local_business_opening_hours][").concat(index, "][am][start][mins]"),
29552
+ value: get_default()(legacyValue, [index, "am", "start", "mins"])
29553
+ }, MINUTES.map(function (hour) {
29554
+ return /*#__PURE__*/react.createElement("option", {
29555
+ key: "day_".concat(day, "_min_am_start_").concat(hour),
29556
+ value: hour
29557
+ }, hour);
29558
+ })), "-", /*#__PURE__*/react.createElement(SCSelectDefault, {
29559
+ name: "".concat(name, "[seopress_local_business_opening_hours][").concat(index, "][am][end][hours]"),
29560
+ style: {
29561
+ marginLeft: 10
29562
+ },
29563
+ value: get_default()(legacyValue, [index, "am", "end", "hours"]),
29564
+ onChange: function onChange(e) {
29565
+ handleChangeHour(e.target.value, "end");
29566
+ }
29567
+ }, HOURS.map(function (hour) {
29568
+ return /*#__PURE__*/react.createElement("option", {
29569
+ key: "day_".concat(day, "_hour_am_end_").concat(hour),
29570
+ value: hour
29571
+ }, hour);
29572
+ })), /*#__PURE__*/react.createElement("span", {
29573
+ style: {
29574
+ marginLeft: 5,
29575
+ marginRight: 5
29576
+ }
29577
+ }, ":"), /*#__PURE__*/react.createElement(SCSelectDefault, {
29578
+ name: "".concat(name, "[seopress_local_business_opening_hours][").concat(index, "][am][end][mins]"),
29579
+ value: get_default()(legacyValue, [index, "am", "end", "mins"]),
29580
+ onChange: function onChange(e) {
29581
+ handleChangeMinutes(e.target.value, "end");
29582
+ }
29583
+ }, MINUTES.map(function (min) {
29584
+ return /*#__PURE__*/react.createElement("option", {
29585
+ key: "day_".concat(day, "_min_am_end_").concat(min),
29586
+ value: min
29587
+ }, min);
29588
+ })));
29589
+ };
29590
+
29591
+ var OpeningHoursAfternoon = function OpeningHoursAfternoon(_ref2) {
29592
+ var name = _ref2.name,
29593
+ currentValue = _ref2.currentValue,
29594
+ legacyValue = _ref2.legacyValue,
29595
+ setFieldValue = _ref2.setFieldValue,
29596
+ index = _ref2.index,
29597
+ day = _ref2.day;
29598
+
29599
+ var handleChangeOpening = function handleChangeOpening(checked) {
29600
+ setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29601
+ seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29602
+ if (keyItem !== index) {
29603
+ return item;
29604
+ }
29605
+
29606
+ return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29607
+ pm: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm), {}, {
29608
+ open: checked ? "1" : ""
29609
+ })
29610
+ });
29611
+ })
29612
+ }));
29613
+ };
29614
+
29615
+ var handleChangeHour = function handleChangeHour(value, type) {
29616
+ setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29617
+ seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29618
+ if (keyItem !== index) {
29619
+ return item;
29620
+ }
29621
+
29622
+ return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29623
+ pm: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm), {}, OpeningHours_defineProperty({}, type, OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm[type]), {}, {
29624
+ hours: value
29625
+ })))
29626
+ });
29627
+ })
29628
+ }));
29629
+ };
29630
+
29631
+ var handleChangeMinutes = function handleChangeMinutes(value, type) {
29632
+ setFieldValue(name, OpeningHours_objectSpread(OpeningHours_objectSpread({}, currentValue), {}, {
29633
+ seopress_local_business_opening_hours: currentValue.seopress_local_business_opening_hours.map(function (item, keyItem) {
29634
+ if (keyItem !== index) {
29635
+ return item;
29636
+ }
29637
+
29638
+ return OpeningHours_objectSpread(OpeningHours_objectSpread({}, item), {}, {
29639
+ pm: OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm), {}, OpeningHours_defineProperty({}, type, OpeningHours_objectSpread(OpeningHours_objectSpread({}, item.pm[type]), {}, {
29640
+ mins: value
29641
+ })))
29642
+ });
29643
+ })
29644
+ }));
29645
+ };
29646
+
29647
+ return /*#__PURE__*/react.createElement("div", {
29648
+ className: "flex items-center",
29649
+ style: {
29650
+ marginBottom: 8
29651
+ }
29652
+ }, /*#__PURE__*/react.createElement(SCCheckboxDefault, {
29653
+ type: "checkbox",
29654
+ value: "1",
29655
+ checked: get_default()(legacyValue, [index, "pm", "open"]),
29656
+ onChange: function onChange(e) {
29657
+ return handleChangeOpening(e.target.checked);
29658
+ }
29659
+ }), /*#__PURE__*/react.createElement("span", {
29660
+ style: {
29661
+ minWidth: "14%"
29662
+ }
29663
+ }, OpeningHours_("Open in the afternoon?", "wp-seopress")), /*#__PURE__*/react.createElement(SCSelectDefault, {
29664
+ name: "".concat(name, "[seopress_local_business_opening_hours][").concat(index, "][pm][start][hours]"),
29665
+ value: get_default()(legacyValue, [index, "pm", "start", "hours"]),
29666
+ style: {
29667
+ marginLeft: 10
29668
+ },
29669
+ onChange: function onChange(e) {
29670
+ handleChangeHour(e.target.value, "start");
29671
+ }
29672
+ }, HOURS.map(function (hour) {
29673
+ return /*#__PURE__*/react.createElement("option", {
29674
+ key: "day_".concat(day, "_hour_am_start_").concat(hour),
29675
+ value: hour
29676
+ }, hour);
29677
+ })), /*#__PURE__*/react.createElement("span", {
29678
+ style: {
29679
+ marginLeft: 5,
29680
+ marginRight: 5
29681
+ }
29682
+ }, ":"), /*#__PURE__*/react.createElement(SCSelectDefault, {
29683
+ style: {
29684
+ marginRight: 10
29685
+ },
29686
+ onChange: function onChange(e) {
29687
+ handleChangeMinutes(e.target.value, "start");
29688
+ },
29689
+ name: "".concat(name, "[seopress_local_business_opening_hours][").concat(index, "][pm][start][hours]"),
29690
+ value: get_default()(legacyValue, [index, "pm", "start", "mins"])
29691
+ }, MINUTES.map(function (hour) {
29692
+ return /*#__PURE__*/react.createElement("option", {
29693
+ key: "day_".concat(day, "_min_am_start_").concat(hour),
29694
+ value: hour
29695
+ }, hour);
29696
+ })), "-", /*#__PURE__*/react.createElement(SCSelectDefault, {
29697
+ name: "".concat(name, "[seopress_local_business_opening_hours][").concat(index, "][pm][end][hours]"),
29698
+ style: {
29699
+ marginLeft: 10
29700
+ },
29701
+ value: get_default()(legacyValue, [index, "pm", "end", "hours"]),
29702
+ onChange: function onChange(e) {
29703
+ handleChangeHour(e.target.value, "end");
29704
+ }
29705
+ }, HOURS.map(function (hour) {
29706
+ return /*#__PURE__*/react.createElement("option", {
29707
+ key: "day_".concat(day, "_hour_am_end_").concat(hour),
29708
+ value: hour
29709
+ }, hour);
29710
+ })), /*#__PURE__*/react.createElement("span", {
29711
+ style: {
29712
+ marginLeft: 5,
29713
+ marginRight: 5
29714
+ }
29715
+ }, ":"), /*#__PURE__*/react.createElement(SCSelectDefault, {
29716
+ name: "".concat(name, "[seopress_local_business_opening_hours][").concat(index, "][pm][end][mins]"),
29717
+ value: get_default()(legacyValue, [index, "pm", "end", "mins"]),
29718
+ onChange: function onChange(e) {
29719
+ handleChangeMinutes(e.target.value, "end");
29720
+ }
29721
+ }, MINUTES.map(function (min) {
29722
+ return /*#__PURE__*/react.createElement("option", {
29723
+ key: "day_".concat(day, "_min_am_end_").concat(min),
29724
+ value: min
29725
+ }, min);
29726
+ })));
29727
+ };
29728
+
29729
+ var FieldOpeningHours = function FieldOpeningHours(_ref3) {
29730
+ var name = _ref3.name,
29731
+ id = _ref3.id,
29732
+ value = _ref3.value,
29733
+ rest = OpeningHours_objectWithoutProperties(_ref3, OpeningHours_excluded);
29734
 
29735
  var getDefaultValue = function getDefaultValue(value) {
29736
  if (isEmpty_default()(value) || isNil_default()(value)) {
29917
  })
29918
  }));
29919
  }
29920
+ }), "Closed all the day?"), /*#__PURE__*/react.createElement(OpeningHoursMorning, {
29921
+ name: name,
29922
+ day: day,
29923
+ currentValue: currentValue,
29924
+ legacyValue: legacyValue,
29925
+ setFieldValue: rest.setFieldValue,
29926
+ index: key
29927
+ }), /*#__PURE__*/react.createElement(OpeningHoursAfternoon, {
29928
+ name: name,
29929
+ day: day,
29930
+ currentValue: currentValue,
29931
+ legacyValue: legacyValue,
29932
+ setFieldValue: rest.setFieldValue,
29933
+ index: key
29934
+ }));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29935
  }));
29936
  };
29937
 
31126
  }, /*#__PURE__*/react.createElement(Heading, null, /*#__PURE__*/react.createElement(AccordionItemHeadingWrapper, null, /*#__PURE__*/react.createElement(AccordionItemButtonWrapper, null, /*#__PURE__*/react.createElement(Button, null, /*#__PURE__*/react.createElement("div", null, "#", key + 1, " - ", item.question), /*#__PURE__*/react.createElement("span", {
31127
  className: "seopress-arrow",
31128
  "aria-hidden": "true"
31129
+ })))), /*#__PURE__*/react.createElement(AccordionItemPanel, null, /*#__PURE__*/react.createElement("p", {
31130
+ style: {
31131
+ fontWeight: "bold"
31132
+ }
31133
+ }, Faq_("Question (required)", "wp-seopress-pro")), /*#__PURE__*/react.createElement(SCInputDefault, {
31134
  type: "text",
31135
  value: item.question,
31136
  onChange: function onChange(e) {
31144
  });
31145
  }));
31146
  }
31147
+ }), /*#__PURE__*/react.createElement("p", {
31148
+ style: {
31149
+ fontWeight: "bold"
31150
+ }
31151
+ }, Faq_("Answer (required)", "wp-seopress-pro")), /*#__PURE__*/react.createElement("textarea", {
31152
  className: "form-textarea",
31153
  style: {
31154
  width: "100%"
31195
  };
31196
 
31197
  /* harmony default export */ const Faq = (FieldRepeaterFaq);
31198
+ ;// CONCATENATED MODULE: ./app/react/components/Forms/components/Time/index.js
31199
+ var Time_excluded = ["name", "id", "value"];
31200
+
31201
+ function Time_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = Time_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
31202
+
31203
+ function Time_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
31204
+
31205
+
31206
+
31207
+ var FieldTime = function FieldTime(_ref) {
31208
+ var name = _ref.name,
31209
+ id = _ref.id,
31210
+ value = _ref.value,
31211
+ rest = Time_objectWithoutProperties(_ref, Time_excluded);
31212
+
31213
+ return /*#__PURE__*/react.createElement("input", {
31214
+ type: "time",
31215
+ name: name,
31216
+ id: id,
31217
+ value: value,
31218
+ className: "form-input-date",
31219
+ onChange: function onChange(e) {
31220
+ rest.setFieldValue(name, e.target.value);
31221
+ }
31222
+ });
31223
+ };
31224
+
31225
+ /* harmony default export */ const Time = (FieldTime);
31226
  ;// CONCATENATED MODULE: ./app/react/components/Forms/components/DynamicField/index.js
31227
 
31228
 
31251
 
31252
 
31253
 
31254
+
31255
  var DynamicField = function DynamicField(_ref) {
31256
  var item = _ref.item,
31257
  _ref$nameInput = _ref.nameInput,
31269
  var nameForm = isNil_default()(nameInput) ? item.key : nameInput;
31270
  var valueForm = isNil_default()(itemValue) ? values[item.key] : itemValue;
31271
  (0,react.useEffect)(function () {
31272
+ if ((isNil_default()(valueForm) || isEmpty_default()(valueForm)) && !isNil_default()(item.value) && item.type !== "checkbox") {
31273
  rest.setFieldValue(nameForm, get_default()(item, "value", ""));
31274
  }
31275
  }, [valueForm]);
31297
  className: classnames_default()({
31298
  "w-full": item.type === "input" || item.type === "select" || item.type === "textarea"
31299
  }),
31300
+ value: checkboxLegacyValue ? "yes" : "1",
31301
+ onChange: function onChange(e) {
31302
+ rest.setFieldValue(nameForm, e.target.checked);
31303
+ }
31304
  }), item.label)), item.type === "input" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(components_Input, {
31305
  id: nameForm,
31306
  name: nameForm,
31307
  placeholder: placeholder ? placeholder : item.placeholder,
31308
  value: valueForm || "",
31309
+ className: classnames_default()("w-full", get_default()(item, "class", "")),
31310
  emptyIcon: emptyIcon,
31311
+ setFieldValue: rest.setFieldValue,
31312
+ item: item
31313
  })), item.type === "number" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(components_Input, {
31314
  id: nameForm,
31315
  name: nameForm,
31316
  placeholder: placeholder ? placeholder : item.placeholder,
31317
  type: "number",
31318
  value: valueForm || "",
31319
+ className: classnames_default()("w-full", get_default()(item, "class", "")),
31320
  emptyIcon: emptyIcon,
31321
  setFieldValue: rest.setFieldValue,
31322
  step: get_default()(item, "step", null),
31327
  name: nameForm,
31328
  placeholder: placeholder ? placeholder : item.placeholder,
31329
  value: valueForm || "",
31330
+ className: classnames_default()("w-full", get_default()(item, "class", "")),
31331
  style: {
31332
  resize: "vertical"
31333
+ },
31334
+ item: item
31335
  })), item.type === "select" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(components_Select, DynamicField_extends({
31336
  id: nameForm,
31337
  name: nameForm,
31338
  placeholder: item.placeholder,
31339
  value: valueForm || "",
31340
+ className: classnames_default()("w-full", get_default()(item, "class", "")),
31341
  options: item.options,
31342
  onChange: rest.handleChange
31343
  }, rest))), item.type === "upload" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(MediaUpload, DynamicField_extends({
31345
  name: nameForm,
31346
  placeholder: placeholder ? placeholder : item.placeholder,
31347
  value: valueForm || "",
31348
+ className: classnames_default()("w-full", get_default()(item, "class", "")),
31349
  emptyIcon: emptyIcon,
31350
  setFieldValue: rest.setFieldValue,
31351
  combinedValuesForm: combinedValuesForm
31353
  id: nameForm,
31354
  name: nameForm,
31355
  value: valueForm || "",
31356
+ className: classnames_default()("w-full", get_default()(item, "class", ""))
31357
+ }, rest))), item.type === "time" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Time, DynamicField_extends({
31358
+ id: nameForm,
31359
+ name: nameForm,
31360
+ value: valueForm || "",
31361
+ className: classnames_default()("w-full", get_default()(item, "class", ""))
31362
  }, rest))), item.type === "opening_hours" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(OpeningHours, DynamicField_extends({
31363
  id: nameForm,
31364
  name: nameForm,
31365
  value: valueForm || "",
31366
+ className: classnames_default()("w-full", get_default()(item, "class", ""))
31367
  }, rest))), item.type === "repeater_how_to" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(HowTo, DynamicField_extends({
31368
  id: nameForm,
31369
  name: nameForm,
31370
  value: valueForm || "",
31371
+ className: classnames_default()("w-full", get_default()(item, "class", ""))
31372
  }, rest))), item.type === "repeater_faq" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Faq, DynamicField_extends({
31373
  id: nameForm,
31374
  name: nameForm,
31375
  value: valueForm || "",
31376
+ className: classnames_default()("w-full", get_default()(item, "class", ""))
31377
  }, rest))));
31378
  };
31379
 
32125
  return _ref.apply(this, arguments);
32126
  };
32127
  }();
32128
+ ;// CONCATENATED MODULE: ./app/react/components/SelectChoice/index.js
32129
+
32130
+
32131
+
32132
+
32133
+
32134
+ var SelectChoice_ = wp.i18n.__;
32135
+
32136
+ var SelectChoice = function SelectChoice(_ref) {
32137
+ var items = _ref.items,
32138
+ _ref$handleChoiceItem = _ref.handleChoiceItem,
32139
+ handleChoiceItem = _ref$handleChoiceItem === void 0 ? function () {} : _ref$handleChoiceItem;
32140
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
32141
+ className: "flex items-center flex-wrap"
32142
+ }, /*#__PURE__*/react.createElement("div", {
32143
+ className: "relative",
32144
+ style: {
32145
+ alignSelf: "start"
32146
+ }
32147
+ }, /*#__PURE__*/react.createElement(ui_TagsChoice, null, items.map(function (tag) {
32148
+ var name = get_default()(tag, "item.name", get_default()(tag, "name", ""));
32149
+
32150
+ var input = get_default()(tag, "item.input", get_default()(tag, "input", ""));
32151
+
32152
+ return /*#__PURE__*/react.createElement(TagsChoiceItem, {
32153
+ key: name,
32154
+ onClick: function onClick() {
32155
+ handleChoiceItem(input);
32156
+ },
32157
+ onKeyUp: function onKeyUp(e) {
32158
+ if (e.keyCode === 27) {
32159
+ e.preventDefault();
32160
+ }
32161
+
32162
+ if (e.keyCode === 13) {
32163
+ e.preventDefault();
32164
+ handleChoiceItem(input);
32165
+ }
32166
+ },
32167
+ tabIndex: "0"
32168
+ }, !isEmpty_default()(name) && /*#__PURE__*/react.createElement(SCTagsChoiceItemName, null, name), !isEmpty_default()(input) && /*#__PURE__*/react.createElement(SCTagsChoiceItemValue, null, input));
32169
+ })))));
32170
+ };
32171
+
32172
+ /* harmony default export */ const components_SelectChoice = (SelectChoice);
32173
  ;// CONCATENATED MODULE: ./app/react/layout/Main/components/Redirection/index.js
32174
 
32175
 
32176
 
32177
+
32178
+
32179
+ var Redirection_excluded = ["data", "values", "loading"],
32180
+ _excluded2 = ["values"];
32181
+
32182
+ function Redirection_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
32183
+
32184
+ function Redirection_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Redirection_ownKeys(Object(source), true).forEach(function (key) { Redirection_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Redirection_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
32185
+
32186
+ function Redirection_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
32187
 
32188
  function Redirection_extends() { Redirection_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return Redirection_extends.apply(this, arguments); }
32189
 
32190
+ function Redirection_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
32191
+
32192
+ function Redirection_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { Redirection_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { Redirection_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
32193
+
32194
+ function Redirection_slicedToArray(arr, i) { return Redirection_arrayWithHoles(arr) || Redirection_iterableToArrayLimit(arr, i) || Redirection_unsupportedIterableToArray(arr, i) || Redirection_nonIterableRest(); }
32195
+
32196
+ function Redirection_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
32197
+
32198
+ function Redirection_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Redirection_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Redirection_arrayLikeToArray(o, minLen); }
32199
+
32200
+ function Redirection_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
32201
+
32202
+ function Redirection_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
32203
+
32204
+ function Redirection_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
32205
+
32206
  function Redirection_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = Redirection_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
32207
 
32208
+ function Redirection_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
32209
+
32210
+
32211
+
32212
+
32213
+
32214
+
32215
+
32216
+
32217
+
32218
+
32219
 
 
32220
 
 
32221
 
 
32222
 
 
32223
 
32224
+ var Redirection_ = wp.i18n.__;
32225
 
32226
+ var RedirectionLayoutWithFormik = function RedirectionLayoutWithFormik(_ref) {
32227
+ var data = _ref.data,
32228
+ values = _ref.values,
32229
+ loading = _ref.loading,
32230
+ rest = Redirection_objectWithoutProperties(_ref, Redirection_excluded);
32231
 
32232
+ var _useFormikContext = useFormikContext(),
32233
+ valuesFormik = _useFormikContext.values;
32234
 
32235
+ var fieldValue = getIn(valuesFormik, "_seopress_redirections_value");
32236
 
32237
+ var _useState = (0,react.useState)([]),
32238
+ _useState2 = Redirection_slicedToArray(_useState, 2),
32239
+ redirectionProposition = _useState2[0],
32240
+ setRedirectionProposition = _useState2[1];
32241
 
32242
+ var _useState3 = (0,react.useState)(false),
32243
+ _useState4 = Redirection_slicedToArray(_useState3, 2),
32244
+ focusSuggest = _useState4[0],
32245
+ setFocusSuggest = _useState4[1];
32246
 
32247
+ var _useState5 = (0,react.useState)(fieldValue),
32248
+ _useState6 = Redirection_slicedToArray(_useState5, 2),
32249
+ redirectionValue = _useState6[0],
32250
+ setRedirectionValue = _useState6[1];
32251
 
32252
+ var isInitialMount = (0,react.useRef)(true);
32253
+ var ref = (0,react.useRef)();
32254
+ hooks_useOnClickOutside(ref, function () {
32255
+ return setFocusSuggest(false);
32256
+ });
32257
+ var fetchRedirectionProposition = (0,react.useCallback)(debounce_default()( /*#__PURE__*/function () {
32258
+ var _ref2 = Redirection_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(value) {
32259
+ var dataResponse, data;
32260
+ return regeneratorRuntime.wrap(function _callee$(_context) {
32261
+ while (1) {
32262
+ switch (_context.prev = _context.next) {
32263
+ case 0:
32264
+ _context.next = 2;
32265
+ return fetch("".concat(SEOPRESS_DATA.REST_URL, "seopress/v1/search-url?url=").concat(value));
32266
 
32267
+ case 2:
32268
+ dataResponse = _context.sent;
32269
+ _context.next = 5;
32270
+ return dataResponse.json();
32271
 
32272
+ case 5:
32273
+ data = _context.sent;
32274
+ setRedirectionProposition(data.map(function (item) {
32275
+ return {
32276
+ name: item.post_title,
32277
+ input: item.guid
32278
+ };
32279
+ }));
32280
+ setFocusSuggest(true);
32281
 
32282
+ case 8:
32283
+ case "end":
32284
+ return _context.stop();
32285
+ }
32286
+ }
32287
+ }, _callee);
32288
+ }));
32289
 
32290
+ return function (_x) {
32291
+ return _ref2.apply(this, arguments);
32292
+ };
32293
+ }(), 200), []);
32294
+ (0,react.useEffect)(function () {
32295
+ if (isInitialMount.current) {
32296
+ isInitialMount.current = false;
32297
+ return;
32298
+ }
32299
 
32300
+ rest.setFieldValue("_seopress_redirections_value", redirectionValue);
32301
 
32302
+ if (isEmpty_default()(redirectionValue) || redirectionValue.length < 3) {
32303
+ return;
32304
+ }
32305
 
32306
+ fetchRedirectionProposition(redirectionValue);
32307
+ }, [redirectionValue]);
32308
+ return /*#__PURE__*/react.createElement(Form, null, data.map(function (item, key) {
32309
+ if (!item.visible) {
32310
+ return;
32311
+ }
32312
 
32313
+ return /*#__PURE__*/react.createElement(react.Fragment, {
32314
+ key: "social_form_".concat(key)
32315
+ }, /*#__PURE__*/react.createElement("div", {
32316
+ className: "mt-3"
32317
+ }, item.key !== "_seopress_redirections_value" && /*#__PURE__*/react.createElement(components_DynamicField, Redirection_extends({
32318
+ item: item,
32319
+ values: values
32320
+ }, rest)), item.key === "_seopress_redirections_value" && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(components_Label, {
32321
+ htmlFor: item.key
32322
+ }, item.label), /*#__PURE__*/react.createElement(Input, {
32323
+ name: item.key,
32324
+ id: item.key,
32325
+ type: "text",
32326
+ value: redirectionValue,
32327
+ placeholder: get_default()(item, "placeholder", ""),
32328
+ onChange: function onChange(e) {
32329
+ setRedirectionValue(e.target.value);
32330
+ },
32331
+ style: {
32332
+ width: "100%"
32333
+ }
32334
+ }), focusSuggest && !isEmpty_default()(redirectionProposition) && /*#__PURE__*/react.createElement("div", {
32335
+ ref: ref
32336
+ }, /*#__PURE__*/react.createElement(components_SelectChoice, {
32337
+ handleChoiceItem: function handleChoiceItem(value) {
32338
+ setRedirectionValue(value);
32339
+ setFocusSuggest(false);
32340
+ },
32341
+ items: redirectionProposition
32342
+ })))));
32343
+ }), /*#__PURE__*/react.createElement("div", {
32344
+ className: "sp-fixed"
32345
+ }, /*#__PURE__*/react.createElement(components_ButtonSubmit, {
32346
+ loading: loading
32347
+ }, Redirection_("Save", "wp-seopress"))));
32348
+ };
32349
 
32350
+ var RedirectionLayout = function RedirectionLayout(_ref3) {
32351
+ var mainBarRef = _ref3.mainBarRef;
32352
  var postId = getCurrentPostId();
32353
 
32354
  var _useRedirectionSettin = metas_useRedirectionSettings({
32364
  };
32365
  });
32366
 
32367
+ var _useState7 = (0,react.useState)(false),
32368
+ _useState8 = Redirection_slicedToArray(_useState7, 2),
32369
+ loading = _useState8[0],
32370
+ setLoading = _useState8[1];
32371
 
32372
  var _useContext = (0,react.useContext)(NotificationContext),
32373
  actions = _useContext.actions;
32374
 
32375
  var handleOnSubmit = /*#__PURE__*/function () {
32376
+ var _ref4 = Redirection_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(values) {
32377
  var data;
32378
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
32379
  while (1) {
32380
+ switch (_context2.prev = _context2.next) {
32381
  case 0:
32382
  setLoading(true);
32383
+ _context2.next = 3;
32384
  return saveRedirectionSettings(postId, Redirection_objectSpread(Redirection_objectSpread({}, values), {}, {
32385
  _seopress_redirections_enabled: values._seopress_redirections_enabled ? "yes" : ""
32386
  }));
32387
 
32388
  case 3:
32389
+ data = _context2.sent;
32390
  mutate();
32391
  setLoading(false);
32392
  actions.setMessage(Redirection_("Your settings have been saved.", "wp-seopress"));
32393
 
32394
  case 7:
32395
  case "end":
32396
+ return _context2.stop();
32397
  }
32398
  }
32399
+ }, _callee2);
32400
  }));
32401
 
32402
+ return function handleOnSubmit(_x2) {
32403
+ return _ref4.apply(this, arguments);
32404
  };
32405
  }();
32406
 
32415
  enableReinitialize: true,
32416
  onSubmit: handleOnSubmit,
32417
  initialValues: initialValues
32418
+ }, function (_ref5) {
32419
+ var values = _ref5.values,
32420
+ rest = Redirection_objectWithoutProperties(_ref5, _excluded2);
 
 
 
 
 
32421
 
32422
+ return /*#__PURE__*/react.createElement(RedirectionLayoutWithFormik, Redirection_extends({
32423
+ data: data,
32424
+ values: values,
 
 
 
 
 
 
 
 
 
32425
  loading: loading
32426
+ }, rest));
32427
  }));
32428
  };
32429
 
41801
 
41802
 
41803
  var VideoSitemap_excluded = ["fields", "values"],
41804
+ VideoSitemap_excluded2 = ["values"];
41805
 
41806
  function VideoSitemap_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
41807
 
42003
  })
42004
  }, function (_ref4) {
42005
  var values = _ref4.values,
42006
+ rest = VideoSitemap_objectWithoutProperties(_ref4, VideoSitemap_excluded2);
42007
 
42008
  return /*#__PURE__*/react.createElement(Form, null, responseVideoSitemap.data.map(function (item, key) {
42009
  if (!item.visible) {
42226
 
42227
 
42228
 
42229
+ var SchemasManual_excluded = ["schemasAvailable", "fields", "schema", "arrayHelpers", "index", "fieldsAvailable", "setExpandAll", "expandAll"],
42230
+ SchemasManual_excluded2 = ["values", "fields", "schemas", "loading"],
42231
+ _excluded3 = ["values"];
42232
 
42233
+ function SchemasManual_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
42234
 
42235
+ function SchemasManual_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { SchemasManual_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { SchemasManual_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
42236
 
42237
+ function SchemasManual_toConsumableArray(arr) { return SchemasManual_arrayWithoutHoles(arr) || SchemasManual_iterableToArray(arr) || SchemasManual_unsupportedIterableToArray(arr) || SchemasManual_nonIterableSpread(); }
42238
 
42239
+ function SchemasManual_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
42240
 
42241
+ function SchemasManual_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
42242
+
42243
+ function SchemasManual_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return SchemasManual_arrayLikeToArray(arr); }
42244
 
42245
  function SchemasManual_slicedToArray(arr, i) { return SchemasManual_arrayWithHoles(arr) || SchemasManual_iterableToArrayLimit(arr, i) || SchemasManual_unsupportedIterableToArray(arr, i) || SchemasManual_nonIterableRest(); }
42246
 
42256
 
42257
  function SchemasManual_extends() { SchemasManual_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return SchemasManual_extends.apply(this, arguments); }
42258
 
42259
+ function SchemasManual_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
42260
+
42261
+ function SchemasManual_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { SchemasManual_ownKeys(Object(source), true).forEach(function (key) { SchemasManual_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { SchemasManual_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
42262
+
42263
+ function SchemasManual_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
42264
+
42265
  function SchemasManual_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = SchemasManual_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
42266
 
42267
  function SchemasManual_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
42287
  arrayHelpers = _ref.arrayHelpers,
42288
  index = _ref.index,
42289
  fieldsAvailable = _ref.fieldsAvailable,
42290
+ setExpandAll = _ref.setExpandAll,
42291
+ expandAll = _ref.expandAll,
42292
  rest = SchemasManual_objectWithoutProperties(_ref, SchemasManual_excluded);
42293
 
42294
  var type = get_default()(schema, "_seopress_pro_rich_snippets_type", null);
42299
 
42300
  var notices = get_default()(itemSchemaAvailable, "notices", []);
42301
 
42302
+ var handleExpand = function handleExpand(e) {
42303
+ e.preventDefault();
42304
+ setExpandAll(function (expands) {
42305
+ return expands.map(function (item) {
42306
+ if (item.key !== index) {
42307
+ return item;
42308
+ }
42309
+
42310
+ return SchemasManual_objectSpread(SchemasManual_objectSpread({}, item), {}, {
42311
+ open: !get_default()(item, "open", true)
42312
+ });
42313
+ });
42314
+ });
42315
+ };
42316
+
42317
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(AccordionItem, {
42318
+ dangerouslySetExpanded: get_default()(find_default()(expandAll, {
42319
+ key: index
42320
+ }), "open", false)
42321
+ }, /*#__PURE__*/react.createElement(Heading, null, /*#__PURE__*/react.createElement(AccordionItemHeadingWrapper, {
42322
+ onClick: handleExpand,
42323
+ onKeyUp: function onKeyUp(e) {
42324
+ if (e.keyCode === 13) {
42325
+ e.preventDefault();
42326
+ handleExpand(e);
42327
+ }
42328
+ }
42329
+ }, /*#__PURE__*/react.createElement(AccordionItemButtonWrapper, null, /*#__PURE__*/react.createElement(Button, null, /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("p", {
42330
  style: {
42331
  fontWeight: "bold",
42332
  marginBottom: 5
42349
  color: "#cc1818",
42350
  boxShadow: "inset 0 0 0 1px #cc1818",
42351
  marginLeft: "auto",
42352
+ marginRight: 50,
42353
+ fontWeight: 500
42354
  },
42355
  onClick: function onClick(e) {
42356
  e.stopPropagation;
42357
  arrayHelpers.remove(index);
42358
+ setExpandAll(function (expands) {
42359
+ return expands.filter(function (item) {
42360
+ return item.key !== index;
42361
+ }).map(function (item, key) {
42362
+ return {
42363
+ key: key,
42364
+ open: false
42365
+ };
42366
+ });
42367
+ });
42368
  }
42369
  }, SchemasManual_("Delete schema", "wp-seopress")), /*#__PURE__*/react.createElement("span", {
42370
  className: "seopress-arrow",
42396
  });
42397
  var DEFAULT_TYPE = "articles";
42398
 
42399
+ var FormSchemaManualLayout = function FormSchemaManualLayout(_ref3) {
42400
+ var values = _ref3.values,
42401
+ fields = _ref3.fields,
42402
+ schemas = _ref3.schemas,
42403
+ loading = _ref3.loading,
42404
+ rest = SchemasManual_objectWithoutProperties(_ref3, SchemasManual_excluded2);
42405
 
42406
+ var _useState = (0,react.useState)(get_default()(values, "schemas", []).map(function (item, key) {
42407
+ return {
42408
+ key: key,
42409
+ open: false
42410
+ };
42411
+ })),
42412
  _useState2 = SchemasManual_slicedToArray(_useState, 2),
42413
+ expandAll = _useState2[0],
42414
+ setExpandAll = _useState2[1];
42415
+
42416
+ var getSchemaDefault = function getSchemaDefault() {
42417
+ var item = get_default()(fields, DEFAULT_TYPE, []).reduce(function (previous, current) {
42418
+ return SchemasManual_objectSpread(SchemasManual_objectSpread({}, previous), {}, SchemasManual_defineProperty({}, current.key, get_default()(current, "value", "")));
42419
+ }, {});
42420
+
42421
+ return SchemasManual_objectSpread(SchemasManual_objectSpread({}, item), {}, {
42422
+ _seopress_pro_rich_snippets_type: DEFAULT_TYPE
42423
+ });
42424
+ };
42425
+
42426
+ return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
42427
+ className: "flex items-center"
42428
+ }, /*#__PURE__*/react.createElement("div", {
42429
+ style: {
42430
+ marginLeft: "auto"
42431
+ }
42432
+ }, /*#__PURE__*/react.createElement("a", {
42433
+ href: "#",
42434
+ onClick: function onClick(e) {
42435
+ e.preventDefault();
42436
+ setExpandAll(function (expandAll) {
42437
+ return expandAll.map(function (item) {
42438
+ return SchemasManual_objectSpread(SchemasManual_objectSpread({}, item), {}, {
42439
+ open: true
42440
+ });
42441
+ });
42442
+ });
42443
+ }
42444
+ }, SchemasManual_("Expand", "wp-seopress")), " ", "/", " ", /*#__PURE__*/react.createElement("a", {
42445
+ href: "#",
42446
+ onClick: function onClick(e) {
42447
+ e.preventDefault();
42448
+ setExpandAll(function (expandAll) {
42449
+ return expandAll.map(function (item) {
42450
+ return SchemasManual_objectSpread(SchemasManual_objectSpread({}, item), {}, {
42451
+ open: false
42452
+ });
42453
+ });
42454
+ });
42455
+ }
42456
+ }, SchemasManual_("Close", "wp-seopress")))), /*#__PURE__*/react.createElement(Form, null, /*#__PURE__*/react.createElement(Accordion, {
42457
+ style: {
42458
+ marginTop: 10
42459
+ },
42460
+ allowMultipleExpanded: true,
42461
+ allowZeroExpanded: true
42462
+ }, /*#__PURE__*/react.createElement(FieldArray, {
42463
+ name: "schemas",
42464
+ render: function render(arrayHelpers) {
42465
+ return /*#__PURE__*/react.createElement(react.Fragment, null, values.schemas.map(function (schema, key) {
42466
+ var fieldsSchema = get_default()(fields, schema._seopress_pro_rich_snippets_type, null);
42467
+
42468
+ if (isNil_default()(fieldsSchema)) {
42469
+ return;
42470
+ }
42471
+
42472
+ return /*#__PURE__*/react.createElement(react.Fragment, {
42473
+ key: "schema_manual_".concat(key)
42474
+ }, /*#__PURE__*/react.createElement(RepeaterSchema, SchemasManual_extends({
42475
+ arrayHelpers: arrayHelpers,
42476
+ fields: fieldsSchema,
42477
+ schema: schema,
42478
+ index: key,
42479
+ schemasAvailable: schemas,
42480
+ fieldsAvailable: fields,
42481
+ expandAll: expandAll,
42482
+ setExpandAll: setExpandAll
42483
+ }, rest)));
42484
+ }), /*#__PURE__*/react.createElement("div", {
42485
+ className: "sp-fixed"
42486
+ }, /*#__PURE__*/react.createElement(ui_Button, {
42487
+ style: {
42488
+ marginRight: 12
42489
+ },
42490
+ type: "button",
42491
+ secondary: true,
42492
+ onClick: function onClick(e) {
42493
+ e.stopPropagation;
42494
+ arrayHelpers.push(getSchemaDefault());
42495
+ setExpandAll(function (expandAll) {
42496
+ return [].concat(SchemasManual_toConsumableArray(expandAll), [{
42497
+ key: expandAll.length,
42498
+ open: false
42499
+ }]);
42500
+ });
42501
+ }
42502
+ }, SchemasManual_("Add a schema", "wp-seopress")), /*#__PURE__*/react.createElement(components_ButtonSubmit, {
42503
+ loading: loading
42504
+ }, SchemasManual_("Save", "wp-seopress"))));
42505
+ }
42506
+ }))));
42507
+ };
42508
+
42509
+ var SchemasManualLayout = function SchemasManualLayout(_ref4) {
42510
+ var mainBarRef = _ref4.mainBarRef;
42511
+ var postId = getCurrentPostId();
42512
+
42513
+ var _useState3 = (0,react.useState)(false),
42514
+ _useState4 = SchemasManual_slicedToArray(_useState3, 2),
42515
+ loading = _useState4[0],
42516
+ setLoading = _useState4[1];
42517
 
42518
  var _useContext = (0,react.useContext)(NotificationContext),
42519
  actions = _useContext.actions;
42532
  });
42533
 
42534
  var handleOnSubmit = /*#__PURE__*/function () {
42535
+ var _ref5 = SchemasManual_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(values) {
42536
  var data;
42537
  return regeneratorRuntime.wrap(function _callee$(_context) {
42538
  while (1) {
42557
  }));
42558
 
42559
  return function handleOnSubmit(_x) {
42560
+ return _ref5.apply(this, arguments);
42561
  };
42562
  }();
42563
 
42564
  var data = responseSchemas.data,
42565
  fields = responseSchemas.fields,
42566
  schemas = responseSchemas.schemas;
 
 
 
 
 
 
 
 
 
 
 
42567
  return /*#__PURE__*/react.createElement("div", {
42568
  ref: mainBarRef,
42569
  tabIndex: "0"
42573
  initialValues: {
42574
  schemas: isNil_default()(data) ? [] : data
42575
  }
42576
+ }, function (_ref6) {
42577
+ var values = _ref6.values,
42578
+ rest = SchemasManual_objectWithoutProperties(_ref6, _excluded3);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42579
 
42580
+ return /*#__PURE__*/react.createElement(FormSchemaManualLayout, SchemasManual_extends({
42581
+ loading: loading,
42582
+ values: values,
42583
+ fields: fields,
42584
+ schemas: schemas
42585
+ }, rest));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42586
  }));
42587
  };
42588
 
42936
 
42937
 
42938
  var METABOX_MODULE_NAME = "seopress-js-module-seo-metabox";
42939
+ var SCGlobalStyle = We(["&&&{.seopress-ui-datepicker{--primaryColor:#007cba;--paragraphColor:#757575;--fontSize:13px;--fontFamily:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;--color:#757575;--colorDark:#1e1e1e;--colorAlert:#a00;--colorWarning:#ffba00;--colorSuccess:#4ab866;--colorLowAlert:#e39f48;--colorPre:#37864b;--colorIcon:#d7dade;--lineHeight:24px;--titleColor:#3c434a;--titleFontSize:20px;--titleFontWeight:normal;--titleMargin:10px 0;--backgroundPrimary:#007cba;--backgroundPrimaryHover:#006ba1;--backgroundSecondaryHover:#f0f0f0;--borderColor:#a7aaad;--borderColorLight:#dcdcde;--borderColorLight40:rgba(220,220,222,0.4);--borderColorCard:#e2e4e7;--borderColorTab:#c3c4c7;}.seopress-ui-datepicker{padding:0;margin:0;border-radius:0;background-color:#fff;border:1px solid var(--borderColorLight);border-top:none;box-shadow:0 3px 6px rgba(0,0,0,0.075);min-width:17em;width:auto !important;z-index:999999 !important;}body.wp-admin:not(.rtl) .seopress-ui-datepicker{margin-left:-1px;}body.wp-admin.rtl .seopress-ui-datepicker{margin-right:-1px;}.seopress-ui-datepicker *{padding:0;font-family:var(--fontFamily);border-radius:0;}.seopress-ui-datepicker table{font-size:--var(--fontSize);margin:0;border:none;border-collapse:collapse;}.seopress-ui-datepicker .ui-widget-header,.seopress-ui-datepicker .ui-datepicker-header{background-image:none;border:none;color:var(--primaryColor);font-weight:normal;}.seopress-ui-datepicker .ui-datepicker-header .ui-state-hover{background:transparent;border-color:transparent;cursor:pointer;}.seopress-ui-datepicker .ui-datepicker-title{margin:0;padding:10px 0;color:var(--colorDark);font-size:var(--fontSize);line-height:14px;text-align:center;font-weight:bold;}.seopress-ui-datepicker .ui-datepicker-prev,.seopress-ui-datepicker .ui-datepicker-next{position:relative;top:0;height:34px;width:34px;}.seopress-ui-datepicker .ui-state-hover.ui-datepicker-prev,.seopress-ui-datepicker .ui-state-hover.ui-datepicker-next{border:none;}.seopress-ui-datepicker .ui-datepicker-prev,.seopress-ui-datepicker .ui-datepicker-prev-hover{left:0;}.seopress-ui-datepicker .ui-datepicker-next,.seopress-ui-datepicker .ui-datepicker-next-hover{right:0;}.seopress-ui-datepicker .ui-datepicker-next span,.seopress-ui-datepicker .ui-datepicker-prev span{display:none;}.seopress-ui-datepicker .ui-datepicker-prev{float:left;}.seopress-ui-datepicker .ui-datepicker-next{float:right;}.seopress-ui-datepicker .ui-datepicker-prev:before,.seopress-ui-datepicker .ui-datepicker-next:before{font:normal 20px/34px \"dashicons\";padding-left:0;color:var(--primaryColor);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:34px;height:34px;}.seopress-ui-datepicker .ui-datepicker-prev:before{content:\"\f341\";}.seopress-ui-datepicker .ui-datepicker-next:before{content:\"\f345\";}.seopress-ui-datepicker .ui-datepicker-prev-hover:before,.seopress-ui-datepicker .ui-datepicker-next-hover:before{opacity:0.7;}.seopress-ui-datepicker select.ui-datepicker-month,.seopress-ui-datepicker select.ui-datepicker-year{width:33%;}.seopress-ui-datepicker thead{color:#fff;font-weight:600;}.seopress-ui-datepicker th{padding:10px;}.seopress-ui-datepicker td{padding:0;border:1px solid var(--borderColorCard);}.seopress-ui-datepicker td.ui-datepicker-other-month{border:transparent;}.seopress-ui-datepicker tr:first-of-type td{border-top:1px solid #f0f0f0;}.seopress-ui-datepicker td.ui-datepicker-week-end{background-color:var(--borderColorCard);border:1px solid #f0f0f0;}.seopress-ui-datepicker td.ui-datepicker-today{background-color:var(--backgroundSecondaryHover);}.seopress-ui-datepicker td.ui-datepicker-current-day{background:#bbdd88;}.seopress-ui-datepicker td .ui-state-default{background:transparent;border:none;text-align:center;text-decoration:none;width:auto;display:block;padding:5px 10px;font-weight:normal;color:#444;}.seopress-ui-datepicker td.ui-state-disabled .ui-state-default{opacity:0.5;}.seopress-ui-datepicker thead{background:var(--backgroundPrimary);}.seopress-ui-datepicker td .ui-state-hover{background:var(--backgroundPrimary);color:#fff;}}body #", "{--primaryColor:#007cba;--paragraphColor:#757575;--fontSize:13px;--fontFamily:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;--color:#757575;--colorP:#3c434a;--colorDark:#1e1e1e;--colorAlert:#a00;--colorWarning:#ffba00;--colorSuccess:#4ab866;--colorLowAlert:#e39f48;--colorPre:#37864b;--colorIcon:#d7dade;--lineHeight:24px;--titleColor:#3c434a;--titleFontSize:20px;--titleFontWeight:normal;--titleMargin:10px 0;--backgroundPrimary:#007cba;--backgroundPrimaryHover:#006ba1;--backgroundSecondaryHover:#f0f0f0;--borderColor:#a7aaad;--borderColorLight:#dcdcde;--borderColorLight40:rgba(220,220,222,0.4);--borderColorCard:#e2e4e7;--borderColorTab:#c3c4c7;--fontWeight:normal;.sp-tooltip{position:relative;margin-left:5px;display:inline-block;cursor:help;vertical-align:bottom;text-align:left;background:none;border:none;padding:0;.dashicons{color:var(--colorDark);}.sp-tooltiptext{visibility:hidden;position:absolute;z-index:999999999;width:350px;left:-20px;padding:20px;top:25px;font-weight:400;box-shadow:0 3px 30px rgb(25 30 35 / 10%);border:1px solid var(--borderColorLight40);background:#fff;word-break:break-word;text-transform:none;&::before{top:-8px;}&::after{border:8px solid #fff;top:-6px;}&::after{border-bottom-style:solid;border-left-color:transparent;border-right-color:transparent;border-top:none;margin-left:-10px;content:\"\";position:absolute;height:0;width:0;line-height:0;left:30px;}}&:hover .sp-tooltiptext,&:focus .sp-tooltiptext,&:active .sp-tooltiptext{visibility:visible;}.sp-tooltip-headings{font-size:18px;font-weight:600;margin-bottom:20px;display:block;}.sp-tooltip-desc{margin-bottom:20px;display:block;border-bottom:1px solid var(--borderColorLight40);padding-bottom:20px;font-size:var(--fontSize);line-height:1.5;}.sp-tooltip-code{font-family:Menlo,Monaco,Andale Mono,Courier New,monospace;display:block;word-break:break-all;color:var(--colorPre);font-size:11px;}}.flex{display:flex;}.inline-flex{display:inline-flex;}.flex-wrap{flex-wrap:wrap;}.items-center{align-items:center;}.justify-content{justify-content:space-evenly;}.mt-0{margin-top:0 !important;}.mt-1{margin-top:0.25rem !important;}.mt-2{margin-top:0.5rem !important;}.mt-3{margin-top:1rem !important;}.mt-4{margin-top:1.5rem !important;}.mt-5{margin-top:3rem !important;}.mt-auto{margin-top:auto !important;}.me-0{margin-right:0 !important;}.me-1{margin-right:0.25rem !important;}.me-2{margin-right:0.5rem !important;}.me-3{margin-right:1rem !important;}.me-4{margin-right:1.5rem !important;}.me-5{margin-right:3rem !important;}.me-auto{margin-right:auto !important;}.mb-0{margin-bottom:0 !important;}.mb-1{margin-bottom:0.25rem !important;}.mb-2{margin-bottom:0.5rem !important;}.mb-3{margin-bottom:1rem !important;}.mb-4{margin-bottom:1.5rem !important;}.mb-5{margin-bottom:3rem !important;}.mb-auto{margin-bottom:auto !important;}.ms-0{margin-left:0 !important;}.ms-1{margin-left:0.25rem !important;}.ms-2{margin-left:0.5rem !important;}.ms-3{margin-left:1rem !important;}.ms-4{margin-left:1.5rem !important;}.ms-5{margin-left:3rem !important;}.ms-auto{margin-left:auto !important;}.w-1\\/2{width:50%;}.w-1\\/5{width:20%;}.w-2\\/5{width:40%;}.w-3\\/5{width:60%;}.w-4\\/5{width:80%;}.w-1\\/4{width:25%;}.w-2\\/4{width:50%;}.w-3\\/4{width:75%;}.w-1\\/12{width:8.3%;}.w-2\\/12{width:16.6%;}.w-3\\/12{width:25%;}.w-4\\/12{width:33%;}.w-5\\/12{width:41.6%;}.w-6\\/12{width:50%;}.w-7\\/12{width:58.3%;}.w-8\\/12{width:66%;}.w-9\\/12{width:75%;}.w-10\\/12{width:83.3%;}.w-11\\/12{width:91.6%;}.w-full{width:100%;}.relative{position:relative;}.absolute{position:absolute;}.form-textarea{font-family:var(--fontFamily);padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow 0.1s linear;color:var(--colorP);border-radius:2px;border:1px solid var(--color);font-size:var(--fontSize);line-height:normal;appearance:none;background:none;}.form-textarea:focus,.form-textarea:active{border-color:var(--backgroundPrimary);box-shadow:0 0 0 1px var(--backgroundPrimary);outline:2px solid transparent;}.seopress-textarea-high-size{height:100px;}.form-input-date{width:100%;font-family:var(--fontFamily);padding:6px 8px;margin:0;box-shadow:0 0 0 transparent;transition:box-shadow 0.1s linear;background:none;color:var(--colorP);border-radius:2px;border:1px solid var(--color);font-size:var(--fontSize);line-height:normal;appearance:none;&:focus,&:active{border-color:var(--backgroundPrimary);box-shadow:0 0 0 1px var(--backgroundPrimary);outline:2px solid transparent;}}@keyframes sp-fade-in-out{0%{opacity:0;bottom:0;visibility:hidden;}25%{opacity:1;bottom:40px;visibility:visible;}75%{opacity:1;visibility:visible;}100%{opacity:0;visibility:hidden;}}@keyframes sp-beacon-toggle{0%{opacity:0;bottom:-20px;visibility:hidden;}100%{opacity:1;bottom:0px;visibility:visible;}}font-size:var(--fontSize);font-family:var(--fontFamily);font-weight:var(--fontWeight);line-height:var(--lineHeight);-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;color:var(--colorP);letter-spacing:inherit;input[type=\"checkbox\"]{font-family:var(--fontFamily);padding:6px 8px;box-shadow:0 0 0 transparent;transition:box-shadow 0.1s linear;border-radius:2px;border:1px solid var(--color);font-size:16px;line-height:normal;border:1px solid var(--colorDark);margin-right:12px;transition:none;border-radius:2px;background:#fff;color:var(--colorDark);clear:none;cursor:pointer;display:inline-block;line-height:0;margin:-1px 4px 0 0 !important;outline:0;padding:0 !important;text-align:center;vertical-align:top;width:20px;height:20px;-webkit-appearance:none;appearance:none;transition:0.1s border-color ease-in-out;}input[type=\"checkbox\"]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--primaryColor);outline:2px solid transparent;}input[type=\"checkbox\"]:checked::before{content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");background:var(--primaryColor);margin:-1px;width:20px;height:20px;left:0;top:0;}h1,h2,h3,h4,h5,h6{display:block;font-weight:600;text-align:left;}h1:not(*):before,h1:before,h2:before,h3:before,h4:before,h5:before,h6:before,h1:after,h2:after,h3:after,h4:after,h5:after,h6:after{content:none;}p{font-family:var(--fontFamily);font-size:var(--fontSize);font-weight:var(--fontWeight);color:var(--colorP);line-height:1.5;margin:1em 0;}a{color:var(--primaryColor);text-decoration:underline;}ul{list-style:none;padding:0;margin:0;}a:hover{text-decoration:underline;}.description{display:block;font-size:12px;color:var(--color);margin:0.5em 0;}.description-alt{padding:1em 0;border-top:1px solid var(--borderColorLight);border-bottom:1px solid var(--borderColorLight);display:flex;}.description-alt svg{vertical-align:middle;align-self:center;fill:#f0b849;flex-shrink:0;margin-right:16px;}.sp-fixed{position:sticky;width:100%;left:0px;bottom:-21px;display:flex;background:#fff;border-top:1px solid var(--borderColorLight);margin-top:20px;padding:15px 0 5px 0;}.resizable{position:relative;}.resizable::after{content:\"\";transition:all 150ms linear;opacity:0;background:var(--backgroundPrimary);position:absolute;top:0;left:0;height:5px;width:100%;}.resizable:hover::after,.resizable:focus::after,.resizable:active::after{opacity:1;}.sp-seo-metabox{position:fixed;left:10%;bottom:0;z-index:100100;background-color:rgb(255,255,255);width:70%;height:400px;box-sizing:border-box;flex-shrink:0;box-shadow:rgb(0 0 0 / 5%) 0px 0px 0px 1px,rgb(0 0 0 / 15%) 0px 5px 30px 0px,rgb(0 0 0 / 5%) 0px 3px 3px 0px;border-radius:4px;border:none;animation-name:sp-beacon-toggle;animation-duration:200ms;animation-iteration-count:1;animation-fill-mode:forwards;max-height:calc(100% - 93px);}.sp-cursor-pointer{cursor:pointer;}@media only screen and (max-width:600px){.sp-seo-metabox{height:auto;overflow-y:auto;}.flex{flex-wrap:wrap;}[class^=\"w-\"]{width:100%;}}.seopress-notice{margin:5px 0 35px 0px;background:rgb(0 124 186 / 10%);border-left:4px solid var(--primaryColor);padding:8px 12px;position:static !important;top:0 !important;left:0 !important;&.is-warning{border-left-color:#f0b849;background:#fef8ee;}pre{background:none !important;}}.seopress-list{margin:0 !important;li::before{content:\"\" !important;}}}@keyframes anim-loading{0%{transform:rotate(0deg);}100%{transform:rotate(360deg);}}.anim-loading-layout{animation-name:anim-loading-layout;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:forwards;}@keyframes anim-loading-layout{0%{opacity:0;}50%{opacity:1;}100%{opacity:0;}}.analysis-score{svg{display:inline-block;height:30px;width:30px;margin:0;border-radius:100%;position:relative;font-weight:600;shape-rendering:geometricprecision;font-size:.5rem;vertical-align:middle;margin-right:15px;circle{stroke-dashoffset:0;transition:stroke-dashoffset 1s linear;stroke:#ccc;stroke-width:2em;}}&.notgood #bar{stroke-dashoffset:101px;stroke:var(--colorWarning);}&.good #bar{stroke-dashoffset:0;stroke:var(--colorSuccess);}}.dashicons{vertical-align:middle;}.sp-dashicons-ok,.sp-dashicons-not{color:#fff;background:var(--colorSuccess);border-radius:50px;margin-right:10px;}.sp-dashicons-not{background:var(--colorAlert);}.seopress-arrow::after{content:\"\f343\";font-family:\"Dashicons\";position:absolute;right:10px;top:calc(50% - 12px);fontSize:14px;}.sp-seo-metabox .accordion__button[aria-expanded=true] .seopress-arrow:after{content:\"\f347\";}.sp-google-preview{margin-left:10px;flex-grow:1;}@media only screen and (max-width:600px){.sp-google-preview{margin-left:0;}}.media-frame-title h1::after,.media-frame-title h1::before,.media-attachments-filter-heading::before,.media-sidebar h2::before{content:none;}.media-router .media-menu-item{text-transform:none;background:inherit;color:inherit;font-weight:normal;letter-spacing:inherit;}.media-modal .delete-attachment,.media-modal .trash-attachment,.media-modal .untrash-attachment{font-size:inherit;text-transform:none;}body.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox,body.block-editor-page.folded #seopress-js-module-seo-metabox .sp-seo-metabox,body.is-fullscreen-mode.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox{max-width:100%;width:100% !important;left:0px;box-shadow:none;border-right:1px solid var(--borderColorLight);", "}body.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox{max-width:calc(100% - 160px);left:160px;", "}body.block-editor-page.folded:not(.is-fullscreen-mode) #seopress-js-module-seo-metabox .sp-seo-metabox{left:36px;max-width:calc(100% - 36px);", "}@media only screen and (max-width:1400px){body:not(.wp-admin) #seopress-js-module-seo-metabox .sp-seo-metabox{width:100%;max-width:100%;min-width:100%;left:0;}}@media only screen and (max-width:782px){body.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox,body.block-editor-page.folded #seopress-js-module-seo-metabox .sp-seo-metabox,body.block-editor-page.auto-fold #seopress-js-module-seo-metabox .sp-seo-metabox,body.is-fullscreen-mode.block-editor-page #seopress-js-module-seo-metabox .sp-seo-metabox,body.block-editor-page.folded:not(.is-fullscreen-mode) #seopress-js-module-seo-metabox .sp-seo-metabox{width:100%;max-width:100%;min-width:100%;left:0;}}"], METABOX_MODULE_NAME, function (_ref) {
42940
  var isSidebarGutenbergOpened = _ref.isSidebarGutenbergOpened;
42941
  return isSidebarGutenbergOpened && "\n max-width: calc(100% - 280px);\n ";
42942
  }, function (_ref2) {
readme.txt CHANGED
@@ -6,7 +6,7 @@ Tags: SEO, XML sitemap, meta title, open graph, content analysis, knowledge grap
6
  Requires at least: 4.7+
7
  Tested up to: 5.8
8
  Requires PHP: 7.0
9
- Stable tag: 5.2.0
10
  License: GPLv2 or later
11
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
12
 
@@ -16,7 +16,7 @@ Boost your SEO with SEOPress, a simple, fast and powerful SEO plugin for WordPre
16
 
17
  SEOPress is a powerful WordPress SEO plugin to optimize your SEO, boost your traffic, improve social sharing, build custom HTML and XML Sitemaps, create optimized breadcrumbs, add schemas / Google Structured data types, manage 301 redirections and so much more.<br>
18
 
19
- ✔ <strong>Universal SEO metabox: edit your SEO metadata from any page builder / theme builder</strong>
20
  ✔ <strong>No advertising, no footprints, white label, in backend AND frontend</strong>
21
  ✔ <strong>Content analysis to help you write content optimized for search engines</strong>
22
  ✔ <strong>Import your post and term metadatas from other plugins in 1 click</strong>
@@ -26,7 +26,7 @@ SEOPress is a powerful WordPress SEO plugin to optimize your SEO, boost your tra
26
 
27
  [youtube https://www.youtube.com/watch?v=FwaJA5MY6sc]
28
 
29
- <a href="https://www.seopress.org/features/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Features</a> | <a href="https://www.seopress.org/support/guides/import-post-terms-metadatas-yoast-seo-seopress/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Migrate</a> | <a href="https://www.seopress.org/pricing/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">PRO</a> | <a href="https://www.seopress.org/integrations/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Integrations</a> | <a href="https://www.seopress.org/support/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Support</a> | <a href="https://www.seopress.org/features/seopress-white-label/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">White Label</a>
30
 
31
  <h3>Why SEOPress is the best WordPress SEO plugin?</h3>
32
 
@@ -34,7 +34,7 @@ SEOPress is a powerful WordPress SEO plugin to optimize your SEO, boost your tra
34
  <li><a href="https://www.seopress.org/seopress-productivity/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Save time</strong></a>: you prefer to work with Excel or Google Spreadsheets? No problem, you can import / export your metadata from CSV files with SEOPress PRO in few clicks!</li>
35
  <li><a href="https://www.seopress.org/pricing/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Save money</strong></a>: SEOPress PRO is available for just $39 / year. Without any sites limit. Yes, you read that right: 1 site or 100 sites, the total price is still $39 / year!</li>
36
  <li><a href="https://www.seopress.org/features/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>All in one SEO plugin</strong></a>: comes with all the features you need to optimize the SEO of your WordPress site. No need to install additional extensions to manage redirects, schemas, XML sitemaps... You reduce the risk of conflicts and maintenance costs. You don't need a special feature? Deactivate it with one click without losing your configuration. Child's play !</li>
37
- <li><strong>Easy AND ready to use</strong>: you doesn't need to know SEO or code to use SEOPress. Most of the parameters are automatically set. And thanks to our installation wizard, configuring SEOPress has never been easier. To go further, we provide many <a href="https://www.seopress.org/blog/how-to/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">free tutorials</a> and <a href="https://www.seopress.org/support/ebooks/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">ebooks to learn SEO</a> in order to better understand how to position your content on search engines.</li>
38
  </ul>
39
 
40
  <h3>SEOPress Free Features</h3>
@@ -46,7 +46,7 @@ SEOPress is a powerful WordPress SEO plugin to optimize your SEO, boost your tra
46
  <li><strong>Facebook & Twitter Social Preview</strong> to see how your post will looks like on social media to increase conversions</li>
47
  <li><strong>Titles</strong> (with <a href="https://www.seopress.org/support/guides/manage-titles-meta-descriptions/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme">dynamic variables</a>: custom fields, terms taxonomie...)</li>
48
  <li><strong>Meta descriptions</strong> (with dynamic variables too)</li>
49
- <li><strong>Open Graph and Twitter Cards</strong> to improve social media sharing (Facebook, LinkedIn, Instagram, Twitter, Pinterest, WhatsApp...)</li>
50
  <li><strong>Google Knowledge Graph</strong></li>
51
  <li><a href="https://www.seopress.org/features/google-analytics/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Google Analytics</strong> and <strong>Matomo</strong></a> with downloads tracking, custom dimensions, ip anonymization, remarketing, demographics and interest reporting, cross-domain tracking...(<a href="https://www.seopress.org/features/seopress-white-label/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">GDPR compatibility</a>)</li>
52
  <li><strong>Custom Canonical URL</strong></li>
@@ -60,13 +60,13 @@ SEOPress is a powerful WordPress SEO plugin to optimize your SEO, boost your tra
60
  <li>Remove ?replytocom to avoid duplicate content</li>
61
  <li>Redirect attachment pages to post parent</li>
62
  <li>Redirect attachment pages to their file URL</li>
63
- <li><strong>Image SEO</strong>: Automatically set the image title / alt / caption / description</li>
64
  <li>Import / Export settings from site to site.</li>
65
- <li><a href="https://www.seopress.org/migrate-to-seopress/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme">Import posts and terms metadata</a> from Yoast SEO, All In One SEO, SEO Framework, Rank Math, SEO Ultimate, WP Meta SEO, Premium SEO Pack, Squirrly and many other SEO plugins</li>
66
  <li>...</li>
67
  </ul>
68
 
69
- <a href="https://www.seopress.org/features/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Check out all SEOPress Free features here</a>
70
 
71
  <h3>SEOPress PRO: to go further with your SEO</h3>
72
 
@@ -94,25 +94,25 @@ SEOPress is a powerful WordPress SEO plugin to optimize your SEO, boost your tra
94
  <li>custom schema</li>
95
  </ol>
96
  <li><strong>Automatic Schemas</strong> with advanced conditions (AND, OR, Post types, taxonomies)</li>
97
- <li><a href="https://www.seopress.org/support/guides/enable-breadcrumbs/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Breadcrumbs</strong></a> optimized with Schema.org, A11Y ready. Elementor users? <a href="https://www.youtube.com/watch?v=ID4xm1UVikc" target="_blank">Try our custom breadcrumbs widget!</a></li>
98
- <li><a href="https://www.seopress.org/features/google-analytics/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Google Analytics Stats in Dashboard</strong></a> to quickly see your metrics without leaving your site</li>
99
- <li><strong>Google Local Business</strong> to boost your local store</li>
100
  <li><strong>Broken link checker (SEOPress BOT)</strong>: scan all your links in content to find errors (eg: 404...)</li>
101
- <li><strong>WooCommerce</strong>: Product Global Identifiers type and Product Global Identifiers fields to WooCommerce metabox for product schema (barcode), disable crawling on cart page, checkout page, customer account pages, add OG Price / OG Currency for better sharing and more</li>
102
  <li><strong>Easy Digital Downloads</strong>: add OG Price / OG Currency, remove EDD meta generator</li>
103
  <li><strong>Dublin Core</strong> meta tags</li>
104
  <li><strong>Custom Breadcrumbs</strong> for single post types / term taxonomy</li>
105
- <li><strong>Google Page Speed Insights</strong> to analyse your site performances</li>
106
- <li><strong>Google Enhanced Ecommerce for WooCommerce</strong>: measure purchases, additions to and removals from shopping carts</li>
107
- <li>Edit your <strong>robots.txt</strong> file from the admin (multisite / multidomain ready)</li>
108
  <li><strong>Google News Sitemap</strong> to get your posts on Google News</li>
109
  <li><strong>404 Monitoring</strong>: Monitor your 404 errors to improve user experience, performances and increase the crawl budget allocated by Google</li>
110
  <li><strong>Redirect 404 to homepage/custom url automatically</strong> with custom status code (301, 302, 307, 410 or 451)</li>
111
  <li>Email notifications on 404</li>
112
- <li><strong>Redirect manager</strong>: create unlimited 301, 302, 307, 410 and 451 redirections. Import / export redirections to CSV or htaccess file.</li>
113
  <li>Import redirections using CSV</li>
114
  <li>Import redirections from Redirections plugin (via a JSON file)</li>
115
- <li>Edit your <strong>htaccess file</strong> from the admin</li>
116
  <li>Easily customize your <strong>RSS feeds</strong></li>
117
  <li>...</li>
118
  </ul>
@@ -142,7 +142,7 @@ We support WooCommerce and Easy Digital Downloads for e-commerce sites.
142
  [youtube https://youtu.be/sf0ocG7vQMM]
143
 
144
 
145
- <h3><a href="https://wordpress.org/plugins/elementor/">Elementor</a> + SEOPress: perfect combo!</h3>
146
  We provide deep integration with Elementor page builder. Directly from Elementor settings, you can:
147
  <ul>
148
  <li>edit your SEO metadata (title, meta description, meta robots)</li>
@@ -156,7 +156,9 @@ We provide deep integration with Elementor page builder. Directly from Elementor
156
 
157
  <h3>Developers will love SEOPress!</h3>
158
 
159
- Hundreds of hooks are available to extend SEOPress. <a href="https://www.seopress.org/support/hooks/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Browse them all here</a>!
 
 
160
 
161
  <h3>Translations</h3>
162
  SEOPress is translated into multiple languages including:
@@ -188,7 +190,7 @@ Help localize SEOPress even further by adding your locale – visit <a href="htt
188
  <h3>SEOPress integrates seamlessly with popular e-commerce, translation, performance and analytics tools.</h3>
189
  <ul>
190
  <li>Classic Editor</li>
191
- <li><a href="https://wordpress.org/support/article/wordpress-editor/">Block Editor</a></li>
192
  <li>WPML</li>
193
  <li>Polylang</li>
194
  <li>MultilingualPress</li>
@@ -207,7 +209,7 @@ Help localize SEOPress even further by adding your locale – visit <a href="htt
207
 
208
  <a href="https://www.seopress.org/integrations/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">All our integrations</a>
209
 
210
- <h3><a href="https://www.seopress.org/migrate-to-seopress/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Import your post and term metadata from other SEO plugins in 1-click</a></h3>
211
  <ul>
212
  <li><a href="https://www.seopress.org/support/guides/import-post-terms-metadatas-yoast-seo-seopress/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Yoast SEO</a></li>
213
  <li><a href="https://www.seopress.org/support/guides/import-post-and-terms-metadatas-from-all-in-one-seo-to-seopress/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">All In One SEO</a></li>
@@ -231,7 +233,7 @@ Help localize SEOPress even further by adding your locale – visit <a href="htt
231
  <li><a href="https://www.seopress.org/account/your-tickets/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Email (PRO only)</a></li>
232
  </ul>
233
 
234
- <h3>Branding guidelines</h3>
235
  SEOPress is a registered trademark of SEOPress SASU. When writing about SEOPress plugin, please make sure to write it correctly.
236
 
237
  SEOPress (correct)
@@ -335,62 +337,57 @@ You're theme is probably using a deprecated function to handle the title. <a hre
335
  12. Schema metabox
336
 
337
  == Changelog ==
338
- = 5.2 <a href="https://www.seopress.org/newsroom/product-news/seopress-5-2/" target="_blank">Read the blog post update</a> =
339
- * NEW Universal SEO metabox now with schemas
340
- * NEW Performance improvement and code factorization
341
- * NEW Import CSV metadata now supports comma and semi-colon as delimiter
342
- * NEW Breadcrumbs: add new options to translate "Page" and "Attachments" from SEO, PRO, Breadcrumbs
343
- * NEW Add "nofollow noopener noreferrer" rel attributes to the comments form link (SEO, Advanced, Advanced tab)
344
- * NEW %%archive_date_month_name%% dynamic variable in meta to output month name in archive page
345
- * NEW 'seopress_get_tag_site_url_value' hook to filter site_url tag in meta / schema (https://www.seopress.org/support/hooks/filter-site_url-tag/)
346
- * NEW 'seopress_sitemaps_html_cpt_name' hook to filter custom post type name in HTML sitemap (https://www.seopress.org/support/hooks/filter-custom-post-type-name-in-html-sitemap/)
347
- * NEW 'seopress_rss_dyn_vars' and 'seopress_rss_dyn_vars_value' hooks to filter dynamic variables in RSS feeds (https://www.seopress.org/support/hooks/add-your-custom-global-dynamic-variables-for-rss-feeds/)
348
- * INFO Display Blog page for date archive in Breadcrumbs
349
- * INFO Add new HTML class to wrap post and product categories in HTML sitemap
350
- * INFO Remove author meta in source code
351
- * INFO Remove WooCommerce products with visibility "hidden" from XML sitemaps
 
 
 
 
 
 
 
 
 
 
 
 
352
  * INFO Update updater
353
- * INFO Author URL missing for automatic schemas
354
- * INFO Check user capabilities before displaying automatic redirection suggestions notices
355
- * INFO Add image field for HowToStep (How-to schema)
356
- * INFO Remove Action Scheduler
357
- * FIX Remove /product-category/ with paginated archive pages (flush your permalinks if you're using this option)
358
- * FIX RSS feeds: display content before / after each post (excerpt of full text)
359
- * FIX Wrong quick tags for global meta description template
360
- * FIX Export Redirections to CSV file
361
- * FIX Missing tooltips from SEO universal metabox
362
- * FIX Green circle of the SEO score in the list of posts
363
- * FIX JS Arrow state for each analysis
364
- * FIX Warning Opening Hours (Local Business schema)
365
- * FIX Warning in Schemas post type list if a taxonomy no longer exists
366
- * FIX Page Speed full report button link
367
- * FIX WPML / Polylang config XML file
368
- * FIX White label for SEO dashboard and Wizard
369
- * FIX CSS conflicts with default WP theme for Universal SEO metabox
370
- * FIX Trying to get property 'name' / 'term_id' of non-object in HTML sitemap
371
- * FIX Uncaught TypeError: array_sum() in /wp-seopress-pro/inc/admin/dashboard-google-analytics.php:224
372
- * FIX Warning: Undefined array key "ui_theme" /inc/admin/page-builders/elementor/inc/admin/class-document-settings-section.php on line 37
373
- * FIX WPML: Fatal error when adding 'og:locale:alternate' link to non-existent post (thanks @vdwijngaert for reporting this)
374
- * FIX Redirections: Filter by Count
375
- = 5.1 <a href="https://www.seopress.org/newsroom/product-news/seopress-5-1/" target="_blank">Read the blog post update</a> =
376
- * NEW Internal linking suggestions 🎉🎉🎉 (PRO)
377
- * NEW Video and News sitemaps added to universal SEO metabox
378
- * NEW 'seopress_automatic_redirect_cpt' hook to filter post types to watch for automatic redirection suggestions (https://www.seopress.org/support/hooks/filter-post-types-to-watch-for-automatic-redirections/)
379
- * NEW 'seopress_beacon_svg' hook to filter beacon SVG icon for universal SEO metabox
380
- * INFO Update French language
381
- * INFO Add author URL in schema
382
- * FIX Broken link checker (go to SEO, BOT, Settings and select post types to scan)
383
- * FIX Compatibility issue with Slider PRO
384
- * FIX FAQ block: duplicated image and incorrect alt text attribute
385
- * FIX Fatal error is_plugin_active in rare cases
386
- * FIX Local business schema manual type (automatic)
387
  * FIX i18n
388
- * FIX Missing information from Social Preview
389
- * FIX CSS on UI
390
- * FIX Conflict with Post Types Order plugin
391
- * FIX Global social image buttons for each post types
392
- * FIX Use published date in xml sitemaps if modified_date is older
393
- * FIX Universal SEO metabox with Block Editor
394
- * FIX Words counter / keyword density with Oxygen Builder
395
 
396
  <a href="https://www.seopress.org/changelog/" target="_blank">View our complete changelog</a>
6
  Requires at least: 4.7+
7
  Tested up to: 5.8
8
  Requires PHP: 7.0
9
+ Stable tag: 5.3.0
10
  License: GPLv2 or later
11
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
12
 
16
 
17
  SEOPress is a powerful WordPress SEO plugin to optimize your SEO, boost your traffic, improve social sharing, build custom HTML and XML Sitemaps, create optimized breadcrumbs, add schemas / Google Structured data types, manage 301 redirections and so much more.<br>
18
 
19
+ ✔ <strong><a href="https://www.seopress.org/features/page-builders-integration/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Universal SEO metabox</a>: edit your SEO metadata from any page builder / theme builder</strong>
20
  ✔ <strong>No advertising, no footprints, white label, in backend AND frontend</strong>
21
  ✔ <strong>Content analysis to help you write content optimized for search engines</strong>
22
  ✔ <strong>Import your post and term metadatas from other plugins in 1 click</strong>
26
 
27
  [youtube https://www.youtube.com/watch?v=FwaJA5MY6sc]
28
 
29
+ <a href="https://www.seopress.org/features/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Features</a> | <a href="https://www.seopress.org/solutions/migrate-from/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Migrate</a> | <a href="https://www.seopress.org/wordpress-seo-plugins/pro/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">PRO</a> | <a href="https://www.seopress.org/integrations/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Integrations</a> | <a href="https://www.seopress.org/support/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Support</a> | <a href="https://www.seopress.org/features/seopress-white-label/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">White Label</a>
30
 
31
  <h3>Why SEOPress is the best WordPress SEO plugin?</h3>
32
 
34
  <li><a href="https://www.seopress.org/seopress-productivity/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Save time</strong></a>: you prefer to work with Excel or Google Spreadsheets? No problem, you can import / export your metadata from CSV files with SEOPress PRO in few clicks!</li>
35
  <li><a href="https://www.seopress.org/pricing/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Save money</strong></a>: SEOPress PRO is available for just $39 / year. Without any sites limit. Yes, you read that right: 1 site or 100 sites, the total price is still $39 / year!</li>
36
  <li><a href="https://www.seopress.org/features/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>All in one SEO plugin</strong></a>: comes with all the features you need to optimize the SEO of your WordPress site. No need to install additional extensions to manage redirects, schemas, XML sitemaps... You reduce the risk of conflicts and maintenance costs. You don't need a special feature? Deactivate it with one click without losing your configuration. Child's play !</li>
37
+ <li><strong>Easy AND ready to use</strong>: you doesn't need to know SEO or code to use SEOPress. Most of the parameters are automatically set. And thanks to our installation wizard, configuring SEOPress has never been easier. To go further, we provide many <a href="https://www.seopress.org/support/tutorials/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">free tutorials</a> and <a href="https://www.seopress.org/support/ebooks/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">ebooks to learn SEO</a> in order to better understand how to position your content on search engines.</li>
38
  </ul>
39
 
40
  <h3>SEOPress Free Features</h3>
46
  <li><strong>Facebook & Twitter Social Preview</strong> to see how your post will looks like on social media to increase conversions</li>
47
  <li><strong>Titles</strong> (with <a href="https://www.seopress.org/support/guides/manage-titles-meta-descriptions/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme">dynamic variables</a>: custom fields, terms taxonomie...)</li>
48
  <li><strong>Meta descriptions</strong> (with dynamic variables too)</li>
49
+ <li><a href="https://www.seopress.org/features/social-media/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Open Graph and Twitter Cards</strong></a> to improve social media sharing (Facebook, LinkedIn, Instagram, Twitter, Pinterest, WhatsApp...)</li>
50
  <li><strong>Google Knowledge Graph</strong></li>
51
  <li><a href="https://www.seopress.org/features/google-analytics/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme"><strong>Google Analytics</strong> and <strong>Matomo</strong></a> with downloads tracking, custom dimensions, ip anonymization, remarketing, demographics and interest reporting, cross-domain tracking...(<a href="https://www.seopress.org/features/seopress-white-label/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">GDPR compatibility</a>)</li>
52
  <li><strong>Custom Canonical URL</strong></li>
60
  <li>Remove ?replytocom to avoid duplicate content</li>
61
  <li>Redirect attachment pages to post parent</li>
62
  <li>Redirect attachment pages to their file URL</li>
63
+ <li><a href="https://www.seopress.org/features/image-seo/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank"><strong>Image SEO</strong></a>: Automatically set the image title / alt / caption / description</li>
64
  <li>Import / Export settings from site to site.</li>
65
+ <li><a href="https://www.seopress.org/solutions/migrate-from/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme">Import posts and terms metadata</a> from Yoast SEO, All In One SEO, SEO Framework, Rank Math, SEO Ultimate, WP Meta SEO, Premium SEO Pack, Squirrly and many other SEO plugins</li>
66
  <li>...</li>
67
  </ul>
68
 
69
+ <a href="https://www.seopress.org/wordpress-seo-plugins/free/features/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Check out all SEOPress Free features here</a>
70
 
71
  <h3>SEOPress PRO: to go further with your SEO</h3>
72
 
94
  <li>custom schema</li>
95
  </ol>
96
  <li><strong>Automatic Schemas</strong> with advanced conditions (AND, OR, Post types, taxonomies)</li>
97
+ <li><a href="https://www.seopress.org/features/breadcrumbs/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank"><strong>Breadcrumbs</strong></a> optimized with Schema.org, A11Y ready. Elementor users? <a href="https://www.youtube.com/watch?v=ID4xm1UVikc" target="_blank">Try our custom breadcrumbs widget!</a></li>
98
+ <li><a href="https://www.seopress.org/features/google-analytics/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank"><strong>Google Analytics Stats in Dashboard</strong></a> to quickly see your metrics without leaving your site</li>
99
+ <li><a href="https://www.seopress.org/features/local-seo/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank"><strong>Google Local Business</strong></a> to boost your local store</li>
100
  <li><strong>Broken link checker (SEOPress BOT)</strong>: scan all your links in content to find errors (eg: 404...)</li>
101
+ <li><a href="https://www.seopress.org/features/woocommerce-seo/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank"><strong>WooCommerce</strong></a>: Product Global Identifiers type and Product Global Identifiers fields to WooCommerce metabox for product schema (barcode), disable crawling on cart page, checkout page, customer account pages, add OG Price / OG Currency for better sharing and more</li>
102
  <li><strong>Easy Digital Downloads</strong>: add OG Price / OG Currency, remove EDD meta generator</li>
103
  <li><strong>Dublin Core</strong> meta tags</li>
104
  <li><strong>Custom Breadcrumbs</strong> for single post types / term taxonomy</li>
105
+ <li><strong>Google Page Speed Insights</strong> to analyse your site performances on Mobile / Desktop + your Core Web Vitals</li>
106
+ <li><a href="https://www.seopress.org/features/google-analytics/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank"><strong>Google Enhanced Ecommerce for WooCommerce</strong></a>: measure purchases, additions to and removals from shopping carts</li>
107
+ <li><a href="https://www.seopress.org/features/htaccess-robots-txt/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Edit your <strong>robots.txt</strong></a> file from the admin (multisite / multidomain ready)</li>
108
  <li><strong>Google News Sitemap</strong> to get your posts on Google News</li>
109
  <li><strong>404 Monitoring</strong>: Monitor your 404 errors to improve user experience, performances and increase the crawl budget allocated by Google</li>
110
  <li><strong>Redirect 404 to homepage/custom url automatically</strong> with custom status code (301, 302, 307, 410 or 451)</li>
111
  <li>Email notifications on 404</li>
112
+ <li><a href="https://www.seopress.org/features/301-redirects/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank"><strong>Redirect manager</strong></a>: create unlimited 301, 302, 307, 410 and 451 redirections. Regular expressions supported. Import / export redirections to CSV or htaccess file.</li>
113
  <li>Import redirections using CSV</li>
114
  <li>Import redirections from Redirections plugin (via a JSON file)</li>
115
+ <li><a href="https://www.seopress.org/features/htaccess-robots-txt/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Edit your <strong>htaccess file</strong></a> from the admin</li>
116
  <li>Easily customize your <strong>RSS feeds</strong></li>
117
  <li>...</li>
118
  </ul>
142
  [youtube https://youtu.be/sf0ocG7vQMM]
143
 
144
 
145
+ <h3>Elementor + SEOPress: perfect combo!</h3>
146
  We provide deep integration with Elementor page builder. Directly from Elementor settings, you can:
147
  <ul>
148
  <li>edit your SEO metadata (title, meta description, meta robots)</li>
156
 
157
  <h3>Developers will love SEOPress!</h3>
158
 
159
+ Hundreds of hooks are available to extend SEOPress. <a href="https://www.seopress.org/support/hooks/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Browse them all here</a>!
160
+
161
+ Plus we have a <a href="https://www.seopress.org/support/guides/get-started-with-the-seopress-rest-api/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme">REST API</a> to build static websites.
162
 
163
  <h3>Translations</h3>
164
  SEOPress is translated into multiple languages including:
190
  <h3>SEOPress integrates seamlessly with popular e-commerce, translation, performance and analytics tools.</h3>
191
  <ul>
192
  <li>Classic Editor</li>
193
+ <li>Block Editor</li>
194
  <li>WPML</li>
195
  <li>Polylang</li>
196
  <li>MultilingualPress</li>
209
 
210
  <a href="https://www.seopress.org/integrations/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">All our integrations</a>
211
 
212
+ <h3><a href="https://www.seopress.org/solutions/migrate-from/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Import your post and term metadata from other SEO plugins in 1-click</a></h3>
213
  <ul>
214
  <li><a href="https://www.seopress.org/support/guides/import-post-terms-metadatas-yoast-seo-seopress/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Yoast SEO</a></li>
215
  <li><a href="https://www.seopress.org/support/guides/import-post-and-terms-metadatas-from-all-in-one-seo-to-seopress/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">All In One SEO</a></li>
233
  <li><a href="https://www.seopress.org/account/your-tickets/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Email (PRO only)</a></li>
234
  </ul>
235
 
236
+ <h3><a href="https://www.seopress.org/about/brand-assets/?utm_source=w.org&utm_campaign=seopress&utm_medium=readme" target="_blank">Branding guidelines</a></h3>
237
  SEOPress is a registered trademark of SEOPress SASU. When writing about SEOPress plugin, please make sure to write it correctly.
238
 
239
  SEOPress (correct)
337
  12. Schema metabox
338
 
339
  == Changelog ==
340
+ = 5.3 <a href="https://www.seopress.org/newsroom/product-news/seopress-5-3/" target="_blank">Read the blog post update</a> =
341
+ * NEW Regular expressions for redirects (PRO)
342
+ * NEW Autocomplete for Redirections (PRO)
343
+ * NEW Conditions for Redirections: if user logged in, logged out, both (PRO)
344
+ * NEW Page Speed Insights redesign, now with Core Web Vitals score, Desktop + Mobile scores, Save as PDF, CRON (PRO)
345
+ * NEW Exclude WPML hidden languages from XML sitemaps (post, page, post type and term taxonomy)
346
+ * NEW Exclude Polylang PRO hidden languages from XML sitemaps (post, page, post type and term taxonomy)
347
+ * NEW Accordion for SEOPress FAQ block (PRO)
348
+ * NEW Ping Google and Bing daily automatically for XML Sitemaps
349
+ * NEW Drag and drop for SEO dashboard cards
350
+ * NEW Notification if a physical robots.txt file already exists
351
+ * NEW Notification if your site has disallow all in robots.txt
352
+ * NEW Autodetect WooCommerce fields for automatic product schema on creation
353
+ * NEW 'seopress_sitemaps_xsl_css' hook to filter XML sitemaps CSS (props @edwinsiebel - https://www.seopress.org/support/hooks/filter-css-of-xsl-sitemaps/)
354
+ * NEW 'seopress_sitemaps_xsl' hook to filter XSL sitemaps (props @edwinsiebel - https://www.seopress.org/support/hooks/filter-xsl-sitemap/)
355
+ * NEW 'seopress_before_redirect' action hook to run custom code before the redirection (https://www.seopress.org/support/hooks/add-action-before-redirect/)
356
+ * NEW 'seopress_sitemaps_single_url' hook to filter each URL fron single xml sitemaps (https://www.seopress.org/support/hooks/filter-the-urls-of-each-item-of-a-singular-xml-sitemap/)
357
+ * NEW 'seopress_sitemaps_term_single_url' hook to filter each URL fron term xml sitemaps (https://www.seopress.org/support/hooks/filter-the-urls-of-each-item-of-a-taxonomy-xml-sitemap/)
358
+ * NEW 'seopress_sitemaps_xml_ping_url' hook to filter xml sitemaps URL sent via the ping (https://www.seopress.org/support/hooks/filter-index-xml-sitemap-url-sent-to-google/)
359
+ * NEW 'seopress_sitemaps_xml_ping_args' hook to filter xml sitemaps args for the ping (https://www.seopress.org/support/hooks/filter-the-arguments-of-the-ping-sitemap-query-for-google/)
360
+ * NEW 'seopress_faq_block_inline_css' hook to filter inline CSS for FAQ block (https://www.seopress.org/support/hooks/disable-seopress-faq-block-inline-css/)
361
+ * NEW 'seopress_faq_block_html' hook to filter the HTML of our FAQ block (https://www.seopress.org/support/hooks/filter-block-faq-html-block-editor/)
362
+ * INFO Redirect sitemap_index.xml, wp-sitemap.xml to sitemaps.xml to avoid resubmit sitemaps in Google Search Console
363
+ * INFO Author subtype for schemas will now use the website field first, else the author archive URL
364
+ * INFO Add GTIN12 to product global Identifiers type (PRO)
365
+ * INFO Remove nofollow links from comments area to content analysis
366
  * INFO Update updater
367
+ * INFO Edit your social images (Facebook and Twitter) by clicking on the preview
368
+ * INFO Display 100 entries in Redirections post type
369
+ * INFO Knowledge Graph is now outputted on homepage only
370
+ * INFO Improve hyphenation in Google Snippet Preview
371
+ * INFO Disabling RSS feeds will redirect them to homepage if requested
372
+ * FIX Exclude custom canonical URLs from xml sitemaps
373
+ * FIX Product price amount OG tag
374
+ * FIX Temporary fix to remove Add to cart GA event for archive page / related products if Elementor PRO is enabled to prevent a conflict
375
+ * FIX Duplicated queries seopress_get_page_by_title()
376
+ * FIX Publisher logo
377
+ * FIX News xml sitemap with "&" in Publication Name field
378
+ * FIX Documentation panel for Insights
379
+ * FIX Author URL in schema (automatic and manual)
380
+ * FIX Disable Orgnization / Person schemas from Knowledge Graph if Social feature is set to OFF
381
+ * FIX "seopress_rich_snippets_publisher_logo" missing for wpml-config.xml file (WPML and Polylang users)
382
+ * FIX Publisher logo Width and Height (it might be necessary to reupload it from SEO, PRO, Structured Data Types)
383
+ * FIX Custom Shop page breadcrumbs
384
+ * FIX Help link for Google Ads option
385
+ * FIX Universal SEO metabox error with singular WC product in frontend
386
+ * FIX Google Analytics dashboard widget configuration settings
387
+ * FIX Conflict with Thrive builder
388
+ * FIX Conflit with Remove /category/ in URL with Events Calendar plugin
389
+ * FIX Some CSS
390
+ * FIX CRON tasks
 
 
 
 
 
 
 
 
 
 
391
  * FIX i18n
 
 
 
 
 
 
 
392
 
393
  <a href="https://www.seopress.org/changelog/" target="_blank">View our complete changelog</a>
seopress-functions.php CHANGED
@@ -60,34 +60,6 @@ if ( ! function_exists('array_key_last')) {
60
  * @return (array) $wp_post_types
61
  */
62
  function seopress_get_post_types() {
63
- if ( ! function_exists('seopress_get_service')) {
64
- global $wp_post_types;
65
-
66
- $args = [
67
- 'show_ui' => true,
68
- 'public' => true,
69
- ];
70
-
71
- $output = 'objects'; // names or objects, note names is the default
72
- $operator = 'and'; // 'and' or 'or'
73
-
74
- $post_types = get_post_types($args, $output, $operator);
75
- unset(
76
- $post_types['attachment'],
77
- $post_types['seopress_rankings'],
78
- $post_types['seopress_backlinks'],
79
- $post_types['seopress_404'],
80
- $post_types['elementor_library'],
81
- $post_types['customer_discount'],
82
- $post_types['cuar_private_file'],
83
- $post_types['cuar_private_page'],
84
- $post_types['ct_template']
85
- );
86
- $post_types = apply_filters('seopress_post_types', $post_types);
87
-
88
- return $post_types;
89
- }
90
-
91
  return seopress_get_service('WordPressData')->getPostTypes();
92
  }
93
 
@@ -309,7 +281,7 @@ function seopress_get_empty_templates($type, $metadata, $notice = true) {
309
  $list = '';
310
 
311
  if ('cpt' === $type) {
312
- $templates = seopress_get_post_types();
313
  $notice_i18n = __('Custom Post Types', 'wp-seopress');
314
  }
315
  if ('tax' === $type) {
@@ -763,3 +735,38 @@ function seopress_btn_secondary_classes() {
763
 
764
  return $btn_classes_secondary;
765
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  * @return (array) $wp_post_types
61
  */
62
  function seopress_get_post_types() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  return seopress_get_service('WordPressData')->getPostTypes();
64
  }
65
 
281
  $list = '';
282
 
283
  if ('cpt' === $type) {
284
+ $templates = $postTypes = seopress_get_service('WordPressData')->getPostTypes();
285
  $notice_i18n = __('Custom Post Types', 'wp-seopress');
286
  }
287
  if ('tax' === $type) {
735
 
736
  return $btn_classes_secondary;
737
  }
738
+
739
+ /*
740
+ * Global noindex from SEO, Titles settings
741
+ * @since 4.0
742
+ * @param string $feature
743
+ * @return string 1 if true
744
+ * @author Benjamin
745
+ */
746
+ if ( ! function_exists('seopress_global_noindex_option')) {
747
+ function seopress_global_noindex_option() {
748
+ $seopress_titles_noindex_option = get_option('seopress_titles_option_name');
749
+ if ( ! empty($seopress_titles_noindex_option)) {
750
+ foreach ($seopress_titles_noindex_option as $key => $seopress_titles_noindex_value) {
751
+ $options[$key] = $seopress_titles_noindex_value;
752
+ }
753
+ if (isset($seopress_titles_noindex_option['seopress_titles_noindex'])) {
754
+ return $seopress_titles_noindex_option['seopress_titles_noindex'];
755
+ }
756
+ }
757
+ }
758
+ }
759
+
760
+ /*
761
+ * Disable Add to cart GA tracking code on archive page / related products for Elementor PRO to avoid a JS conflict
762
+ * @since 5.3
763
+ * @return empty string
764
+ * @author Benjamin
765
+ */
766
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
767
+ if (is_plugin_active('elementor-pro/elementor-pro.php')) {
768
+ add_filter('seopress_gtag_ec_add_to_cart_archive_ev', 'sp_elementor_gtag_ec_add_to_cart_archive_ev');
769
+ function sp_elementor_gtag_ec_add_to_cart_archive_ev($js) {
770
+ return '';
771
+ }
772
+ }
seopress.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: SEOPress
4
  Plugin URI: https://www.seopress.org/
5
  Description: One of the best SEO plugins for WordPress.
6
  Author: SEOPress
7
- Version: 5.2.0
8
  Author URI: https://www.seopress.org/
9
  License: GPLv2
10
  Text Domain: wp-seopress
@@ -32,13 +32,24 @@ if ( ! function_exists('add_action')) {
32
  echo 'Please don&rsquo;t call the plugin directly. Thanks :)';
33
  exit;
34
  }
35
-
 
 
 
 
 
 
 
 
36
  ///////////////////////////////////////////////////////////////////////////////////////////////////
37
  //Hooks activation
38
  ///////////////////////////////////////////////////////////////////////////////////////////////////
39
  function seopress_activation() {
40
  add_option('seopress_activated', 'yes');
41
  flush_rewrite_rules(false);
 
 
 
42
  do_action('seopress_activation');
43
  }
44
  register_activation_hook(__FILE__, 'seopress_activation');
@@ -48,6 +59,10 @@ function seopress_deactivation() {
48
 
49
  delete_option('seopress_activated');
50
  flush_rewrite_rules(false);
 
 
 
 
51
  do_action('seopress_deactivation');
52
  }
53
  register_deactivation_hook(__FILE__, 'seopress_deactivation');
@@ -55,7 +70,7 @@ register_deactivation_hook(__FILE__, 'seopress_deactivation');
55
  ///////////////////////////////////////////////////////////////////////////////////////////////////
56
  //Define
57
  ///////////////////////////////////////////////////////////////////////////////////////////////////
58
- define('SEOPRESS_VERSION', '5.2.0');
59
  define('SEOPRESS_AUTHOR', 'Benjamin Denis');
60
  define('SEOPRESS_PLUGIN_DIR_PATH', plugin_dir_path(__FILE__));
61
  define('SEOPRESS_PLUGIN_DIR_URL', plugin_dir_url(__FILE__));
@@ -74,6 +89,7 @@ use SEOPress\Core\Kernel;
74
  if (file_exists(__DIR__ . '/vendor/autoload.php')) {
75
  require_once __DIR__ . '/vendor/autoload.php';
76
  require_once __DIR__ . '/seopress-functions.php';
 
77
 
78
  Kernel::execute([
79
  'file' => __FILE__,
@@ -118,6 +134,10 @@ function seopress_titles_archive_titles_option() {
118
  //SEOPRESS INIT = Admin + Core + API + Translation
119
  ///////////////////////////////////////////////////////////////////////////////////////////////////
120
  function seopress_init($hook) {
 
 
 
 
121
  load_plugin_textdomain('wp-seopress', false, dirname(plugin_basename(__FILE__)) . '/languages/');
122
 
123
  global $pagenow;
@@ -204,18 +224,24 @@ function seopress_add_admin_options_scripts($hook) {
204
 
205
  //Toggle / Notices JS
206
  $_pages = [
207
- 'seopress-option' => true,
208
- 'seopress-network-option' => true,
209
- 'seopress-titles' => true,
210
- 'seopress-xml-sitemap' => true,
211
- 'seopress-social' => true,
212
- 'seopress-google-analytics' => true,
213
- 'seopress-pro-page' => true,
214
- 'seopress-advanced' => true,
215
- 'seopress-import-export' => true,
 
 
 
 
 
 
216
  ];
217
  if (isset($_pages[$_GET['page']])) {
218
- wp_enqueue_script('seopress-toggle-ajax', plugins_url('assets/js/seopress-dashboard' . $prefix . '.js', __FILE__), ['jquery'], SEOPRESS_VERSION, true);
219
 
220
  //Features
221
  $seopress_toggle_features = [
@@ -224,6 +250,13 @@ function seopress_add_admin_options_scripts($hook) {
224
  'i18n' => __('has been successfully updated!', 'wp-seopress'),
225
  ];
226
  wp_localize_script('seopress-toggle-ajax', 'seopressAjaxToggleFeatures', $seopress_toggle_features);
 
 
 
 
 
 
 
227
  }
228
  unset($_pages);
229
 
@@ -414,6 +447,10 @@ function seopress_admin_body_class($classes) {
414
  'seopress-pro-page' => true,
415
  'seopress-bot-batch' => true,
416
  'seopress-license' => true,
 
 
 
 
417
  ];
418
  if (isset($_pages[$_GET['page']])) {
419
  $classes .= ' seopress-styles ';
4
  Plugin URI: https://www.seopress.org/
5
  Description: One of the best SEO plugins for WordPress.
6
  Author: SEOPress
7
+ Version: 5.3.0
8
  Author URI: https://www.seopress.org/
9
  License: GPLv2
10
  Text Domain: wp-seopress
32
  echo 'Please don&rsquo;t call the plugin directly. Thanks :)';
33
  exit;
34
  }
35
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
36
+ //CRON
37
+ ///////////////////////////////////////////////////////////////////////////////////////////////////
38
+ function seopress_cron() {
39
+ //CRON - Ping Google for XML Sitemaps
40
+ if ( ! wp_next_scheduled('seopress_xml_sitemaps_ping_cron')) {
41
+ wp_schedule_event(time(), 'daily', 'seopress_xml_sitemaps_ping_cron');
42
+ }
43
+ }
44
  ///////////////////////////////////////////////////////////////////////////////////////////////////
45
  //Hooks activation
46
  ///////////////////////////////////////////////////////////////////////////////////////////////////
47
  function seopress_activation() {
48
  add_option('seopress_activated', 'yes');
49
  flush_rewrite_rules(false);
50
+
51
+ seopress_cron();
52
+
53
  do_action('seopress_activation');
54
  }
55
  register_activation_hook(__FILE__, 'seopress_activation');
59
 
60
  delete_option('seopress_activated');
61
  flush_rewrite_rules(false);
62
+
63
+ //Remove our CRON
64
+ wp_clear_scheduled_hook('seopress_xml_sitemaps_ping_cron');
65
+
66
  do_action('seopress_deactivation');
67
  }
68
  register_deactivation_hook(__FILE__, 'seopress_deactivation');
70
  ///////////////////////////////////////////////////////////////////////////////////////////////////
71
  //Define
72
  ///////////////////////////////////////////////////////////////////////////////////////////////////
73
+ define('SEOPRESS_VERSION', '5.3.0');
74
  define('SEOPRESS_AUTHOR', 'Benjamin Denis');
75
  define('SEOPRESS_PLUGIN_DIR_PATH', plugin_dir_path(__FILE__));
76
  define('SEOPRESS_PLUGIN_DIR_URL', plugin_dir_url(__FILE__));
89
  if (file_exists(__DIR__ . '/vendor/autoload.php')) {
90
  require_once __DIR__ . '/vendor/autoload.php';
91
  require_once __DIR__ . '/seopress-functions.php';
92
+ require_once __DIR__ . '/inc/admin/cron.php';
93
 
94
  Kernel::execute([
95
  'file' => __FILE__,
134
  //SEOPRESS INIT = Admin + Core + API + Translation
135
  ///////////////////////////////////////////////////////////////////////////////////////////////////
136
  function seopress_init($hook) {
137
+ //CRON
138
+ seopress_cron();
139
+
140
+ //i18n
141
  load_plugin_textdomain('wp-seopress', false, dirname(plugin_basename(__FILE__)) . '/languages/');
142
 
143
  global $pagenow;
224
 
225
  //Toggle / Notices JS
226
  $_pages = [
227
+ 'seopress-option' => true,
228
+ 'seopress-network-option' => true,
229
+ 'seopress-titles' => true,
230
+ 'seopress-xml-sitemap' => true,
231
+ 'seopress-social' => true,
232
+ 'seopress-google-analytics' => true,
233
+ 'seopress-pro-page' => true,
234
+ 'seopress-advanced' => true,
235
+ 'seopress-import-export' => true,
236
+ 'seopress-bot-batch' => true,
237
+ 'seopress-license' => true,
238
+ 'seopress-insights' => true,
239
+ 'seopress-insights-rankings' => true,
240
+ 'seopress-insights-backlinks' => true,
241
+ 'seopress-insights-trends' => true,
242
  ];
243
  if (isset($_pages[$_GET['page']])) {
244
+ wp_enqueue_script('seopress-toggle-ajax', plugins_url('assets/js/seopress-dashboard' . $prefix . '.js', __FILE__), ['jquery', 'jquery-ui-sortable'], SEOPRESS_VERSION, true);
245
 
246
  //Features
247
  $seopress_toggle_features = [
250
  'i18n' => __('has been successfully updated!', 'wp-seopress'),
251
  ];
252
  wp_localize_script('seopress-toggle-ajax', 'seopressAjaxToggleFeatures', $seopress_toggle_features);
253
+
254
+ //Drag and drop
255
+ $seopress_dnd_features = [
256
+ 'seopress_nonce' => wp_create_nonce('seopress_dnd_features_nonce'),
257
+ 'seopress_dnd_features' => admin_url('admin-ajax.php'),
258
+ ];
259
+ wp_localize_script('seopress-toggle-ajax', 'seopressAjaxDndFeatures', $seopress_dnd_features);
260
  }
261
  unset($_pages);
262
 
447
  'seopress-pro-page' => true,
448
  'seopress-bot-batch' => true,
449
  'seopress-license' => true,
450
+ 'seopress-insights' => true,
451
+ 'seopress-insights-rankings' => true,
452
+ 'seopress-insights-backlinks' => true,
453
+ 'seopress-insights-trends' => true,
454
  ];
455
  if (isset($_pages[$_GET['page']])) {
456
  $classes .= ' seopress-styles ';
src/Actions/Api/Metas/RedirectionSettings.php CHANGED
@@ -102,7 +102,7 @@ class RedirectionSettings implements ExecuteHooks {
102
 
103
  $data = [];
104
  foreach ($metas as $key => $value) {
105
- if ($value['use_default']) {
106
  $data[] = array_merge($value, [
107
  'can_modify' => false,
108
  'value' => $value['default'],
102
 
103
  $data = [];
104
  foreach ($metas as $key => $value) {
105
+ if (isset($value['use_default']) && $value['use_default']) {
106
  $data[] = array_merge($value, [
107
  'can_modify' => false,
108
  'value' => $value['default'],
src/Actions/Api/Metas/RobotSettings.php CHANGED
@@ -106,7 +106,7 @@ class RobotSettings implements ExecuteHooks
106
 
107
  $data = [];
108
  foreach ($metas as $key => $value) {
109
- if ($value['use_default']) {
110
  $data[] = array_merge($value, [
111
  'can_modify' => false,
112
  'value' => $value['default'],
106
 
107
  $data = [];
108
  foreach ($metas as $key => $value) {
109
+ if (isset($value['use_default']) && $value['use_default']) {
110
  $data[] = array_merge($value, [
111
  'can_modify' => false,
112
  'value' => $value['default'],
src/Actions/Api/Metas/SocialSettings.php CHANGED
@@ -102,7 +102,7 @@ class SocialSettings implements ExecuteHooks {
102
 
103
  $data = [];
104
  foreach ($metas as $key => $value) {
105
- if ($value['use_default']) {
106
  $data[] = array_merge($value, [
107
  'can_modify' => false,
108
  'value' => $value['default'],
102
 
103
  $data = [];
104
  foreach ($metas as $key => $value) {
105
+ if (isset($value['use_default']) && $value['use_default']) {
106
  $data[] = array_merge($value, [
107
  'can_modify' => false,
108
  'value' => $value['default'],
src/Actions/Api/SearchUrl.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SEOPress\Actions\Api;
4
+
5
+ if (! defined('ABSPATH')) {
6
+ exit;
7
+ }
8
+
9
+ use SEOPress\Core\Hooks\ExecuteHooks;
10
+ use SEOPress\ManualHooks\ApiHeader;
11
+
12
+ class SearchUrl implements ExecuteHooks
13
+ {
14
+ public function hooks()
15
+ {
16
+ add_action('rest_api_init', [$this, 'register']);
17
+ }
18
+
19
+ /**
20
+ *
21
+ * @return void
22
+ */
23
+ public function register()
24
+ {
25
+ register_rest_route('seopress/v1', '/search-url', [
26
+ 'methods' => 'GET',
27
+ 'callback' => [$this, 'process'],
28
+ 'permission_callback' => '__return_true',
29
+ ]);
30
+ }
31
+
32
+ public function process(\WP_REST_Request $request)
33
+ {
34
+
35
+ $url = $request->get_param('url');
36
+
37
+ $data = seopress_get_service('SearchUrl')->searchByPostName($url);
38
+
39
+ return new \WP_REST_Response($data);
40
+ }
41
+ }
src/Actions/Front/Schemas/PrintHeadJsonSchema.php CHANGED
@@ -18,6 +18,26 @@ class PrintHeadJsonSchema implements ExecuteHooksFrontend {
18
  }
19
 
20
  public function render() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  if ('none' === seopress_get_service('SocialOption')->getSocialKnowledgeType()) {
22
  return;
23
  }
18
  }
19
 
20
  public function render() {
21
+ /**
22
+ * Check if Social toggle is ON
23
+ *
24
+ * @since 5.3
25
+ * @author Benjamin
26
+ */
27
+ if (seopress_get_toggle_option('social') !=='1') {
28
+ return;
29
+ }
30
+
31
+ /**
32
+ * Check if is homepage
33
+ *
34
+ * @since 5.3
35
+ * @author Benjamin
36
+ */
37
+ if (!is_front_page()) {
38
+ return;
39
+ }
40
+
41
  if ('none' === seopress_get_service('SocialOption')->getSocialKnowledgeType()) {
42
  return;
43
  }
src/Actions/Options/Init.php CHANGED
@@ -198,8 +198,9 @@ class Init implements ActivationHook
198
  ];
199
 
200
  //Post Types
201
- if (function_exists('seopress_get_post_types') && ! empty(seopress_get_post_types())) {
202
- foreach (seopress_get_post_types() as $seopress_cpt_key => $seopress_cpt_value) {
 
203
  $titleOptions['seopress_titles_single_titles'][$seopress_cpt_key] = [
204
  'title' => sprintf(
205
  '%s %s %s',
@@ -236,8 +237,9 @@ class Init implements ActivationHook
236
  }
237
 
238
  //Archives
239
- if (function_exists('seopress_get_post_types') && ! empty(seopress_get_post_types())) {
240
- foreach (seopress_get_post_types() as $seopress_cpt_key => $seopress_cpt_value) {
 
241
  $titleOptions['seopress_titles_archive_titles'][$seopress_cpt_key]['title'] = '%%cpt_plural%% %%current_pagination%% %%sep%% %%sitetitle%%';
242
  }
243
  }
198
  ];
199
 
200
  //Post Types
201
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
202
+ if ( ! empty($postTypes)) {
203
+ foreach ($postTypes as $seopress_cpt_key => $seopress_cpt_value) {
204
  $titleOptions['seopress_titles_single_titles'][$seopress_cpt_key] = [
205
  'title' => sprintf(
206
  '%s %s %s',
237
  }
238
 
239
  //Archives
240
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
241
+ if (! empty($postTypes)) {
242
+ foreach ($postTypes as $seopress_cpt_key => $seopress_cpt_value) {
243
  $titleOptions['seopress_titles_archive_titles'][$seopress_cpt_key]['title'] = '%%cpt_plural%% %%current_pagination%% %%sep%% %%sitetitle%%';
244
  }
245
  }
src/Actions/Sitemap/Render.php CHANGED
@@ -76,7 +76,14 @@ class Render implements ExecuteHooksFrontend {
76
  public function sitemapShortcut() {
77
  //Redirect sitemap.xml to sitemaps.xml
78
  $get_current_url = get_home_url() . $_SERVER['REQUEST_URI'];
79
- if (in_array($get_current_url, [get_home_url() . '/sitemap.xml/', get_home_url() . '/sitemap.xml'])) {
 
 
 
 
 
 
 
80
  wp_safe_redirect(get_home_url() . '/sitemaps.xml', 301);
81
  exit();
82
  }
76
  public function sitemapShortcut() {
77
  //Redirect sitemap.xml to sitemaps.xml
78
  $get_current_url = get_home_url() . $_SERVER['REQUEST_URI'];
79
+ if (in_array($get_current_url, [
80
+ get_home_url() . '/sitemap.xml/',
81
+ get_home_url() . '/sitemap.xml',
82
+ get_home_url() . '/wp-sitemap.xml/',
83
+ get_home_url() . '/wp-sitemap.xml',
84
+ get_home_url() . '/sitemap_index.xml/',
85
+ get_home_url() . '/sitemap_index.xml',
86
+ ])) {
87
  wp_safe_redirect(get_home_url() . '/sitemaps.xml', 301);
88
  exit();
89
  }
src/Helpers/Metas/RobotSettings.php CHANGED
@@ -7,11 +7,11 @@ if ( ! defined('ABSPATH')) {
7
  }
8
 
9
  abstract class RobotSettings {
10
- protected static function getRobotPrimaryCats($postType) {
11
  $cats = get_categories();
12
 
13
  if ('product' == $postType) {
14
- $cats = get_the_terms($post, 'product_cat');
15
  }
16
 
17
  $default = [
@@ -108,7 +108,7 @@ abstract class RobotSettings {
108
  'default' => '',
109
  'label' => __('Select a primary category', 'wp-seopress'),
110
  'description' => __('Set the category that gets used in the %category% permalink and in our breadcrumbs if you have multiple categories.', 'wp-seopress'),
111
- 'options' => self::getRobotPrimaryCats($postType),
112
  'visible' => ('post' === $postType || 'product' === $postType),
113
  ],
114
  ], $id);
7
  }
8
 
9
  abstract class RobotSettings {
10
+ protected static function getRobotPrimaryCats($id, $postType) {
11
  $cats = get_categories();
12
 
13
  if ('product' == $postType) {
14
+ $cats = get_the_terms($id, 'product_cat');
15
  }
16
 
17
  $default = [
108
  'default' => '',
109
  'label' => __('Select a primary category', 'wp-seopress'),
110
  'description' => __('Set the category that gets used in the %category% permalink and in our breadcrumbs if you have multiple categories.', 'wp-seopress'),
111
+ 'options' => self::getRobotPrimaryCats($id, $postType),
112
  'visible' => ('post' === $postType || 'product' === $postType),
113
  ],
114
  ], $id);
src/JsonSchemas/Organization.php CHANGED
@@ -52,6 +52,7 @@ class Organization extends JsonSchemaValue implements GetJsonData {
52
  $data = seopress_get_service('VariablesToString')->replaceDataToString($data, $variables);
53
 
54
  $type = seopress_get_service('SocialOption')->getSocialKnowledgeType();
 
55
  if ('Organization' === $type) {
56
  // Use "contactPoint"
57
  $schema = seopress_get_service('JsonSchemaGenerator')->getJsonFromSchema(ContactPoint::NAME, $context, ['remove_empty'=> true]);
52
  $data = seopress_get_service('VariablesToString')->replaceDataToString($data, $variables);
53
 
54
  $type = seopress_get_service('SocialOption')->getSocialKnowledgeType();
55
+
56
  if ('Organization' === $type) {
57
  // Use "contactPoint"
58
  $schema = seopress_get_service('JsonSchemaGenerator')->getJsonFromSchema(ContactPoint::NAME, $context, ['remove_empty'=> true]);
src/Services/ContentAnalysis/DomAnalysis.php CHANGED
@@ -203,26 +203,28 @@ class DomAnalysis
203
  'value' => strtotime($post->post_modified) < strtotime('-365 days')
204
  ];
205
 
 
 
 
206
 
207
- $dataOxygen = get_post_meta($post->ID, '_seopress_analysis_data_oxygen', true);
208
 
209
- //Oxygen builder
210
- if ($dataOxygen) {
211
- if(isset($dataOxygen['words_counter'])){
212
- $data['words_counter'] = $dataOxygen['words_counter'];
213
- }
214
- if(isset($dataOxygen['words_counter_unique'])){
215
- $data['words_counter_unique'] = $dataOxygen['words_counter_unique'];
216
- }
217
- if(isset($dataOxygen['kws_density'])){
218
- foreach($dataOxygen['kws_density'] as $key => $densities){
219
- foreach($densities as $keyDensity => $density){
220
- $data['kws_density']['matches'][]= [
221
- "key" => $keyDensity,
222
- "count" => isset($density[0]) ? count($density[0]) : 0
223
- ];
224
- }
225
 
 
226
  }
227
  }
228
  }
203
  'value' => strtotime($post->post_modified) < strtotime('-365 days')
204
  ];
205
 
206
+ //Oxygen builder
207
+ if (is_plugin_active('oxygen/functions.php') && function_exists('ct_template_output')) { //disable for Oxygen
208
+ $dataOxygen = get_post_meta($post->ID, '_seopress_analysis_data_oxygen', true);
209
 
 
210
 
211
+ if ($dataOxygen) {
212
+ if(isset($dataOxygen['words_counter'])){
213
+ $data['words_counter'] = $dataOxygen['words_counter'];
214
+ }
215
+ if(isset($dataOxygen['words_counter_unique'])){
216
+ $data['words_counter_unique'] = $dataOxygen['words_counter_unique'];
217
+ }
218
+ if(isset($dataOxygen['kws_density'])){
219
+ foreach($dataOxygen['kws_density'] as $key => $densities){
220
+ foreach($densities as $keyDensity => $density){
221
+ $data['kws_density']['matches'][]= [
222
+ "key" => $keyDensity,
223
+ "count" => isset($density[0]) ? count($density[0]) : 0
224
+ ];
225
+ }
 
226
 
227
+ }
228
  }
229
  }
230
  }
src/Services/ContentAnalysis/GetContent/LinkNoFollow.php CHANGED
@@ -10,7 +10,7 @@ class LinkNoFollow
10
  {
11
  $data = [];
12
 
13
- $items = $xpath->query("//a[contains(@rel, 'nofollow')]");
14
 
15
  foreach ($items as $link) {
16
  if (! preg_match_all('#\b(cancel-comment-reply-link)\b#iu', $link->getAttribute('id'), $m) && ! preg_match_all('#\b(comment-reply-link)\b#iu', $link->getAttribute('class'), $m)) {
10
  {
11
  $data = [];
12
 
13
+ $items = $xpath->query("//a[contains(@rel, 'nofollow') and not(contains(@rel, 'ugc'))]");
14
 
15
  foreach ($items as $link) {
16
  if (! preg_match_all('#\b(cancel-comment-reply-link)\b#iu', $link->getAttribute('id'), $m) && ! preg_match_all('#\b(comment-reply-link)\b#iu', $link->getAttribute('class'), $m)) {
src/Services/EnqueueModuleMetabox.php CHANGED
@@ -12,6 +12,12 @@ class EnqueueModuleMetabox
12
  {
13
  $response = true;
14
 
 
 
 
 
 
 
15
  if (isset($_GET['seopress_preview']) || isset($_GET['preview'])) {
16
  $response = false;
17
  }
12
  {
13
  $response = true;
14
 
15
+ global $pagenow;
16
+
17
+ if ('widgets.php' == $pagenow) {
18
+ $response = false;
19
+ }
20
+
21
  if (isset($_GET['seopress_preview']) || isset($_GET['preview'])) {
22
  $response = false;
23
  }
src/Services/SearchUrl.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace SEOPress\Services;
4
+
5
+ if ( ! defined('ABSPATH')) {
6
+ exit;
7
+ }
8
+
9
+ class SearchUrl
10
+ {
11
+ public function searchByPostName($value) {
12
+ global $wpdb;
13
+
14
+ $limit = apply_filters('seopress_search_url_result_limit', 50);
15
+ if($limit > 200){
16
+ $limit = 200;
17
+ }
18
+
19
+ $postTypes = seopress_get_service('WordPressData')->getPostTypes();
20
+
21
+ $postTypes = array_map(function($v) {
22
+ return "'" . esc_sql($v) . "'";
23
+ }, array_keys($postTypes));
24
+
25
+ $data = $wpdb->get_results($wpdb->prepare("
26
+ SELECT p.id, p.post_title
27
+ FROM $wpdb->posts p
28
+ WHERE (
29
+ p.post_name LIKE %s
30
+ OR p.post_title LIKE %s
31
+ )
32
+ AND p.post_status = 'publish'
33
+ AND p.post_type IN (" . implode(',',$postTypes) . ")
34
+ LIMIT %d", '%' . $value . '%', '%' . $value . '%', $limit), ARRAY_A);
35
+
36
+ foreach ($data as $key => $value) {
37
+ $data[$key]['guid'] = get_permalink($value['id']);
38
+ }
39
+ return $data;
40
+ }
41
+ }
src/Services/Sitemap/Render/Single.php CHANGED
@@ -31,6 +31,43 @@ class Single {
31
  ]);
32
  do_action('wpml_switch_language', $language);
33
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
 
36
  /**
31
  ]);
32
  do_action('wpml_switch_language', $language);
33
  });
34
+
35
+
36
+ add_filter('seopress_sitemaps_single_url', function($url, $post) {
37
+ //Exclude custom canonical from sitemaps
38
+ if (get_post_meta($post->ID, '_seopress_robots_canonical', true)) {
39
+ return null;
40
+ }
41
+
42
+ //Exclude hidden languages
43
+ //@credits WPML compatibility team
44
+ if (function_exists('icl_object_id') && defined('ICL_SITEPRESS_VERSION')) { //WPML
45
+ global $sitepress, $sitepress_settings;
46
+
47
+ // Check that at least ID is set in post object.
48
+ if ( ! isset( $post->ID ) ) {
49
+ return $url;
50
+ }
51
+
52
+ // Get list of hidden languages.
53
+ $hidden_languages = $sitepress->get_setting( 'hidden_languages', array() );
54
+
55
+ // If there are no hidden languages return original URL.
56
+ if ( empty( $hidden_languages ) ) {
57
+ return $url;
58
+ }
59
+
60
+ // Get language information for post.
61
+ $language_info = $sitepress->post_translations()->get_element_lang_code( $post->ID );
62
+
63
+ // If language code is one of the hidden languages return null to skip the post.
64
+ if ( in_array( $language_info, $hidden_languages, true ) ) {
65
+ return null;
66
+ }
67
+ }
68
+
69
+ return $url;
70
+ }, 10, 2);
71
  }
72
 
73
  /**
src/Services/Social/FacebookImageOptionMeta.php CHANGED
@@ -30,7 +30,7 @@ class FacebookImageOptionMeta {
30
  $value = get_post_meta(get_the_ID(), '_seopress_social_fb_img_attachment_id', true);
31
  }
32
 
33
- if(empty($value) && '1' === seopress_social_facebook_img_default_option() ){
34
  $options = get_option('seopress_social_option_name');
35
  $value = isset($options['seopress_social_facebook_img_attachment_id']) ? $options['seopress_social_facebook_img_attachment_id'] : null;
36
  }
@@ -59,7 +59,7 @@ class FacebookImageOptionMeta {
59
  return $this->getMetasBy('url');
60
  }
61
 
62
- return $this->getMetasByAttachmentId($id);
63
  }
64
 
65
  return '';
@@ -73,14 +73,37 @@ class FacebookImageOptionMeta {
73
 
74
  $postId = attachment_url_to_postid($url);
75
 
76
- return $this->getMetasByAttachmentId($postId);
 
 
 
 
77
  }
78
 
79
 
80
- public function getMetasByAttachmentId($postId){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  $str = '';
82
 
83
  $imageSrc = wp_get_attachment_image_src($postId, 'full');
 
84
  if(empty($imageSrc)){
85
  return $str;
86
  }
30
  $value = get_post_meta(get_the_ID(), '_seopress_social_fb_img_attachment_id', true);
31
  }
32
 
33
+ if(empty($value) && '1' === seopress_social_facebook_img_default_option() && empty(get_post_meta(get_the_ID(), '_seopress_social_fb_img', true)) ){
34
  $options = get_option('seopress_social_option_name');
35
  $value = isset($options['seopress_social_facebook_img_attachment_id']) ? $options['seopress_social_facebook_img_attachment_id'] : null;
36
  }
59
  return $this->getMetasBy('url');
60
  }
61
 
62
+ return $this->getMetasStringByAttachmentId($id);
63
  }
64
 
65
  return '';
73
 
74
  $postId = attachment_url_to_postid($url);
75
 
76
+ if(empty($postId) && !empty($url)){
77
+ return $this->getMetasStringByUrl($url);
78
+ }
79
+
80
+ return $this->getMetasStringByAttachmentId($postId);
81
  }
82
 
83
 
84
+ public function getMetasStringByUrl($url){
85
+ $str = '';
86
+
87
+ //OG:IMAGE
88
+ $str = '';
89
+ $str .= '<meta property="og:image" content="' . esc_attr($url) . '" />';
90
+ $str .= "\n";
91
+
92
+ //OG:IMAGE:SECURE_URL IF SSL
93
+ if (is_ssl()) {
94
+ $str .= '<meta property="og:image:secure_url" content="' . esc_attr($url) . '" />';
95
+ $str .= "\n";
96
+ }
97
+
98
+ return $str;
99
+
100
+ }
101
+
102
+ public function getMetasStringByAttachmentId($postId){
103
  $str = '';
104
 
105
  $imageSrc = wp_get_attachment_image_src($postId, 'full');
106
+
107
  if(empty($imageSrc)){
108
  return $str;
109
  }
src/Tags/AuthorUrl.php CHANGED
@@ -23,11 +23,16 @@ class AuthorUrl implements GetTagValue {
23
  return $value;
24
  }
25
 
26
- if ($context['is_single'] && isset($context['post']->post_author)) {
 
 
 
 
 
27
  $value = get_author_posts_url($context['post']->post_author);
28
  }
29
 
30
- if ($context['is_author'] && is_int(get_queried_object_id())) {
31
  $value = get_author_posts_url(get_queried_object_id());
32
  }
33
 
23
  return $value;
24
  }
25
 
26
+
27
+ if(isset($context['post']->post_author)){
28
+ $value = get_the_author_meta('user_url', $context['post']->post_author);
29
+ }
30
+
31
+ if ($context['is_single'] && isset($context['post']->post_author) && empty($value)) {
32
  $value = get_author_posts_url($context['post']->post_author);
33
  }
34
 
35
+ if ($context['is_author'] && is_int(get_queried_object_id()) && empty($value)) {
36
  $value = get_author_posts_url(get_queried_object_id());
37
  }
38
 
templates/sitemap/single.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  defined('ABSPATH') or exit('Cheatin&#8217; uh?');
4
 
5
  if ('' !== get_query_var('seopress_cpt')) {
@@ -29,9 +28,7 @@ if (function_exists('pll_home_url')) {
29
  $home_url = apply_filters('seopress_sitemaps_home_url', $home_url);
30
  echo '<?xml version="1.0" encoding="UTF-8"?>';
31
  printf('<?xml-stylesheet type="text/xsl" href="%s"?>', $home_url . 'sitemaps_xsl.xsl');
32
- ?>
33
 
34
- <?php
35
  $urlset = '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">';
36
 
37
  echo apply_filters('seopress_sitemaps_urlset', $urlset);
@@ -78,9 +75,8 @@ $args = [
78
  'compare' => '!=',
79
  ],
80
  ],
81
- 'fields' => 'ids',
82
  'lang' => '',
83
- 'has_password' => false,
84
  ];
85
 
86
  if ('attachment' === $path) {
@@ -96,7 +92,13 @@ if ( $path == 'product' ) {
96
  ];
97
  }
98
 
99
-
 
 
 
 
 
 
100
 
101
  $args = apply_filters('seopress_sitemaps_single_query', $args, $path);
102
 
@@ -110,8 +112,7 @@ foreach ($postslist as $post) {
110
  $modified_date = '';
111
  if (get_the_modified_date('c', $post)) {
112
  $modified_date = get_the_modified_date('c', $post);
113
- }
114
- else{
115
  $modified_date = get_post_modified_time('c', false, $post);
116
  }
117
 
@@ -133,7 +134,11 @@ foreach ($postslist as $post) {
133
  'images' => [],
134
  ];
135
 
136
- $sitemapData .= sprintf("\n<url>\n<loc>%s</loc>\n<lastmod>%s</lastmod>", $seopress_url['loc'], $seopress_url['mod']);
 
 
 
 
137
 
138
  //XML Image Sitemaps
139
  if ('1' == seopress_xml_sitemap_img_enable_option()) {
@@ -337,7 +342,9 @@ foreach ($postslist as $post) {
337
  }
338
  }
339
 
340
- $sitemapData .= '</url>';
 
 
341
 
342
  echo apply_filters('seopress_sitemaps_url', $sitemapData, $seopress_url);
343
  }
1
  <?php
 
2
  defined('ABSPATH') or exit('Cheatin&#8217; uh?');
3
 
4
  if ('' !== get_query_var('seopress_cpt')) {
28
  $home_url = apply_filters('seopress_sitemaps_home_url', $home_url);
29
  echo '<?xml version="1.0" encoding="UTF-8"?>';
30
  printf('<?xml-stylesheet type="text/xsl" href="%s"?>', $home_url . 'sitemaps_xsl.xsl');
 
31
 
 
32
  $urlset = '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">';
33
 
34
  echo apply_filters('seopress_sitemaps_urlset', $urlset);
75
  'compare' => '!=',
76
  ],
77
  ],
 
78
  'lang' => '',
79
+ 'has_password' => false
80
  ];
81
 
82
  if ('attachment' === $path) {
92
  ];
93
  }
94
 
95
+ // Polylang: remove hidden languages
96
+ if (function_exists('get_languages_list') && is_plugin_active('polylang/polylang.php') || is_plugin_active('polylang-pro/polylang.php')) {
97
+ $languages = PLL()->model->get_languages_list();
98
+ if ( wp_list_filter( $languages, array( 'active' => false ) ) ) {
99
+ $args['lang'] = wp_list_pluck( wp_list_filter( $languages, array( 'active' => false ), 'NOT' ), 'slug' );
100
+ }
101
+ }
102
 
103
  $args = apply_filters('seopress_sitemaps_single_query', $args, $path);
104
 
112
  $modified_date = '';
113
  if (get_the_modified_date('c', $post)) {
114
  $modified_date = get_the_modified_date('c', $post);
115
+ } else {
 
116
  $modified_date = get_post_modified_time('c', false, $post);
117
  }
118
 
134
  'images' => [],
135
  ];
136
 
137
+ $seopress_url = apply_filters( 'seopress_sitemaps_single_url', $seopress_url, $post );
138
+
139
+ if (!empty($seopress_url['loc'])) {
140
+ $sitemapData .= sprintf("\n<url>\n<loc>%s</loc>\n<lastmod>%s</lastmod>", $seopress_url['loc'], $seopress_url['mod']);
141
+ }
142
 
143
  //XML Image Sitemaps
144
  if ('1' == seopress_xml_sitemap_img_enable_option()) {
342
  }
343
  }
344
 
345
+ if (!empty($seopress_url['loc'])) {
346
+ $sitemapData .= '</url>';
347
+ }
348
 
349
  echo apply_filters('seopress_sitemaps_url', $sitemapData, $seopress_url);
350
  }
vendor/composer/installed.php CHANGED
@@ -1,22 +1,22 @@
1
  <?php return array(
2
  'root' => array(
3
- 'pretty_version' => '5.2.x-dev',
4
- 'version' => '5.2.9999999.9999999-dev',
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => '89ee7633cb80c8acc3f57430e25ede492f4c5fbb',
9
  'name' => 'wp-seopress/wp-seopress',
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'wp-seopress/wp-seopress' => array(
14
- 'pretty_version' => '5.2.x-dev',
15
- 'version' => '5.2.9999999.9999999-dev',
16
  'type' => 'wordpress-plugin',
17
  'install_path' => __DIR__ . '/../../',
18
  'aliases' => array(),
19
- 'reference' => '89ee7633cb80c8acc3f57430e25ede492f4c5fbb',
20
  'dev_requirement' => false,
21
  ),
22
  ),
1
  <?php return array(
2
  'root' => array(
3
+ 'pretty_version' => '5.3.x-dev',
4
+ 'version' => '5.3.9999999.9999999-dev',
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
+ 'reference' => '6ae7e90621c7d32884cfbba023a505ad44124995',
9
  'name' => 'wp-seopress/wp-seopress',
10
  'dev' => false,
11
  ),
12
  'versions' => array(
13
  'wp-seopress/wp-seopress' => array(
14
+ 'pretty_version' => '5.3.x-dev',
15
+ 'version' => '5.3.9999999.9999999-dev',
16
  'type' => 'wordpress-plugin',
17
  'install_path' => __DIR__ . '/../../',
18
  'aliases' => array(),
19
+ 'reference' => '6ae7e90621c7d32884cfbba023a505ad44124995',
20
  'dev_requirement' => false,
21
  ),
22
  ),