WordPress SEO Plugin – Rank Math - Version 1.0.27

Version Description

[Jun 18, 2019] = * Added a filter to show Meta Keywords tag to the Search Engines like Yandex * Added some important security fixes * Added more improvements to how the SEO Analyzer works inside the plugin * Enhanced the output of the Rich Snippet's Shortcode showing the formatted date * Improved the comments to make them more meaningful * Fixed an issue with the Breadcrumbs not showing the primary category on the product pages * Fixed a compatibility issue with the Indexing API plugin and Rank Math * Fixed an issue where product categories were showing 404 when Remove Category Base option was enabled * Fixed the problem with the categories date variables not working correctly in the settings fields * Fixed a conflict with Woocommerce One Page checkout plugin * Fixed an issue where the feeds were not updating when the WooCommerce module was activated * Fixed a compatibility issue with the Ultra theme, not showing the text editor * Fixed an issue where the Search Console Box was appearing for all the users in the dashboard * Fixed a problem in the SEO Analysis where missing 'Focus Keyword in Title' test wasn't working as intended * Prepared the plugin for upcoming updates related to Gutenberg's compatibility

Full changelog can be found here - Rank Math SEO changelog

Download this release

Release Info

Developer rankmath
Plugin Icon 128x128 WordPress SEO Plugin – Rank Math
Version 1.0.27
Comparing to
See all releases

Code changes from version 1.0.26 to 1.0.27

Files changed (65) hide show
  1. assets/admin/css/metabox.css +1 -3
  2. assets/admin/css/setup-wizard.css +1 -1
  3. assets/admin/js/feedback.js +1 -1
  4. assets/admin/js/wizard.js +1 -1
  5. includes/admin/class-admin.php +9 -10
  6. includes/admin/class-assets.php +5 -4
  7. includes/admin/class-deactivate-survey.php +1 -1
  8. includes/admin/class-import-export.php +6 -6
  9. includes/admin/class-metabox.php +18 -15
  10. includes/admin/class-notices.php +3 -3
  11. includes/admin/class-option-center.php +9 -10
  12. includes/admin/class-options.php +9 -9
  13. includes/admin/class-post-columns.php +4 -4
  14. includes/admin/class-post-filters.php +8 -7
  15. includes/admin/class-registration.php +3 -3
  16. includes/admin/class-serp-checklist.php +2 -2
  17. includes/admin/class-serp-preview.php +3 -3
  18. includes/admin/class-setup-wizard.php +2 -2
  19. includes/class-cmb2.php +41 -0
  20. includes/class-common.php +22 -18
  21. includes/class-compatibility.php +4 -4
  22. includes/class-frontend-seo-score.php +1 -1
  23. includes/class-helper.php +21 -24
  24. includes/class-installer.php +11 -10
  25. includes/class-metadata.php +12 -12
  26. includes/class-module-manager.php +5 -5
  27. includes/class-module.php +5 -5
  28. includes/class-post.php +21 -21
  29. includes/class-replace-vars.php +125 -111
  30. includes/class-rewrite.php +16 -14
  31. includes/class-term.php +3 -3
  32. includes/class-tracking.php +4 -4
  33. includes/class-updates.php +3 -3
  34. includes/class-user.php +7 -7
  35. includes/frontend/class-breadcrumbs.php +4 -10
  36. includes/frontend/class-head.php +11 -0
  37. includes/frontend/paper/class-archive.php +9 -0
  38. includes/frontend/paper/class-author.php +9 -0
  39. includes/frontend/paper/class-blog.php +13 -0
  40. includes/frontend/paper/class-date.php +9 -0
  41. includes/frontend/paper/class-error-404.php +9 -0
  42. includes/frontend/paper/class-paper.php +37 -0
  43. includes/frontend/paper/class-search.php +9 -0
  44. includes/frontend/paper/class-shop.php +9 -0
  45. includes/frontend/paper/class-singular.php +9 -0
  46. includes/frontend/paper/class-taxonomy.php +15 -0
  47. includes/frontend/paper/interface-paper.php +7 -0
  48. includes/helpers/class-conditional.php +0 -10
  49. includes/metaboxes/general.php +1 -1
  50. includes/modules/404-monitor/class-admin.php +4 -2
  51. includes/modules/404-monitor/class-table.php +3 -3
  52. includes/modules/redirections/class-admin.php +4 -2
  53. includes/modules/redirections/class-form.php +1 -0
  54. includes/modules/rich-snippet/class-snippet-shortcode.php +6 -0
  55. includes/modules/search-console/class-search-console.php +4 -2
  56. includes/modules/woocommerce/class-admin.php +1 -92
  57. includes/modules/woocommerce/class-woocommerce.php +134 -35
  58. includes/settings/general/others.php +1 -1
  59. includes/settings/titles/misc.php +1 -1
  60. includes/settings/titles/post-types.php +1 -1
  61. includes/settings/titles/taxonomies.php +4 -4
  62. includes/template-tags.php +7 -9
  63. includes/updates/update-1.0.27.php +17 -0
  64. rank-math.php +48 -50
  65. readme.txt +17 -14
assets/admin/css/metabox.css CHANGED
@@ -2,6 +2,4 @@
2
  * Plugin: Rank Math
3
  * URL: https://rankmath.com/wordpress/plugin/seo-suite/
4
  * Name: metabox.css
5
- */#rank_math_metabox .inside{margin:0;padding:0}.rank-math-metabox-frame{position:relative;min-width:255px;max-width:1000px;margin-bottom:25px;border:1px solid #e5e5e5;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04)}.rank-math-metabox-frame-title{font-size:14px;line-height:1.4;margin:0;padding:8px 12px;border-bottom:1px solid #e5e5e5}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation){padding:30px 20px 0;border-bottom:1px solid #e5e5e5;background:#fafafa}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a{font-size:14px;font-weight:600;position:relative;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:7px;padding:8px 16px 4px 12px;white-space:nowrap;text-decoration:none;color:#555;border:1px solid #e6e6e6;border-bottom:0;outline:none;background:#f5f5f5;-webkit-box-shadow:none;box-shadow:none}@media (max-width: 768px){.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a{margin-left:-1px;padding:8px 12px 4px 8px}}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a[href="#setting-panel-askreview"]{padding-right:12px;float:right;color:#e93f30}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .dashicons,.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .fa{font-size:14px;line-height:inherit;min-width:20px;text-align:center}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a.active{bottom:-1px;margin-top:-1px;padding-bottom:5px;color:#069de3;border-top-color:#069de3;background:#fff}.rank-math-metabox-wrap .social-tabs-navigation{display:inline-block;border-radius:3px;-webkit-box-shadow:0 1px 6px 0 rgba(35,40,45,0.18);box-shadow:0 1px 6px 0 rgba(35,40,45,0.18)}.rank-math-metabox-wrap .social-tabs-navigation-wrapper{padding-bottom:30px;text-align:center}.rank-math-metabox-wrap .social-tabs-navigation a{font-size:16px;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;width:130px;padding:11px;text-decoration:none;color:#939393;border:1px solid #e5e5e5;outline:none;background:#efefef;-webkit-box-shadow:none;box-shadow:none}.rank-math-metabox-wrap .social-tabs-navigation a .dashicons{margin-right:8px}.rank-math-metabox-wrap .social-tabs-navigation .tab-facebook{border-right:0;border-radius:3px 0 0 3px}.rank-math-metabox-wrap .social-tabs-navigation .tab-facebook.tab-active{color:#fff;border-color:#3b5998;background:#3b5998}.rank-math-metabox-wrap .social-tabs-navigation .tab-twitter{border-left:0;border-radius:0 3px 3px 0}.rank-math-metabox-wrap .social-tabs-navigation .tab-twitter.tab-active{color:#fff;border-color:#55acee;background:#55acee}.rank-math-metabox-wrap .rank-math-tab{display:none;padding:30px}.serp-preview .highlight{pointer-events:none}.serp-preview-title:before{font-size:13px;font-weight:600;display:inline-block;padding-bottom:6px;content:attr(data-title);letter-spacing:.05em;text-transform:uppercase}.serp-preview-wrapper{position:relative;-webkit-transition:all .6s ease;transition:all .6s ease}.serp-preview-body{padding:15px 0;-webkit-transition:width .5s ease, padding .5s ease, margin .5s ease;transition:width .5s ease, padding .5s ease, margin .5s ease}.serp-preview-body .serp-star-rating{display:inline-block;position:relative;color:#ccc;margin-right:5px}.serp-preview-body .serp-star-rating .dashicons{font-size:16px;width:16px;height:16px}.serp-preview-body .serp-star-rating .serp-result{position:absolute;top:0;left:0;height:22px;overflow:hidden;white-space:nowrap;color:#e7711b}.serp-preview-body .cmb-row .cmb-td{width:100%;max-width:680px}.serp-preview-body .cmb-row .cmb-td .cmb2_textarea{width:100% !important}.serp-preview-footer{padding:15px 0}.serp-preview-footer .button.button-secondary{line-height:41px;padding:0 12px}.serp-preview-footer .button.button-secondary .dashicons{font-size:20px;line-height:41px}.serp-preview-bg{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:opacity .5s ease, height .5s ease;transition:opacity .5s ease, height .5s ease;opacity:0;background-color:#fafafa;height:0;width:100%}.serp-preview-bg .serp-preview-input{position:relative;max-width:600px;pointer-events:none}.serp-preview-bg .serp-preview-input input{font:16px arial,sans-serif;padding:5px 9px 5px 16px;-webkit-transition:-webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:-webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);vertical-align:top;color:#000;border:none;border-radius:2px;outline:none;background-color:#fff;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 0 1px rgba(0,0,0,0.08);box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 0 1px rgba(0,0,0,0.08);height:44px;width:100%}.serp-preview-bg .serp-preview-input .serp-mike{position:absolute;top:0;right:50px;bottom:0;display:inline-block;width:24px;padding:0 2px 0 8px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrElEQVR42u2Xz2sTQRSAX8VSb1K8iNqKooJH2Ux6Ksn+iPQqxZMIehJB0do/IMhmQWsvHr2KSEGk0tSLIoWIYNUKij20F2/N7iaUZnYT0kYzzhMKs0HDJiTdLcwHDwKZSd63781LBiQSSW9JZdkhzfKm1Rz9mjZp/W9YdEU3vXv4HsQZ40FtNG36q5rls//Ej4tmbSS2T15Mvp3ExOPmEMQNbBtMMEyoljcFcQN7PqyAlqNfIG7gYQ0tYNIaxA1MrJPY3wImbUqBKAXSFv0tBSIVMOkvKRDtGKWN/T6FdqRAxFNoWwpEPIXqUqBT6ALU/UVgu8GW4GD3f6f9TRDYNJTDrk7YbtiqUumHwIYoUJuHERDAS0r4CvgFECgbY+cFAR7KT+g1POmCKFDNw6WggHc3fBtVb4CAoyauBgXIG+g1Xh5mRAGah6cggBd11fK/h7lOprIs0H6uRl6KAo5O7kOv4QmPiwJ4Jqqv4FiwCtXjvD2+tRmfK6kZ/ygI2HritK0rDVGgrClJ6DWMwYC/AGuCBMYcIC2V0CzvjmbRz3j3xUjn6CfeYreUJ2wQkGD75INPX1mFfsEFrrcIYCvdhC4paWQakxajpJMr0C9YFg54i7AsClRmh9/xnr0NHcInzZStk2aLwAcGMAD9pPIazvFKVDD5rdnhJeHLX5RTyRPQHpz5o66emMc9wdlPtvA8wF7Aq2BUHh1525qEo5JtR1WeOXpickO9cJIpyuD6xJmhYiZ5ytWSl3mlnuOaf+2zDaLDXmJrSgZ/MYVEugo+gSh+FkSBa4yd5Ul87DZ5XpFl/AyIEjzYjkau8WqshU2cr13HPbgX4gJOD97n465GZlyVvC9mSKloKI2iTnbwNT+gBX54H+IaXAtxJzE3ycSAFqSAFJACUkAikXD+AHj5/wx2o5osAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:right center;background-size:24px 24px}.serp-preview-bg .serp-preview-input .serp-search{line-height:46px;position:absolute;top:0;right:15px;bottom:0;height:46px;text-align:center;border:0;outline:0}.serp-preview-bg .serp-preview-input .serp-search svg{width:25px;height:46px;fill:#4285f4}.serp-preview-bg .serp-preview-menus{overflow:hidden;max-width:600px}.serp-preview-bg .serp-preview-menus ul{float:left;overflow:hidden;margin:0;padding:0;list-style:none}.serp-preview-bg .serp-preview-menus ul li{font-family:arial,sans-serif;font-size:13px;line-height:19px;float:left;height:15px;margin:0;padding:28px 16px 12px;color:#777}.serp-preview-bg .serp-preview-menus ul li.current{font-weight:bold;color:#1a73e8;border-bottom:3px solid #1a73e8}.serp-preview-bg .serp-preview-menus ul.menus-right{float:right}.serp-preview-bg .serp-preview-result-stats{font-family:arial,sans-serif;font-size:small;line-height:43px;margin:0 -20px;padding-right:20px;padding-left:20px;white-space:nowrap;text-overflow:ellipsis;color:#808080;background-color:#fff}.serp-preview-noindex{z-index:1;display:none;padding:15px 0;background:rgba(255,255,255,0.8);position:absolute;top:0;right:0;bottom:0;left:0}.serp-preview-noindex h3{font-weight:700;margin:0;letter-spacing:1px;text-transform:uppercase}.serp-preview-noindex p{font-size:14px;line-height:2;margin:5px 0;color:#000}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url{font-family:arial, sans-serif;position:relative;z-index:1;display:block;overflow:hidden;width:100%;max-width:680px;margin:0;cursor:pointer}.serp-preview .serp-description:focus:before,.serp-preview .serp-description:hover:before,.serp-preview .serp-title:focus:before,.serp-preview .serp-title:hover:before,.serp-preview .serp-url:focus:before,.serp-preview .serp-url:hover:before{font-family:dashicons;z-index:-1;content:'\f464';text-align:right;background:#f0f1f3;position:absolute;top:0;right:0;bottom:0;left:0}.serp-preview .serp-description:empty:after,.serp-preview .serp-title:empty:after,.serp-preview .serp-url:empty:after{content:attr(data-empty-title)}.serp-preview .serp-title{font-size:18px;font-weight:normal;line-height:19px;white-space:nowrap;text-overflow:ellipsis;color:#1a0dab}.serp-preview .serp-url{font-size:14px;line-height:16px;margin:3px 0 5px;white-space:nowrap;text-overflow:ellipsis;color:#006621}.serp-preview .serp-description{font-size:13px;line-height:1.4;clear:left;word-wrap:break-word;color:#545454}.serp-preview .group{position:relative;min-height:10px}.serp-preview .group .cmb-row{display:none;padding:20px 0 !important;border:0}.serp-preview .group .serp-close{position:absolute;top:10px;right:10px;display:none;cursor:pointer}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active{margin-top:20px;padding:30px 20px 20px;background:#f6f6f6}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active .cmb-row{display:block}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active .cmb-row.cmb2-id-rank-math-title .rank-math-variables-button{right:0}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active .cmb-row.cmb2-id-rank-math-description .rank-math-variables-dropdown{top:60px}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active .serp-close{display:block}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active+.group,.serp-preview:not(.expanded-preview):not(.mobile-preview) .group+.group.active{margin-top:20px}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active+.group+.serp-rating,.serp-preview:not(.expanded-preview):not(.mobile-preview) .group+.group.active+.serp-rating{display:none}.serp-preview .button{height:auto;padding:0 5px;outline:0}.serp-preview .button,.serp-preview .button .dashicons{font-size:15px;line-height:30px;height:auto}.serp-preview .button-secondary{margin-bottom:0;color:#818181;border-color:#e5e5e5;background:#fff !important;-webkit-box-shadow:0 1px 2px 0 #e5e5e5 !important;box-shadow:0 1px 2px 0 #e5e5e5 !important}.serp-preview .button-secondary.active,.serp-preview .button-secondary.active:hover{color:#fff;border-color:#0392d4;background:#069de3 !important}.serp-preview .button-secondary:hover{color:#069de3;border-color:#0392d4}.serp-preview-title .alignright{margin-top:-9px}.serp-preview.desktop-preview .serp-snippet-mobile{display:none}.serp-preview.desktop-preview .serp-snippet-data{color:#808080;line-height:18px;font-size:small;font-weight:normal;margin-bottom:3px}.serp-preview.desktop-preview .serp-snippet-data .serp-desktop-rating{float:left;margin-top:1px}.serp-preview.desktop-preview .serp-snippet-data .separator:first-child{display:none}.serp-preview.desktop-preview .serp-snippet-data .serp-event_name{color:#1a0dab;cursor:pointer}.serp-preview.desktop-preview .serp-snippet-data .serp-event_name:hover{text-decoration:underline}.serp-preview.desktop-preview .serp-snippet-data .serp-event_name,.serp-preview.desktop-preview .serp-snippet-data .serp-event_place{padding-left:15px}.serp-preview.desktop-preview .serp-preview-footer .alignright .dashicons{margin-right:0}.serp-preview.mobile-preview.expanded-preview .group:nth-child(2){margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid #dfe1e5}.serp-preview.mobile-preview .serp-snippet-mobile{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:8px -5px 0}.serp-preview.mobile-preview .serp-snippet-mobile .inner-wrapper{-webkit-box-flex:1;-ms-flex:1;flex:1;margin-left:5px;margin-right:5px}.serp-preview.mobile-preview .serp-snippet-mobile .inner-wrapper .serp-mobile-label{display:block;font-size:14px;line-height:20px;margin-bottom:4px;color:#202124;font-weight:500}.serp-preview.mobile-preview .serp-snippet-mobile .inner-wrapper .serp-rating-count{float:left}.serp-preview.mobile-preview .serp-snippet-mobile .inner-wrapper .serp-rating{float:left;margin-left:5px}.serp-preview.mobile-preview .serp-snippet-mobile .serp-rating-count{color:#808080}.serp-preview.mobile-preview .serp-snippet-data{display:none}.mobile-preview .serp-preview-title:before{content:attr(data-mobile)}.mobile-preview .serp-preview-bg{position:relative;overflow:visible;width:400px;max-width:100%;margin:auto;border-radius:8px;background-color:transparent;-webkit-box-shadow:0 1px 6px rgba(32,33,36,0.28);box-shadow:0 1px 6px rgba(32,33,36,0.28)}.mobile-preview .serp-preview-bg .serp-preview-input input{height:41px;border-bottom:1px solid rgba(0,0,0,0.12);border-radius:8px 8px 0 0;-webkit-box-shadow:none;box-shadow:none}.mobile-preview .serp-preview-bg .serp-preview-input .serp-mike{display:none}.mobile-preview .serp-preview-bg .serp-preview-input .serp-search{right:0;width:40px;height:40px;margin-right:-1px;padding:0;border:1px solid #3367d6;border-radius:0 8px 0 0;-webkit-border-top-right-radius:8px;background-color:#3b78e7;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.mobile-preview .serp-preview-bg .serp-preview-input .serp-search svg{fill:#fff}.mobile-preview .serp-preview-bg .serp-preview-menus ul{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px}.mobile-preview .serp-preview-bg .serp-preview-menus ul li{font-size:12px;line-height:40px;height:40px;padding:0 16px;text-align:center;text-transform:uppercase;-webkit-box-flex:1;-ms-flex:1;flex:1}.mobile-preview .serp-preview-bg .serp-preview-menus ul li:last-child{display:none}.mobile-preview .serp-preview-bg .serp-preview-menus ul.menus-right{display:none}.mobile-preview .serp-preview-bg .serp-preview-result-stats{display:none}.mobile-preview .serp-preview-body{-webkit-box-sizing:border-box;box-sizing:border-box;width:400px;max-width:100%;margin:auto;padding-top:30px;word-wrap:break-word}.mobile-preview.expanded-preview .serp-preview-body{margin-top:10px;padding:20px;border-radius:8px;background-color:#fff;-webkit-box-shadow:0 1px 6px rgba(32,33,36,0.28);box-shadow:0 1px 6px rgba(32,33,36,0.28)}.expanded-preview .serp-description,.expanded-preview .serp-title,.expanded-preview .serp-url,.mobile-preview .serp-description,.mobile-preview .serp-title,.mobile-preview .serp-url{overflow:hidden;pointer-events:none}.expanded-preview .serp-preview-footer,.mobile-preview .serp-preview-footer{display:none}.expanded-preview.desktop-preview .serp-preview-footer{padding:15px 0}.expanded-preview.desktop-preview .serp-preview-wrapper{padding:0}.expanded-preview.desktop-preview .serp-preview-title:before{content:attr(data-desktop)}@media (min-width: 768px){.expanded-preview.desktop-preview .serp-preview-bg{height:auto;padding:15px 20px 0;opacity:1}.expanded-preview.desktop-preview .serp-preview-body{padding-left:20px}}.expanded-preview.mobile-preview .serp-preview-bg{height:auto;margin-top:20px;opacity:1}.noindex-preview .serp-preview-wrapper{position:relative}.noindex-preview .serp-preview-body{pointer-events:none;opacity:.2}.noindex-preview .serp-preview-noindex{display:-webkit-box;display:-ms-flexbox;display:flex;flex-direction:column;align-items:center;-webkit-box-align:center;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-pack:center;-ms-flex-align:center;-ms-flex-direction:column;-ms-flex-pack:center;justify-content:center}.noindex-preview .serp-preview-footer .alignright{display:none}body.rtl .serp-preview-bg .serp-preview-input input{padding-right:16px;padding-left:9px}body.rtl .serp-preview-bg .serp-preview-input .serp-search{right:auto;left:15px}body.rtl .serp-preview-bg .serp-preview-input .serp-mike{right:auto;left:50px;padding-right:8px;padding-left:2px}body.rtl .serp-preview-bg .serp-preview-menus ul,body.rtl .serp-preview-bg .serp-preview-menus li{float:right}body.rtl .serp-preview-bg .serp-preview-menus ul.menus-right,body.rtl .serp-preview-bg .serp-preview-menus li.menus-right{float:left}body.rtl .mobile-preview .serp-preview-bg .serp-search{left:0;border-radius:0;border-top-left-radius:8px}body.rtl .serp-preview .serp-description:focus:before,body.rtl .serp-preview .serp-description:hover:before,body.rtl .serp-preview .serp-title:focus:before,body.rtl .serp-preview .serp-title:hover:before,body.rtl .serp-preview .serp-url:focus:before,body.rtl .serp-preview .serp-url:hover:before{text-align:left}body.rtl .rank-math-variables-dropdown{right:auto;left:37px}.snippet-fields{padding:45px 0 15px}.length-indicator-wrapper{position:relative;display:block}.length-indicator-wrapper .length-indicator{overflow:hidden;border-radius:2px;background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #fff 19%, #fff 19%, #f16b17 20%, #f1a104 38%, #fff 39%, #fff 39%, #f1a404 40%, #d9b507 58%, #fff 59%, #fff 59%, #d4b509 60%, #7bb02c 78%, #fff 79%, #fff 79%, #76ae2e 80%, #2da24c 100%);position:absolute;top:-13px;right:60px;height:8px;width:180px}.length-indicator-wrapper .length-indicator span{position:absolute;z-index:11;background:#e0e0e0;height:100%;width:100%}.length-indicator-wrapper .length-indicator.invalid{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #fff 19%, #fff 19%, #e33d2a 20%, #e33d2a 38%, #fff 39%, #fff 39%, #e33d2a 40%, #e33d2a 58%, #fff 59%, #fff 59%, #e33d2a 60%, #e33d2a 78%, #fff 79%, #fff 79%, #e33d2a 80%, #e33d2a 100%)}.length-indicator-wrapper input:focus+.length-indicator,.length-indicator-wrapper textarea:focus+.length-indicator{display:block}.length-indicator-wrapper .length-count{font-size:12px;position:absolute;top:-17px;right:0;color:#afafaf}.tag-editor{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:7px 80px 7px 10px;cursor:text;-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;border:1px solid #e5e5e5;border-radius:3px;background:#fff;-webkit-box-shadow:inset 0 1px 6px rgba(0,0,0,0.08);box-shadow:inset 0 1px 6px rgba(0,0,0,0.08)}.tag-editor>li{line-height:inherit;position:relative;float:left;margin:3px 10px 3px 0;padding:3px 5px;cursor:pointer;white-space:nowrap;color:#85878b;border-radius:2px;background:#e9e9ea}.tag-editor>li:nth-child(1){margin:0;padding:0;border-color:transparent;background:transparent}.tag-editor div{float:left;padding:0 4px}.tag-editor .placeholder{color:#bbb}.tag-editor-hidden-src{position:absolute !important;left:-99999px}.tag-editor .tag-editor-spacer{display:none}.tag-editor ::-ms-clear{display:none}.tag-editor .tag-editor-tag input[type=text]{margin:0;padding:0;cursor:text;border:0;outline:none;background:none;-webkit-box-shadow:none !important;box-shadow:none !important}.tag-editor .tag-editor-tag.active+.tag-editor-delete,.tag-editor .tag-editor-tag.active+.tag-editor-delete i{visibility:hidden;cursor:text}.tag-editor .tag-editor-delete i{line-height:18px;display:inline-block}.tag-editor .tag-editor-delete i:before{font-size:16px;font-style:normal;content:'×'}.tag-editor .tag-editor-delete:hover i:before{color:#000 !important}.tag-editor>li.selected-fk{color:#000;border-color:#fbbc05;background:#fbbc05}.tag-editor>li.bad-fk{color:#e93f30;background:#fdeae8}.tag-editor>li.bad-fk.selected-fk{color:#fdeae8;background:#e93f30}.tag-editor>li.ok-fk{color:#fbbc05;background:#fef2ce}.tag-editor>li.ok-fk.selected-fk{color:#fef2ce;background:#fbbc05}.tag-editor>li.good-fk{color:#58bb58;background:#e9f6e9}.tag-editor>li.good-fk.selected-fk{color:#e9f6e9;background:#58bb58}.tag-editor>li.selected-fk .tag-editor-tag.active input[type=text],.tag-editor>li.selected-fk .tag-editor-delete:hover i:before{color:#fff}.tag-editor>li:nth-child(2):before,.rank-math-keywords-fields>div:nth-child(1):before{font-family:'dashicons';font-size:7px;line-height:12px;position:absolute;top:-4px;left:-6px;width:12px;content:'\f155';text-align:center;color:#fff;border:1px solid #fff;border-radius:50%;background:#4285f4}.cmb2-wrap .cmb2-id-rank-math-focus-keyword{padding-top:10px}.cmb2-wrap .cmb2-id-rank-math-focus-keyword .cmb-th{width:100%;margin-bottom:10px}.cmb2-wrap .cmb2-id-rank-math-focus-keyword .cmb-td{width:100%}.cmb2-wrap .cmb2-id-rank-math-focus-keyword .notice{margin:20px 0 0;background:#fefcee}.cmb2-wrap .cmb2-id-rank-math-focus-keyword .cmb-td{position:relative}.rank-math-keywords-fields>div{position:relative}.rank-math-keywords-fields>div:nth-child(1):before{top:3px;left:16px}.ui-autocomplete{font-size:14px;position:absolute;top:0;left:0;cursor:default}.ui-autocomplete.ui-autocomplete-loading{background:none}.ui-autocomplete.ui-widget-content{z-index:1111111}.ui-front{z-index:9999}.ui-menu{display:block;margin:0;padding:1px;list-style:none;outline:none}.ui-menu .ui-menu-item a{line-height:1.4;display:block;min-height:0;padding:2px .4em;text-decoration:none}.ui-widget-content{color:#555;border:1px solid #bbb;background:#fff}.ui-widget-content:empty{display:none}.ui-widget-content a{color:#46799b}.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{background:#e0eaf1}.ui-helper-hidden-accessible{display:none}.rank-math-seo-score{font-weight:600;position:absolute;top:1px;right:1px;-webkit-box-sizing:border-box;box-sizing:border-box;width:105px;padding:13.5px 15px;text-align:center;border-radius:0 3px 3px 0;background:#f1f1f1}.rank-math-seo-score.misc-pub-section{position:relative;top:auto;right:auto;width:100%;padding:13.5px 12px;text-align:left;border-radius:0}.rank-math-seo-score.misc-pub-section .dashicons{font-size:18px;margin-right:2px}.rank-math-seo-score.good-fk{color:#58bb58;background:#e9f6e9}.rank-math-seo-score.ok-fk{color:#ca9703;background:#fef2ce}.rank-math-seo-score.bad-fk{color:#e93f30;background:#fdeae8}.cmb2-wrap .cmb2-id-rank-math-pillar-content .cmb-th{display:none}.cmb2-wrap .cmb2-id-rank-math-pillar-content .cmb-td{width:100%}.rank-math-primary-term-li{position:relative;display:block}.rank-math-primary-term-li .rank-math-tooltip{position:absolute;right:0;display:none}.rank-math-primary-term-li .rank-math-tooltip>span{top:50%;right:32px;bottom:auto;left:auto;width:110px;-webkit-transform:translate3d(-70%, -50%, 0);transform:translate3d(-70%, -50%, 0)}.rank-math-primary-term-li .rank-math-tooltip>span:after{content:'';-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0);top:50%;right:-8px;left:auto;border-style:solid;height:0;width:0;border-color:transparent transparent transparent #555d66;border-width:7px 0 7px 8px}.rank-math-primary-term-li .rank-math-tooltip:hover span{bottom:auto;-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0);opacity:1}.rank-math-primary-term-li.term-checked>label>.rank-math-tooltip{display:inline-block}.rank-math-compare-keywords-trigger{float:right;margin-top:-10px;margin-bottom:5px;text-decoration:none;color:#069de3}.rank-math-compare-keywords-wrapper .media-modal{top:10%;right:10%;bottom:10%;left:10%}.rank-math-compare-keywords-wrapper .aligncenter{text-align:center}.rank-math-compare-keywords-wrapper .media-frame-menu{width:300px}.rank-math-compare-keywords-wrapper .media-frame-content,.rank-math-compare-keywords-wrapper .media-frame-title{left:300px}.rank-math-compare-keywords-wrapper h1{line-height:50px;padding:0 16px}.rank-math-compare-keywords-wrapper .widefat{width:240px;margin:8px 10px 8px 20px}.rank-math-compare-keywords-wrapper .button-link.remove-keyword{margin-top:10px;padding:0;text-decoration:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-compare-keywords-wrapper .button-primary{width:260px;margin:15px auto}.rank-math-compare-keywords-wrapper .button-secondary+.button-secondary{margin-left:10px}.rank-math-compare-keywords-wrapper .attachments-browser iframe{position:relative;overflow:hidden;margin-top:10px;height:450px;width:100%}.cmb2-id-rank-math-pillar-content .cmb-th label{visibility:hidden}.rank-math-serp-group li:before,.rank-math-serp-group.state-closed .group-status:before{font-family:dashicons;font-size:18px;line-height:1;float:left;margin:4px 10px 0 -30px;content:'\f335';color:#fff;border:1px solid #eac0c2;border-radius:50em;background:#eac0c2;height:18px;width:18px}.rank-math-serp-group .test-ok:before,.rank-math-serp-group .test-gallery:before,.rank-math-serp-group.state-closed .group-status.passed:before{content:'\f147';border-color:#58bb58;background:#58bb58}.rank-math-serp-checklist .group-handle{position:relative;padding:15px 20px;cursor:pointer;background:#ededee}.rank-math-serp-checklist h4{margin:0;color:#23282d}.rank-math-serp-checklist .group-handlediv{cursor:pointer;-webkit-transform:translateY(-50%);transform:translateY(-50%);border:0;background:0;position:absolute;top:50%;right:10px}.rank-math-serp-checklist .group-handlediv:focus{outline:0;-webkit-box-shadow:none;box-shadow:none}.rank-math-serp-group{margin-top:20px;background:#f5f5f5}.rank-math-serp-group:first-of-type{margin-top:0}.rank-math-serp-group ul{padding:15px 20px}.rank-math-serp-group li{font-size:15px;line-height:28px;position:relative;clear:both;padding-left:30px;color:#444}.rank-math-serp-group li section{display:none}.rank-math-serp-group .test-ok .rank-math-tooltip,.rank-math-serp-group .test-gallery .rank-math-tooltip{display:none}.rank-math-serp-group .test-fail,.rank-math-serp-group .test-empty{color:#a0a0a0}.rank-math-serp-group .rank-math-tooltip{top:4px;right:-2px}.rank-math-serp-group .toggle-indicator:before{font:normal 20px/1 dashicons;display:inline-block;content:'\f142';text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.rank-math-serp-group.state-closed ul{display:none}.rank-math-serp-group.state-closed .toggle-indicator:before{content:'\f140' !important}.rank-math-serp-group.state-closed .group-status{float:left}.rank-math-serp-group.state-closed .group-status:before{margin:0 10px 0 0}.rank-math-serp-group li.seo-check-calculateFleschReading.okay:before,.rank-math-serp-group li.seo-check-calculateFleschReading.fairlyDifficult:before{border-color:#ffbe5f;background:#ffbe5f}.rank-math-serp-group li.seo-check-calculateFleschReading.difficult:before{border-color:#eac0c2;background:#eac0c2}#setting-panel-richsnippet .cmb-row-50,#setting-panel-richsnippet .cmb-row-33{vertical-align:top;border-top:1px solid #e9e9e9;border-bottom:0}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-music-type{border-top:0}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-music-type .cmb-th,#setting-panel-richsnippet .cmb2-id-rank-math-snippet-music-type .cmb-td{margin-left:0;padding:0}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-ingredients,#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-instructions{border-top:1px solid #e9e9e9}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-instruction-type{border-top:1px solid #e9e9e9}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-single-instructions,#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-instruction-name,#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-instructions{border-top:none}#setting-panel-richsnippet .notice-warning{margin:10px 0 0;background-color:#fefcee}#setting-panel-social .rank-math-tab{padding:30px 0 0}#setting-panel-social .rank-math-social-preview+.notice{margin-top:20px}#setting-panel-social .cmb-row.cmb-row-33{vertical-align:top;min-height:118px}.rank-math-social-preview-button{font-size:13px;display:inline-block;padding:4px 8px;text-decoration:none;text-transform:uppercase;color:#555555;border:0;outline:none;background:#ededee;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-social-preview-button .dashicons{position:relative;top:-2px}.open .rank-math-social-preview-button{color:#fff;background:#069de3}.rank-math-social-preview-item{display:none;padding:30px}.rank-math-social-preview-item-wrapper{overflow:hidden;width:474px;max-width:100%;margin:auto;background:#fff;border:1px solid;border-radius:0 0 3px 3px;border-color:#dadada #dadada #ccc;-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-social-preview-item .error-msg{width:528px;max-width:100%;margin:auto;padding-top:10px;display:none;line-height:1}.rank-math-social-preview-item .error-msg.show{display:block}.rank-math-social-preview-image{line-height:0;position:relative;z-index:1}.rank-math-social-preview-image img{display:none;max-width:100%;height:100%;min-height:initial}.rank-math-social-preview-image-overlay{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%) scale(0.22126);transform:translate(-50%, -50%) scale(0.22126)}.rank-math-social-preview-image .error-msg{display:none;line-height:1}.rank-math-social-preview .rank-math-social-preview-caption{font-size:12px;background:#f2f3f5;padding:10px 10px 5px;color:#1d2129}.rank-math-social-preview .rank-math-social-preview-title{font-size:16px;font-weight:600;line-height:22px;margin:0 0 8px;padding:0;letter-spacing:normal;word-wrap:break-word}.rank-math-social-preview-description,.rank-math-social-preview-publisher{line-height:16px;margin:0}.rank-math-social-preview-publisher{font-size:12px;font-weight:normal;padding-bottom:5px;color:#90949c}.rank-math-social-preview-publisher.facebook{text-transform:uppercase}.rank-math-social-preview-social-meta{display:none;width:474px;margin:0 auto;clear:both;display:block;position:relative;margin-bottom:15px}.rank-math-social-preview-social-meta .social-profile-image{width:48px;height:48px;background:#dcc7c7;border-radius:50%;float:left;position:absolute;left:-58px}.rank-math-social-preview-social-meta .social-name{color:#14171a;font-size:14px;font-weight:bold}.rank-math-social-preview-social-meta .social-username,.rank-math-social-preview-social-meta .social-time{font-size:14px;color:#657786;font-weight:normal;margin-left:3px}.rank-math-social-preview-social-meta .social-time{margin-left:5px}.rank-math-social-preview-social-meta .social-time:before{content:"\00B7";margin-right:5px}.rank-math-social-preview-social-meta .social-text{margin-top:5px}.rank-math-social-preview-facebook .rank-math-social-preview-button strong:before{content:attr(data-facebook)}.rank-math-social-preview-facebook .facebook-thumbnail{display:block}.rank-math-social-preview-facebook .no-facebook-image .facebook-thumbnail{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.twitter-meta{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-description{overflow:hidden;max-height:1.3em;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta{display:block;border:1px solid #dadada;border-bottom:0;border-radius:3px 3px 0;padding:12px;margin-bottom:0;-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .social-profile-image{width:40px;height:40px;left:auto;position:relative;margin-right:10px;margin-left:-2px}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .social-name{color:#365899;margin-bottom:3px}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .social-time:before{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .social-time span:first-child:after{content:"\00B7";margin-right:3px;margin-left:5px}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .dashicons.dashicons-admin-site{font-size:14px;line-height:17px}.rank-math-social-preview-facebook .twitter{display:none}.rank-math-social-preview-twitter.app,.rank-math-social-preview-twitter.player{display:none !important}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper{max-width:100%;border:1px solid rgba(136,153,166,0.5);border-radius:10px;clear:both}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .twitter-thumbnail{display:block;max-width:100%}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .rank-math-social-preview-caption{background:#ffffff}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover{background:#F5F8FA}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#F5F8FA}.rank-math-social-preview-twitter .rank-math-social-preview-title{font:normal normal bold 14px/1.4 Helvetica,Roboto,'Segoe UI',Calibri,sans-serif;overflow:hidden;max-height:1.3em;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis}.rank-math-social-preview-twitter .rank-math-social-preview-description{font-size:14px;line-height:20px;overflow:hidden;max-height:4.5em;margin-top:.32333em}.rank-math-social-preview-twitter .rank-math-social-preview-publisher{padding-top:5px}.rank-math-social-preview-twitter .rank-math-social-preview-publisher.facebook{display:none}.rank-math-social-preview-twitter .no-twitter-image .twitter-thumbnail{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-button strong:before{content:attr(data-twitter)}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image{float:left}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image img{height:125px;width:125px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-caption{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:125px;padding:5px 0 0 15px}.rank-math-social-preview-twitter .rank-math-social-preview-social-meta.facebook-meta{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-social-meta.twitter-meta{display:block}.suggestion-item{overflow:hidden;margin-bottom:5px;padding-bottom:5px;border-bottom:1px dotted #e5e5e5}.suggestion-item a{text-decoration:none;-webkit-box-shadow:none !important;box-shadow:none !important}.suggestion-item .suggestion-actions{float:right;margin-left:5px}.suggestion-item .dashicons{margin-top:5px;cursor:pointer}#rank_math_keyword_density{font-weight:600;display:none;float:right;cursor:pointer;color:#888}#rank_math_keyword_density span{float:right}#rank_math_keyword_density .inner-wrapper{position:absolute;z-index:1;right:30px;margin-top:8px;padding:5px 15px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}#rank_math_keyword_density .inner-wrapper ul{margin-top:15px}#rank_math_keyword_density.state-closed span:before{content:'\f140' !important}#rank_math_keyword_density.state-closed .inner-wrapper{display:none}body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a{float:right;margin-right:-1px;margin-left:0;padding-right:8px;padding-left:12px}body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .dashicons,body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .fa{margin-right:0;margin-left:5px}body.rtl .rank-math-metabox-wrap .social-tabs-navigation a .dashicons{margin-right:0;margin-left:8px}body.rtl .serp-preview .group .serp-close{left:10px;right:auto}body.rtl .serp-preview .rank-math-variables-wrap input,body.rtl .serp-preview .rank-math-variables-wrap textarea{padding-right:0.6em !important;padding-left:50px}body.rtl .serp-preview .length-indicator-wrapper .length-count{left:0;right:auto}body.rtl .serp-preview .length-indicator-wrapper .length-indicator{left:60px;right:auto}body.rtl .tag-editor{padding:7px 10px 7px 80px}body.rtl .tag-editor>li{float:right;margin-right:0;margin-left:10px}body.rtl .tag-editor>li:nth-child(2):before{right:-6px;left:auto}body.rtl .tag-editor div{float:right}body.rtl .tag-editor-hidden-src{right:-99999px}body.rtl .rank-math-seo-score{right:auto;left:1px}body.rtl .rank-math-serp-checklist .group-handlediv{right:auto;left:10px}body.rtl .rank-math-serp-group.state-closed .group-status{float:right}body.rtl .rank-math-serp-group.state-closed .group-status:before{margin:0 0 0 10px}body.rtl .rank-math-serp-group li{padding-left:0;padding-right:30px}body.rtl .rank-math-serp-group li:before{float:right;margin:4px -30px 0 10px}body.rtl .rank-math-primary-term-li .rank-math-make-primary,body.rtl .rank-math-primary-term-li .text-primary{right:auto;left:0}body.rtl .rank-math-primary-term-li .rank-math-tooltip{right:auto;left:0}body.rtl .rank-math-primary-term-li .rank-math-tooltip>span{right:auto;left:32px;-webkit-transform:translate3d(70%, -50%, 0);transform:translate3d(70%, -50%, 0)}body.rtl .rank-math-primary-term-li .rank-math-tooltip>span:after{left:-8px;right:auto;top:30%;-webkit-transform:rotate(180deg);transform:rotate(180deg)}body.rtl .rank-math-primary-term-li .rank-math-tooltip:hover>span{-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0)}body.rtl .suggestion-item .suggestion-actions{float:left;margin-right:5px}body.rtl input[type=checkbox]:checked:before{margin:-3px}body.rtl .postbox-container #side-sortables{overflow:hidden}.ask-review{text-align:center}.ask-review p{font-size:14px;margin-bottom:20px}.ask-review .stars-wrapper{line-height:60px;width:316px;margin:0 auto;margin-bottom:20px;border:1px solid #ddd;border-radius:6px}.ask-review .stars-wrapper .stars a{position:relative;top:9px;display:inline-block;height:40px;width:40px;text-decoration:none;color:#aaa}.ask-review .stars-wrapper .stars a span{font-size:40px;height:40px;width:40px}.ask-review .stars-wrapper .stars a.highlighted,.ask-review .stars-wrapper .stars a:hover{color:#f9cb12}.ask-review .stars-wrapper .face{float:right;width:70px;height:60px;border-left:1px solid #ddd;background:#fafafa}.smiley{position:relative;top:50%;left:50%;height:22px;width:22px;padding:12px;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);border-radius:100%;background:linear-gradient(135deg, #ffe919 0%, #fbc000 100%)}.mouth{position:absolute;bottom:18%;left:50%;-webkit-box-sizing:border-box;box-sizing:border-box;width:60%;height:30%;margin-left:-30%;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:22px;border-bottom-left-radius:22px;background:#b57700}.eyes{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:15%;padding:0 1px;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.eyes .eye{position:relative;float:left;height:5px;width:5px;border-radius:100%;background:#b57700}.eyes .eye:nth-of-type(2){float:right}.eyes .eye::after{position:absolute;top:-5px;left:2px;display:block;height:0;width:0;content:'';-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);background:#fed800}.eyes .eye:first-of-type::after{right:5px;left:auto;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.smiley.normal .mouth{bottom:25%;width:40%;height:10%;margin-left:-20%;border-top-left-radius:22px;border-top-right-radius:22px;border-bottom-right-radius:22px;border-bottom-left-radius:22px}.smiley.normal .eyes{margin-top:30%}.smiley.angry .mouth{bottom:25%;left:50%;width:40%;height:10%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:0;border-bottom-left-radius:0}.smiley.happy .mouth{-webkit-animation:move-mouth-down .8s;animation:move-mouth-down .8s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}.smiley.happy .eyes{-webkit-animation:move-eyes-down .8s;animation:move-eyes-down .8s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}.smiley.happy .eye:nth-of-type(2){height:5px;margin-top:0;-webkit-animation:wink .8s;animation:wink .8s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes wink{0%{height:5px;margin-top:0}30%{height:2px;margin-top:1px}70%{height:2px;margin-top:1px}100%{height:5px;margin-top:0}}@keyframes wink{0%{height:5px;margin-top:0}30%{height:2px;margin-top:1px}70%{height:2px;margin-top:1px}100%{height:5px;margin-top:0}}.smiley.normal .eye{height:5px;margin-top:0;-webkit-animation:blink .6s;animation:blink .6s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes blink{0%{height:5px;margin-top:0}25%{height:2px;margin-top:1px}50%{height:5px;margin-top:0}75%{height:2px;margin-top:1px}100%{height:5px;margin-top:0}}@keyframes blink{0%{height:5px;margin-top:0}25%{height:2px;margin-top:1px}50%{height:5px;margin-top:0}75%{height:2px;margin-top:1px}100%{height:5px;margin-top:0}}.smiley.angry .eyes,.smiley.angry .mouth{-webkit-animation:move-angry-head .6s;animation:move-angry-head .6s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}
6
-
7
- /*# sourceMappingURL=metabox.css.map */
2
  * Plugin: Rank Math
3
  * URL: https://rankmath.com/wordpress/plugin/seo-suite/
4
  * Name: metabox.css
5
+ */#rank_math_metabox .inside{margin:0;padding:0}.rank-math-metabox-frame{position:relative;min-width:255px;max-width:1000px;margin-bottom:25px;border:1px solid #e5e5e5;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04)}.rank-math-metabox-frame-title{font-size:14px;line-height:1.4;margin:0;padding:8px 12px;border-bottom:1px solid #e5e5e5}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation){padding:30px 20px 0;border-bottom:1px solid #e5e5e5;background:#fafafa}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a{font-size:14px;font-weight:600;position:relative;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:7px;padding:8px 16px 4px 12px;white-space:nowrap;text-decoration:none;color:#555;border:1px solid #e6e6e6;border-bottom:0;outline:none;background:#f5f5f5;-webkit-box-shadow:none;box-shadow:none}@media (max-width: 768px){.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a{margin-left:-1px;padding:8px 12px 4px 8px}}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a[href="#setting-panel-askreview"]{padding-right:12px;float:right;color:#e93f30}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .dashicons,.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .fa{font-size:14px;line-height:inherit;min-width:20px;text-align:center}.rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a.active{bottom:-1px;margin-top:-1px;padding-bottom:5px;color:#069de3;border-top-color:#069de3;background:#fff}.rank-math-metabox-wrap .social-tabs-navigation{display:inline-block;border-radius:3px;-webkit-box-shadow:0 1px 6px 0 rgba(35,40,45,0.18);box-shadow:0 1px 6px 0 rgba(35,40,45,0.18)}.rank-math-metabox-wrap .social-tabs-navigation-wrapper{padding-bottom:30px;text-align:center}.rank-math-metabox-wrap .social-tabs-navigation a{font-size:16px;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;width:130px;padding:11px;text-decoration:none;color:#939393;border:1px solid #e5e5e5;outline:none;background:#efefef;-webkit-box-shadow:none;box-shadow:none}.rank-math-metabox-wrap .social-tabs-navigation a .dashicons{margin-right:8px}.rank-math-metabox-wrap .social-tabs-navigation .tab-facebook{border-right:0;border-radius:3px 0 0 3px}.rank-math-metabox-wrap .social-tabs-navigation .tab-facebook.tab-active{color:#fff;border-color:#3b5998;background:#3b5998}.rank-math-metabox-wrap .social-tabs-navigation .tab-twitter{border-left:0;border-radius:0 3px 3px 0}.rank-math-metabox-wrap .social-tabs-navigation .tab-twitter.tab-active{color:#fff;border-color:#55acee;background:#55acee}.rank-math-metabox-wrap .rank-math-tab{display:none;padding:30px}.serp-preview .highlight{pointer-events:none}.serp-preview-title:before{font-size:13px;font-weight:600;display:inline-block;padding-bottom:6px;content:attr(data-title);letter-spacing:.05em;text-transform:uppercase}.serp-preview-wrapper{position:relative;-webkit-transition:all .6s ease;transition:all .6s ease}.serp-preview-body{padding:15px 0;-webkit-transition:width .5s ease, padding .5s ease, margin .5s ease;transition:width .5s ease, padding .5s ease, margin .5s ease}.serp-preview-body .serp-star-rating{display:inline-block;position:relative;color:#ccc;margin-right:5px}.serp-preview-body .serp-star-rating .dashicons{font-size:16px;width:16px;height:16px}.serp-preview-body .serp-star-rating .serp-result{position:absolute;top:0;left:0;height:22px;overflow:hidden;white-space:nowrap;color:#e7711b}.serp-preview-body .cmb-row .cmb-td{width:100%;max-width:680px}.serp-preview-body .cmb-row .cmb-td .cmb2_textarea{width:100% !important}.serp-preview-footer{padding:15px 0}.serp-preview-footer .button.button-secondary{line-height:41px;padding:0 12px}.serp-preview-footer .button.button-secondary .dashicons{font-size:20px;line-height:41px}.serp-preview-bg{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:opacity .5s ease, height .5s ease;transition:opacity .5s ease, height .5s ease;opacity:0;background-color:#fafafa;height:0;width:100%}.serp-preview-bg .serp-preview-input{position:relative;max-width:600px;pointer-events:none}.serp-preview-bg .serp-preview-input input{font:16px arial,sans-serif;padding:5px 9px 5px 16px;-webkit-transition:-webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:-webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1),-webkit-box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);vertical-align:top;color:#000;border:none;border-radius:2px;outline:none;background-color:#fff;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 0 1px rgba(0,0,0,0.08);box-shadow:0 2px 2px 0 rgba(0,0,0,0.16),0 0 0 1px rgba(0,0,0,0.08);height:44px;width:100%}.serp-preview-bg .serp-preview-input .serp-mike{position:absolute;top:0;right:50px;bottom:0;display:inline-block;width:24px;padding:0 2px 0 8px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrElEQVR42u2Xz2sTQRSAX8VSb1K8iNqKooJH2Ux6Ksn+iPQqxZMIehJB0do/IMhmQWsvHr2KSEGk0tSLIoWIYNUKij20F2/N7iaUZnYT0kYzzhMKs0HDJiTdLcwHDwKZSd63781LBiQSSW9JZdkhzfKm1Rz9mjZp/W9YdEU3vXv4HsQZ40FtNG36q5rls//Ej4tmbSS2T15Mvp3ExOPmEMQNbBtMMEyoljcFcQN7PqyAlqNfIG7gYQ0tYNIaxA1MrJPY3wImbUqBKAXSFv0tBSIVMOkvKRDtGKWN/T6FdqRAxFNoWwpEPIXqUqBT6ALU/UVgu8GW4GD3f6f9TRDYNJTDrk7YbtiqUumHwIYoUJuHERDAS0r4CvgFECgbY+cFAR7KT+g1POmCKFDNw6WggHc3fBtVb4CAoyauBgXIG+g1Xh5mRAGah6cggBd11fK/h7lOprIs0H6uRl6KAo5O7kOv4QmPiwJ4Jqqv4FiwCtXjvD2+tRmfK6kZ/ygI2HritK0rDVGgrClJ6DWMwYC/AGuCBMYcIC2V0CzvjmbRz3j3xUjn6CfeYreUJ2wQkGD75INPX1mFfsEFrrcIYCvdhC4paWQakxajpJMr0C9YFg54i7AsClRmh9/xnr0NHcInzZStk2aLwAcGMAD9pPIazvFKVDD5rdnhJeHLX5RTyRPQHpz5o66emMc9wdlPtvA8wF7Aq2BUHh1525qEo5JtR1WeOXpickO9cJIpyuD6xJmhYiZ5ytWSl3mlnuOaf+2zDaLDXmJrSgZ/MYVEugo+gSh+FkSBa4yd5Ul87DZ5XpFl/AyIEjzYjkau8WqshU2cr13HPbgX4gJOD97n465GZlyVvC9mSKloKI2iTnbwNT+gBX54H+IaXAtxJzE3ycSAFqSAFJACUkAikXD+AHj5/wx2o5osAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:right center;background-size:24px 24px}.serp-preview-bg .serp-preview-input .serp-search{line-height:46px;position:absolute;top:0;right:15px;bottom:0;height:46px;text-align:center;border:0;outline:0}.serp-preview-bg .serp-preview-input .serp-search svg{width:25px;height:46px;fill:#4285f4}.serp-preview-bg .serp-preview-menus{overflow:hidden;max-width:600px}.serp-preview-bg .serp-preview-menus ul{float:left;overflow:hidden;margin:0;padding:0;list-style:none}.serp-preview-bg .serp-preview-menus ul li{font-family:arial,sans-serif;font-size:13px;line-height:19px;float:left;height:15px;margin:0;padding:28px 16px 12px;color:#777}.serp-preview-bg .serp-preview-menus ul li.current{font-weight:bold;color:#1a73e8;border-bottom:3px solid #1a73e8}.serp-preview-bg .serp-preview-menus ul.menus-right{float:right}.serp-preview-bg .serp-preview-result-stats{font-family:arial,sans-serif;font-size:small;line-height:43px;margin:0 -20px;padding-right:20px;padding-left:20px;white-space:nowrap;text-overflow:ellipsis;color:#808080;background-color:#fff}.serp-preview-noindex{z-index:1;display:none;padding:15px 0;background:rgba(255,255,255,0.8);position:absolute;top:0;right:0;bottom:0;left:0}.serp-preview-noindex h3{font-weight:700;margin:0;letter-spacing:1px;text-transform:uppercase}.serp-preview-noindex p{font-size:14px;line-height:2;margin:5px 0;color:#000}.serp-preview .serp-description,.serp-preview .serp-title,.serp-preview .serp-url{font-family:arial, sans-serif;position:relative;z-index:1;display:block;overflow:hidden;width:100%;max-width:680px;margin:0;cursor:pointer}.serp-preview .serp-description:focus:before,.serp-preview .serp-description:hover:before,.serp-preview .serp-title:focus:before,.serp-preview .serp-title:hover:before,.serp-preview .serp-url:focus:before,.serp-preview .serp-url:hover:before{font-family:dashicons;z-index:-1;content:'\f464';text-align:right;background:#f0f1f3;position:absolute;top:0;right:0;bottom:0;left:0}.serp-preview .serp-description:empty:after,.serp-preview .serp-title:empty:after,.serp-preview .serp-url:empty:after{content:attr(data-empty-title)}.serp-preview .serp-title{font-size:18px;font-weight:normal;line-height:19px;white-space:nowrap;text-overflow:ellipsis;color:#1a0dab}.serp-preview .serp-url{font-size:14px;line-height:16px;margin:3px 0 5px;white-space:nowrap;text-overflow:ellipsis;color:#006621}.serp-preview .serp-description{font-size:13px;line-height:1.4;clear:left;word-wrap:break-word;color:#545454}.serp-preview .group{position:relative;min-height:10px}.serp-preview .group .cmb-row{display:none;padding:20px 0 !important;border:0}.serp-preview .group .serp-close{position:absolute;top:10px;right:10px;display:none;cursor:pointer}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active{margin-top:20px;padding:30px 20px 20px;background:#f6f6f6}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active .cmb-row{display:block}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active .cmb-row.cmb2-id-rank-math-title .rank-math-variables-button{right:0}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active .cmb-row.cmb2-id-rank-math-description .rank-math-variables-dropdown{top:60px}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active .serp-close{display:block}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active+.group,.serp-preview:not(.expanded-preview):not(.mobile-preview) .group+.group.active{margin-top:20px}.serp-preview:not(.expanded-preview):not(.mobile-preview) .group.active+.group+.serp-rating,.serp-preview:not(.expanded-preview):not(.mobile-preview) .group+.group.active+.serp-rating{display:none}.serp-preview .button{height:auto;padding:0 5px;outline:0}.serp-preview .button,.serp-preview .button .dashicons{font-size:15px;line-height:30px;height:auto}.serp-preview .button-secondary{margin-bottom:0;color:#818181;border-color:#e5e5e5;background:#fff !important;-webkit-box-shadow:0 1px 2px 0 #e5e5e5 !important;box-shadow:0 1px 2px 0 #e5e5e5 !important}.serp-preview .button-secondary.active,.serp-preview .button-secondary.active:hover{color:#fff;border-color:#0392d4;background:#069de3 !important}.serp-preview .button-secondary:hover{color:#069de3;border-color:#0392d4}.serp-preview-title .alignright{margin-top:-9px}.serp-preview.desktop-preview .serp-snippet-mobile{display:none}.serp-preview.desktop-preview .serp-snippet-data{color:#808080;line-height:18px;font-size:small;font-weight:normal;margin-bottom:3px}.serp-preview.desktop-preview .serp-snippet-data .serp-desktop-rating{float:left;margin-top:1px}.serp-preview.desktop-preview .serp-snippet-data .separator:first-child{display:none}.serp-preview.desktop-preview .serp-snippet-data .serp-event_name{color:#1a0dab;cursor:pointer}.serp-preview.desktop-preview .serp-snippet-data .serp-event_name:hover{text-decoration:underline}.serp-preview.desktop-preview .serp-snippet-data .serp-event_name,.serp-preview.desktop-preview .serp-snippet-data .serp-event_place{padding-left:15px}.serp-preview.desktop-preview .serp-preview-footer .alignright .dashicons{margin-right:0}.serp-preview.mobile-preview.expanded-preview .group:nth-child(2){margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid #dfe1e5}.serp-preview.mobile-preview .serp-snippet-mobile{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:8px -5px 0}.serp-preview.mobile-preview .serp-snippet-mobile .inner-wrapper{-webkit-box-flex:1;-ms-flex:1;flex:1;margin-left:5px;margin-right:5px}.serp-preview.mobile-preview .serp-snippet-mobile .inner-wrapper .serp-mobile-label{display:block;font-size:14px;line-height:20px;margin-bottom:4px;color:#202124;font-weight:500}.serp-preview.mobile-preview .serp-snippet-mobile .inner-wrapper .serp-rating-count{float:left}.serp-preview.mobile-preview .serp-snippet-mobile .inner-wrapper .serp-rating{float:left;margin-left:5px}.serp-preview.mobile-preview .serp-snippet-mobile .serp-rating-count{color:#808080}.serp-preview.mobile-preview .serp-snippet-data{display:none}.mobile-preview .serp-preview-title:before{content:attr(data-mobile)}.mobile-preview .serp-preview-bg{position:relative;overflow:visible;width:400px;max-width:100%;margin:auto;border-radius:8px;background-color:transparent;-webkit-box-shadow:0 1px 6px rgba(32,33,36,0.28);box-shadow:0 1px 6px rgba(32,33,36,0.28)}.mobile-preview .serp-preview-bg .serp-preview-input input{height:41px;border-bottom:1px solid rgba(0,0,0,0.12);border-radius:8px 8px 0 0;-webkit-box-shadow:none;box-shadow:none}.mobile-preview .serp-preview-bg .serp-preview-input .serp-mike{display:none}.mobile-preview .serp-preview-bg .serp-preview-input .serp-search{right:0;width:40px;height:40px;margin-right:-1px;padding:0;border:1px solid #3367d6;border-radius:0 8px 0 0;-webkit-border-top-right-radius:8px;background-color:#3b78e7;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.mobile-preview .serp-preview-bg .serp-preview-input .serp-search svg{fill:#fff}.mobile-preview .serp-preview-bg .serp-preview-menus ul{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;border-bottom-right-radius:8px;border-bottom-left-radius:8px}.mobile-preview .serp-preview-bg .serp-preview-menus ul li{font-size:12px;line-height:40px;height:40px;padding:0 16px;text-align:center;text-transform:uppercase;-webkit-box-flex:1;-ms-flex:1;flex:1}.mobile-preview .serp-preview-bg .serp-preview-menus ul li:last-child{display:none}.mobile-preview .serp-preview-bg .serp-preview-menus ul.menus-right{display:none}.mobile-preview .serp-preview-bg .serp-preview-result-stats{display:none}.mobile-preview .serp-preview-body{-webkit-box-sizing:border-box;box-sizing:border-box;width:400px;max-width:100%;margin:auto;padding-top:30px;word-wrap:break-word}.mobile-preview.expanded-preview .serp-preview-body{margin-top:10px;padding:20px;border-radius:8px;background-color:#fff;-webkit-box-shadow:0 1px 6px rgba(32,33,36,0.28);box-shadow:0 1px 6px rgba(32,33,36,0.28)}.expanded-preview .serp-description,.expanded-preview .serp-title,.expanded-preview .serp-url,.mobile-preview .serp-description,.mobile-preview .serp-title,.mobile-preview .serp-url{overflow:hidden;pointer-events:none}.expanded-preview .serp-preview-footer,.mobile-preview .serp-preview-footer{display:none}.expanded-preview.desktop-preview .serp-preview-footer{padding:15px 0}.expanded-preview.desktop-preview .serp-preview-wrapper{padding:0}.expanded-preview.desktop-preview .serp-preview-title:before{content:attr(data-desktop)}@media (min-width: 768px){.expanded-preview.desktop-preview .serp-preview-bg{height:auto;padding:15px 20px 0;opacity:1}.expanded-preview.desktop-preview .serp-preview-body{padding-left:20px}}.expanded-preview.mobile-preview .serp-preview-bg{height:auto;margin-top:20px;opacity:1}.noindex-preview .serp-preview-wrapper{position:relative}.noindex-preview .serp-preview-body{pointer-events:none;opacity:.2}.noindex-preview .serp-preview-noindex{display:-webkit-box;display:-ms-flexbox;display:flex;flex-direction:column;align-items:center;-webkit-box-align:center;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-box-pack:center;-ms-flex-align:center;-ms-flex-direction:column;-ms-flex-pack:center;justify-content:center}.noindex-preview .serp-preview-footer .alignright{display:none}body.rtl .serp-preview-bg .serp-preview-input input{padding-right:16px;padding-left:9px}body.rtl .serp-preview-bg .serp-preview-input .serp-search{right:auto;left:15px}body.rtl .serp-preview-bg .serp-preview-input .serp-mike{right:auto;left:50px;padding-right:8px;padding-left:2px}body.rtl .serp-preview-bg .serp-preview-menus ul,body.rtl .serp-preview-bg .serp-preview-menus li{float:right}body.rtl .serp-preview-bg .serp-preview-menus ul.menus-right,body.rtl .serp-preview-bg .serp-preview-menus li.menus-right{float:left}body.rtl .mobile-preview .serp-preview-bg .serp-search{left:0;border-radius:0;border-top-left-radius:8px}body.rtl .serp-preview .serp-description:focus:before,body.rtl .serp-preview .serp-description:hover:before,body.rtl .serp-preview .serp-title:focus:before,body.rtl .serp-preview .serp-title:hover:before,body.rtl .serp-preview .serp-url:focus:before,body.rtl .serp-preview .serp-url:hover:before{text-align:left}body.rtl .rank-math-variables-dropdown{right:auto;left:37px}.snippet-fields{padding:45px 0 15px}.length-indicator-wrapper{position:relative;display:block}.length-indicator-wrapper .length-indicator{overflow:hidden;border-radius:2px;background:-webkit-gradient(linear, left top, right top, from(#e33e2b), color-stop(18%, #f06818), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #f16b17), color-stop(38%, #f1a104), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #f1a404), color-stop(58%, #d9b507), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #d4b509), color-stop(78%, #7bb02c), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #76ae2e), to(#2da24c));background:linear-gradient(to right, #e33e2b 0%, #f06818 18%, #fff 19%, #fff 19%, #f16b17 20%, #f1a104 38%, #fff 39%, #fff 39%, #f1a404 40%, #d9b507 58%, #fff 59%, #fff 59%, #d4b509 60%, #7bb02c 78%, #fff 79%, #fff 79%, #76ae2e 80%, #2da24c 100%);position:absolute;top:-13px;right:60px;height:8px;width:180px}.length-indicator-wrapper .length-indicator span{position:absolute;z-index:11;background:#e0e0e0;height:100%;width:100%}.length-indicator-wrapper .length-indicator.invalid{background:-webkit-gradient(linear, left top, right top, from(#e33d2a), color-stop(18%, #e33d2a), color-stop(19%, #fff), color-stop(19%, #fff), color-stop(20%, #e33d2a), color-stop(38%, #e33d2a), color-stop(39%, #fff), color-stop(39%, #fff), color-stop(40%, #e33d2a), color-stop(58%, #e33d2a), color-stop(59%, #fff), color-stop(59%, #fff), color-stop(60%, #e33d2a), color-stop(78%, #e33d2a), color-stop(79%, #fff), color-stop(79%, #fff), color-stop(80%, #e33d2a), to(#e33d2a));background:linear-gradient(to right, #e33d2a 0%, #e33d2a 18%, #fff 19%, #fff 19%, #e33d2a 20%, #e33d2a 38%, #fff 39%, #fff 39%, #e33d2a 40%, #e33d2a 58%, #fff 59%, #fff 59%, #e33d2a 60%, #e33d2a 78%, #fff 79%, #fff 79%, #e33d2a 80%, #e33d2a 100%)}.length-indicator-wrapper input:focus+.length-indicator,.length-indicator-wrapper textarea:focus+.length-indicator{display:block}.length-indicator-wrapper .length-count{font-size:12px;position:absolute;top:-17px;right:0;color:#afafaf}.tag-editor{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:7px 80px 7px 10px;cursor:text;-webkit-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;border:1px solid #e5e5e5;border-radius:3px;background:#fff;-webkit-box-shadow:inset 0 1px 6px rgba(0,0,0,0.08);box-shadow:inset 0 1px 6px rgba(0,0,0,0.08)}.tag-editor>li{line-height:inherit;position:relative;float:left;margin:3px 10px 3px 0;padding:3px 5px;cursor:pointer;white-space:nowrap;color:#85878b;border-radius:2px;background:#e9e9ea}.tag-editor>li:nth-child(1){margin:0;padding:0;border-color:transparent;background:transparent}.tag-editor div{float:left;padding:0 4px}.tag-editor .placeholder{color:#bbb}.tag-editor-hidden-src{position:absolute !important;left:-99999px}.tag-editor .tag-editor-spacer{display:none}.tag-editor ::-ms-clear{display:none}.tag-editor .tag-editor-tag input[type=text]{margin:0;padding:0;cursor:text;border:0;outline:none;background:none;-webkit-box-shadow:none !important;box-shadow:none !important}.tag-editor .tag-editor-tag.active+.tag-editor-delete,.tag-editor .tag-editor-tag.active+.tag-editor-delete i{visibility:hidden;cursor:text}.tag-editor .tag-editor-delete i{line-height:18px;display:inline-block}.tag-editor .tag-editor-delete i:before{font-size:16px;font-style:normal;content:'×'}.tag-editor .tag-editor-delete:hover i:before{color:#000 !important}.tag-editor>li.selected-fk{color:#000;border-color:#fbbc05;background:#fbbc05}.tag-editor>li.bad-fk{color:#e93f30;background:#fdeae8}.tag-editor>li.bad-fk.selected-fk{color:#fdeae8;background:#e93f30}.tag-editor>li.ok-fk{color:#fbbc05;background:#fef2ce}.tag-editor>li.ok-fk.selected-fk{color:#fef2ce;background:#fbbc05}.tag-editor>li.good-fk{color:#58bb58;background:#e9f6e9}.tag-editor>li.good-fk.selected-fk{color:#e9f6e9;background:#58bb58}.tag-editor>li.selected-fk .tag-editor-tag.active input[type=text],.tag-editor>li.selected-fk .tag-editor-delete:hover i:before{color:#fff}.tag-editor>li:nth-child(2):before,.rank-math-keywords-fields>div:nth-child(1):before{font-family:'dashicons';font-size:7px;line-height:12px;position:absolute;top:-4px;left:-6px;width:12px;content:'\f155';text-align:center;color:#fff;border:1px solid #fff;border-radius:50%;background:#4285f4}.cmb2-wrap .cmb2-id-rank-math-focus-keyword{padding-top:10px}.cmb2-wrap .cmb2-id-rank-math-focus-keyword .cmb-th{width:100%;margin-bottom:10px}.cmb2-wrap .cmb2-id-rank-math-focus-keyword .cmb-td{width:100%}.cmb2-wrap .cmb2-id-rank-math-focus-keyword .notice{margin:20px 0 0;background:#fefcee}.cmb2-wrap .cmb2-id-rank-math-focus-keyword .cmb-td{position:relative}.rank-math-keywords-fields>div{position:relative}.rank-math-keywords-fields>div:nth-child(1):before{top:3px;left:16px}.ui-autocomplete{font-size:14px;position:absolute;top:0;left:0;cursor:default}.ui-autocomplete.ui-autocomplete-loading{background:none}.ui-autocomplete.ui-widget-content{z-index:1111111}.ui-front{z-index:9999}.ui-menu{display:block;margin:0;padding:1px;list-style:none;outline:none}.ui-menu .ui-menu-item a{line-height:1.4;display:block;min-height:0;padding:2px .4em;text-decoration:none}.ui-widget-content{color:#555;border:1px solid #bbb;background:#fff}.ui-widget-content a{color:#46799b}.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{background:#e0eaf1}.ui-helper-hidden-accessible{display:none}.rank-math-seo-score{font-weight:600;position:absolute;top:1px;right:1px;box-sizing:border-box;width:105px;padding:13.5px 15px;text-align:center;border-radius:0 3px 3px 0;background:#f1f1f1}.rank-math-seo-score.misc-pub-section{position:relative;top:auto;right:auto;width:100%;padding:13.5px 12px;text-align:left;border-radius:0}.rank-math-seo-score.misc-pub-section .dashicons{font-size:18px;margin-right:2px}.rank-math-seo-score.good-fk{color:#58bb58;background:#e9f6e9}.rank-math-seo-score.ok-fk{color:#ca9703;background:#fef2ce}.rank-math-seo-score.bad-fk{color:#e93f30;background:#fdeae8}.cmb2-wrap .cmb2-id-rank-math-pillar-content .cmb-th{display:none}.cmb2-wrap .cmb2-id-rank-math-pillar-content .cmb-td{width:100%}.rank-math-primary-term-li{position:relative;display:block}.rank-math-primary-term-li .rank-math-tooltip{position:absolute;right:0;display:none}.rank-math-primary-term-li .rank-math-tooltip>span{top:50%;right:32px;bottom:auto;left:auto;width:110px;-webkit-transform:translate3d(-70%, -50%, 0);transform:translate3d(-70%, -50%, 0)}.rank-math-primary-term-li .rank-math-tooltip>span:after{content:'';-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0);top:50%;right:-8px;left:auto;border-style:solid;height:0;width:0;border-color:transparent transparent transparent #555d66;border-width:7px 0 7px 8px}.rank-math-primary-term-li .rank-math-tooltip:hover span{bottom:auto;-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0);opacity:1}.rank-math-primary-term-li.term-checked>label>.rank-math-tooltip{display:inline-block}.rank-math-compare-keywords-trigger{float:right;margin-top:-10px;margin-bottom:5px;text-decoration:none;color:#069de3}.rank-math-compare-keywords-wrapper .media-modal{top:10%;right:10%;bottom:10%;left:10%}.rank-math-compare-keywords-wrapper .aligncenter{text-align:center}.rank-math-compare-keywords-wrapper .media-frame-menu{width:300px}.rank-math-compare-keywords-wrapper .media-frame-content,.rank-math-compare-keywords-wrapper .media-frame-title{left:300px}.rank-math-compare-keywords-wrapper h1{line-height:50px;padding:0 16px}.rank-math-compare-keywords-wrapper .widefat{width:240px;margin:8px 10px 8px 20px}.rank-math-compare-keywords-wrapper .button-link.remove-keyword{margin-top:10px;padding:0;text-decoration:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-compare-keywords-wrapper .button-primary{width:260px;margin:15px auto}.rank-math-compare-keywords-wrapper .button-secondary+.button-secondary{margin-left:10px}.rank-math-compare-keywords-wrapper .attachments-browser iframe{position:relative;overflow:hidden;margin-top:10px;height:450px;width:100%}.cmb2-id-rank-math-pillar-content .cmb-th label{visibility:hidden}.rank-math-serp-group li:before,.rank-math-serp-group.state-closed .group-status:before{font-family:dashicons;font-size:18px;line-height:1;float:left;margin:4px 10px 0 -30px;content:'\f335';color:#fff;border:1px solid #eac0c2;border-radius:50em;background:#eac0c2;height:18px;width:18px}.rank-math-serp-group .test-ok:before,.rank-math-serp-group .test-gallery:before,.rank-math-serp-group.state-closed .group-status.passed:before{content:'\f147';border-color:#58bb58;background:#58bb58}.rank-math-serp-checklist .group-handle{position:relative;padding:15px 20px;cursor:pointer;background:#ededee}.rank-math-serp-checklist h4{margin:0;color:#23282d}.rank-math-serp-checklist .group-handlediv{cursor:pointer;-webkit-transform:translateY(-50%);transform:translateY(-50%);border:0;background:0;position:absolute;top:50%;right:10px}.rank-math-serp-checklist .group-handlediv:focus{outline:0;-webkit-box-shadow:none;box-shadow:none}.rank-math-serp-group{margin-top:20px;background:#f5f5f5}.rank-math-serp-group:first-of-type{margin-top:0}.rank-math-serp-group ul{padding:15px 20px}.rank-math-serp-group li{font-size:15px;line-height:28px;position:relative;clear:both;padding-left:30px;color:#444}.rank-math-serp-group li section{display:none}.rank-math-serp-group .test-ok .rank-math-tooltip,.rank-math-serp-group .test-gallery .rank-math-tooltip{display:none}.rank-math-serp-group .test-fail,.rank-math-serp-group .test-empty{color:#a0a0a0}.rank-math-serp-group .rank-math-tooltip{top:4px;right:-2px}.rank-math-serp-group .toggle-indicator:before{font:normal 20px/1 dashicons;display:inline-block;content:'\f142';text-decoration:none !important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.rank-math-serp-group.state-closed ul{display:none}.rank-math-serp-group.state-closed .toggle-indicator:before{content:'\f140' !important}.rank-math-serp-group.state-closed .group-status{float:left}.rank-math-serp-group.state-closed .group-status:before{margin:0 10px 0 0}.rank-math-serp-group li.seo-check-calculateFleschReading.okay:before,.rank-math-serp-group li.seo-check-calculateFleschReading.fairlyDifficult:before{border-color:#ffbe5f;background:#ffbe5f}.rank-math-serp-group li.seo-check-calculateFleschReading.difficult:before{border-color:#eac0c2;background:#eac0c2}#setting-panel-richsnippet .cmb-row-50,#setting-panel-richsnippet .cmb-row-33{vertical-align:top;border-top:1px solid #e9e9e9;border-bottom:0}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-music-type{border-top:0}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-music-type .cmb-th,#setting-panel-richsnippet .cmb2-id-rank-math-snippet-music-type .cmb-td{margin-left:0;padding:0}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-ingredients,#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-instructions{border-top:1px solid #e9e9e9}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-instruction-type{border-top:1px solid #e9e9e9}#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-single-instructions,#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-instruction-name,#setting-panel-richsnippet .cmb2-id-rank-math-snippet-recipe-instructions{border-top:none}#setting-panel-richsnippet .notice-warning{margin:10px 0 0;background-color:#fefcee}#setting-panel-social .rank-math-tab{padding:30px 0 0}#setting-panel-social .rank-math-social-preview+.notice{margin-top:20px}#setting-panel-social .cmb-row.cmb-row-33{vertical-align:top;min-height:118px}.rank-math-social-preview-button{font-size:13px;display:inline-block;padding:4px 8px;text-decoration:none;text-transform:uppercase;color:#555555;border:0;outline:none;background:#ededee;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-social-preview-button .dashicons{position:relative;top:-2px}.open .rank-math-social-preview-button{color:#fff;background:#069de3}.rank-math-social-preview-item{display:none;padding:30px}.rank-math-social-preview-item-wrapper{overflow:hidden;width:474px;max-width:100%;margin:auto;background:#fff;border:1px solid;border-radius:0 0 3px 3px;border-color:#dadada #dadada #ccc;-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-social-preview-item .error-msg{width:528px;max-width:100%;margin:auto;padding-top:10px;display:none;line-height:1}.rank-math-social-preview-item .error-msg.show{display:block}.rank-math-social-preview-image{line-height:0;position:relative;z-index:1}.rank-math-social-preview-image img{display:none;max-width:100%;height:100%;min-height:initial}.rank-math-social-preview-image-overlay{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%) scale(0.22126);transform:translate(-50%, -50%) scale(0.22126)}.rank-math-social-preview-image .error-msg{display:none;line-height:1}.rank-math-social-preview .rank-math-social-preview-caption{font-size:12px;background:#f2f3f5;padding:10px 10px 5px;color:#1d2129}.rank-math-social-preview .rank-math-social-preview-title{font-size:16px;font-weight:600;line-height:22px;margin:0 0 8px;padding:0;letter-spacing:normal;word-wrap:break-word}.rank-math-social-preview-description,.rank-math-social-preview-publisher{line-height:16px;margin:0}.rank-math-social-preview-publisher{font-size:12px;font-weight:normal;padding-bottom:5px;color:#90949c}.rank-math-social-preview-publisher.facebook{text-transform:uppercase}.rank-math-social-preview-social-meta{display:none;width:474px;margin:0 auto;clear:both;display:block;position:relative;margin-bottom:15px}.rank-math-social-preview-social-meta .social-profile-image{width:48px;height:48px;background:#dcc7c7;border-radius:50%;float:left;position:absolute;left:-58px}.rank-math-social-preview-social-meta .social-name{color:#14171a;font-size:14px;font-weight:bold}.rank-math-social-preview-social-meta .social-username,.rank-math-social-preview-social-meta .social-time{font-size:14px;color:#657786;font-weight:normal;margin-left:3px}.rank-math-social-preview-social-meta .social-time{margin-left:5px}.rank-math-social-preview-social-meta .social-time:before{content:"\00B7";margin-right:5px}.rank-math-social-preview-social-meta .social-text{margin-top:5px}.rank-math-social-preview-facebook .rank-math-social-preview-button strong:before{content:attr(data-facebook)}.rank-math-social-preview-facebook .facebook-thumbnail{display:block}.rank-math-social-preview-facebook .no-facebook-image .facebook-thumbnail{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.twitter-meta{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-description{overflow:hidden;max-height:1.3em;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta{display:block;border:1px solid #dadada;border-bottom:0;border-radius:3px 3px 0;padding:12px;margin-bottom:0;-webkit-box-sizing:border-box;box-sizing:border-box}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .social-profile-image{width:40px;height:40px;left:auto;position:relative;margin-right:10px;margin-left:-2px}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .social-name{color:#365899;margin-bottom:3px}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .social-time:before{display:none}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .social-time span:first-child:after{content:"\00B7";margin-right:3px;margin-left:5px}.rank-math-social-preview-facebook .rank-math-social-preview-social-meta.facebook-meta .dashicons.dashicons-admin-site{font-size:14px;line-height:17px}.rank-math-social-preview-facebook .twitter{display:none}.rank-math-social-preview-twitter.app,.rank-math-social-preview-twitter.player{display:none !important}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper{max-width:100%;border:1px solid rgba(136,153,166,0.5);border-radius:10px;clear:both}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .twitter-thumbnail{display:block;max-width:100%}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper .rank-math-social-preview-caption{background:#ffffff}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover{background:#F5F8FA}.rank-math-social-preview-twitter .rank-math-social-preview-item-wrapper:hover .rank-math-social-preview-caption{background:#F5F8FA}.rank-math-social-preview-twitter .rank-math-social-preview-title{font:normal normal bold 14px/1.4 Helvetica,Roboto,'Segoe UI',Calibri,sans-serif;overflow:hidden;max-height:1.3em;margin-bottom:2px;white-space:nowrap;text-overflow:ellipsis}.rank-math-social-preview-twitter .rank-math-social-preview-description{font-size:14px;line-height:20px;overflow:hidden;max-height:4.5em;margin-top:.32333em}.rank-math-social-preview-twitter .rank-math-social-preview-publisher{padding-top:5px}.rank-math-social-preview-twitter .rank-math-social-preview-publisher.facebook{display:none}.rank-math-social-preview-twitter .no-twitter-image .twitter-thumbnail{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-button strong:before{content:attr(data-twitter)}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image{float:left}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-image img{height:125px;width:125px}.rank-math-social-preview-twitter.summary_card .rank-math-social-preview-caption{overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:125px;padding:5px 0 0 15px}.rank-math-social-preview-twitter .rank-math-social-preview-social-meta.facebook-meta{display:none}.rank-math-social-preview-twitter .rank-math-social-preview-social-meta.twitter-meta{display:block}.suggestion-item{overflow:hidden;margin-bottom:5px;padding-bottom:5px;border-bottom:1px dotted #e5e5e5}.suggestion-item a{text-decoration:none;-webkit-box-shadow:none !important;box-shadow:none !important}.suggestion-item .suggestion-actions{float:right;margin-left:5px}.suggestion-item .dashicons{margin-top:5px;cursor:pointer}#rank_math_keyword_density{font-weight:600;display:none;float:right;cursor:pointer;color:#888}#rank_math_keyword_density span{float:right}#rank_math_keyword_density .inner-wrapper{position:absolute;z-index:1;right:30px;margin-top:8px;padding:5px 15px;background:#fff;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}#rank_math_keyword_density .inner-wrapper ul{margin-top:15px}#rank_math_keyword_density.state-closed span:before{content:'\f140' !important}#rank_math_keyword_density.state-closed .inner-wrapper{display:none}body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a{float:right;margin-right:-1px;margin-left:0;padding-right:8px;padding-left:12px}body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .dashicons,body.rtl .rank-math-metabox-wrap .rank-math-tabs-navigation:not(.social-tabs-navigation) a .fa{margin-right:0;margin-left:5px}body.rtl .rank-math-metabox-wrap .social-tabs-navigation a .dashicons{margin-right:0;margin-left:8px}body.rtl .serp-preview .group .serp-close{left:10px;right:auto}body.rtl .serp-preview .rank-math-variables-wrap input,body.rtl .serp-preview .rank-math-variables-wrap textarea{padding-right:0.6em !important;padding-left:50px}body.rtl .serp-preview .length-indicator-wrapper .length-count{left:0;right:auto}body.rtl .serp-preview .length-indicator-wrapper .length-indicator{left:60px;right:auto}body.rtl .tag-editor{padding:7px 10px 7px 80px}body.rtl .tag-editor>li{float:right;margin-right:0;margin-left:10px}body.rtl .tag-editor>li:nth-child(2):before{right:-6px;left:auto}body.rtl .tag-editor div{float:right}body.rtl .tag-editor-hidden-src{right:-99999px}body.rtl .rank-math-seo-score{right:auto;left:1px}body.rtl .rank-math-serp-checklist .group-handlediv{right:auto;left:10px}body.rtl .rank-math-serp-group.state-closed .group-status{float:right}body.rtl .rank-math-serp-group.state-closed .group-status:before{margin:0 0 0 10px}body.rtl .rank-math-serp-group li{padding-left:0;padding-right:30px}body.rtl .rank-math-serp-group li:before{float:right;margin:4px -30px 0 10px}body.rtl .rank-math-primary-term-li .rank-math-make-primary,body.rtl .rank-math-primary-term-li .text-primary{right:auto;left:0}body.rtl .rank-math-primary-term-li .rank-math-tooltip{right:auto;left:0}body.rtl .rank-math-primary-term-li .rank-math-tooltip>span{right:auto;left:32px;-webkit-transform:translate3d(70%, -50%, 0);transform:translate3d(70%, -50%, 0)}body.rtl .rank-math-primary-term-li .rank-math-tooltip>span:after{left:-8px;right:auto;top:30%;-webkit-transform:rotate(180deg);transform:rotate(180deg)}body.rtl .rank-math-primary-term-li .rank-math-tooltip:hover>span{-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0)}body.rtl .suggestion-item .suggestion-actions{float:left;margin-right:5px}body.rtl input[type=checkbox]:checked:before{margin:-3px}body.rtl .postbox-container #side-sortables{overflow:hidden}.ask-review{text-align:center}.ask-review p{font-size:14px;margin-bottom:20px}.ask-review .stars-wrapper{line-height:60px;width:316px;margin:0 auto;margin-bottom:20px;border:1px solid #ddd;border-radius:6px}.ask-review .stars-wrapper .stars a{position:relative;top:9px;display:inline-block;height:40px;width:40px;text-decoration:none;color:#aaa}.ask-review .stars-wrapper .stars a span{font-size:40px;height:40px;width:40px}.ask-review .stars-wrapper .stars a.highlighted,.ask-review .stars-wrapper .stars a:hover{color:#f9cb12}.ask-review .stars-wrapper .face{float:right;width:70px;height:60px;border-left:1px solid #ddd;background:#fafafa}.smiley{position:relative;top:50%;left:50%;height:22px;width:22px;padding:12px;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);border-radius:100%;background:linear-gradient(135deg, #ffe919 0%, #fbc000 100%)}.mouth{position:absolute;bottom:18%;left:50%;-webkit-box-sizing:border-box;box-sizing:border-box;width:60%;height:30%;margin-left:-30%;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:22px;border-bottom-left-radius:22px;background:#b57700}.eyes{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:15%;padding:0 1px;-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1)}.eyes .eye{position:relative;float:left;height:5px;width:5px;border-radius:100%;background:#b57700}.eyes .eye:nth-of-type(2){float:right}.eyes .eye::after{position:absolute;top:-5px;left:2px;display:block;height:0;width:0;content:'';-webkit-transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);transition:all 300ms cubic-bezier(0.645, 0.045, 0.355, 1);-webkit-transform:rotate(0deg);transform:rotate(0deg);background:#fed800}.eyes .eye:first-of-type::after{right:5px;left:auto;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.smiley.normal .mouth{bottom:25%;width:40%;height:10%;margin-left:-20%;border-top-left-radius:22px;border-top-right-radius:22px;border-bottom-right-radius:22px;border-bottom-left-radius:22px}.smiley.normal .eyes{margin-top:30%}.smiley.angry .mouth{bottom:25%;left:50%;width:40%;height:10%;margin-left:-20%;border-bottom:0;border-top-left-radius:100%;border-top-right-radius:100%;border-bottom-right-radius:0;border-bottom-left-radius:0}.smiley.happy .mouth{-webkit-animation:move-mouth-down .8s;animation:move-mouth-down .8s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}@keyframes move-mouth-down{0%{bottom:18%}35%{bottom:16%}65%{bottom:16%}100%{bottom:18%}}.smiley.happy .eyes{-webkit-animation:move-eyes-down .8s;animation:move-eyes-down .8s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}@keyframes move-eyes-down{0%{margin-top:15%}35%{margin-top:19%}65%{margin-top:19%}100%{margin-top:15%}}.smiley.happy .eye:nth-of-type(2){height:5px;margin-top:0;-webkit-animation:wink .8s;animation:wink .8s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes wink{0%{height:5px;margin-top:0}30%{height:2px;margin-top:1px}70%{height:2px;margin-top:1px}100%{height:5px;margin-top:0}}@keyframes wink{0%{height:5px;margin-top:0}30%{height:2px;margin-top:1px}70%{height:2px;margin-top:1px}100%{height:5px;margin-top:0}}.smiley.normal .eye{height:5px;margin-top:0;-webkit-animation:blink .6s;animation:blink .6s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes blink{0%{height:5px;margin-top:0}25%{height:2px;margin-top:1px}50%{height:5px;margin-top:0}75%{height:2px;margin-top:1px}100%{height:5px;margin-top:0}}@keyframes blink{0%{height:5px;margin-top:0}25%{height:2px;margin-top:1px}50%{height:5px;margin-top:0}75%{height:2px;margin-top:1px}100%{height:5px;margin-top:0}}.smiley.angry .eyes,.smiley.angry .mouth{-webkit-animation:move-angry-head .6s;animation:move-angry-head .6s;-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes move-angry-head{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}20%{-webkit-transform:translateX(-20%);transform:translateX(-20%)}40%{-webkit-transform:translateX(15%);transform:translateX(15%)}60%{-webkit-transform:translateX(-10%);transform:translateX(-10%)}80%{-webkit-transform:translateX(5%);transform:translateX(5%)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}
 
 
assets/admin/css/setup-wizard.css CHANGED
@@ -2,4 +2,4 @@
2
  * Plugin: Rank Math
3
  * URL: https://rankmath.com/wordpress/plugin/seo-suite/
4
  * Name: setup-wizard.css
5
- */.rank-math-wizard-body--requirements h2>.dashicons,.rank-math-wizard-body--ready .cmb-form>header .dashicons-yes{margin-right:5px;padding:4px;vertical-align:-3px;color:#fff;border-radius:50%;background:#58bb58}.rank-math-wizard{background:#f1f1f1}.rank-math-wizard :focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-wizard a{text-decoration:none}.rank-math-wizard .notice-error{position:relative;margin-right:auto;margin-left:auto;background:#ffebee}.rank-math-wizard .text-center{text-align:center}.rank-math-wizard .wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;max-width:970px;margin:40px auto;padding:60px 40px 50px;border-radius:5px;background:#fff;-webkit-box-shadow:0 4px 8px rgba(0,0,0,0.06);box-shadow:0 4px 8px rgba(0,0,0,0.06)}.rank-math-wizard .cmb-form>header,.rank-math-wizard .cmb-form header.redirections-header{margin-bottom:30px;text-align:center}.rank-math-wizard .cmb-form>header h1,.rank-math-wizard .cmb-form header.redirections-header h1{font-size:30px;font-weight:700;margin:0}.rank-math-wizard .cmb-form>header p,.rank-math-wizard .cmb-form header.redirections-header p{font-size:15px;max-width:715px;margin:10px auto;color:#939596}.rank-math-wizard .cmb-form header.redirections-header{margin-bottom:0}.rank-math-wizard .cmb-form header.redirections-header h1{margin-top:.67em}.rank-math-wizard .cmb-form .cmb-type-file .cmb-th label,.rank-math-wizard .cmb-form .cmb-type-switch .cmb-th label,.rank-math-wizard .cmb-form .cmb-type-multicheck .cmb-th label,.rank-math-wizard .cmb-form .cmb-type-radio-inline .cmb-th label{cursor:default}.rank-math-wizard .cmb-form .cmb-type-file .cmb-multicheck-toggle,.rank-math-wizard .cmb-form .cmb-type-switch .cmb-multicheck-toggle,.rank-math-wizard .cmb-form .cmb-type-multicheck .cmb-multicheck-toggle,.rank-math-wizard .cmb-form .cmb-type-radio-inline .cmb-multicheck-toggle{cursor:pointer}.rank-math-wizard .cmb-form .cmb-td button{cursor:pointer}.rank-math-wizard .form-footer:not(.custom){width:calc(100% + 80px);margin:75px -40px -50px;border-radius:0 0 5px 5px;overflow:hidden}.rank-math-wizard .form-footer:not(.custom) .button{border-radius:25px}.rank-math-wizard .form-footer:not(.custom) .button-secondary{margin-right:10px}.rank-math-collapsible-trigger{letter-spacing:.5px}.rank-math-collapsible-trigger .dashicons{font-size:16px;display:inline}.rank-math-collapsible-trigger .dashicons:before{font-size:22px;vertical-align:-2px}.rank-math-collapsible-trigger .dashicons span{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',sans-serif;font-size:12px;vertical-align:3px;color:rgba(36,41,46,0.65)}.rank-math-collapsible-trigger .dashicons-arrow-up{display:none}.rank-math-collapsible-trigger.open .dashicons-arrow-up{display:inline}.rank-math-collapsible-trigger.open .dashicons-arrow-down{display:none}.rank-math-collapsible-content{display:none}.rank-math-collapsible-content.open{display:block}.return-to-dashboard{margin-bottom:50px;text-align:center}.return-to-dashboard i{line-height:46px;color:#0474ab}.return-to-dashboard a{line-height:44px;display:inline-block;padding:0 25px 0 20px;-webkit-transition:color 150ms ease,opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;transition:color 150ms ease,opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;text-align:center;text-decoration:none;color:rgba(36,41,46,0.65);border-radius:25px;background:#fff;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.09),0 2px 2px rgba(0,0,0,0.12);box-shadow:inset 0 1px 0 rgba(0,0,0,0.09),0 2px 2px rgba(0,0,0,0.12)}.return-to-dashboard a:hover{color:#0073aa}@media screen and (prefers-reduced-motion: reduce){.return-to-dashboard{opacity:1 !important}}.cmb2-wrap .cmb-row.features-child{padding:25px 20px !important;border-bottom-color:#ebebeb;background:#f4f4f4}.responsive-video{position:relative;overflow:hidden;padding-top:56.25%}.responsive-video iframe{border:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%;width:100%}.cmb-row.cmb-multicheck-inline .cmb2-checkbox-list,.cmb-row.cmb-multicheck-inline .cmb2-checkbox-list li,.cmb-row.cmb-multicheck-inline.with-description .cmb2-metabox-description{display:inline-block;width:48%;vertical-align:top}.cmb-row.cmb-multicheck-inline .cmb2-checkbox-list{width:420px;max-width:100%}.cmb-row.cmb-multicheck-inline.with-description .cmb-td{width:100%}.cmb-row.cmb-multicheck-inline.with-description .cmb2-checkbox-list{padding-top:20px}.cmb-row.cmb-multicheck-inline.with-description .cmb2-metabox-description{font-size:15px;line-height:1.5;padding:0;color:#21262c}.rank-math-wizard .rank-math-ui .button{font-size:17px;line-height:50px;height:50px;padding:0 50px;border:0}.rank-math-wizard .rank-math-ui .button.button-small{border-radius:10px}.rank-math-wizard .rank-math-ui .button-secondary:not(.cmb-multicheck-toggle):not(.cmb2-upload-button):not(.custom){background:#fff;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 1px 4px rgba(0,0,0,0.2);box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 1px 4px rgba(0,0,0,0.2)}.rank-math-wizard .rank-math-ui .button-primary{background:#069de3;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2)}@media screen and (max-width: 782px){.rank-math-wizard .rank-math-ui .button{font-size:15px;padding:0 20px}}.rank-math-wizard .rank-math-ui .cmb-type-multicheck .cmb-td p:first-of-type{margin:0}.rank-math-wizard .rank-math-ui .cmb-multicheck-toggle{padding:0;cursor:pointer;color:#008ec3;border:0;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-wizard .rank-math-ui .cmb-multicheck-toggle:active{-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}.wizard-navigation{display:-webkit-box;display:-ms-flexbox;display:flex;margin:50px auto;text-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.wizard-navigation a{font-size:12px;position:relative;display:block;text-transform:uppercase;color:#b2b4b6;-webkit-box-flex:1;-ms-flex:1;flex:1}.wizard-navigation a:before{font-weight:600;display:block;padding-bottom:10px;content:attr(title);color:#b2b4b6}.wizard-navigation a:after{content:'';-webkit-transform:translate(-50%, 23px);transform:translate(-50%, 23px);background-color:#e5e5e5;position:absolute;top:15px;left:0;height:1px;width:100%}.wizard-navigation span{line-height:20px;position:relative;z-index:10;display:inline-block;border:1px solid #e5e5e5;border-radius:50%;background:#fff;height:20px;width:20px}.wizard-navigation .step-label:before{color:#069de3}.wizard-navigation .step-label:after{display:none}.wizard-navigation .step-label+a:after{width:162%;-webkit-transform:translate(-60%, 23px);transform:translate(-60%, 23px)}.wizard-navigation a.active span{margin-top:-2px;color:#fff;border:2px solid #fff;background:#069de3;-webkit-box-shadow:0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.wizard-navigation a.active:after{background:-webkit-gradient(linear, left top, right top, from(#58bb58), to(#069de3));background:linear-gradient(to right, #58bb58 0%, #069de3 100%)}.wizard-navigation a.active:before{color:#069de3}.wizard-navigation a.done span{color:#fff;border-color:#58bb58;background-color:#58bb58}.wizard-navigation a.done:after{background-color:#58bb58}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.rank-math-wizard-body--requirements h2{font-size:20px}.rank-math-wizard-body--requirements h2>.dashicons-warning{background:#e8cb57}.rank-math-wizard-body--requirements .form-table{margin-top:50px;border-top:1px solid #ededed}.rank-math-wizard-body--requirements .form-table tr:nth-child(odd){background:#fafafa}.rank-math-wizard-body--requirements .form-table td,.rank-math-wizard-body--requirements .form-table th{padding:10px 20px;border-bottom:1px solid #ededed}.rank-math-wizard-body--requirements .form-table th{width:auto}.rank-math-wizard-body--requirements .form-table th .description{font-size:12px;font-weight:normal;font-style:normal;color:#939596}.rank-math-wizard-body--requirements .form-table td{vertical-align:top;color:#58bb58}.rank-math-wizard-body--requirements .form-table td:last-child{text-align:right}.rank-math-wizard-body--requirements .form-table td:last-child .dashicons{font-size:24px}.rank-math-wizard-body--requirements .form-table .check-no th{border-left:3px solid #ee6a5e}.rank-math-wizard-body--requirements .form-table .check-no td{color:#ee6a5e}.rank-math-wizard-body--requirements .checklist-ok,.rank-math-wizard-body--requirements .checklist-not-ok{margin-top:10px;color:#969696}.rank-math-wizard-body--requirements .checklist-not-ok{color:#ee6a5e}.rank-math-wizard-body--requirements .conflict-text{font-size:15px;font-weight:500;margin-top:50px;color:#ee6a5e}.rank-math-wizard-body--requirements .noconflict{color:#58bb58}.rank-math-wizard-body--requirements .wizard-conflicts{margin-top:10px}.rank-math-wizard-body--requirements .wizard-conflicts .import-info{font-size:12px;font-weight:normal;color:#777}.rank-math-wizard-body--requirements .wizard-conflicts .import-info:before{content:' - '}.rank-math-wizard-body--requirements .wizard-conflicts td{padding:8px 10px}.rank-math-wizard-body--requirements .wizard-conflicts td:first-child{width:20px;padding-right:0;color:#ee6a5e}.rank-math-wizard-body--requirements .wizard-conflicts td:first-child .dashicons-yes{color:#58bb58}.rank-math-wizard-body--requirements .wizard-conflicts td a.disabled{cursor:not-allowed}.rank-math-wizard-body--requirements .form-footer{margin:60px 0 25px}.rank-math-wizard-body--requirements .form-footer .button{font-size:24px;line-height:82px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);border-radius:82px;height:auto;width:280px}.rank-math-wizard-body--requirements .form-footer .button i{line-height:80px}.rank-math-wizard-body--requirements .form-footer .button:before{content:'';-webkit-animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.rank-math-wizard-body--requirements .rank-math-collapsible-trigger{margin-left:10px;padding:0 12px 0 5px;-webkit-transition:color 150ms ease,opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;transition:color 150ms ease,opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;border-radius:44px;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 2px 4px rgba(0,0,0,0.2);box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 2px 4px rgba(0,0,0,0.2)}.rank-math-wizard-body--requirements .rank-math-collapsible-trigger:hover{background:#fafafa}.rank-math-wizard-body--import .cmb-field-list{position:relative;overflow:hidden}.rank-math-wizard-body--import .cmb-field-list h3.import-label{display:inline-block;width:20%}.rank-math-wizard-body--import .cmb-field-list .cmb-type-group{float:right;width:80%}.rank-math-wizard-body--import .cmb-field-list .cmb-group-description{position:absolute;z-index:1;top:6px;left:20px}.rank-math-wizard-body--import .cmb-field-list .cmb-row{padding:0;margin-bottom:5px;border:none}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmbhandle{top:14px;right:20px;width:30px;height:30px;border-radius:50%;text-align:center;background-color:#059de2;color:#fff}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmbhandle:before{content:"\f343";padding:0;right:0;left:1px;top:5px;bottom:0}.rank-math-wizard-body--import .cmb-field-list .cmb-row.closed .inside{display:none}.rank-math-wizard-body--import .cmb-field-list .cmb-row.closed .cmbhandle{background-color:#fff;color:#a4a4a4;-webkit-box-shadow:1px -1px 62px -13px rgba(0,0,0,0.14);box-shadow:1px -1px 62px -13px rgba(0,0,0,0.14)}.rank-math-wizard-body--import .cmb-field-list .cmb-row.closed .cmbhandle:before{content:"\f347";left:0;top:6px}.rank-math-wizard-body--import .cmb-field-list .cmb-row h3{margin:0;background-color:#f1f1f1;padding:14px 20px 13px 50px;font-size:18px;cursor:pointer}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmb-td{width:100%}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmb-td>p{margin:0}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmb-td>p .cmb-multicheck-toggle{font-size:15px;color:#0474ab}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside{width:100%;margin:0;background-color:#f6f6f6;padding:30px 20px;overflow:visible}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside .cmb2-list{width:100%}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside .cmb2-list li{margin-bottom:9px}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside .cmb2-list li label{font-size:16px;color:#24292e}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside .cmb2-metabox-description{width:100%;color:#888;font-size:13px;font-style:italic;margin-top:20px}.rank-math-wizard-body--import .import-progress-area{display:none;margin:20px 0;background:#eee;width:80%;float:right}.rank-math-wizard-body--import .cmb2-id-import-from .cmb-th{width:auto}#import-progress-bar{display:none;width:80%;float:right;font-size:15px;color:#959798}#import-progress-bar #importProgress{margin-top:30px;margin-bottom:10px;background-color:#dddfe0;border-radius:50px}#import-progress-bar #importProgress #importBar{width:1%;height:8px;background-color:#069de3;border-radius:50px;-webkit-transition:width 1s;transition:width 1s}#import-progress-bar .left{float:left}#import-progress-bar .left strong{color:#65676a}#import-progress-bar .right{float:right}.rank-math-wizard-body--yoursite .rank-math-wizard-tutorial{margin-bottom:30px}.rank-math-wizard-body--yoursite .rank-math-wizard-tutorial header{padding:12px 15px;background:#f0f0f0}.rank-math-wizard-body--yoursite .rank-math-wizard-tutorial header a{color:#069de3}.rank-math-wizard-body--yoursite .rank-math-tabs-navigation{padding:0 32px;border-bottom:1px solid #e5e5e5;background:#fbfbfb}.rank-math-wizard-body--yoursite .rank-math-tabs-navigation a{font-size:16px;font-weight:600;display:inline-block;padding:22px 16px 16px;color:#555}.rank-math-wizard-body--yoursite .rank-math-tabs-navigation a.active{color:#069de3;border-bottom:2px solid #069de3}.rank-math-wizard-body--yoursite .rank-math-tabs-navigation a .dashicons{margin-right:15px}.rank-math-wizard-body--yoursite .rank-math-tabs-content{padding:32px;background:#f4f4f4}.rank-math-wizard-body--yoursite .search-form:not(.media-toolbar-primary) label{display:block;margin-bottom:5px}.rank-math-wizard-body--yoursite .search-form:not(.media-toolbar-primary) input{font-size:1.3em;margin-right:15px;padding:0 8px 0 15px;height:51px;width:77.5%}.rank-math-wizard-body--yoursite .search-form:not(.media-toolbar-primary) button.button{width:20%;letter-spacing:.05em}.rank-math-wizard-body--searchconsole .cmb2-id-console-authorization-code a.button-secondary{line-height:1;padding:10px 0 5px;color:#008ec3;border-bottom:1px dotted;border-radius:0;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-wizard-body--searchconsole .cmb2-id-console-profile select{margin-top:0}.rank-math-wizard-body--optimization .rank-math-collapsible-trigger{display:block;margin-top:-14px;text-align:center;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-wizard-body--optimization .rank-math-collapsible-trigger span{background:#fff}.rank-math-wizard-body--optimization .rank-math-collapsible-content .cmb-row:not(.cmb-type-title):first-of-type{padding-top:25px}.rank-math-wizard-body--ready .cmb-form>header h1{font-size:20px}.rank-math-wizard-body--ready .wizard-usage-tracking{margin-top:35px;padding:25px 35px;background:#f5f5f5}.rank-math-wizard-body--ready .wizard-usage-tracking p{font-size:16px;margin-top:0}.rank-math-wizard-body--ready .wizard-next-steps{margin-top:60px}.rank-math-wizard-body--ready .wizard-next-steps>div{float:left;box-sizing:border-box;width:50%}.rank-math-wizard-body--ready .wizard-next-steps .learn-more{padding-left:35px}.rank-math-wizard-body--ready .wizard-next-steps .learn-more h2{margin-top:0}.rank-math-wizard-body--ready .wizard-next-steps .learn-more li{font-size:18px;line-height:1.5;margin-bottom:12px}.rank-math-wizard-body--ready .wizard-next-steps .learn-more a{color:#089ce6}.rank-math-wizard-body--ready .wizard-next-steps .learn-more .dashicons{font-size:24px;margin-top:2px;margin-right:13px;color:#bcbdbf}.rank-math-wizard-body--ready .score-100{margin-top:-20px;text-align:right}.rank-math-wizard-body--ready .score-100 img{max-width:250px}.rank-math-wizard-body--ready .rank-math-score-wrapper{text-align:center;margin-top:60px}.rank-math-wizard-body--ready .rank-math-score-wrapper h3{display:inline-block;color:#434343;font-size:17px;font-weight:500;margin:0}.rank-math-wizard-body--ready .rank-math-score-wrapper .rank-math-score-image{margin-top:30px}.rank-math-wizard-body--ready .rank-math-score-wrapper .rank-math-score-image img{max-width:100%}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch{position:relative;display:inline-block;cursor:pointer;width:70px;height:28px;border-radius:18px;margin-left:15px;margin-top:-10px}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input{position:absolute;top:0;left:0;opacity:0}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label{position:relative;display:block;height:inherit;font-size:16px;font-weight:bold;line-height:1;border-radius:inherit;border:2px solid #4a535b}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label:before,.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label:after{position:absolute;top:50%;margin-top:-.5em;transition:inherit}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label:before{content:attr(data-off);right:11px;color:#4a535b}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label:after{content:attr(data-on);left:11px;color:#FFFFFF;opacity:0}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-handle{position:absolute;top:9px;left:10px;width:15px;height:15px;background:#6e7780;border-radius:100%}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label,.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-handle{transition:All 0.3s ease;-webkit-transition:All 0.3s ease;-moz-transition:All 0.3s ease;-o-transition:All 0.3s ease}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input:checked ~ .switch-label{background:#069de3;border-color:#069de3}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input:checked ~ .switch-label:before{opacity:0}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input:checked ~ .switch-label:after{opacity:1}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input:checked ~ .switch-handle{left:45px;background:#fff}.rank-math-wizard-body--register .wrapper{max-width:700px}.rank-math-wizard-body--register .notice{margin-bottom:30px;display:none}.rank-math-wizard-body--register .notice-error{display:block}.rank-math-wizard-body--register .notice.is-dismissible{display:none}.rank-math-wizard-body--register .rank-math-registration-notice{display:block;margin:30px auto;text-align:left;background:#fefcee}.cmb2-id-accept-terms .cmb-td label{display:inline-block;width:80%}.cmb2-id-rank-math-usage-tracking .cmb-th{font-weight:normal;float:right;width:95% !important;max-width:none !important;color:#8c8c8c}.cmb2-id-rank-math-usage-tracking .cmb-th label{padding-top:0 !important;padding-right:0 !important}.cmb2-id-rank-math-usage-tracking .cmb-td{width:5% !important}@media screen and (max-width: 905px){.rank-math-wizard #cmb2-metabox-rank-math-wizard .cmb2-id-console-authorization-code .button-primary,.rank-math-wizard #cmb2-metabox-rank-math-wizard .cmb2-id-console-profile .button-primary{display:block;margin-top:10px;margin-left:0}.rank-math-wizard .cmb-row.cmb-multicheck-inline.with-description .cmb2-metabox-description{width:100%;margin-top:20px}}@media screen and (max-width: 782px){.rank-math-wizard .wizard-navigation a:before{font-size:12px}.rank-math-wizard .cmb2-wrap .cmb-row input[type=checkbox]:checked:before{font-size:30px}.rank-math-wizard #rank-math-compatibility-collapsible .form-table th,.rank-math-wizard #rank-math-compatibility-collapsible .form-table td{display:table-cell}}@media screen and (max-width: 782px) and (max-width: 640px){.rank-math-wizard .logo img{width:190px}.rank-math-wizard .wrapper{padding:30px 15px 35px}.rank-math-wizard .form-footer{margin-top:15px}.rank-math-wizard .cmb2-wrap .cmb-row .regular-text,.rank-math-wizard #cmb2-metabox-rank-math-wizard select{width:100%;max-width:100%}.rank-math-wizard .form-footer:not(.custom){text-align:center}}@media screen and (max-width: 782px) and (max-width: 595px){.rank-math-wizard .wizard-navigation{margin:25px auto 50px}.rank-math-wizard .wizard-navigation a:before{display:none}.rank-math-wizard .wizard-navigation a:first-child:before{position:relative;z-index:1;display:block;margin-top:-7px;background:#fff}.rank-math-wizard .wizard-navigation a:after{top:-12px}.rank-math-wizard.rank-math-wizard .cmb-form>header h1{font-size:24px}.rank-math-wizard.rank-math-wizard .cmb-form>header p{margin-top:10px}.rank-math-wizard.rank-math-wizard-body--ready .wizard-usage-tracking{padding:15px}.rank-math-wizard.rank-math-wizard-body--ready .wizard-share{margin-top:25px}.rank-math-wizard.rank-math-wizard-body--ready .wizard-next-steps{margin:25px 0 0}.rank-math-wizard.rank-math-wizard-body--ready .wizard-next-steps>div{width:100%;padding:0 0 25px}}body.rtl.rank-math-wizard-body--requirements .rank-math-collapsible-trigger{display:inline-block;margin-right:10px;margin-left:0;padding:0 5px 0 12px}body.rtl.rank-math-wizard-body--requirements h2>.dashicons{margin-right:0;margin-left:5px}body.rtl.rank-math-wizard-body--requirements .form-table td:last-child{text-align:left}body.rtl.rank-math-wizard-body--requirements .form-footer .button .dashicons-arrow-right-alt2:before{content:'\f341'}body.rtl .wizard-navigation .step-label+a:after{-webkit-transform:translate(20%, 23px);transform:translate(20%, 23px)}body.rtl .wizard-navigation a:after{-webkit-transform:translate(50%, 23px);transform:translate(50%, 23px)}body.rtl .return-to-dashboard a .dashicons-arrow-left-alt2:before{content:'\f345'}body.rtl.rank-math-wizard .form-footer:not(.custom) .button-secondary{margin-right:0;margin-left:10px}body.rtl.rank-math-wizard-body--ready .cmb-form>header .dashicons-yes{margin-right:0;margin-left:5px}body.rtl.rank-math-wizard-body--ready .wizard-share{margin-right:10px;margin-left:0}body.rtl.rank-math-wizard-body--ready .wizard-share a{display:inline-block;margin-right:5px;margin-left:0;padding-right:15px;padding-left:20px}body.rtl.rank-math-wizard-body--ready .wizard-share .dashicons{margin-right:0 !important;margin-left:5px !important}body.rtl.rank-math-wizard-body--ready .wizard-next-steps>div{float:right}body.rtl.rank-math-wizard-body--ready .wizard-next-steps .learn-more{padding-right:35px;padding-left:0}body.rtl.rank-math-wizard-body--ready .wizard-next-steps .learn-more .dashicons{margin-right:0;margin-left:13px}body.rtl.rank-math-wizard-body--ready .rank-math-score-wrapper .switch{margin-left:0;margin-right:15px}
2
  * Plugin: Rank Math
3
  * URL: https://rankmath.com/wordpress/plugin/seo-suite/
4
  * Name: setup-wizard.css
5
+ */.rank-math-wizard-body--requirements h2>.dashicons,.rank-math-wizard-body--ready .cmb-form>header .dashicons-yes{margin-right:5px;padding:4px;vertical-align:-3px;color:#fff;border-radius:50%;background:#58bb58}.rank-math-wizard{background:#f1f1f1}.rank-math-wizard :focus{outline:none;-webkit-box-shadow:none;box-shadow:none}.rank-math-wizard a{text-decoration:none}.rank-math-wizard .notice-error{position:relative;margin-right:auto;margin-left:auto;background:#ffebee}.rank-math-wizard .text-center{text-align:center}.rank-math-wizard .wrapper{-webkit-box-sizing:border-box;box-sizing:border-box;max-width:970px;margin:40px auto;padding:60px 40px 50px;border-radius:5px;background:#fff;-webkit-box-shadow:0 4px 8px rgba(0,0,0,0.06);box-shadow:0 4px 8px rgba(0,0,0,0.06)}.rank-math-wizard .cmb-form>header,.rank-math-wizard .cmb-form header.redirections-header{margin-bottom:30px;text-align:center}.rank-math-wizard .cmb-form>header h1,.rank-math-wizard .cmb-form header.redirections-header h1{font-size:30px;font-weight:700;margin:0}.rank-math-wizard .cmb-form>header p,.rank-math-wizard .cmb-form header.redirections-header p{font-size:15px;max-width:715px;margin:10px auto;color:#939596}.rank-math-wizard .cmb-form header.redirections-header{margin-bottom:0}.rank-math-wizard .cmb-form header.redirections-header h1{margin-top:.67em}.rank-math-wizard .cmb-form .cmb-type-file .cmb-th label,.rank-math-wizard .cmb-form .cmb-type-switch .cmb-th label,.rank-math-wizard .cmb-form .cmb-type-multicheck .cmb-th label,.rank-math-wizard .cmb-form .cmb-type-radio-inline .cmb-th label{cursor:default}.rank-math-wizard .cmb-form .cmb-type-file .cmb-multicheck-toggle,.rank-math-wizard .cmb-form .cmb-type-switch .cmb-multicheck-toggle,.rank-math-wizard .cmb-form .cmb-type-multicheck .cmb-multicheck-toggle,.rank-math-wizard .cmb-form .cmb-type-radio-inline .cmb-multicheck-toggle{cursor:pointer}.rank-math-wizard .cmb-form .cmb-td button{cursor:pointer}.rank-math-wizard .form-footer:not(.custom){width:calc(100% + 80px);margin:75px -40px -50px;border-radius:0 0 5px 5px;overflow:hidden}.rank-math-wizard .form-footer:not(.custom) .button{border-radius:25px}.rank-math-wizard .form-footer:not(.custom) .button-secondary{margin-right:10px}.rank-math-collapsible-trigger{letter-spacing:.5px}.rank-math-collapsible-trigger .dashicons{font-size:16px;display:inline}.rank-math-collapsible-trigger .dashicons:before{font-size:22px;vertical-align:-2px}.rank-math-collapsible-trigger .dashicons span{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',sans-serif;font-size:12px;vertical-align:3px;color:rgba(36,41,46,0.65)}.rank-math-collapsible-trigger .dashicons-arrow-up{display:none}.rank-math-collapsible-trigger.open .dashicons-arrow-up{display:inline}.rank-math-collapsible-trigger.open .dashicons-arrow-down{display:none}.rank-math-collapsible-content{display:none}.rank-math-collapsible-content.open{display:block}.return-to-dashboard{margin-bottom:50px;text-align:center}.return-to-dashboard i{line-height:46px;color:#0474ab}.return-to-dashboard a{line-height:44px;display:inline-block;padding:0 25px 0 20px;-webkit-transition:color 150ms ease,opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;transition:color 150ms ease,opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;text-align:center;text-decoration:none;color:rgba(36,41,46,0.65);border-radius:25px;background:#fff;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.09),0 2px 2px rgba(0,0,0,0.12);box-shadow:inset 0 1px 0 rgba(0,0,0,0.09),0 2px 2px rgba(0,0,0,0.12)}.return-to-dashboard a:hover{color:#0073aa}@media screen and (prefers-reduced-motion: reduce){.return-to-dashboard{opacity:1 !important}}.cmb2-wrap .cmb-row.features-child{padding:25px 20px !important;border-bottom-color:#ebebeb;background:#f4f4f4}.responsive-video{position:relative;overflow:hidden;padding-top:56.25%}.responsive-video iframe{border:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%;width:100%}.cmb-row.cmb-multicheck-inline .cmb2-checkbox-list,.cmb-row.cmb-multicheck-inline .cmb2-checkbox-list li,.cmb-row.cmb-multicheck-inline.with-description .cmb2-metabox-description{display:inline-block;width:48%;vertical-align:top}.cmb-row.cmb-multicheck-inline .cmb2-checkbox-list{width:420px;max-width:100%}.cmb-row.cmb-multicheck-inline.with-description .cmb-td{width:100%}.cmb-row.cmb-multicheck-inline.with-description .cmb2-checkbox-list{padding-top:20px}.cmb-row.cmb-multicheck-inline.with-description .cmb2-metabox-description{font-size:15px;line-height:1.5;padding:0;color:#21262c}.rank-math-wizard .rank-math-ui .button{font-size:17px;line-height:50px;height:50px;padding:0 50px;border:0}.rank-math-wizard .rank-math-ui .button.button-small{border-radius:10px}.rank-math-wizard .rank-math-ui .button-secondary:not(.cmb-multicheck-toggle):not(.cmb2-upload-button):not(.custom){background:#fff;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 1px 4px rgba(0,0,0,0.2);box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 1px 4px rgba(0,0,0,0.2)}.rank-math-wizard .rank-math-ui .button-primary{background:#069de3;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2)}@media screen and (max-width: 782px){.rank-math-wizard .rank-math-ui .button{font-size:15px;padding:0 20px}}.rank-math-wizard .rank-math-ui .cmb-type-multicheck .cmb-td p:first-of-type{margin:0}.rank-math-wizard .rank-math-ui .cmb-multicheck-toggle{padding:0;cursor:pointer;color:#008ec3;border:0;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-wizard .rank-math-ui .cmb-multicheck-toggle:active{-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}.wizard-navigation{display:-webkit-box;display:-ms-flexbox;display:flex;margin:50px auto;text-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.wizard-navigation a{font-size:12px;position:relative;display:block;text-transform:uppercase;color:#b2b4b6;-webkit-box-flex:1;-ms-flex:1;flex:1}.wizard-navigation a:before{font-weight:600;display:block;padding-bottom:10px;content:attr(title);color:#b2b4b6}.wizard-navigation a:after{content:'';-webkit-transform:translate(-50%, 23px);transform:translate(-50%, 23px);background-color:#e5e5e5;position:absolute;top:15px;left:0;height:1px;width:100%}.wizard-navigation span{line-height:20px;position:relative;z-index:10;display:inline-block;border:1px solid #e5e5e5;border-radius:50%;background:#fff;height:20px;width:20px}.wizard-navigation .step-label:before{color:#069de3}.wizard-navigation .step-label:after{display:none}.wizard-navigation .step-label+a:after{width:162%;-webkit-transform:translate(-60%, 23px);transform:translate(-60%, 23px)}.wizard-navigation a.active span{margin-top:-2px;color:#fff;border:2px solid #fff;background:#069de3;-webkit-box-shadow:0 0 1px #069de3;box-shadow:0 0 0 1px #069de3}.wizard-navigation a.active:after{background:-webkit-gradient(linear, left top, right top, from(#58bb58), to(#069de3));background:linear-gradient(to right, #58bb58 0%, #069de3 100%)}.wizard-navigation a.active:before{color:#069de3}.wizard-navigation a.done span{color:#fff;border-color:#58bb58;background-color:#58bb58}.wizard-navigation a.done:after{background-color:#58bb58}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@-webkit-keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}@keyframes hvr-ripple-out{100%{opacity:0;top:-20px;right:-20px;bottom:-20px;left:-20px}}.rank-math-wizard-body--requirements h2{font-size:20px}.rank-math-wizard-body--requirements h2>.dashicons-warning{background:#e8cb57}.rank-math-wizard-body--requirements .form-table{margin-top:50px;border-top:1px solid #ededed}.rank-math-wizard-body--requirements .form-table tr:nth-child(odd){background:#fafafa}.rank-math-wizard-body--requirements .form-table td,.rank-math-wizard-body--requirements .form-table th{padding:10px 20px;border-bottom:1px solid #ededed}.rank-math-wizard-body--requirements .form-table th{width:auto}.rank-math-wizard-body--requirements .form-table th .description{font-size:12px;font-weight:normal;font-style:normal;color:#939596}.rank-math-wizard-body--requirements .form-table td{vertical-align:top;color:#58bb58}.rank-math-wizard-body--requirements .form-table td:last-child{text-align:right}.rank-math-wizard-body--requirements .form-table td:last-child .dashicons{font-size:24px}.rank-math-wizard-body--requirements .form-table .check-no th{border-left:3px solid #ee6a5e}.rank-math-wizard-body--requirements .form-table .check-no td{color:#ee6a5e}.rank-math-wizard-body--requirements .checklist-ok,.rank-math-wizard-body--requirements .checklist-not-ok{margin-top:10px;color:#969696}.rank-math-wizard-body--requirements .checklist-not-ok{color:#ee6a5e}.rank-math-wizard-body--requirements .conflict-text{font-size:15px;font-weight:500;margin-top:50px;color:#ee6a5e}.rank-math-wizard-body--requirements .noconflict{color:#58bb58}.rank-math-wizard-body--requirements .wizard-conflicts{margin-top:10px}.rank-math-wizard-body--requirements .wizard-conflicts .import-info{font-size:12px;font-weight:normal;color:#777}.rank-math-wizard-body--requirements .wizard-conflicts .import-info:before{content:' - '}.rank-math-wizard-body--requirements .wizard-conflicts td{padding:8px 10px}.rank-math-wizard-body--requirements .wizard-conflicts td:first-child{width:20px;padding-right:0;color:#ee6a5e}.rank-math-wizard-body--requirements .wizard-conflicts td:first-child .dashicons-yes{color:#58bb58}.rank-math-wizard-body--requirements .wizard-conflicts td a.disabled{cursor:not-allowed}.rank-math-wizard-body--requirements .form-footer{margin:60px 0 25px}.rank-math-wizard-body--requirements .form-footer .button{font-size:24px;line-height:82px;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);border-radius:82px;height:auto;width:280px}.rank-math-wizard-body--requirements .form-footer .button i{line-height:80px}.rank-math-wizard-body--requirements .form-footer .button:before{content:'';-webkit-animation:hvr-ripple-out 1s linear infinite;border:#bcdbea solid 6px;border-radius:55px;position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px}.rank-math-wizard-body--requirements .rank-math-collapsible-trigger{margin-left:10px;padding:0 12px 0 5px;-webkit-transition:color 150ms ease,opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;transition:color 150ms ease,opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;border-radius:44px;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 2px 4px rgba(0,0,0,0.2);box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 2px 4px rgba(0,0,0,0.2)}.rank-math-wizard-body--requirements .rank-math-collapsible-trigger:hover{background:#fafafa}.rank-math-wizard-body--import .cmb-field-list{position:relative;overflow:hidden}.rank-math-wizard-body--import .cmb-field-list h3.import-label{display:inline-block;width:20%}.rank-math-wizard-body--import .cmb-field-list .cmb-type-group{float:right;width:80%}.rank-math-wizard-body--import .cmb-field-list .cmb-group-description{position:absolute;z-index:1;top:6px;left:20px}.rank-math-wizard-body--import .cmb-field-list .cmb-row{padding:0;margin-bottom:5px;border:none}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmbhandle{top:14px;right:20px;width:30px;height:30px;border-radius:50%;text-align:center;background-color:#059de2;color:#fff}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmbhandle:before{content:"\f343";padding:0;right:0;left:1px;top:5px;bottom:0}.rank-math-wizard-body--import .cmb-field-list .cmb-row.closed .inside{display:none}.rank-math-wizard-body--import .cmb-field-list .cmb-row.closed .cmbhandle{background-color:#fff;color:#a4a4a4;-webkit-box-shadow:1px -1px 62px -13px rgba(0,0,0,0.14);box-shadow:1px -1px 62px -13px rgba(0,0,0,0.14)}.rank-math-wizard-body--import .cmb-field-list .cmb-row.closed .cmbhandle:before{content:"\f347";left:0;top:6px}.rank-math-wizard-body--import .cmb-field-list .cmb-row h3{margin:0;background-color:#f1f1f1;padding:14px 20px 13px 50px;font-size:18px;cursor:pointer}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmb-td{width:100%}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmb-td>p{margin:0}.rank-math-wizard-body--import .cmb-field-list .cmb-row .cmb-td>p .cmb-multicheck-toggle{font-size:15px;color:#0474ab}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside{width:100%;margin:0;background-color:#f6f6f6;padding:30px 20px;overflow:visible}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside .cmb2-list{width:100%}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside .cmb2-list li{margin-bottom:9px}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside .cmb2-list li label{font-size:16px;color:#24292e}.rank-math-wizard-body--import .cmb-field-list .cmb-row .inside .cmb2-metabox-description{width:100%;color:#888;font-size:13px;font-style:italic;margin-top:20px}.rank-math-wizard-body--import .import-progress-area{display:none;margin:20px 0;background:#eee;width:80%;float:right}.rank-math-wizard-body--import .cmb2-id-import-from .cmb-th{width:auto}#import-progress-bar{display:none;width:80%;float:right;font-size:15px;color:#959798}#import-progress-bar #importProgress{margin-top:30px;margin-bottom:10px;background-color:#dddfe0;border-radius:50px}#import-progress-bar #importProgress #importBar{width:1%;height:8px;background-color:#069de3;border-radius:50px;-webkit-transition:width 1s;transition:width 1s}#import-progress-bar .left{float:left}#import-progress-bar .left strong{color:#65676a}#import-progress-bar .right{float:right}.rank-math-wizard-body--yoursite .rank-math-wizard-tutorial{margin-bottom:30px}.rank-math-wizard-body--yoursite .rank-math-wizard-tutorial header{padding:12px 15px;background:#f0f0f0}.rank-math-wizard-body--yoursite .rank-math-wizard-tutorial header a{color:#069de3}.rank-math-wizard-body--yoursite .rank-math-tabs-navigation{padding:0 32px;border-bottom:1px solid #e5e5e5;background:#fbfbfb}.rank-math-wizard-body--yoursite .rank-math-tabs-navigation a{font-size:16px;font-weight:600;display:inline-block;padding:22px 16px 16px;color:#555}.rank-math-wizard-body--yoursite .rank-math-tabs-navigation a.active{color:#069de3;border-bottom:2px solid #069de3}.rank-math-wizard-body--yoursite .rank-math-tabs-navigation a .dashicons{margin-right:15px}.rank-math-wizard-body--yoursite .rank-math-tabs-content{padding:32px;background:#f4f4f4}.rank-math-wizard-body--yoursite .search-form:not(.media-toolbar-primary) label{display:block;margin-bottom:5px}.rank-math-wizard-body--yoursite .search-form:not(.media-toolbar-primary) input{font-size:1.3em;margin-right:15px;padding:0 8px 0 15px;height:51px;width:77.5%}.rank-math-wizard-body--yoursite .search-form:not(.media-toolbar-primary) button.button{width:20%;letter-spacing:.05em}.rank-math-wizard-body--searchconsole .cmb2-id-console-authorization-code a.button-secondary{line-height:1;padding:10px 0 5px;color:#008ec3;border-bottom:1px dotted;border-radius:0;background:transparent;-webkit-box-shadow:none;box-shadow:none}.rank-math-wizard-body--searchconsole .cmb2-id-console-profile select{margin-top:0}.rank-math-wizard-body--optimization .rank-math-collapsible-trigger{display:block;margin-top:-14px;text-align:center;-webkit-box-shadow:none !important;box-shadow:none !important}.rank-math-wizard-body--optimization .rank-math-collapsible-trigger span{background:#fff}.rank-math-wizard-body--optimization .rank-math-collapsible-content .cmb-row:not(.cmb-type-title):first-of-type{padding-top:25px}.rank-math-wizard-body--ready .cmb-form>header h1{font-size:20px}.rank-math-wizard-body--ready .wizard-usage-tracking{margin-top:35px;padding:25px 35px;background:#f5f5f5}.rank-math-wizard-body--ready .wizard-usage-tracking p{font-size:16px;margin-top:0}.rank-math-wizard-body--ready .wizard-next-steps{margin-top:60px}.rank-math-wizard-body--ready .wizard-next-steps>div{float:left;box-sizing:border-box;width:50%}.rank-math-wizard-body--ready .wizard-next-steps .learn-more{padding-left:35px}.rank-math-wizard-body--ready .wizard-next-steps .learn-more h2{margin-top:0}.rank-math-wizard-body--ready .wizard-next-steps .learn-more li{font-size:18px;line-height:1.5;margin-bottom:12px}.rank-math-wizard-body--ready .wizard-next-steps .learn-more a{color:#089ce6}.rank-math-wizard-body--ready .wizard-next-steps .learn-more .dashicons{font-size:24px;margin-top:2px;margin-right:13px;color:#bcbdbf}.rank-math-wizard-body--ready .score-100{margin-top:-20px;text-align:right}.rank-math-wizard-body--ready .score-100 img{max-width:250px}.rank-math-wizard-body--ready .rank-math-score-wrapper{text-align:center;margin-top:60px}.rank-math-wizard-body--ready .rank-math-score-wrapper h3{display:inline-block;color:#434343;font-size:17px;font-weight:500;margin:0}.rank-math-wizard-body--ready .rank-math-score-wrapper .rank-math-score-image{margin-top:30px}.rank-math-wizard-body--ready .rank-math-score-wrapper .rank-math-score-image img{max-width:100%;cursor:pointer}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch{position:relative;display:inline-block;cursor:pointer;width:70px;height:28px;border-radius:18px;margin-left:15px;margin-top:-10px}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input{position:absolute;top:0;left:0;opacity:0}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label{position:relative;display:block;height:inherit;font-size:16px;font-weight:bold;line-height:1;border-radius:inherit;border:2px solid #4a535b}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label:before,.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label:after{position:absolute;top:50%;margin-top:-.5em;transition:inherit}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label:before{content:attr(data-off);right:11px;color:#4a535b}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label:after{content:attr(data-on);left:11px;color:#FFFFFF;opacity:0}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-handle{position:absolute;top:9px;left:10px;width:15px;height:15px;background:#6e7780;border-radius:100%}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-label,.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-handle{transition:All 0.3s ease;-webkit-transition:All 0.3s ease;-moz-transition:All 0.3s ease;-o-transition:All 0.3s ease}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input:checked ~ .switch-label{background:#069de3;border-color:#069de3}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input:checked ~ .switch-label:before{opacity:0}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input:checked ~ .switch-label:after{opacity:1}.rank-math-wizard-body--ready .rank-math-score-wrapper .switch-input:checked ~ .switch-handle{left:45px;background:#fff}.rank-math-wizard-body--register .wrapper{max-width:700px}.rank-math-wizard-body--register .notice{margin-bottom:30px;display:none}.rank-math-wizard-body--register .notice-error{display:block}.rank-math-wizard-body--register .notice.is-dismissible{display:none}.rank-math-wizard-body--register .rank-math-registration-notice{display:block;margin:30px auto;text-align:left;background:#fefcee}.cmb2-id-accept-terms .cmb-td label{display:inline-block;width:80%}.cmb2-id-rank-math-usage-tracking .cmb-th{font-weight:normal;float:right;width:95% !important;max-width:none !important;color:#8c8c8c}.cmb2-id-rank-math-usage-tracking .cmb-th label{padding-top:0 !important;padding-right:0 !important}.cmb2-id-rank-math-usage-tracking .cmb-td{width:5% !important}@media screen and (max-width: 905px){.rank-math-wizard #cmb2-metabox-rank-math-wizard .cmb2-id-console-authorization-code .button-primary,.rank-math-wizard #cmb2-metabox-rank-math-wizard .cmb2-id-console-profile .button-primary{display:block;margin-top:10px;margin-left:0}.rank-math-wizard .cmb-row.cmb-multicheck-inline.with-description .cmb2-metabox-description{width:100%;margin-top:20px}}@media screen and (max-width: 782px){.rank-math-wizard .wizard-navigation a:before{font-size:12px}.rank-math-wizard .cmb2-wrap .cmb-row input[type=checkbox]:checked:before{font-size:30px}.rank-math-wizard #rank-math-compatibility-collapsible .form-table th,.rank-math-wizard #rank-math-compatibility-collapsible .form-table td{display:table-cell}}@media screen and (max-width: 782px) and (max-width: 640px){.rank-math-wizard .logo img{width:190px}.rank-math-wizard .wrapper{padding:30px 15px 35px}.rank-math-wizard .form-footer{margin-top:15px}.rank-math-wizard .cmb2-wrap .cmb-row .regular-text,.rank-math-wizard #cmb2-metabox-rank-math-wizard select{width:100%;max-width:100%}.rank-math-wizard .form-footer:not(.custom){text-align:center}}@media screen and (max-width: 782px) and (max-width: 595px){.rank-math-wizard .wizard-navigation{margin:25px auto 50px}.rank-math-wizard .wizard-navigation a:before{display:none}.rank-math-wizard .wizard-navigation a:first-child:before{position:relative;z-index:1;display:block;margin-top:-7px;background:#fff}.rank-math-wizard .wizard-navigation a:after{top:-12px}.rank-math-wizard.rank-math-wizard .cmb-form>header h1{font-size:24px}.rank-math-wizard.rank-math-wizard .cmb-form>header p{margin-top:10px}.rank-math-wizard.rank-math-wizard-body--ready .wizard-usage-tracking{padding:15px}.rank-math-wizard.rank-math-wizard-body--ready .wizard-share{margin-top:25px}.rank-math-wizard.rank-math-wizard-body--ready .wizard-next-steps{margin:25px 0 0}.rank-math-wizard.rank-math-wizard-body--ready .wizard-next-steps>div{width:100%;padding:0 0 25px}}body.rtl.rank-math-wizard-body--requirements .rank-math-collapsible-trigger{display:inline-block;margin-right:10px;margin-left:0;padding:0 5px 0 12px}body.rtl.rank-math-wizard-body--requirements h2>.dashicons{margin-right:0;margin-left:5px}body.rtl.rank-math-wizard-body--requirements .form-table td:last-child{text-align:left}body.rtl.rank-math-wizard-body--requirements .form-footer .button .dashicons-arrow-right-alt2:before{content:'\f341'}body.rtl .wizard-navigation .step-label+a:after{-webkit-transform:translate(20%, 23px);transform:translate(20%, 23px)}body.rtl .wizard-navigation a:after{-webkit-transform:translate(50%, 23px);transform:translate(50%, 23px)}body.rtl .return-to-dashboard a .dashicons-arrow-left-alt2:before{content:'\f345'}body.rtl.rank-math-wizard .form-footer:not(.custom) .button-secondary{margin-right:0;margin-left:10px}body.rtl.rank-math-wizard-body--ready .cmb-form>header .dashicons-yes{margin-right:0;margin-left:5px}body.rtl.rank-math-wizard-body--ready .wizard-share{margin-right:10px;margin-left:0}body.rtl.rank-math-wizard-body--ready .wizard-share a{display:inline-block;margin-right:5px;margin-left:0;padding-right:15px;padding-left:20px}body.rtl.rank-math-wizard-body--ready .wizard-share .dashicons{margin-right:0 !important;margin-left:5px !important}body.rtl.rank-math-wizard-body--ready .wizard-next-steps>div{float:right}body.rtl.rank-math-wizard-body--ready .wizard-next-steps .learn-more{padding-right:35px;padding-left:0}body.rtl.rank-math-wizard-body--ready .wizard-next-steps .learn-more .dashicons{margin-right:0;margin-left:13px}body.rtl.rank-math-wizard-body--ready .rank-math-score-wrapper .switch{margin-left:0;margin-right:15px}
assets/admin/js/feedback.js CHANGED
@@ -1 +1 @@
1
- !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=248)}({248:function(e,t,n){"use strict";var r;(r=jQuery)(function(){var e=r("#rank-math-feedback-form"),t=e.find(".rank-math-feedback-input-wrapper"),n=e.find("form"),o=r("#the-list").find('[data-slug*="rank-math"] span.deactivate a');o.on("click",function(t){t.preventDefault(),e.fadeIn()}),e.on("change","input:radio",function(){var e=r(this).parent();t.removeClass("checked"),e.toggleClass("checked")}),e.on("click",".button-skip",function(){location.href=o.attr("href")}),e.on("click",".button-close",function(t){t.preventDefault(),e.fadeOut()}),n.on("submit",function(e){e.preventDefault(),n.find(".button-submit").text("").addClass("loading"),r.ajax({url:ajaxurl,type:"POST",dataType:"json",data:n.serialize()}).done(function(){location.href=o.attr("href")})})})}});
1
+ !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=248)}({248:function(e,t,n){"use strict";var r;(r=jQuery)(function(){var e=r("#rank-math-feedback-form"),t=e.find(".rank-math-feedback-input-wrapper"),n=e.find("form"),o=r("#the-list").find('[data-slug="seo-by-rank-math"] span.deactivate a');o.on("click",function(t){t.preventDefault(),e.fadeIn()}),e.on("change","input:radio",function(){var e=r(this).parent();t.removeClass("checked"),e.toggleClass("checked")}),e.on("click",".button-skip",function(){location.href=o.attr("href")}),e.on("click",".button-close",function(t){t.preventDefault(),e.fadeOut()}),n.on("submit",function(e){e.preventDefault(),n.find(".button-submit").text("").addClass("loading"),r.ajax({url:ajaxurl,type:"POST",dataType:"json",data:n.serialize()}).done(function(){location.href=o.attr("href")})})})}});
assets/admin/js/wizard.js CHANGED
@@ -1 +1 @@
1
- !function(t){var e={};function n(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,a){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(a,r,function(e){return t[e]}.bind(null,r));return a},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=257)}({257:function(t,e,n){"use strict";var a;(a=jQuery)(function(){window.rankMathSetupWizard={init:function(){rankMath.currentStep in this&&this[rankMath.currentStep](),a(document).on("cmb_init",function(){a(".cmb-multicheck-toggle",".multicheck-checked").trigger("click")})},compatibility:function(){a(".wizard-deactivate-plugin").on("click",function(t){t.preventDefault();var e=a(this);if(!e.hasClass("disabled")){var n=e.closest("tr");a.ajax({url:rankMath.ajaxurl,type:"POST",data:{action:"rank_math_deactivate_plugins",security:rankMath.security,plugin:e.data("plugin")}}).always(function(t){"1"===t?(n.find(".dashicons-warning").removeClass("dashicons-warning").addClass("dashicons-yes"),e.addClass("disabled").text(rankMath.deactivated)):console.log("Deactivation error")})}})},import:function(){var t=a("#import-progress"),e=a("#import-progress-bar"),n=0,r=0,i=function(t,e){var n=new Date,a=e.val()+"["+(10>n.getHours()?"0":"")+n.getHours()+":"+(10>n.getMinutes()?"0":"")+n.getMinutes()+":"+(10>n.getSeconds()?"0":"")+n.getSeconds()+"] "+t+"\n";e.text(a).scrollTop(e[0].scrollHeight-e.height()-20)},o=function(t){t>100&&(t=100),e.find(".number").html(t),e.find("#importBar").css("width",t+"%")};a(".button-import",".form-footer").on("click",function(n){if(n.preventDefault(),rankMath.isConfigured&&!window.confirm(rankMath.confirm))return!1;var s=a(this),u=a(".import-data:checkbox:checked"),l={},p=[];if(!u.length)return alert("Please select plugin to import data."),!1;a.each(u,function(t){var e=a(this).val(),n=a(this).parents(".cmb-group-description").next().find(":checkbox:checked"),i=n.data("active"),o=a(this).data("plugin");p.push(o);var c=a.map(n,function(t){return t.value});c.length>0&&i&&c.push("deactivate"),r+=c.length,l[e]={plugin:o,actions:c}}),s.prop("disabled",!0),t.show(),e.show(),e.find(".plugin-from").html(p.join()),i("Import started...",t),c(l,t,function(){o(100),s.prop("disabled",!1),a(".button",".form-footer").hide(),a(".button-continue").show()})});var c=function e(c,s,u){var l=Object.keys(c),p=l.length,h=c[l[0]],d=Object.keys(c)[0];if(delete c[d],0===p)return i("Import finished. Click on the button below to continue the Setup Wizard.",s),void u();!function t(e,c,s,u,l,p){if(0!==c.length){var h=c.shift(),d="deactivate"===h?"Deactivating "+p:"Importing "+h+" from "+p,g=Math.floor(100/r);u=u||1,i(d,s),a.ajax({url:rankMath.ajaxurl,type:"POST",data:{perform:h,pluginSlug:e,paged:u,action:"rank_math_import_plugin",security:rankMath.security}}).success(function(a){var r=1;a&&a.page&&a.total_pages>a.page&&(r=a.page+1,c.unshift(h)),a&&a.total_pages&&(g=Math.ceil(g/a.total_pages)),o(n+=g),i(a.success?a.message:a.error,s),t(e,c,s,r,l,p)}).error(function(n){i(n.statusText,s),t(e,c,s,null,l,p)})}else l()}(d,h.actions,t,null,function(){e(c,s,u)},h.plugin)};a(".import-data").on("change",function(){for(var t=this.checked,e=a(this).parents(".cmb-group-description").next().find(".cmb2-option"),n=0;e.length>n;n++)"checkbox"==e[n].type&&(e[n].checked=t);t&&("yoast"===a(this).val()?(a('.import-data[value="aioseo"]').prop("checked",!1).trigger("change"),a('.import-data[value="seopress"]').prop("checked",!1).trigger("change")):"aioseo"===a(this).val()?(a('.import-data[value="yoast"]').prop("checked",!1).trigger("change"),a('.import-data[value="seopress"]').prop("checked",!1).trigger("change")):"seopress"===a(this).val()&&(a('.import-data[value="yoast"]').prop("checked",!1).trigger("change"),a('.import-data[value="aioseo"]').prop("checked",!1).trigger("change")))}),a(".cmb-type-group .cmb2-checkbox-list .cmb2-option").on("click",function(){var t=a(this),e=t.attr("name"),n=t.parents("ul").find('input[name="'+e+'"]:checkbox:checked'),r=t.parents("ul").find('input[name="'+e+'"]');n.length===r.length&&t.parents(".cmb-type-group").find(".import-data").prop("checked",!0).trigger("change")}),a(".button-deactivate-plugins").on("click",function(t){var e=a(this);e.parents("form").find("input[data-active]").length&&(t.preventDefault(),e.text(e.data("deactivate-message")),a.ajax({url:rankMath.ajaxurl,type:"POST",data:{action:"rank_math_deactivate_plugins",security:rankMath.security,plugin:"all"}}).success(function(t){e.parents("form").trigger("submit")}).error(function(t){alert("Something went wrong! Please try again later.")}))})},yoursite:function(){a("#rank-math-search-input").on("input keypress",function(t){var e=a(this),n=e.next();if(13===t.keyCode||13===t.which){if("createEvent"in document){var r=this.ownerDocument,i=r.createEvent("MouseEvents");i.initMouseEvent("click",!0,!0,r.defaultView,1,0,0,0,0,!1,!1,!1,!1,0,null),n[0].dispatchEvent(i)}return!1}n.attr("href",n.data("href")+encodeURIComponent(e.val()))});var t=a("#business_type");0!==parseInt(t.data("default"))&&a("#site_type").on("change",function(){var e=a(this).val();"news"!==e&&"webshop"!==e&&"otherbusiness"!==e||t.val("Organization").trigger("change"),"business"===e&&t.val("LocalBusiness").trigger("change")})},searchconsole:function(){a("#console_authorization_code").on("paste",function(){var t=a(this).next(".button");setTimeout(function(){t.trigger("click")},100)})},ready:function(){a("#show-seo-score").on("change",function(t){a.ajax({url:rankMath.api.root+"rankmath/v1/enableScore",method:"POST",beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",rankMath.api.nonce)},data:{enable:a(this).is(":checked")}}).done(function(t){console.log(t)})})}},window.rankMathSetupWizard.init()})}});
1
+ !function(t){var e={};function n(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,a){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(a,r,function(e){return t[e]}.bind(null,r));return a},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=257)}({257:function(t,e,n){"use strict";var a;(a=jQuery)(function(){window.rankMathSetupWizard={init:function(){rankMath.currentStep in this&&this[rankMath.currentStep](),a(document).on("cmb_init",function(){a(".cmb-multicheck-toggle",".multicheck-checked").trigger("click")})},compatibility:function(){a(".wizard-deactivate-plugin").on("click",function(t){t.preventDefault();var e=a(this);if(!e.hasClass("disabled")){var n=e.closest("tr");a.ajax({url:rankMath.ajaxurl,type:"POST",data:{action:"rank_math_deactivate_plugins",security:rankMath.security,plugin:e.data("plugin")}}).always(function(t){"1"===t?(n.find(".dashicons-warning").removeClass("dashicons-warning").addClass("dashicons-yes"),e.addClass("disabled").text(rankMath.deactivated)):console.log("Deactivation error")})}})},import:function(){var t=a("#import-progress"),e=a("#import-progress-bar"),n=0,r=0,i=function(t,e){var n=new Date,a=e.val()+"["+(10>n.getHours()?"0":"")+n.getHours()+":"+(10>n.getMinutes()?"0":"")+n.getMinutes()+":"+(10>n.getSeconds()?"0":"")+n.getSeconds()+"] "+t+"\n";e.text(a).scrollTop(e[0].scrollHeight-e.height()-20)},o=function(t){t>100&&(t=100),e.find(".number").html(t),e.find("#importBar").css("width",t+"%")};a(".button-import",".form-footer").on("click",function(n){if(n.preventDefault(),rankMath.isConfigured&&!window.confirm(rankMath.confirm))return!1;var s=a(this),u=a(".import-data:checkbox:checked"),l={},p=[];if(!u.length)return alert("Please select plugin to import data."),!1;a.each(u,function(t){var e=a(this).val(),n=a(this).parents(".cmb-group-description").next().find(":checkbox:checked"),i=n.data("active"),o=a(this).data("plugin");p.push(o);var c=a.map(n,function(t){return t.value});c.length>0&&i&&c.push("deactivate"),r+=c.length,l[e]={plugin:o,actions:c}}),s.prop("disabled",!0),t.show(),e.show(),e.find(".plugin-from").html(p.join()),i("Import started...",t),c(l,t,function(){o(100),s.prop("disabled",!1),a(".button",".form-footer").hide(),a(".button-continue").show()})});var c=function e(c,s,u){var l=Object.keys(c),p=l.length,h=c[l[0]],d=Object.keys(c)[0];if(delete c[d],0===p)return i("Import finished. Click on the button below to continue the Setup Wizard.",s),void u();!function t(e,c,s,u,l,p){if(0!==c.length){var h=c.shift(),d="deactivate"===h?"Deactivating "+p:"Importing "+h+" from "+p,g=Math.floor(100/r);u=u||1,i(d,s),a.ajax({url:rankMath.ajaxurl,type:"POST",data:{perform:h,pluginSlug:e,paged:u,action:"rank_math_import_plugin",security:rankMath.security}}).success(function(a){var r=1;a&&a.page&&a.total_pages>a.page&&(r=a.page+1,c.unshift(h)),a&&a.total_pages&&(g=Math.ceil(g/a.total_pages)),o(n+=g),i(a.success?a.message:a.error,s),t(e,c,s,r,l,p)}).error(function(n){i(n.statusText,s),t(e,c,s,null,l,p)})}else l()}(d,h.actions,t,null,function(){e(c,s,u)},h.plugin)};a(".import-data").on("change",function(){for(var t=this.checked,e=a(this).parents(".cmb-group-description").next().find(".cmb2-option"),n=0;e.length>n;n++)"checkbox"==e[n].type&&(e[n].checked=t);t&&("yoast"===a(this).val()?(a('.import-data[value="aioseo"]').prop("checked",!1).trigger("change"),a('.import-data[value="seopress"]').prop("checked",!1).trigger("change")):"aioseo"===a(this).val()?(a('.import-data[value="yoast"]').prop("checked",!1).trigger("change"),a('.import-data[value="seopress"]').prop("checked",!1).trigger("change")):"seopress"===a(this).val()&&(a('.import-data[value="yoast"]').prop("checked",!1).trigger("change"),a('.import-data[value="aioseo"]').prop("checked",!1).trigger("change")))}),a(".cmb-type-group .cmb2-checkbox-list .cmb2-option").on("click",function(){var t=a(this),e=t.attr("name"),n=t.parents("ul").find('input[name="'+e+'"]:checkbox:checked'),r=t.parents("ul").find('input[name="'+e+'"]');n.length===r.length&&t.parents(".cmb-type-group").find(".import-data").prop("checked",!0).trigger("change")}),a(".button-deactivate-plugins").on("click",function(t){var e=a(this);e.parents("form").find("input[data-active]").length&&(t.preventDefault(),e.text(e.data("deactivate-message")),a.ajax({url:rankMath.ajaxurl,type:"POST",data:{action:"rank_math_deactivate_plugins",security:rankMath.security,plugin:"all"}}).success(function(t){e.parents("form").trigger("submit")}).error(function(t){alert("Something went wrong! Please try again later.")}))})},yoursite:function(){a("#rank-math-search-input").on("input keypress",function(t){var e=a(this),n=e.next();if(13===t.keyCode||13===t.which){if("createEvent"in document){var r=this.ownerDocument,i=r.createEvent("MouseEvents");i.initMouseEvent("click",!0,!0,r.defaultView,1,0,0,0,0,!1,!1,!1,!1,0,null),n[0].dispatchEvent(i)}return!1}n.attr("href",n.data("href")+encodeURIComponent(e.val()))});var t=a("#business_type");0!==parseInt(t.data("default"))&&a("#site_type").on("change",function(){var e=a(this).val();"news"!==e&&"webshop"!==e&&"otherbusiness"!==e||t.val("Organization").trigger("change"),"business"===e&&t.val("LocalBusiness").trigger("change")})},searchconsole:function(){a("#console_authorization_code").on("paste",function(){var t=a(this).next(".button");setTimeout(function(){t.trigger("click")},100)})},ready:function(){a("#show-seo-score").on("change",function(t){a.ajax({url:rankMath.api.root+"rankmath/v1/enableScore",method:"POST",beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",rankMath.api.nonce)},data:{enable:a(this).is(":checked")}}).done(function(t){console.log(t)})}),a(".rank-math-score-image img").on("click",function(t){return t.preventDefault(),a("#show-seo-score").trigger("click"),!1})}},window.rankMathSetupWizard.init()})}});
includes/admin/class-admin.php CHANGED
@@ -34,7 +34,7 @@ class Admin implements Runner {
34
  */
35
  public function hooks() {
36
  $this->action( 'init', 'flush', 999 );
37
- $this->filter( 'user_contactmethods', 'update_contactmethods' );
38
  $this->action( 'save_post', 'canonical_check_notice' );
39
  $this->action( 'wp_dashboard_setup', 'add_dashboard_widgets' );
40
  $this->action( 'cmb2_save_options-page_fields', 'update_is_configured_value', 10, 2 );
@@ -46,7 +46,7 @@ class Admin implements Runner {
46
  }
47
 
48
  /**
49
- * If the flush option is set, flush the rewrite rules.
50
  */
51
  public function flush() {
52
  if ( get_option( 'rank_math_flush_rewrite' ) ) {
@@ -56,13 +56,12 @@ class Admin implements Runner {
56
  }
57
 
58
  /**
59
- * Filter the $contactmethods array and add Facebook, Google+ and Twitter.
60
- * These are used with the Facebook author, rel="author" and Twitter cards implementation.
61
  *
62
- * @param array $contactmethods Currently set contactmethods.
63
- * @return array $contactmethods with added contactmethods.
64
  */
65
- public function update_contactmethods( $contactmethods ) {
66
  $contactmethods['twitter'] = esc_html__( 'Twitter username (without @)', 'rank-math' );
67
  $contactmethods['facebook'] = esc_html__( 'Facebook profile URL', 'rank-math' );
68
 
@@ -99,7 +98,7 @@ class Admin implements Runner {
99
  continue;
100
  }
101
  ?>
102
- <a class="nav-tab<?php echo Param::get( 'view', 'modules' ) === $id ? ' nav-tab-active' : ''; ?>" href="<?php echo esc_url( Helper::get_admin_url( $link['url'], $link['args'] ) ); ?>" title="<?php echo $link['title']; ?>"><?php echo $link['title']; ?></a>
103
  <?php endforeach; ?>
104
  </h2>
105
  <?php
@@ -149,7 +148,7 @@ class Admin implements Runner {
149
  }
150
 
151
  /**
152
- * CHeck if the keyword already used or not.
153
  */
154
  public function is_keyword_new() {
155
  global $wpdb;
@@ -257,7 +256,7 @@ class Admin implements Runner {
257
  * Set term query.
258
  *
259
  * @param array $query Array of query.
260
- * @param int $post_id Post id to get terms from.
261
  * @param string $taxonomy Taxonomy to get terms for.
262
  */
263
  private function set_term_query( &$query, $post_id, $taxonomy ) {
34
  */
35
  public function hooks() {
36
  $this->action( 'init', 'flush', 999 );
37
+ $this->filter( 'user_contactmethods', 'update_user_contactmethods' );
38
  $this->action( 'save_post', 'canonical_check_notice' );
39
  $this->action( 'wp_dashboard_setup', 'add_dashboard_widgets' );
40
  $this->action( 'cmb2_save_options-page_fields', 'update_is_configured_value', 10, 2 );
46
  }
47
 
48
  /**
49
+ * Flush the rewrite rules once if the rank_math_flush_rewrite option is set.
50
  */
51
  public function flush() {
52
  if ( get_option( 'rank_math_flush_rewrite' ) ) {
56
  }
57
 
58
  /**
59
+ * Add Facebook and Twitter as contact method for the users.
 
60
  *
61
+ * @param array $contactmethods Current contactmethods.
62
+ * @return array New contactmethods with extra items.
63
  */
64
+ public function update_user_contactmethods( $contactmethods ) {
65
  $contactmethods['twitter'] = esc_html__( 'Twitter username (without @)', 'rank-math' );
66
  $contactmethods['facebook'] = esc_html__( 'Facebook profile URL', 'rank-math' );
67
 
98
  continue;
99
  }
100
  ?>
101
+ <a class="nav-tab<?php echo Param::get( 'view', 'modules' ) === sanitize_html_class( $id ) ? ' nav-tab-active' : ''; ?>" href="<?php echo esc_url( Helper::get_admin_url( $link['url'], $link['args'] ) ); ?>" title="<?php echo esc_attr( $link['title'] ); ?>"><?php echo esc_html( $link['title'] ); ?></a>
102
  <?php endforeach; ?>
103
  </h2>
104
  <?php
148
  }
149
 
150
  /**
151
+ * Check if the keyword has been used before for another post.
152
  */
153
  public function is_keyword_new() {
154
  global $wpdb;
256
  * Set term query.
257
  *
258
  * @param array $query Array of query.
259
+ * @param int $post_id Post ID to get terms from.
260
  * @param string $taxonomy Taxonomy to get terms for.
261
  */
262
  private function set_term_query( &$query, $post_id, $taxonomy ) {
includes/admin/class-assets.php CHANGED
@@ -40,7 +40,7 @@ class Assets implements Runner {
40
  }
41
 
42
  /**
43
- * Register styles and scripts required by plugin.
44
  */
45
  public function register() {
46
 
@@ -85,13 +85,13 @@ class Assets implements Runner {
85
  );
86
 
87
  /**
88
- * Allow other plugins to register styles or scripts into admin after plugin assets.
89
  */
90
  $this->do_action( 'admin/register_scripts' );
91
  }
92
 
93
  /**
94
- * Enqueue Styles and Scripts required by plugin.
95
  */
96
  public function enqueue() {
97
  $screen = get_current_screen();
@@ -107,7 +107,7 @@ class Assets implements Runner {
107
  Helper::add_json( 'maxTags', Helper::is_site_connected() ? 5 : 1 );
108
 
109
  /**
110
- * Allow other plugins to enqueue styles or scripts into admin after plugin assets.
111
  */
112
  $this->do_action( 'admin/enqueue_scripts' );
113
  }
@@ -125,6 +125,7 @@ class Assets implements Runner {
125
 
126
  /**
127
  * Overwrite wplink script file.
 
128
  */
129
  public function overwrite_wplink() {
130
 
40
  }
41
 
42
  /**
43
+ * Register styles and scripts.
44
  */
45
  public function register() {
46
 
85
  );
86
 
87
  /**
88
+ * Allow other plugins to register/deregister admin styles or scripts after plugin assets.
89
  */
90
  $this->do_action( 'admin/register_scripts' );
91
  }
92
 
93
  /**
94
+ * Enqueue styles and scripts.
95
  */
96
  public function enqueue() {
97
  $screen = get_current_screen();
107
  Helper::add_json( 'maxTags', Helper::is_site_connected() ? 5 : 1 );
108
 
109
  /**
110
+ * Allow other plugins to enqueue/dequeue admin styles or scripts after plugin assets.
111
  */
112
  $this->do_action( 'admin/enqueue_scripts' );
113
  }
125
 
126
  /**
127
  * Overwrite wplink script file.
128
+ * Rank Math adds new options in the link popup when editing a post.
129
  */
130
  public function overwrite_wplink() {
131
 
includes/admin/class-deactivate-survey.php CHANGED
@@ -71,7 +71,7 @@ class Deactivate_Survey implements Runner {
71
  }
72
 
73
  /**
74
- * Print deactivate feedback dialog.
75
  */
76
  public function deactivate_scripts() {
77
  $screen = get_current_screen();
71
  }
72
 
73
  /**
74
+ * Output deactivate feedback popup.
75
  */
76
  public function deactivate_scripts() {
77
  $screen = get_current_screen();
includes/admin/class-import-export.php CHANGED
@@ -92,7 +92,7 @@ class Import_Export implements Runner {
92
  }
93
 
94
  /**
95
- * Handles AJAX plugin run clean.
96
  */
97
  public function clean_plugin() {
98
  $this->verify_nonce( 'rank-math-ajax-nonce' );
@@ -109,7 +109,7 @@ class Import_Export implements Runner {
109
  }
110
 
111
  /**
112
- * Handles AJAX plugin run import.
113
  */
114
  public function import_plugin() {
115
  $this->verify_nonce( 'rank-math-ajax-nonce' );
@@ -181,7 +181,7 @@ class Import_Export implements Runner {
181
  }
182
 
183
  /**
184
- * Run backup actions
185
  *
186
  * @param string $action Action to perform.
187
  * @param array $key Key to backup.
@@ -260,7 +260,7 @@ class Import_Export implements Runner {
260
  }
261
 
262
  /**
263
- * Import has valid fule.
264
  *
265
  * @return mixed
266
  */
@@ -386,7 +386,7 @@ class Import_Export implements Runner {
386
  /**
387
  * Gets export data.
388
  *
389
- * @param array $panels Which panels do you want to export. It will export all panels if this param is empty.
390
  * @return array
391
  */
392
  private function get_export_data( array $panels = [] ) {
@@ -432,7 +432,7 @@ class Import_Export implements Runner {
432
  }
433
 
434
  /**
435
- * Is action allowed.
436
  *
437
  * @param string $perform Action to check.
438
  *
92
  }
93
 
94
  /**
95
+ * Handles AJAX run plugin clean.
96
  */
97
  public function clean_plugin() {
98
  $this->verify_nonce( 'rank-math-ajax-nonce' );
109
  }
110
 
111
  /**
112
+ * Handles AJAX run plugin import.
113
  */
114
  public function import_plugin() {
115
  $this->verify_nonce( 'rank-math-ajax-nonce' );
181
  }
182
 
183
  /**
184
+ * Run backup actions.
185
  *
186
  * @param string $action Action to perform.
187
  * @param array $key Key to backup.
260
  }
261
 
262
  /**
263
+ * Import has valid file.
264
  *
265
  * @return mixed
266
  */
386
  /**
387
  * Gets export data.
388
  *
389
+ * @param array $panels Which panels to export. All panels will be exported if this param is empty.
390
  * @return array
391
  */
392
  private function get_export_data( array $panels = [] ) {
432
  }
433
 
434
  /**
435
+ * Check if given action is in the list of allowed actions.
436
  *
437
  * @param string $perform Action to check.
438
  *
includes/admin/class-metabox.php CHANGED
@@ -49,10 +49,10 @@ class Metabox implements Runner {
49
  }
50
 
51
  /**
52
- * Enqueue Styles and Scripts required for metabox.
53
  */
54
  public function enqueue() {
55
- // Early bail out if is not the valid screen or if it's WPBakery's Frontend editor.
56
  $screen = get_current_screen();
57
  if (
58
  ! in_array( $screen->base, array( 'post', 'term', 'profile', 'user-edit' ), true ) ||
@@ -203,7 +203,7 @@ class Metabox implements Runner {
203
  $allowed_post_types[] = $post_type;
204
  }
205
 
206
- // Early Bail!
207
  if ( empty( $allowed_post_types ) ) {
208
  return;
209
  }
@@ -239,7 +239,7 @@ class Metabox implements Runner {
239
  }
240
 
241
  /**
242
- * Output the WordPress editor.
243
  *
244
  * @param object $term Current taxonomy term object.
245
  */
@@ -292,7 +292,7 @@ class Metabox implements Runner {
292
  */
293
  public function invalidate_facebook_object_cache( $field_id, $updated, $action, $field ) {
294
 
295
- // Early Bail!
296
  if ( ! in_array( $field_id, [ 'rank_math_facebook_title', 'rank_math_facebook_image', 'rank_math_facebook_description' ], true ) || ! $updated ) {
297
  return;
298
  }
@@ -300,7 +300,7 @@ class Metabox implements Runner {
300
  $app_id = Helper::get_settings( 'titles.facebook_app_id' );
301
  $secret = Helper::get_settings( 'titles.facebook_secret' );
302
 
303
- // Early Bail!
304
  if ( ! $app_id || ! $secret ) {
305
  return;
306
  }
@@ -318,7 +318,7 @@ class Metabox implements Runner {
318
  }
319
 
320
  /**
321
- * Get object types to register metabox to
322
  *
323
  * @return array
324
  */
@@ -341,7 +341,7 @@ class Metabox implements Runner {
341
  }
342
 
343
  /**
344
- * Get metabox priority
345
  *
346
  * @return string
347
  */
@@ -352,6 +352,9 @@ class Metabox implements Runner {
352
  );
353
  $priority = 'product' === $post_type ? 'default' : 'high';
354
 
 
 
 
355
  return $this->do_filter( 'metabox/priority', $priority );
356
  }
357
 
@@ -374,7 +377,7 @@ class Metabox implements Runner {
374
  }
375
 
376
  /**
377
- * Can add metabox
378
  *
379
  * @return bool
380
  */
@@ -386,7 +389,7 @@ class Metabox implements Runner {
386
  }
387
 
388
  /**
389
- * Is user metabox enabled.
390
  *
391
  * @return bool
392
  */
@@ -397,7 +400,7 @@ class Metabox implements Runner {
397
  }
398
 
399
  /**
400
- * Get tabs.
401
  *
402
  * @return array
403
  */
@@ -428,7 +431,7 @@ class Metabox implements Runner {
428
  ];
429
 
430
  /**
431
- * Allow developers to add new tabs into main metabox.
432
  *
433
  * @param array $tabs Array of tabs.
434
  */
@@ -436,7 +439,7 @@ class Metabox implements Runner {
436
  }
437
 
438
  /**
439
- * Assessor data
440
  */
441
  private function assessor() {
442
  $data = [
@@ -453,7 +456,7 @@ class Metabox implements Runner {
453
  }
454
 
455
  /**
456
- * Return power words
457
  *
458
  * @return array
459
  */
@@ -463,7 +466,7 @@ class Metabox implements Runner {
463
  }
464
 
465
  /**
466
- * Check if any TOC plugin detected
467
  *
468
  * @return bool
469
  */
49
  }
50
 
51
  /**
52
+ * Enqueue styles and scripts for the metabox.
53
  */
54
  public function enqueue() {
55
+ // Early bail if we're not on the valid screens or if it's WPBakery's Frontend editor.
56
  $screen = get_current_screen();
57
  if (
58
  ! in_array( $screen->base, array( 'post', 'term', 'profile', 'user-edit' ), true ) ||
203
  $allowed_post_types[] = $post_type;
204
  }
205
 
206
+ // Early bail.
207
  if ( empty( $allowed_post_types ) ) {
208
  return;
209
  }
239
  }
240
 
241
  /**
242
+ * Output the WordPress editor for term SEO description.
243
  *
244
  * @param object $term Current taxonomy term object.
245
  */
292
  */
293
  public function invalidate_facebook_object_cache( $field_id, $updated, $action, $field ) {
294
 
295
+ // Early bail.
296
  if ( ! in_array( $field_id, [ 'rank_math_facebook_title', 'rank_math_facebook_image', 'rank_math_facebook_description' ], true ) || ! $updated ) {
297
  return;
298
  }
300
  $app_id = Helper::get_settings( 'titles.facebook_app_id' );
301
  $secret = Helper::get_settings( 'titles.facebook_secret' );
302
 
303
+ // Early bail.
304
  if ( ! $app_id || ! $secret ) {
305
  return;
306
  }
318
  }
319
 
320
  /**
321
+ * Get object types to register metaboxes to.
322
  *
323
  * @return array
324
  */
341
  }
342
 
343
  /**
344
+ * Get metabox priority.
345
  *
346
  * @return string
347
  */
352
  );
353
  $priority = 'product' === $post_type ? 'default' : 'high';
354
 
355
+ /**
356
+ * Filter: Change metabox priority.
357
+ */
358
  return $this->do_filter( 'metabox/priority', $priority );
359
  }
360
 
377
  }
378
 
379
  /**
380
+ * Check if user has the necessary capabilities for seeing the meta box.
381
  *
382
  * @return bool
383
  */
389
  }
390
 
391
  /**
392
+ * Check if user meta box is enabled.
393
  *
394
  * @return bool
395
  */
400
  }
401
 
402
  /**
403
+ * Get metabox tabs.
404
  *
405
  * @return array
406
  */
431
  ];
432
 
433
  /**
434
+ * Allow developers to add new tabs in the main metabox.
435
  *
436
  * @param array $tabs Array of tabs.
437
  */
439
  }
440
 
441
  /**
442
+ * Assessor data.
443
  */
444
  private function assessor() {
445
  $data = [
456
  }
457
 
458
  /**
459
+ * Return power words.
460
  *
461
  * @return array
462
  */
466
  }
467
 
468
  /**
469
+ * Check if any TOC plugin is installed.
470
  *
471
  * @return bool
472
  */
includes/admin/class-notices.php CHANGED
@@ -34,7 +34,7 @@ class Notices implements Runner {
34
  }
35
 
36
  /**
37
- * Run all notices routine
38
  */
39
  public function notices() {
40
  $this->is_plugin_configured();
@@ -60,7 +60,7 @@ class Notices implements Runner {
60
  }
61
 
62
  /**
63
- * If plugin configuration not done
64
  */
65
  private function is_plugin_configured() {
66
  if ( 'mts-install-plugins' === Param::get( 'page' ) ) {
@@ -83,7 +83,7 @@ class Notices implements Runner {
83
  }
84
 
85
  /**
86
- * If any new post type detected
87
  */
88
  private function new_post_type() {
89
  $known = get_option( 'rank_math_known_post_types', [] );
34
  }
35
 
36
  /**
37
+ * Run all notices routine.
38
  */
39
  public function notices() {
40
  $this->is_plugin_configured();
60
  }
61
 
62
  /**
63
+ * If plugin configuration not done.
64
  */
65
  private function is_plugin_configured() {
66
  if ( 'mts-install-plugins' === Param::get( 'page' ) ) {
83
  }
84
 
85
  /**
86
+ * Add notification if a new post type is detected.
87
  */
88
  private function new_post_type() {
89
  $known = get_option( 'rank_math_known_post_types', [] );
includes/admin/class-option-center.php CHANGED
@@ -92,7 +92,7 @@ class Option_Center implements Runner {
92
  ];
93
 
94
  /**
95
- * Allow developers to add new section into general setting option panel.
96
  *
97
  * @param array $tabs
98
  */
@@ -109,7 +109,7 @@ class Option_Center implements Runner {
109
  }
110
 
111
  /**
112
- * Remove general tabs.
113
  *
114
  * @param array $tabs Hold tabs for optional panel.
115
  * @return array
@@ -173,7 +173,7 @@ class Option_Center implements Runner {
173
  ];
174
 
175
  /**
176
- * Allow developers to add new section into title setting option panel.
177
  *
178
  * @param array $tabs
179
  */
@@ -196,9 +196,9 @@ class Option_Center implements Runner {
196
  }
197
 
198
  /**
199
- * Add post type tabs into title option panel
200
  *
201
- * @param array $tabs Hold tabs for optional panel.
202
  * @return array
203
  */
204
  public function title_post_type_settings( $tabs ) {
@@ -241,9 +241,9 @@ class Option_Center implements Runner {
241
  }
242
 
243
  /**
244
- * Add taxonomy tabs into title option panel
245
  *
246
- * @param array $tabs Hold tabs for optional panel.
247
  * @return array
248
  */
249
  public function title_taxonomy_settings( $tabs ) {
@@ -305,10 +305,9 @@ class Option_Center implements Runner {
305
  public function check_updated_fields( $object_id, $updated ) {
306
 
307
  /**
308
- * Allow developers to add option fields to check against updatation.
309
- * And if updated flush the rewrite rules.
310
  *
311
- * @param array $flush_fields Array of fields id for which we need to flush.
312
  */
313
  $flush_fields = $this->do_filter(
314
  'flush_fields',
92
  ];
93
 
94
  /**
95
+ * Allow developers to add new sections in the General Settings.
96
  *
97
  * @param array $tabs
98
  */
109
  }
110
 
111
  /**
112
+ * Remove unneeded tabs from the General Settings.
113
  *
114
  * @param array $tabs Hold tabs for optional panel.
115
  * @return array
173
  ];
174
 
175
  /**
176
+ * Allow developers to add new section in the Title Settings.
177
  *
178
  * @param array $tabs
179
  */
196
  }
197
 
198
  /**
199
+ * Add post type tabs in the Title Settings panel.
200
  *
201
+ * @param array $tabs Holds the tabs of the options panel.
202
  * @return array
203
  */
204
  public function title_post_type_settings( $tabs ) {
241
  }
242
 
243
  /**
244
+ * Add taxonomy tabs in the Title Settings panel.
245
  *
246
+ * @param array $tabs Holds the tabs of the options panel.
247
  * @return array
248
  */
249
  public function title_taxonomy_settings( $tabs ) {
305
  public function check_updated_fields( $object_id, $updated ) {
306
 
307
  /**
308
+ * Filter: Allow developers to add option fields which will flush the rewrite rules when updated.
 
309
  *
310
+ * @param array $flush_fields Array of field IDs for which we need to flush.
311
  */
312
  $flush_fields = $this->do_filter(
313
  'flush_fields',
includes/admin/class-options.php CHANGED
@@ -104,7 +104,7 @@ class Options {
104
  }
105
 
106
  /**
107
- * Create option object and add settings
108
  */
109
  function register_option_page() {
110
  $cmb = new_cmb2_box(
@@ -176,7 +176,7 @@ class Options {
176
  }
177
 
178
  /**
179
- * Set the default values if not set
180
  *
181
  * @param CMB2 $cmb The CMB2 object to hookup.
182
  */
@@ -195,7 +195,7 @@ class Options {
195
  }
196
 
197
  /**
198
- * Reset options
199
  */
200
  public function reset_options() {
201
  $url = wp_get_referer();
@@ -211,7 +211,7 @@ class Options {
211
  }
212
 
213
  /**
214
- * Enqueue styles and scripts
215
  */
216
  public function enqueue() {
217
  $screen = get_current_screen();
@@ -232,7 +232,7 @@ class Options {
232
  }
233
 
234
  /**
235
- * Add classes to <body> of WordPress admin
236
  *
237
  * @param string $classes Space-separated list of CSS classes.
238
  * @return string
@@ -242,7 +242,7 @@ class Options {
242
  }
243
 
244
  /**
245
- * Display Setting on a page
246
  *
247
  * @param CMB2_Options $machine CUrrent CMB2 box object.
248
  */
@@ -286,7 +286,7 @@ class Options {
286
  }
287
 
288
  /**
289
- * Is the page is currrent page
290
  *
291
  * @return bool
292
  */
@@ -295,7 +295,7 @@ class Options {
295
  }
296
 
297
  /**
298
- * Get setting tabs
299
  *
300
  * @return array
301
  */
@@ -313,7 +313,7 @@ class Options {
313
  }
314
 
315
  /**
316
- * Locate tab options file
317
  *
318
  * @param string $id Tab id.
319
  * @param array $tab Tab options.
104
  }
105
 
106
  /**
107
+ * Create option object and add settings.
108
  */
109
  function register_option_page() {
110
  $cmb = new_cmb2_box(
176
  }
177
 
178
  /**
179
+ * Set the default values if not set.
180
  *
181
  * @param CMB2 $cmb The CMB2 object to hookup.
182
  */
195
  }
196
 
197
  /**
198
+ * Reset options.
199
  */
200
  public function reset_options() {
201
  $url = wp_get_referer();
211
  }
212
 
213
  /**
214
+ * Enqueue styles and scripts.
215
  */
216
  public function enqueue() {
217
  $screen = get_current_screen();
232
  }
233
 
234
  /**
235
+ * Add classes to <body> of WordPress admin.
236
  *
237
  * @param string $classes Space-separated list of CSS classes.
238
  * @return string
242
  }
243
 
244
  /**
245
+ * Display Setting on a page.
246
  *
247
  * @param CMB2_Options $machine CUrrent CMB2 box object.
248
  */
286
  }
287
 
288
  /**
289
+ * Check if we are on the correct page.
290
  *
291
  * @return bool
292
  */
295
  }
296
 
297
  /**
298
+ * Get setting tabs.
299
  *
300
  * @return array
301
  */
313
  }
314
 
315
  /**
316
+ * Locate tab options file.
317
  *
318
  * @param string $id Tab id.
319
  * @param array $tab Tab options.
includes/admin/class-post-columns.php CHANGED
@@ -107,7 +107,7 @@ class Post_Columns implements Runner {
107
  }
108
 
109
  /**
110
- * Register post column hooks
111
  */
112
  private function register_post_columns() {
113
  foreach ( Helper::get_allowed_post_types() as $post_type ) {
@@ -133,7 +133,7 @@ class Post_Columns implements Runner {
133
  }
134
 
135
  /**
136
- * Register media column hooks
137
  */
138
  private function register_media_columns() {
139
  if ( ! Helper::get_settings( 'titles.pt_attachment_bulk_editing' ) ) {
@@ -145,7 +145,7 @@ class Post_Columns implements Runner {
145
  }
146
 
147
  /**
148
- * Enqueue Styles and Scripts required by plugin.
149
  */
150
  public function enqueue() {
151
  $screen = get_current_screen();
@@ -192,7 +192,7 @@ class Post_Columns implements Runner {
192
  }
193
 
194
  /**
195
- * Make seo_score column sortable
196
  *
197
  * @param array $columns An array of column names.
198
  * @return array
107
  }
108
 
109
  /**
110
+ * Register post column hooks.
111
  */
112
  private function register_post_columns() {
113
  foreach ( Helper::get_allowed_post_types() as $post_type ) {
133
  }
134
 
135
  /**
136
+ * Register media column hooks.
137
  */
138
  private function register_media_columns() {
139
  if ( ! Helper::get_settings( 'titles.pt_attachment_bulk_editing' ) ) {
145
  }
146
 
147
  /**
148
+ * Enqueue styles and scripts.
149
  */
150
  public function enqueue() {
151
  $screen = get_current_screen();
192
  }
193
 
194
  /**
195
+ * Make seo_score column sortable.
196
  *
197
  * @param array $columns An array of column names.
198
  * @return array
includes/admin/class-post-filters.php CHANGED
@@ -49,7 +49,7 @@ class Post_Filters implements Runner {
49
  }
50
 
51
  /**
52
- * Filter post in admin by Rank Math's Filter value.
53
  *
54
  * @param \WP_Query $query The wp_query instance.
55
  */
@@ -70,7 +70,7 @@ class Post_Filters implements Runner {
70
 
71
  $meta_query = [];
72
 
73
- // Check for pillar content filter.
74
  if ( ! empty( $_GET['pillar_content'] ) ) {
75
  $meta_query[] = [
76
  'key' => 'rank_math_pillar_content',
@@ -83,7 +83,7 @@ class Post_Filters implements Runner {
83
  }
84
 
85
  /**
86
- * Filter post in admin by pillar content.
87
  *
88
  * @param \WP_Query $query The wp_query instance.
89
  */
@@ -168,14 +168,14 @@ class Post_Filters implements Runner {
168
  ?>
169
  <select name="seo-filter">
170
  <?php foreach ( $options as $val => $option ) : ?>
171
- <option value="<?php echo $val; ?>" <?php selected( $selected, $val, true ); ?>><?php echo $option; ?></option>
172
  <?php endforeach; ?>
173
  </select>
174
  <?php
175
  }
176
 
177
  /**
178
- * Add view to filter list for pillar content.
179
  *
180
  * @param array $views An array of available list table views.
181
  */
@@ -268,7 +268,7 @@ class Post_Filters implements Runner {
268
  }
269
 
270
  /**
271
- * Can apply focus keyword filter.
272
  *
273
  * @return bool
274
  */
@@ -282,7 +282,7 @@ class Post_Filters implements Runner {
282
  }
283
 
284
  /**
285
- * Check if focus keyword is in title.
286
  *
287
  * @return bool|array
288
  */
@@ -313,6 +313,7 @@ class Post_Filters implements Runner {
313
  ],
314
  ]);
315
 
 
316
  $mq_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
317
  return $wpdb->get_col( "SELECT {$wpdb->posts}.ID FROM $wpdb->posts {$mq_sql['join']} WHERE 1=1 {$mq_sql['where']} AND {$wpdb->posts}.post_type = '$screen->post_type' AND ({$wpdb->posts}.post_status = 'publish') AND {$wpdb->posts}.post_title NOT REGEXP REPLACE({$wpdb->postmeta}.meta_value, ',', '|')" ); // phpcs:ignore
318
  }
49
  }
50
 
51
  /**
52
+ * Filter posts in admin by Rank Math's Filter value.
53
  *
54
  * @param \WP_Query $query The wp_query instance.
55
  */
70
 
71
  $meta_query = [];
72
 
73
+ // Check for Pillar Content filter.
74
  if ( ! empty( $_GET['pillar_content'] ) ) {
75
  $meta_query[] = [
76
  'key' => 'rank_math_pillar_content',
83
  }
84
 
85
  /**
86
+ * Filter post in admin by Pillar Content.
87
  *
88
  * @param \WP_Query $query The wp_query instance.
89
  */
168
  ?>
169
  <select name="seo-filter">
170
  <?php foreach ( $options as $val => $option ) : ?>
171
+ <option value="<?php echo esc_attr( $val ); ?>" <?php selected( $selected, $val, true ); ?>><?php echo esc_html( $option ); ?></option>
172
  <?php endforeach; ?>
173
  </select>
174
  <?php
175
  }
176
 
177
  /**
178
+ * Add view to filter list for Pillar Content.
179
  *
180
  * @param array $views An array of available list table views.
181
  */
268
  }
269
 
270
  /**
271
+ * Can apply Focus Keyword filter.
272
  *
273
  * @return bool
274
  */
282
  }
283
 
284
  /**
285
+ * Check if Focus Keyword is in title.
286
  *
287
  * @return bool|array
288
  */
313
  ],
314
  ]);
315
 
316
+ $screen = get_current_screen();
317
  $mq_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
318
  return $wpdb->get_col( "SELECT {$wpdb->posts}.ID FROM $wpdb->posts {$mq_sql['join']} WHERE 1=1 {$mq_sql['where']} AND {$wpdb->posts}.post_type = '$screen->post_type' AND ({$wpdb->posts}.post_status = 'publish') AND {$wpdb->posts}.post_title NOT REGEXP REPLACE({$wpdb->postmeta}.meta_value, ',', '|')" ); // phpcs:ignore
319
  }
includes/admin/class-registration.php CHANGED
@@ -164,7 +164,7 @@ class Registration {
164
  */
165
  public function render_page() {
166
 
167
- // Do not proceed, if we're not on the right page.
168
  if ( Param::get( 'page' ) !== $this->slug ) {
169
  return;
170
  }
@@ -261,7 +261,7 @@ class Registration {
261
  }
262
 
263
  /**
264
- * Skik wizard handler.
265
  */
266
  public function skip_wizard() {
267
  check_admin_referer( 'rank-math-wizard', 'security' );
@@ -328,7 +328,7 @@ class Registration {
328
  }
329
 
330
  /**
331
- * Print javascript
332
  */
333
  private function print_script() {
334
  ?>
164
  */
165
  public function render_page() {
166
 
167
+ // Early bail if we're not on the right page.
168
  if ( Param::get( 'page' ) !== $this->slug ) {
169
  return;
170
  }
261
  }
262
 
263
  /**
264
+ * Skip wizard handler.
265
  */
266
  public function skip_wizard() {
267
  check_admin_referer( 'rank-math-wizard', 'security' );
328
  }
329
 
330
  /**
331
+ * Print Javascript.
332
  */
333
  private function print_script() {
334
  ?>
includes/admin/class-serp-checklist.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * The serp checklist functionality.
4
  *
5
  * @since 0.9.0
6
  * @package RankMath
@@ -414,7 +414,7 @@ class Serp_Checklist {
414
  }
415
 
416
  /**
417
- * Add locale
418
  *
419
  * @param string $id List id.
420
  * @param array $item List info.
1
  <?php
2
  /**
3
+ * The SERP checklist functionality.
4
  *
5
  * @since 0.9.0
6
  * @package RankMath
414
  }
415
 
416
  /**
417
+ * Add locale.
418
  *
419
  * @param string $id List id.
420
  * @param array $item List info.
includes/admin/class-serp-preview.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * The serp preview functionality.
4
  *
5
  * @since 0.9.0
6
  * @package RankMath
@@ -293,7 +293,7 @@ class Serp_Preview {
293
  }
294
 
295
  /**
296
- * Get desktop preview
297
  *
298
  * @param array $data Snippet data array.
299
  * @param int $rating Ratings.
@@ -343,7 +343,7 @@ class Serp_Preview {
343
  }
344
 
345
  /**
346
- * Get mobile preview
347
  *
348
  * @param array $data Snippet data array.
349
  * @param int $rating Ratings.
1
  <?php
2
  /**
3
+ * The SERP preview functionality, in the metabox.
4
  *
5
  * @since 0.9.0
6
  * @package RankMath
293
  }
294
 
295
  /**
296
+ * Get desktop preview.
297
  *
298
  * @param array $data Snippet data array.
299
  * @param int $rating Ratings.
343
  }
344
 
345
  /**
346
+ * Get mobile preview.
347
  *
348
  * @param array $data Snippet data array.
349
  * @param int $rating Ratings.
includes/admin/class-setup-wizard.php CHANGED
@@ -55,7 +55,7 @@ class Setup_Wizard {
55
  protected $slug = 'rank-math-wizard';
56
 
57
  /**
58
- * CMB2 object
59
  *
60
  * @var \CMB2
61
  */
@@ -77,7 +77,7 @@ class Setup_Wizard {
77
  $this->action( 'admin_menu', 'add_admin_menu' );
78
  $this->action( 'admin_post_rank_math_save_wizard', 'save_wizard' );
79
 
80
- // If not the page is not this page stop here.
81
  if ( ! $this->is_current_page() ) {
82
  return;
83
  }
55
  protected $slug = 'rank-math-wizard';
56
 
57
  /**
58
+ * CMB2 object.
59
  *
60
  * @var \CMB2
61
  */
77
  $this->action( 'admin_menu', 'add_admin_menu' );
78
  $this->action( 'admin_post_rank_math_save_wizard', 'save_wizard' );
79
 
80
+ // If the page is not this page stop here.
81
  if ( ! $this->is_current_page() ) {
82
  return;
83
  }
includes/class-cmb2.php CHANGED
@@ -244,6 +244,47 @@ class CMB2 {
244
  return htmlentities( $value );
245
  }
246
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  /**
248
  * Handles sanitization for webmaster tag and remove <meta> tag.
249
  *
244
  return htmlentities( $value );
245
  }
246
 
247
+ /**
248
+ * Handles sanitization for text fields.
249
+ *
250
+ * @param string $value The unsanitized value from the form.
251
+ *
252
+ * @return string Sanitized value to be stored.
253
+ */
254
+ public static function sanitize_textfield( $value ) {
255
+ if ( is_object( $value ) || is_array( $value ) ) {
256
+ return '';
257
+ }
258
+
259
+ $value = (string) $value;
260
+ $filtered = wp_check_invalid_utf8( $value );
261
+
262
+ if ( strpos( $filtered, '<' ) !== false ) {
263
+ $filtered = wp_pre_kses_less_than( $filtered );
264
+ // This will strip extra whitespace for us.
265
+ $filtered = wp_strip_all_tags( $filtered, false );
266
+
267
+ // Use html entities in a special case to make sure no later
268
+ // newline stripping stage could lead to a functional tag!
269
+ $filtered = str_replace( "<\n", "&lt;\n", $filtered );
270
+ }
271
+ $filtered = preg_replace( '/[\r\n\t ]+/', ' ', $filtered );
272
+ $filtered = trim( $filtered );
273
+
274
+ $found = false;
275
+ while ( preg_match( '/%[0-9]{2}/i', $filtered, $match ) ) {
276
+ $filtered = str_replace( $match[0], '', $filtered );
277
+ $found = true;
278
+ }
279
+
280
+ if ( $found ) {
281
+ // Strip out the whitespace that may now exist after removing the octets.
282
+ $filtered = trim( preg_replace( '/ +/', ' ', $filtered ) );
283
+ }
284
+
285
+ return apply_filters( 'sanitize_text_field', $filtered, $value );
286
+ }
287
+
288
  /**
289
  * Handles sanitization for webmaster tag and remove <meta> tag.
290
  *
includes/class-common.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * The Global functionality of the plugin.
4
  *
5
  * Defines the functionality loaded both on admin and frontend.
6
  *
@@ -31,7 +31,7 @@ class Common {
31
  use Hooker, Ajax, Meta;
32
 
33
  /**
34
- * The Constructor.
35
  */
36
  public function __construct() {
37
  $this->action( 'admin_bar_menu', 'admin_bar_menu', 100 );
@@ -46,35 +46,35 @@ class Common {
46
 
47
  // Strip stopwords from slugs.
48
  if ( Helper::get_settings( 'general.url_strip_stopwords' ) ) {
49
- $this->filter( 'get_sample_permalink', 'stopwords_sample_permalink', 10, 3 );
50
  }
51
 
 
52
  $this->ajax( 'mark_page_as', 'mark_page_as' );
53
 
54
  add_action( 'wp_ajax_nopriv_rank_math_overlay_thumb', [ $this, 'generate_overlay_thumbnail' ] );
55
  }
56
 
57
  /**
58
- * Removes stopword from the sample permalink that is generated in an AJAX request.
59
  *
60
- * @param array $permalink The permalink generated for this post by WordPress.
61
- * @param int $post_id The ID of the post.
62
- * @param string $title The title for the post that the user used.
63
  *
64
  * @return array
65
  */
66
- public function stopwords_sample_permalink( $permalink, $post_id, $title ) {
67
 
68
- // Early Bail!
69
  if ( empty( $title ) ) {
70
  return $permalink;
71
  }
72
 
73
  // The second element is the slug.
74
- // Turn it to an array and strip stop words by comparing against an array of stopwords.
75
  $new_slug_parts = array_diff( explode( '-', $permalink[1] ), $this->get_stopwords() );
76
 
77
- // Don't change the slug if there are less than 3 words left.
78
  if ( count( $new_slug_parts ) > 2 ) {
79
  $permalink[1] = join( '-', $new_slug_parts );
80
  }
@@ -145,7 +145,7 @@ class Common {
145
  }
146
 
147
  /**
148
- * Get chain of hierarchical link.
149
  *
150
  * @param WP_Term $term The term in question.
151
  *
@@ -201,13 +201,17 @@ class Common {
201
  }
202
 
203
  /**
204
- * Adds rel="nofollow" to a link, only used for login / registration links.
205
  *
206
- * @param string $link The link element as a string.
207
  *
208
  * @return string
209
  */
210
  public function nofollow_link( $link ) {
 
 
 
 
211
  return str_replace( '<a ', '<a rel="nofollow" ', $link );
212
  }
213
 
@@ -383,7 +387,7 @@ class Common {
383
  }
384
 
385
  /**
386
- * Third party SEO Tools
387
  *
388
  * @param array $items Array to add menu into.
389
  */
@@ -478,7 +482,7 @@ class Common {
478
  }
479
 
480
  /**
481
- * AJAX function to mark page for different thing.
482
  */
483
  public function mark_page_as() {
484
  check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
@@ -514,7 +518,7 @@ class Common {
514
  }
515
 
516
  /**
517
- * AJAX function to generate overlay image.
518
  */
519
  public function generate_overlay_thumbnail() {
520
  $thumbnail_id = Param::request( 'id', 0, FILTER_VALIDATE_INT );
@@ -565,7 +569,7 @@ class Common {
565
  /**
566
  * Get Rank Math icon.
567
  *
568
- * @param integer $width Width of icon.
569
  *
570
  * @return string
571
  */
1
  <?php
2
  /**
3
+ * Global functionality of the plugin.
4
  *
5
  * Defines the functionality loaded both on admin and frontend.
6
  *
31
  use Hooker, Ajax, Meta;
32
 
33
  /**
34
+ * Constructor method.
35
  */
36
  public function __construct() {
37
  $this->action( 'admin_bar_menu', 'admin_bar_menu', 100 );
46
 
47
  // Strip stopwords from slugs.
48
  if ( Helper::get_settings( 'general.url_strip_stopwords' ) ) {
49
+ $this->filter( 'get_sample_permalink', 'stopwords_default_permalink', 10, 3 );
50
  }
51
 
52
+ // "Mark page as..." functionality in the top admin bar.
53
  $this->ajax( 'mark_page_as', 'mark_page_as' );
54
 
55
  add_action( 'wp_ajax_nopriv_rank_math_overlay_thumb', [ $this, 'generate_overlay_thumbnail' ] );
56
  }
57
 
58
  /**
59
+ * Remove stopwords from the default permalink generated automatically.
60
  *
61
+ * @param array $permalink The permalink generated by WordPress.
62
+ * @param int $post_id The post ID.
63
+ * @param string $title The title of the post.
64
  *
65
  * @return array
66
  */
67
+ public function stopwords_default_permalink( $permalink, $post_id, $title ) {
68
 
 
69
  if ( empty( $title ) ) {
70
  return $permalink;
71
  }
72
 
73
  // The second element is the slug.
74
+ // Turn it to an array and strip stopwords by comparing against our array of stopwords.
75
  $new_slug_parts = array_diff( explode( '-', $permalink[1] ), $this->get_stopwords() );
76
 
77
+ // Only change it if the resulting URL is at least 3 words long.
78
  if ( count( $new_slug_parts ) > 2 ) {
79
  $permalink[1] = join( '-', $new_slug_parts );
80
  }
145
  }
146
 
147
  /**
148
+ * Get chain of hierarchical links.
149
  *
150
  * @param WP_Term $term The term in question.
151
  *
201
  }
202
 
203
  /**
204
+ * Add rel="nofollow" to a link.
205
  *
206
+ * @param string $link The link as a string.
207
  *
208
  * @return string
209
  */
210
  public function nofollow_link( $link ) {
211
+ // Check if link is nofollow already.
212
+ if ( strpos( $link, ' rel="nofollow"' ) || strpos( $link, " rel='nofollow'" ) ) {
213
+ return $link;
214
+ }
215
  return str_replace( '<a ', '<a rel="nofollow" ', $link );
216
  }
217
 
387
  }
388
 
389
  /**
390
+ * Third party SEO Tools, like the Google Structured Data Testing Tool.
391
  *
392
  * @param array $items Array to add menu into.
393
  */
482
  }
483
 
484
  /**
485
+ * AJAX function to mark page as Pillar Content/Noindex/Nofollow.
486
  */
487
  public function mark_page_as() {
488
  check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
518
  }
519
 
520
  /**
521
+ * AJAX function to generate overlay image. Used in social thumbnails.
522
  */
523
  public function generate_overlay_thumbnail() {
524
  $thumbnail_id = Param::request( 'id', 0, FILTER_VALIDATE_INT );
569
  /**
570
  * Get Rank Math icon.
571
  *
572
+ * @param integer $width Width of the icon.
573
  *
574
  * @return string
575
  */
includes/class-compatibility.php CHANGED
@@ -39,7 +39,7 @@ class Compatibility {
39
  }
40
 
41
  /**
42
- * Subscribe to comments reloaded page id
43
  *
44
  * @param int $page_id Change page id to real page.
45
  * @return int
@@ -60,14 +60,14 @@ class Compatibility {
60
  }
61
 
62
  /**
63
- * Remove robots for this plugin
64
  */
65
  public function subscribe_to_comments_reloaded_remove_robots() {
66
  remove_action( 'rank_math/frontend/robots', '__return_empty_array' );
67
  }
68
 
69
  /**
70
- * Remove Pirate forms plugin scripts and styles from setting panels
71
  */
72
  public function pirate_forms_dequeue_scripts() {
73
 
@@ -88,7 +88,7 @@ class Compatibility {
88
  }
89
 
90
  /**
91
- * Disable genesis seo functionality
92
  *
93
  * @param array $array Array hold disable info.
94
  *
39
  }
40
 
41
  /**
42
+ * Subscribe to comments reloaded page ID.
43
  *
44
  * @param int $page_id Change page id to real page.
45
  * @return int
60
  }
61
 
62
  /**
63
+ * Remove robots for this plugin.
64
  */
65
  public function subscribe_to_comments_reloaded_remove_robots() {
66
  remove_action( 'rank_math/frontend/robots', '__return_empty_array' );
67
  }
68
 
69
  /**
70
+ * Remove Pirate forms plugin scripts and styles from setting panels.
71
  */
72
  public function pirate_forms_dequeue_scripts() {
73
 
88
  }
89
 
90
  /**
91
+ * Disable Genesis SEO functionality.
92
  *
93
  * @param array $array Array hold disable info.
94
  *
includes/class-frontend-seo-score.php CHANGED
@@ -37,7 +37,7 @@ class Frontend_SEO_Score {
37
  private $css_added = false;
38
 
39
  /**
40
- * Magic method to use in case the class would be send to string.
41
  *
42
  * @return string
43
  */
37
  private $css_added = false;
38
 
39
  /**
40
+ * Magic method to use in case the class would be sent to string.
41
  *
42
  * @return string
43
  */
includes/class-helper.php CHANGED
@@ -29,30 +29,27 @@ class Helper {
29
  use Api, Attachment, Conditional, Choices, Post_Type, Options, Taxonomy, WordPress;
30
 
31
  /**
32
- * Replace `%variable_placeholders%` with their real value based on the current requested page/post/cpt.
33
  *
34
- * @param string $content The string to replace the variables in.
35
- * @param array $args The object some of the replacement values might come from, could be a post, taxonomy or term.
36
- * @param array $omit Variables that should not be replaced by this function.
37
  * @return string
38
  */
39
- public static function replace_vars( $content, $args = [], $omit = [] ) {
40
  $replacer = new Replace_Vars();
41
 
42
- return $replacer->replace( $content, $args, $omit );
43
  }
44
 
45
  /**
46
- * Register new replacement %variables%.
47
- * For use by other plugins/themes to register extra variables.
48
  *
49
  * @codeCoverageIgnore
50
  *
51
- * @param string $var The name of the variable to replace, i.e. '%var%'
52
- * - the surrounding % are optional.
53
- * @param mixed $callback Function or method to call to retrieve the replacement value for the variable
54
- * and should *return* the replacement value. DON'T echo it.
55
- * @param array $args Array with title, desc and example values.
56
  *
57
  * @return bool Whether the replacement function was succesfully registered.
58
  */
@@ -61,7 +58,7 @@ class Helper {
61
  }
62
 
63
  /**
64
- * Get midnight time for date.
65
  *
66
  * @param int $time Timestamp of date.
67
  * @return int
@@ -77,11 +74,11 @@ class Helper {
77
  }
78
 
79
  /**
80
- * Returns the value that is part of the given url.
81
  *
82
- * @param string $url The url to parse.
83
- * @param string $part The url part to use.
84
- * @return string The value of the url part.
85
  */
86
  public static function get_url_part( $url, $part ) {
87
  $url_parts = wp_parse_url( $url );
@@ -94,9 +91,9 @@ class Helper {
94
  }
95
 
96
  /**
97
- * Get current page full url.
98
  *
99
- * @param bool $ignore_qs Ignore Query String.
100
  * @return string
101
  */
102
  public static function get_current_page_url( $ignore_qs = false ) {
@@ -112,7 +109,7 @@ class Helper {
112
  }
113
 
114
  /**
115
- * Get search console api config.
116
  *
117
  * @return array
118
  */
@@ -131,7 +128,7 @@ class Helper {
131
  }
132
 
133
  /**
134
- * Get auth url.
135
  *
136
  * @return string
137
  */
@@ -149,7 +146,7 @@ class Helper {
149
  }
150
 
151
  /**
152
- * Get/Update search console data.
153
  *
154
  * @param bool|array $data Data to save.
155
  * @return bool|array
@@ -186,7 +183,7 @@ class Helper {
186
  }
187
 
188
  /**
189
- * Get module by id.
190
  *
191
  * @param string $id ID to get module.
192
  * @return object Module class object.
29
  use Api, Attachment, Conditional, Choices, Post_Type, Options, Taxonomy, WordPress;
30
 
31
  /**
32
+ * Replace `%variables%` with context-dependent value.
33
  *
34
+ * @param string $content The string containing the %variables%.
35
+ * @param array $args Context object, can be post, taxonomy or term.
36
+ * @param array $exclude Excluded variables won't be replaced.
37
  * @return string
38
  */
39
+ public static function replace_vars( $content, $args = [], $exclude = [] ) {
40
  $replacer = new Replace_Vars();
41
 
42
+ return $replacer->replace( $content, $args, $exclude );
43
  }
44
 
45
  /**
46
+ * Register extra %variables%. For developers.
 
47
  *
48
  * @codeCoverageIgnore
49
  *
50
+ * @param string $var Variable name, for example %custom%. '%' signs are optional.
51
+ * @param mixed $callback Replacement callback. Should return value, not output it.
52
+ * @param array $args Array with additional title, description and example values for the variable.
 
 
53
  *
54
  * @return bool Whether the replacement function was succesfully registered.
55
  */
58
  }
59
 
60
  /**
61
+ * Get midnight time for the date variables.
62
  *
63
  * @param int $time Timestamp of date.
64
  * @return int
74
  }
75
 
76
  /**
77
+ * Extract URL part.
78
  *
79
+ * @param string $url The URL to parse.
80
+ * @param string $part The URL part to retrieve.
81
+ * @return string The extracted URL part.
82
  */
83
  public static function get_url_part( $url, $part ) {
84
  $url_parts = wp_parse_url( $url );
91
  }
92
 
93
  /**
94
+ * Get current page URL.
95
  *
96
+ * @param bool $ignore_qs Ignore query string.
97
  * @return string
98
  */
99
  public static function get_current_page_url( $ignore_qs = false ) {
109
  }
110
 
111
  /**
112
+ * Get RM Search Console API config.
113
  *
114
  * @return array
115
  */
128
  }
129
 
130
  /**
131
+ * Get Search Console auth url.
132
  *
133
  * @return string
134
  */
146
  }
147
 
148
  /**
149
+ * Get or update Search Console data.
150
  *
151
  * @param bool|array $data Data to save.
152
  * @return bool|array
183
  }
184
 
185
  /**
186
+ * Get module by ID.
187
  *
188
  * @param string $id ID to get module.
189
  * @return object Module class object.
includes/class-installer.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Plugin Activation and De-Activation
4
  *
5
  * This class defines all code necessary to run during the plugin's activation.
6
  *
@@ -27,7 +27,7 @@ class Installer {
27
  use Hooker;
28
 
29
  /**
30
- * Binding all events
31
  */
32
  public function __construct() {
33
  register_activation_hook( RANK_MATH_FILE, [ $this, 'activation' ] );
@@ -40,7 +40,7 @@ class Installer {
40
  }
41
 
42
  /**
43
- * Does something when activating Rank Math.
44
  *
45
  * @param bool $network_wide Whether the plugin is being activated network-wide.
46
  */
@@ -54,7 +54,7 @@ class Installer {
54
  }
55
 
56
  /**
57
- * Does something when deactivating Rank Math.
58
  *
59
  * @param bool $network_wide Whether the plugin is being activated network-wide.
60
  */
@@ -102,7 +102,7 @@ class Installer {
102
  }
103
 
104
  /**
105
- * Run network-wide (de-)activation of the plugin.
106
  *
107
  * @param bool $activate True for plugin activation, false for de-activation.
108
  */
@@ -158,7 +158,7 @@ class Installer {
158
  }
159
 
160
  /**
161
- * Runs on deactivate of the plugin.
162
  */
163
  private function deactivate() {
164
  $this->clear_rewrite_rules( false );
@@ -168,7 +168,7 @@ class Installer {
168
  }
169
 
170
  /**
171
- * Set up the database tables which the plugin needs to function.
172
  */
173
  private function create_tables() {
174
  global $wpdb;
@@ -271,7 +271,7 @@ class Installer {
271
  'profiles' => [],
272
  ]);
273
 
274
- // Update "known CPTs" list, So we can send notice about new ones later.
275
  add_option( 'rank_math_known_post_types', Helper::get_accessible_post_types() );
276
 
277
  $modules = [
@@ -279,8 +279,6 @@ class Installer {
279
  'search-console',
280
  'seo-analysis',
281
  'sitemap',
282
-
283
- // Premium.
284
  'rich-snippet',
285
  'woocommerce',
286
  ];
@@ -347,6 +345,9 @@ class Installer {
347
  'usage_tracking' => 'on',
348
  'wc_remove_generator' => 'on',
349
  'remove_shop_snippet_data' => 'on',
 
 
 
350
  ]));
351
  }
352
 
1
  <?php
2
  /**
3
+ * Plugin activation and deactivation functionality.
4
  *
5
  * This class defines all code necessary to run during the plugin's activation.
6
  *
27
  use Hooker;
28
 
29
  /**
30
+ * Bind all events.
31
  */
32
  public function __construct() {
33
  register_activation_hook( RANK_MATH_FILE, [ $this, 'activation' ] );
40
  }
41
 
42
  /**
43
+ * Do things when activating Rank Math.
44
  *
45
  * @param bool $network_wide Whether the plugin is being activated network-wide.
46
  */
54
  }
55
 
56
  /**
57
+ * Do things when deactivating Rank Math.
58
  *
59
  * @param bool $network_wide Whether the plugin is being activated network-wide.
60
  */
102
  }
103
 
104
  /**
105
+ * Run network-wide activation/deactivation of the plugin.
106
  *
107
  * @param bool $activate True for plugin activation, false for de-activation.
108
  */
158
  }
159
 
160
  /**
161
+ * Runs on deactivation of the plugin.
162
  */
163
  private function deactivate() {
164
  $this->clear_rewrite_rules( false );
168
  }
169
 
170
  /**
171
+ * Set up the database tables.
172
  */
173
  private function create_tables() {
174
  global $wpdb;
271
  'profiles' => [],
272
  ]);
273
 
274
+ // Update "known CPTs" list, so we can send notice about new ones later.
275
  add_option( 'rank_math_known_post_types', Helper::get_accessible_post_types() );
276
 
277
  $modules = [
279
  'search-console',
280
  'seo-analysis',
281
  'sitemap',
 
 
282
  'rich-snippet',
283
  'woocommerce',
284
  ];
345
  'usage_tracking' => 'on',
346
  'wc_remove_generator' => 'on',
347
  'remove_shop_snippet_data' => 'on',
348
+ 'frontend_seo_score' => 'off',
349
+ 'frontend_seo_score_post_types' => [ 'post' ],
350
+ 'frontend_seo_score_position' => 'top',
351
  ]));
352
  }
353
 
includes/class-metadata.php CHANGED
@@ -18,28 +18,28 @@ defined( 'ABSPATH' ) || exit;
18
  abstract class Metadata {
19
 
20
  /**
21
- * Type of object metadata is for
22
  *
23
  * @var string
24
  */
25
  protected $meta_type = 'post';
26
 
27
  /**
28
- * Hold object.
29
  *
30
  * @var WP_Post|WP_Term|WP_User
31
  */
32
  protected $object = null;
33
 
34
  /**
35
- * Hold object id.
36
  *
37
  * @var int
38
  */
39
  protected $object_id = null;
40
 
41
  /**
42
- * Hold objects.
43
  *
44
  * @var array
45
  */
@@ -74,7 +74,7 @@ abstract class Metadata {
74
  }
75
 
76
  /**
77
- * If object found
78
  *
79
  * @return bool
80
  */
@@ -83,7 +83,7 @@ abstract class Metadata {
83
  }
84
 
85
  /**
86
- * Get object attached
87
  *
88
  * @return object
89
  */
@@ -92,9 +92,9 @@ abstract class Metadata {
92
  }
93
 
94
  /**
95
- * Get metadata for the object
96
  *
97
- * @param string $key Internal key of the value to get (without prefix).
98
  * @return mixed
99
  */
100
  public function get_metadata( $key ) {
@@ -104,7 +104,7 @@ abstract class Metadata {
104
  }
105
 
106
  $value = $this->$meta_key;
107
- $replaced = $this->may_replace_vars( $key, $value, $this->object );
108
  if ( false !== $replaced ) {
109
  $this->$meta_key = $replaced;
110
  return $this->$meta_key;
@@ -119,17 +119,17 @@ abstract class Metadata {
119
  }
120
 
121
  /**
122
- * Maybe we need to replace vars for this meta data
123
  *
124
  * @param string $key Key to check whether it contains variables.
125
  * @param mixed $value Value used to replace variables in.
126
  * @param object $object Object used for replacements.
127
  * @return string|bool False if replacement not needed. Replaced variable string.
128
  */
129
- public function may_replace_vars( $key, $value, $object ) {
130
  $need_replacements = array( 'title', 'description', 'facebook_title', 'twitter_title', 'facebook_description', 'twitter_description', 'snippet_name', 'snippet_desc' );
131
 
132
- // Early Bail!
133
  if ( ! in_array( $key, $need_replacements, true ) || ! is_string( $value ) || '' === $value ) {
134
  return false;
135
  }
18
  abstract class Metadata {
19
 
20
  /**
21
+ * Type of object the metadata is for.
22
  *
23
  * @var string
24
  */
25
  protected $meta_type = 'post';
26
 
27
  /**
28
+ * Holds the object.
29
  *
30
  * @var WP_Post|WP_Term|WP_User
31
  */
32
  protected $object = null;
33
 
34
  /**
35
+ * Holds the object ID.
36
  *
37
  * @var int
38
  */
39
  protected $object_id = null;
40
 
41
  /**
42
+ * Holds multiple objects.
43
  *
44
  * @var array
45
  */
74
  }
75
 
76
  /**
77
+ * If object found.
78
  *
79
  * @return bool
80
  */
83
  }
84
 
85
  /**
86
+ * Get attached object.
87
  *
88
  * @return object
89
  */
92
  }
93
 
94
  /**
95
+ * Get metadata for the object.
96
  *
97
+ * @param string $key Value to get, without prefix.
98
  * @return mixed
99
  */
100
  public function get_metadata( $key ) {
104
  }
105
 
106
  $value = $this->$meta_key;
107
+ $replaced = $this->maybe_replace_vars( $key, $value, $this->object );
108
  if ( false !== $replaced ) {
109
  $this->$meta_key = $replaced;
110
  return $this->$meta_key;
119
  }
120
 
121
  /**
122
+ * Maybe replace variables in meta data.
123
  *
124
  * @param string $key Key to check whether it contains variables.
125
  * @param mixed $value Value used to replace variables in.
126
  * @param object $object Object used for replacements.
127
  * @return string|bool False if replacement not needed. Replaced variable string.
128
  */
129
+ public function maybe_replace_vars( $key, $value, $object ) {
130
  $need_replacements = array( 'title', 'description', 'facebook_title', 'twitter_title', 'facebook_description', 'twitter_description', 'snippet_name', 'snippet_desc' );
131
 
132
+ // Early bail.
133
  if ( ! in_array( $key, $need_replacements, true ) || ! is_string( $value ) || '' === $value ) {
134
  return false;
135
  }
includes/class-module-manager.php CHANGED
@@ -23,21 +23,21 @@ class Module_Manager {
23
  use Hooker;
24
 
25
  /**
26
- * Hold modules.
27
  *
28
  * @var array
29
  */
30
  public $modules = [];
31
 
32
  /**
33
- * Hold module object.
34
  *
35
  * @var array
36
  */
37
  private $controls = [];
38
 
39
  /**
40
- * Hold active module ids.
41
  *
42
  * @var array
43
  */
@@ -218,7 +218,7 @@ class Module_Manager {
218
  }
219
 
220
  /**
221
- * Check if we can load the module
222
  *
223
  * @param string $module_id ID to get module.
224
  * @param string $module Module arguments.
@@ -318,7 +318,7 @@ class Module_Manager {
318
  }
319
 
320
  /**
321
- * Get module by id.
322
  *
323
  * @param string $id ID to get module.
324
  * @return object Module class object.
23
  use Hooker;
24
 
25
  /**
26
+ * Holds modules.
27
  *
28
  * @var array
29
  */
30
  public $modules = [];
31
 
32
  /**
33
+ * Holds module objects.
34
  *
35
  * @var array
36
  */
37
  private $controls = [];
38
 
39
  /**
40
+ * Holds active module IDs.
41
  *
42
  * @var array
43
  */
218
  }
219
 
220
  /**
221
+ * Check if we can load the module.
222
  *
223
  * @param string $module_id ID to get module.
224
  * @param string $module Module arguments.
318
  }
319
 
320
  /**
321
+ * Get module by ID.
322
  *
323
  * @param string $id ID to get module.
324
  * @return object Module class object.
includes/class-module.php CHANGED
@@ -47,14 +47,14 @@ class Module {
47
  public function register_admin_page() {}
48
 
49
  /**
50
- * Admin Initialize.
51
  */
52
  public function admin_init() {
53
  $this->table = new $this->table;
54
  }
55
 
56
  /**
57
- * Add help tab into help page.
58
  *
59
  * @param array $tabs Array of tabs.
60
  * @return array
@@ -66,7 +66,7 @@ class Module {
66
  }
67
 
68
  /**
69
- * Register screen options
70
  */
71
  private function register_screen_options() {
72
  if ( ! isset( $this->screen_options ) ) {
@@ -89,9 +89,9 @@ class Module {
89
  }
90
 
91
  /**
92
- * Set screen options
93
  *
94
- * @param bool|int $status Screen option value. Default false to skip.
95
  * @param string $option The option name.
96
  * @param int $value The number of rows to use.
97
  */
47
  public function register_admin_page() {}
48
 
49
  /**
50
+ * Admin initialize.
51
  */
52
  public function admin_init() {
53
  $this->table = new $this->table;
54
  }
55
 
56
  /**
57
+ * Add help tab on help page.
58
  *
59
  * @param array $tabs Array of tabs.
60
  * @return array
66
  }
67
 
68
  /**
69
+ * Register screen options.
70
  */
71
  private function register_screen_options() {
72
  if ( ! isset( $this->screen_options ) ) {
89
  }
90
 
91
  /**
92
+ * Set screen options.
93
  *
94
+ * @param bool|int $status Screen option value. Default false to skip.
95
  * @param string $option The option name.
96
  * @param int $value The number of rows to use.
97
  */
includes/class-post.php CHANGED
@@ -21,7 +21,7 @@ defined( 'ABSPATH' ) || exit;
21
  class Post extends Metadata {
22
 
23
  /**
24
- * Type of object metadata is for
25
  *
26
  * @var string
27
  */
@@ -51,7 +51,7 @@ class Post extends Metadata {
51
  }
52
 
53
  /**
54
- * Get post id
55
  *
56
  * @param integer $post Post ID.
57
  * @return integer
@@ -74,10 +74,10 @@ class Post extends Metadata {
74
  }
75
 
76
  /**
77
- * Get post meta value.
78
  *
79
- * @param string $key Internal key of the value to get (without prefix).
80
- * @param integer $post_id Post ID of the post to get the value for.
81
  * @return mixed
82
  */
83
  public static function get_meta( $key, $post_id = 0 ) {
@@ -91,13 +91,13 @@ class Post extends Metadata {
91
  }
92
 
93
  /**
94
- * Returns the id of the currently opened page.
95
  *
96
- * @return int The id of the currently opened page.
97
  */
98
  public static function get_simple_page_id() {
99
  /**
100
- * Filter: Allow changing the default page id. Short-circuit if 3rd party set page id.
101
  *
102
  * @param unsigned int $page_id The default page id.
103
  */
@@ -119,17 +119,17 @@ class Post extends Metadata {
119
  }
120
 
121
  /**
122
- * Filter: Allow changing the default page id.
123
  *
124
- * @param unsigned int $page_id The default page id.
125
  */
126
  return apply_filters( 'rank_math/simple_page_id', 0 );
127
  }
128
 
129
  /**
130
- * Returns the id of the set WooCommerce shop page.
131
  *
132
- * @return int The ID of the set page.
133
  */
134
  public static function get_shop_page_id() {
135
  static $shop_page_id;
@@ -141,18 +141,18 @@ class Post extends Metadata {
141
  }
142
 
143
  /**
144
- * Checks if the currently opened page is a simple page.
145
  *
146
- * @return bool Whether the currently opened page is a simple page.
147
  */
148
  public static function is_simple_page() {
149
  return self::get_simple_page_id() > 0;
150
  }
151
 
152
  /**
153
- * Checks if the current page is the shop page.
154
  *
155
- * @return bool Whether the current page is the WooCommerce shop page.
156
  */
157
  public static function is_shop_page() {
158
  if ( function_exists( 'is_shop' ) && function_exists( 'wc_get_page_id' ) ) {
@@ -163,9 +163,9 @@ class Post extends Metadata {
163
  }
164
 
165
  /**
166
- * Checks if the current page is one of the woocommerce page.
167
  *
168
- * @return bool Whether the current page is the WooCommerce Cart/Account/Checkout page.
169
  */
170
  public static function is_woocommerce_page() {
171
  if ( Conditional::is_woocommerce_active() ) {
@@ -176,7 +176,7 @@ class Post extends Metadata {
176
  }
177
 
178
  /**
179
- * Determine whether this is the homepage and shows posts.
180
  *
181
  * @return bool
182
  */
@@ -185,7 +185,7 @@ class Post extends Metadata {
185
  }
186
 
187
  /**
188
- * Determine whether the this is the static frontpage.
189
  *
190
  * @return bool
191
  */
@@ -194,7 +194,7 @@ class Post extends Metadata {
194
  }
195
 
196
  /**
197
- * Determine whether this is the posts page, when it's not the frontpage.
198
  *
199
  * @return bool
200
  */
21
  class Post extends Metadata {
22
 
23
  /**
24
+ * Type of object metadata is for (e.g., comment, post, or user).
25
  *
26
  * @var string
27
  */
51
  }
52
 
53
  /**
54
+ * Get the post ID.
55
  *
56
  * @param integer $post Post ID.
57
  * @return integer
74
  }
75
 
76
  /**
77
+ * Get a post meta value.
78
  *
79
+ * @param string $key Value to get, without prefix.
80
+ * @param integer $post_id ID of the post.
81
  * @return mixed
82
  */
83
  public static function get_meta( $key, $post_id = 0 ) {
91
  }
92
 
93
  /**
94
+ * Get the ID of the current page.
95
  *
96
+ * @return int The ID of the page.
97
  */
98
  public static function get_simple_page_id() {
99
  /**
100
+ * Filter: Allow changing the default page ID. Short-circuit if 3rd party set page ID.
101
  *
102
  * @param unsigned int $page_id The default page id.
103
  */
119
  }
120
 
121
  /**
122
+ * Filter: Allow changing the default page ID.
123
  *
124
+ * @param unsigned int $page_id The default page ID.
125
  */
126
  return apply_filters( 'rank_math/simple_page_id', 0 );
127
  }
128
 
129
  /**
130
+ * Returns the ID of the selected WooCommerce shop page.
131
  *
132
+ * @return int The ID of the Shop page.
133
  */
134
  public static function get_shop_page_id() {
135
  static $shop_page_id;
141
  }
142
 
143
  /**
144
+ * Checks if the current page is a simple page.
145
  *
146
+ * @return bool Whether the current page is a simple page.
147
  */
148
  public static function is_simple_page() {
149
  return self::get_simple_page_id() > 0;
150
  }
151
 
152
  /**
153
+ * Checks if the current page is the WooCommerce "Shop" page.
154
  *
155
+ * @return bool Whether the current page is the shop page.
156
  */
157
  public static function is_shop_page() {
158
  if ( function_exists( 'is_shop' ) && function_exists( 'wc_get_page_id' ) ) {
163
  }
164
 
165
  /**
166
+ * Checks if the current page is one of the WooCommerce pages: Cart/Account/Checkout.
167
  *
168
+ * @return bool Whether the current page is a WooCommerce page.
169
  */
170
  public static function is_woocommerce_page() {
171
  if ( Conditional::is_woocommerce_active() ) {
176
  }
177
 
178
  /**
179
+ * Check whether this is the homepage and if it shows the posts.
180
  *
181
  * @return bool
182
  */
185
  }
186
 
187
  /**
188
+ * Check whether this is the static frontpage.
189
  *
190
  * @return bool
191
  */
194
  }
195
 
196
  /**
197
+ * Check if this is the posts page and that it's not the frontpage.
198
  *
199
  * @return bool
200
  */
includes/class-replace-vars.php CHANGED
@@ -1,9 +1,8 @@
1
  <?php
2
  /**
3
- * Variable Replacer
4
  *
5
- * This class implements the replacing of `%variable_placeholders%` with their real value based on the current
6
- * requested page/post/cpt/etc in text strings.
7
  *
8
  * @since 0.9.0
9
  * @package RankMath
@@ -50,7 +49,7 @@ class Replace_Vars {
50
  protected static $counters = [];
51
 
52
  /**
53
- * Default post/page/cpt information.
54
  *
55
  * @var array
56
  */
@@ -70,17 +69,17 @@ class Replace_Vars {
70
  );
71
 
72
  /**
73
- * Replace `%variable_placeholders%` with their real value based on the current requested page/post/cpt.
74
  *
75
- * @param string $string The string to replace the variables in.
76
- * @param array $args The object some of the replacement values might come from, could be a post, taxonomy or term.
77
- * @param array $omit Variables that should not be replaced by this function.
78
  * @return string
79
  */
80
- public function replace( $string, $args = [], $omit = [] ) {
81
  $string = strip_tags( $string );
82
 
83
- // Let's see if we can bail super early.
84
  if ( ! Str::contains( '%', $string ) ) {
85
  return $string;
86
  }
@@ -91,43 +90,41 @@ class Replace_Vars {
91
 
92
  $this->args = (object) wp_parse_args( $args, $this->defaults );
93
 
94
- // Clean $omit array.
95
- if ( is_array( $omit ) && ! empty( $omit ) ) {
96
- $omit = array_map( array( __CLASS__, 'remove_var_delimiter' ), $omit );
97
  }
98
 
99
  $replacements = [];
100
  if ( preg_match_all( '/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/iu', $string, $matches ) ) {
101
- $replacements = $this->set_up_replacements( $matches, $omit );
102
  }
103
 
104
  /**
105
- * Allow customization of the replacements before they are applied.
106
  *
107
- * @param array $replacements The replacements.
108
  */
109
  $replacements = $this->do_filter( 'replacements', $replacements );
110
 
111
- // Do the actual replacements.
112
  if ( is_array( $replacements ) && [] !== $replacements ) {
113
  $string = str_replace( array_keys( $replacements ), array_values( $replacements ), $string );
114
  }
115
 
116
  /**
117
- * Allow overruling of whether or not to remove placeholders which didn't yield a replacement.
118
  *
119
- * @example <code>add_filter( 'rank_math/replacements_final', '__return_false' );</code>
120
  * @param bool $final
121
  */
122
- if ( true === $this->do_filter( 'replacements_final', true ) && ( isset( $matches[1] ) && is_array( $matches[1] ) ) ) {
123
  // Remove non-replaced variables.
124
- // Make sure the $omit variables do not get removed.
125
- $remove = array_diff( $matches[1], $omit );
126
  $remove = array_map( array( __CLASS__, 'add_var_delimiter' ), $remove );
127
  $string = str_replace( $remove, '', $string );
128
  }
129
 
130
- // Undouble separators which have nothing between them, i.e. where a non-replaced variable was removed.
131
  if ( isset( $replacements['%sep%'] ) && Str::is_non_empty( $replacements['%sep%'] ) ) {
132
  $q_sep = preg_quote( $replacements['%sep%'], '`' );
133
  $string = preg_replace( '`' . $q_sep . '(?:\s*' . $q_sep . ')*`u', $replacements['%sep%'], $string );
@@ -137,48 +134,66 @@ class Replace_Vars {
137
  }
138
 
139
  /**
140
- * Register new replacement %variables%.
141
- * For use by other plugins/themes to register extra variables.
142
  *
143
- * @see rank_math_register_var_replacement() for a usage example.
 
 
 
 
144
  *
145
- * @param string $var The name of the variable to replace, i.e. '%var%' the surrounding % are optional.
146
- * @param mixed $callback Function or method to call to retrieve the replacement value for the variable
147
- * and should *return* the replacement value. DON'T echo it.
148
- * @param array $args Array with title, desc and example values.
149
  * @return bool Whether the replacement function was succesfully registered.
150
  */
151
  public static function register_replacement( $var, $callback, $args = [] ) {
152
  $success = false;
153
 
154
- if ( ! is_string( $var ) || empty( $var ) ) {
155
  return false;
156
  }
157
 
158
  $var = self::remove_var_delimiter( $var );
159
 
160
- if ( false === preg_match( '`^[A-Z0-9_-]+$`i', $var ) ) {
161
- trigger_error( esc_html__( 'A replacement variable can only contain alphanumeric characters, an underscore or a dash. Try renaming your variable.', 'rank-math' ), E_USER_WARNING );
162
- return false;
163
- }
164
-
165
  if ( ! method_exists( __CLASS__, 'get_' . $var ) ) {
166
  if ( ! isset( self::$external_replacements[ $var ] ) ) {
167
  $success = true;
168
  $args['callback'] = $callback;
169
  self::$external_replacements[ $var ] = $args;
170
- } else {
171
- trigger_error( esc_html__( 'A replacement variable with the same name has already been registered. Try making your variable name unique.', 'rank-math' ), E_USER_WARNING );
172
  }
173
- } else {
174
- trigger_error( esc_html__( 'You cannot overrule a Rank Math standard variable replacement by registering a variable with the same name. Use the "wpseo_replacements" filter instead to adjust the replacement value.', 'rank-math' ), E_USER_WARNING );
 
175
  }
176
 
 
177
  return $success;
178
  }
179
 
180
  /**
181
- * Enqueue Styles and Scripts required by plugin.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  */
183
  public static function setup_json() {
184
 
@@ -248,7 +263,7 @@ class Replace_Vars {
248
  }
249
 
250
  /**
251
- * Setup the replacements.
252
  */
253
  public static function setup() {
254
  global $wp_customize;
@@ -262,8 +277,7 @@ class Replace_Vars {
262
 
263
  if ( empty( self::$external_replacements ) ) {
264
  /**
265
- * Action: 'rank_math/vars/register_extra_replacements' - Allows for registration of additional
266
- * variables to replace.
267
  */
268
  do_action( 'rank_math/vars/register_extra_replacements' );
269
  }
@@ -568,9 +582,9 @@ class Replace_Vars {
568
  }
569
 
570
  /**
571
- * Retrieves the queried post type.
572
  *
573
- * @return string The queried post type.
574
  */
575
  protected function get_queried_post_type() {
576
  $post_type = get_post_type();
@@ -588,7 +602,7 @@ class Replace_Vars {
588
  }
589
 
590
  /**
591
- * Get the separator for use as replacement string.
592
  *
593
  * @return string
594
  */
@@ -599,8 +613,7 @@ class Replace_Vars {
599
  }
600
 
601
  /**
602
- * Get the title of the parent page of the current page/cpt for use as replacement string.
603
- * Only applicable for hierarchical post types.
604
  *
605
  * @return string|null
606
  */
@@ -617,7 +630,7 @@ class Replace_Vars {
617
  }
618
 
619
  /**
620
- * Get the site's name for use as replacement string.
621
  *
622
  * @return string|null
623
  */
@@ -635,7 +648,7 @@ class Replace_Vars {
635
  }
636
 
637
  /**
638
- * Get the site's tag line / description for use as replacement string.
639
  *
640
  * @return string|null
641
  */
@@ -653,9 +666,9 @@ class Replace_Vars {
653
  }
654
 
655
  /**
656
- * Get the date of the post/page/cpt for use as replacement string.
657
  *
658
- * @param string $format (Optional) PHP date format defaults to the date_format option if not specified. Default: ''.
659
  * @return string|null
660
  */
661
  private function get_date( $format = '' ) {
@@ -680,9 +693,9 @@ class Replace_Vars {
680
  }
681
 
682
  /**
683
- * Get the post/page/cpt modified time for use as replacement string.
684
  *
685
- * @param string $format (Optional) PHP date format defaults to the date_format option if not specified. Default: ''.
686
  * @return string|null
687
  */
688
  private function get_modified( $format = '' ) {
@@ -697,8 +710,7 @@ class Replace_Vars {
697
  }
698
 
699
  /**
700
- * Get the post/page/cpt excerpt for use as replacement string.
701
- * The excerpt will be auto-generated if it does not exist.
702
  *
703
  * @return string|null
704
  */
@@ -717,7 +729,7 @@ class Replace_Vars {
717
  }
718
 
719
  /**
720
- * Get the post/page/cpt excerpt for use as replacement string (without auto-generation).
721
  *
722
  * @return string|null
723
  */
@@ -732,7 +744,7 @@ class Replace_Vars {
732
  }
733
 
734
  /**
735
- * Get the current tag for use as replacement string.
736
  *
737
  * @return string|null
738
  */
@@ -750,9 +762,9 @@ class Replace_Vars {
750
  }
751
 
752
  /**
753
- * Get the current tags for use as replacement string.
754
  *
755
- * @param array $args Arguments to get terms.
756
  * @return string|null
757
  */
758
  private function get_tags( $args = [] ) {
@@ -769,7 +781,7 @@ class Replace_Vars {
769
  }
770
 
771
  /**
772
- * Get the post/cpt category for use as replacement string.
773
  *
774
  * @return string|null
775
  */
@@ -791,7 +803,7 @@ class Replace_Vars {
791
  }
792
 
793
  /**
794
- * Get the post/cpt categories (comma separated) for use as replacement string.
795
  *
796
  * @param array $args Array of arguments.
797
  * @return string|null
@@ -810,7 +822,7 @@ class Replace_Vars {
810
  }
811
 
812
  /**
813
- * Get the term name for use as replacement string.
814
  *
815
  * @return string|null
816
  */
@@ -828,7 +840,7 @@ class Replace_Vars {
828
  }
829
 
830
  /**
831
- * Get the term description for use as replacement string.
832
  *
833
  * @return string|null
834
  */
@@ -849,7 +861,7 @@ class Replace_Vars {
849
  }
850
 
851
  /**
852
- * Get the current search phrase for use as replacement string.
853
  *
854
  * @return string|null
855
  */
@@ -867,7 +879,7 @@ class Replace_Vars {
867
  }
868
 
869
  /**
870
- * Get the post/page/cpt author's user id for use as replacement string.
871
  *
872
  * @return string
873
  */
@@ -876,7 +888,7 @@ class Replace_Vars {
876
  }
877
 
878
  /**
879
- * Get the post/page/cpt author's "nice name" for use as replacement string.
880
  *
881
  * @return string|null
882
  */
@@ -893,7 +905,7 @@ class Replace_Vars {
893
  }
894
 
895
  /**
896
- * Get the filename of the attachment.
897
  *
898
  * @return string|null
899
  */
@@ -905,13 +917,13 @@ class Replace_Vars {
905
  $replacement = null;
906
  $name = \pathinfo( $this->args->filename );
907
 
908
- // Remove size if any embedded.
909
  $name = explode( '-', $name['filename'] );
910
  if ( Str::contains( 'x', end( $name ) ) ) {
911
  array_pop( $name );
912
  }
913
 
914
- // Format name.
915
  $name = join( ' ', $name );
916
  $name = trim( str_replace( '_', ' ', $name ) );
917
  if ( '' !== $name ) {
@@ -922,7 +934,7 @@ class Replace_Vars {
922
  }
923
 
924
  /**
925
- * Get the post/page/cpt author's users description for use as a replacement string.
926
  *
927
  * @return string|null
928
  */
@@ -939,7 +951,7 @@ class Replace_Vars {
939
  }
940
 
941
  /**
942
- * Get the post/page/cpt ID for use as replacement string.
943
  *
944
  * @return string|null
945
  */
@@ -954,7 +966,7 @@ class Replace_Vars {
954
  }
955
 
956
  /**
957
- * Get the post/page/cpt's focus keyword for use as replacement string.
958
  *
959
  * @return string|null
960
  */
@@ -972,7 +984,7 @@ class Replace_Vars {
972
  }
973
 
974
  /**
975
- * Get the current page number with context (i.e. 'page 2 of 4') for use as replacement string.
976
  *
977
  * @return string
978
  */
@@ -992,7 +1004,7 @@ class Replace_Vars {
992
  }
993
 
994
  /**
995
- * Get the current page number for use as replacement string.
996
  *
997
  * @return string|null
998
  */
@@ -1008,7 +1020,7 @@ class Replace_Vars {
1008
  }
1009
 
1010
  /**
1011
- * Get the current page total for use as replacement string.
1012
  *
1013
  * @return string|null
1014
  */
@@ -1024,9 +1036,9 @@ class Replace_Vars {
1024
  }
1025
 
1026
  /**
1027
- * Get the current time for use as replacement string.
1028
  *
1029
- * @param string $format (Optional) PHP date format defaults to the date_format option if not specified. Default: ''.
1030
  * @return string
1031
  */
1032
  private function get_currenttime( $format = '' ) {
@@ -1041,9 +1053,9 @@ class Replace_Vars {
1041
  }
1042
 
1043
  /**
1044
- * Get the current date for use as replacement string.
1045
  *
1046
- * @param string $format (Optional) PHP date format defaults to the date_format option if not specified. Default: ''.
1047
  * @return string
1048
  */
1049
  private function get_currentdate( $format = '' ) {
@@ -1058,7 +1070,7 @@ class Replace_Vars {
1058
  }
1059
 
1060
  /**
1061
- * Get the current day for use as replacement string.
1062
  *
1063
  * @return string
1064
  */
@@ -1073,7 +1085,7 @@ class Replace_Vars {
1073
  }
1074
 
1075
  /**
1076
- * Get the current month for use as replacement string.
1077
  *
1078
  * @return string
1079
  */
@@ -1088,7 +1100,7 @@ class Replace_Vars {
1088
  }
1089
 
1090
  /**
1091
- * Get the current year for use as replacement string.
1092
  *
1093
  * @return string
1094
  */
@@ -1103,7 +1115,7 @@ class Replace_Vars {
1103
  }
1104
 
1105
  /**
1106
- * Get the post type single label for use as replacement string.
1107
  *
1108
  * @return string|null
1109
  */
@@ -1119,9 +1131,9 @@ class Replace_Vars {
1119
  }
1120
 
1121
  /**
1122
- * Get a post/page/cpt's custom field value for use as replacement string.
1123
  *
1124
- * @param string $name The name of custom field of which value is to be retrieved.
1125
  * @return string|null
1126
  */
1127
  private function get_customfield( $name ) {
@@ -1142,9 +1154,9 @@ class Replace_Vars {
1142
 
1143
 
1144
  /**
1145
- * Get a post/page/cpt's custom term value for use as replacement string.
1146
  *
1147
- * @param string $name The name of the taxonomy of which value is to be retrieved.
1148
  * @return string|null
1149
  */
1150
  private function get_customterm( $name ) {
@@ -1173,7 +1185,7 @@ class Replace_Vars {
1173
  }
1174
 
1175
  /**
1176
- * Get the post type plural label for use as replacement string.
1177
  *
1178
  * @return string|null
1179
  */
@@ -1189,20 +1201,20 @@ class Replace_Vars {
1189
  }
1190
 
1191
  /**
1192
- * Retrieve the replacements for the variables found.
1193
  *
1194
- * @param array $matches Variables found in the original string - regex result.
1195
- * @param array $omit Variables that should not be replaced by this function.
1196
- * @return array Retrieved replacements - this might be a smaller array as some variables
1197
- * may not yield a replacement in certain contexts.
1198
  */
1199
- private function set_up_replacements( $matches, $omit ) {
1200
  $replacements = [];
1201
 
1202
  foreach ( $matches[1] as $k => $var ) {
1203
 
1204
- // Don't set up replacements which should be omitted.
1205
- if ( in_array( $var, $omit, true ) ) {
1206
  continue;
1207
  }
1208
 
@@ -1221,7 +1233,7 @@ class Replace_Vars {
1221
  $replacement = call_user_func( self::$external_replacements[ $var ]['callback'], $var, $args );
1222
  }
1223
 
1224
- // Replacement retrievals can return null if no replacement can be determined, root those outs.
1225
  if ( isset( $replacement ) ) {
1226
  $var = self::add_var_delimiter( $var );
1227
  $replacements[ $var ] = $replacement;
@@ -1234,7 +1246,7 @@ class Replace_Vars {
1234
  }
1235
 
1236
  /**
1237
- * Get the title of the post/page/cpt for use as replacement string.
1238
  *
1239
  * @return string|null
1240
  */
@@ -1253,9 +1265,10 @@ class Replace_Vars {
1253
  }
1254
 
1255
  /**
1256
- * Convert string to argument array.
 
 
1257
  *
1258
- * @param string $string The string need to be convereted.
1259
  * @return array
1260
  */
1261
  private function normalize_args( $string ) {
@@ -1267,19 +1280,20 @@ class Replace_Vars {
1267
  }
1268
 
1269
  /**
1270
- * Get a post's terms, comma delimited.
1271
  *
1272
- * @param int $id ID of the post to get the terms for.
1273
- * @param string $taxonomy The taxonomy to get the terms for this post from.
1274
- * @param bool $return_single If true, return the first term.
1275
- * @param array $args Array of passed arguments.
1276
  * @param string $field The term field to return.
1277
- * @return string Either a single term or a comma delimited string of terms.
 
1278
  */
1279
  private function get_terms( $id, $taxonomy, $return_single = false, $args = [], $field = 'name' ) {
1280
  $output = '';
1281
 
1282
- // If we're on a specific tag, category or taxonomy page, use that.
1283
  if ( is_category() || is_tag() || is_tax() ) {
1284
  $term = $GLOBALS['wp_query']->get_queried_object();
1285
  $output = $term->name;
@@ -1328,9 +1342,9 @@ class Replace_Vars {
1328
  unset( $terms, $term );
1329
 
1330
  /**
1331
- * Allows filtering of the terms list used to replace %category%, %tag%.
1332
  *
1333
- * @param string $output Comma-delimited string containing the terms.
1334
  */
1335
  return $this->do_filter( 'vars/terms', $output );
1336
  }
1
  <?php
2
  /**
3
+ * Variable replacer.
4
  *
5
+ * Replace '%variables%' in strings based on context.
 
6
  *
7
  * @since 0.9.0
8
  * @package RankMath
49
  protected static $counters = [];
50
 
51
  /**
52
+ * Default post data.
53
  *
54
  * @var array
55
  */
69
  );
70
 
71
  /**
72
+ * Replace `%variables%` with context-dependent value.
73
  *
74
+ * @param string $string The string containing the %variables%.
75
+ * @param array $args Context object, can be post, taxonomy or term.
76
+ * @param array $exclude Excluded variables won't be replaced.
77
  * @return string
78
  */
79
+ public function replace( $string, $args = [], $exclude = [] ) {
80
  $string = strip_tags( $string );
81
 
82
+ // Bail early.
83
  if ( ! Str::contains( '%', $string ) ) {
84
  return $string;
85
  }
90
 
91
  $this->args = (object) wp_parse_args( $args, $this->defaults );
92
 
93
+ // Clean $exclude.
94
+ if ( is_array( $exclude ) && ! empty( $exclude ) ) {
95
+ $exclude = array_map( array( __CLASS__, 'remove_var_delimiter' ), $exclude );
96
  }
97
 
98
  $replacements = [];
99
  if ( preg_match_all( '/%(([a-z0-9_-]+)\(([^)]*)\)|[^\s]+)%/iu', $string, $matches ) ) {
100
+ $replacements = $this->set_up_replacements( $matches, $exclude );
101
  }
102
 
103
  /**
104
+ * Filter: Allow customizing the replacements.
105
  *
106
+ * @param array $replacements
107
  */
108
  $replacements = $this->do_filter( 'replacements', $replacements );
109
 
110
+ // Do the replacements.
111
  if ( is_array( $replacements ) && [] !== $replacements ) {
112
  $string = str_replace( array_keys( $replacements ), array_values( $replacements ), $string );
113
  }
114
 
115
  /**
116
+ * Filter: strip variables which don't have a replacement.
117
  *
 
118
  * @param bool $final
119
  */
120
+ if ( true === $this->do_filter( 'replacements_remove_nonreplaced', true ) && ( isset( $matches[1] ) && is_array( $matches[1] ) ) ) {
121
  // Remove non-replaced variables.
122
+ // Don't remove the $exclude variables.
123
+ $remove = array_diff( $matches[1], $exclude );
124
  $remove = array_map( array( __CLASS__, 'add_var_delimiter' ), $remove );
125
  $string = str_replace( $remove, '', $string );
126
  }
127
 
 
128
  if ( isset( $replacements['%sep%'] ) && Str::is_non_empty( $replacements['%sep%'] ) ) {
129
  $q_sep = preg_quote( $replacements['%sep%'], '`' );
130
  $string = preg_replace( '`' . $q_sep . '(?:\s*' . $q_sep . ')*`u', $replacements['%sep%'], $string );
134
  }
135
 
136
  /**
137
+ * Register extra %variables%. For developers.
138
+ * See rank_math_register_var_replacement().
139
  *
140
+ * @codeCoverageIgnore
141
+ *
142
+ * @param string $var Variable name, for example %custom%. '%' signs are optional.
143
+ * @param mixed $callback Replacement callback. Should return value, not output it.
144
+ * @param array $args Array with additional title, description and example values for the variable.
145
  *
 
 
 
 
146
  * @return bool Whether the replacement function was succesfully registered.
147
  */
148
  public static function register_replacement( $var, $callback, $args = [] ) {
149
  $success = false;
150
 
151
+ if ( ! self::is_valid_variable( $var ) ) {
152
  return false;
153
  }
154
 
155
  $var = self::remove_var_delimiter( $var );
156
 
 
 
 
 
 
157
  if ( ! method_exists( __CLASS__, 'get_' . $var ) ) {
158
  if ( ! isset( self::$external_replacements[ $var ] ) ) {
159
  $success = true;
160
  $args['callback'] = $callback;
161
  self::$external_replacements[ $var ] = $args;
162
+
163
+ return $success;
164
  }
165
+
166
+ trigger_error( esc_html__( 'The variable has already been registered.', 'rank-math' ), E_USER_WARNING );
167
+ return $success;
168
  }
169
 
170
+ trigger_error( esc_html__( 'Standard variables cannot be overridden by registering them again. Use the "rankmath/replacements" filter for this.', 'rank-math' ), E_USER_WARNING );
171
  return $success;
172
  }
173
 
174
  /**
175
+ * Check if variable is valid before further processing.
176
+ *
177
+ * @param string $var Variable name.
178
+ *
179
+ * @return boolean Whether the variable is valid or not.
180
+ */
181
+ public static function is_valid_variable( $var ) {
182
+ if ( ! is_string( $var ) || empty( $var ) ) {
183
+ return false;
184
+ }
185
+
186
+ $var = self::remove_var_delimiter( $var );
187
+ if ( false === preg_match( '`^[A-Z0-9_-]+$`i', $var ) ) {
188
+ trigger_error( esc_html__( 'Variable names can only contain alphanumeric characters, underscores and dashes.', 'rank-math' ), E_USER_WARNING );
189
+ return false;
190
+ }
191
+
192
+ return true;
193
+ }
194
+
195
+ /**
196
+ * Enqueue styles and scripts.
197
  */
198
  public static function setup_json() {
199
 
263
  }
264
 
265
  /**
266
+ * Set up replacements.
267
  */
268
  public static function setup() {
269
  global $wp_customize;
277
 
278
  if ( empty( self::$external_replacements ) ) {
279
  /**
280
+ * Action: 'rank_math/vars/register_extra_replacements' - Allows adding extra variables.
 
281
  */
282
  do_action( 'rank_math/vars/register_extra_replacements' );
283
  }
582
  }
583
 
584
  /**
585
+ * Get the current post type.
586
  *
587
+ * @return string Post type name.
588
  */
589
  protected function get_queried_post_type() {
590
  $post_type = get_post_type();
602
  }
603
 
604
  /**
605
+ * Get the separator to use as a replacement.
606
  *
607
  * @return string
608
  */
613
  }
614
 
615
  /**
616
+ * Get the parent page title of the current page/CPT to use as a replacement.
 
617
  *
618
  * @return string|null
619
  */
630
  }
631
 
632
  /**
633
+ * Get the site name to use as a replacement.
634
  *
635
  * @return string|null
636
  */
648
  }
649
 
650
  /**
651
+ * Get the site tag line to use as a replacement.
652
  *
653
  * @return string|null
654
  */
666
  }
667
 
668
  /**
669
+ * Get the date of the post to use as a replacement.
670
  *
671
+ * @param string $format (Optional) PHP date format.
672
  * @return string|null
673
  */
674
  private function get_date( $format = '' ) {
693
  }
694
 
695
  /**
696
+ * Get the post modified time to use as a replacement.
697
  *
698
+ * @param string $format (Optional) PHP date format.
699
  * @return string|null
700
  */
701
  private function get_modified( $format = '' ) {
710
  }
711
 
712
  /**
713
+ * Get the post excerpt to use as a replacement. It will be auto-generated if it does not exist.
 
714
  *
715
  * @return string|null
716
  */
729
  }
730
 
731
  /**
732
+ * Get the post excerpt to use as a replacement (without auto-generating).
733
  *
734
  * @return string|null
735
  */
744
  }
745
 
746
  /**
747
+ * Get the current tag to use as a replacement.
748
  *
749
  * @return string|null
750
  */
762
  }
763
 
764
  /**
765
+ * Get the current tags to use as a replacement.
766
  *
767
+ * @param array $args Arguments for get_terms().
768
  * @return string|null
769
  */
770
  private function get_tags( $args = [] ) {
781
  }
782
 
783
  /**
784
+ * Get the post category to use as a replacement.
785
  *
786
  * @return string|null
787
  */
803
  }
804
 
805
  /**
806
+ * Get the comma-separate post categories to use as a replacement.
807
  *
808
  * @param array $args Array of arguments.
809
  * @return string|null
822
  }
823
 
824
  /**
825
+ * Get the term name to use as a replacement.
826
  *
827
  * @return string|null
828
  */
840
  }
841
 
842
  /**
843
+ * Get the term description to use as a replacement.
844
  *
845
  * @return string|null
846
  */
861
  }
862
 
863
  /**
864
+ * Get the current search query to use as a replacement
865
  *
866
  * @return string|null
867
  */
879
  }
880
 
881
  /**
882
+ * Get the post author's user ID to use as a replacement.
883
  *
884
  * @return string
885
  */
888
  }
889
 
890
  /**
891
+ * Get the post author's "nice name" to use as a replacement.
892
  *
893
  * @return string|null
894
  */
905
  }
906
 
907
  /**
908
+ * Get the filename of the attachment to use as a replacement.
909
  *
910
  * @return string|null
911
  */
917
  $replacement = null;
918
  $name = \pathinfo( $this->args->filename );
919
 
920
+ // Remove size if embedded.
921
  $name = explode( '-', $name['filename'] );
922
  if ( Str::contains( 'x', end( $name ) ) ) {
923
  array_pop( $name );
924
  }
925
 
926
+ // Format filename.
927
  $name = join( ' ', $name );
928
  $name = trim( str_replace( '_', ' ', $name ) );
929
  if ( '' !== $name ) {
934
  }
935
 
936
  /**
937
+ * Get the post author's user description to use as a replacement.
938
  *
939
  * @return string|null
940
  */
951
  }
952
 
953
  /**
954
+ * Get the numeric post ID to use as a replacement
955
  *
956
  * @return string|null
957
  */
966
  }
967
 
968
  /**
969
+ * Get the focus keyword to use as a replacement.
970
  *
971
  * @return string|null
972
  */
984
  }
985
 
986
  /**
987
+ * Get the current page number (i.e. "page 2 of 4") to use as a replacement.
988
  *
989
  * @return string
990
  */
1004
  }
1005
 
1006
  /**
1007
+ * Get only the page number (without context) to use as a replacement.
1008
  *
1009
  * @return string|null
1010
  */
1020
  }
1021
 
1022
  /**
1023
+ * Get the may page number to use as a replacement.
1024
  *
1025
  * @return string|null
1026
  */
1036
  }
1037
 
1038
  /**
1039
+ * Get the current time to use as a replacement.
1040
  *
1041
+ * @param string $format (Optional) PHP date format.
1042
  * @return string
1043
  */
1044
  private function get_currenttime( $format = '' ) {
1053
  }
1054
 
1055
  /**
1056
+ * Get the current date to use as a replacement.
1057
  *
1058
+ * @param string $format (Optional) PHP date format.
1059
  * @return string
1060
  */
1061
  private function get_currentdate( $format = '' ) {
1070
  }
1071
 
1072
  /**
1073
+ * Get the current day to use as a replacement.
1074
  *
1075
  * @return string
1076
  */
1085
  }
1086
 
1087
  /**
1088
+ * Get the current month to use as a replacement.
1089
  *
1090
  * @return string
1091
  */
1100
  }
1101
 
1102
  /**
1103
+ * Get the current year to use as a replacement.
1104
  *
1105
  * @return string
1106
  */
1115
  }
1116
 
1117
  /**
1118
+ * Get the post type "single" label to use as a replacement.
1119
  *
1120
  * @return string|null
1121
  */
1131
  }
1132
 
1133
  /**
1134
+ * Get a specific custom field value to use as a replacement.
1135
  *
1136
+ * @param string $name The name of the custom field to retrieve.
1137
  * @return string|null
1138
  */
1139
  private function get_customfield( $name ) {
1154
 
1155
 
1156
  /**
1157
+ * Get a custom taxonomy term to use as a replacement.
1158
  *
1159
+ * @param string $name The name of the taxonomy.
1160
  * @return string|null
1161
  */
1162
  private function get_customterm( $name ) {
1185
  }
1186
 
1187
  /**
1188
+ * Get the post type "plural" label to use as a replacement.
1189
  *
1190
  * @return string|null
1191
  */
1201
  }
1202
 
1203
  /**
1204
+ * Get the replacements for the variables.
1205
  *
1206
+ * @param array $matches Regex matches found in the string.
1207
+ * @param array $exclude Variables that should not be replaced.
1208
+ *
1209
+ * @return array Retrieved replacements.
1210
  */
1211
+ private function set_up_replacements( $matches, $exclude ) {
1212
  $replacements = [];
1213
 
1214
  foreach ( $matches[1] as $k => $var ) {
1215
 
1216
+ // Don't set up excluded replacements.
1217
+ if ( in_array( $var, $exclude, true ) ) {
1218
  continue;
1219
  }
1220
 
1233
  $replacement = call_user_func( self::$external_replacements[ $var ]['callback'], $var, $args );
1234
  }
1235
 
1236
+ // If replacement value is null, remove it.
1237
  if ( isset( $replacement ) ) {
1238
  $var = self::add_var_delimiter( $var );
1239
  $replacements[ $var ] = $replacement;
1246
  }
1247
 
1248
  /**
1249
+ * Get the title of the post to use as a replacement.
1250
  *
1251
  * @return string|null
1252
  */
1265
  }
1266
 
1267
  /**
1268
+ * Convert arguments string to arguments array.
1269
+ *
1270
+ * @param string $string The string that needs to be converted.
1271
  *
 
1272
  * @return array
1273
  */
1274
  private function normalize_args( $string ) {
1280
  }
1281
 
1282
  /**
1283
+ * Get a comma separated list of the post's terms.
1284
  *
1285
+ * @param int $id ID of the post.
1286
+ * @param string $taxonomy The taxonomy to get the terms from.
1287
+ * @param bool $return_single Return the first term only.
1288
+ * @param array $args Array of arguments.
1289
  * @param string $field The term field to return.
1290
+ *
1291
+ * @return string Either a single term field or a comma delimited list of terms.
1292
  */
1293
  private function get_terms( $id, $taxonomy, $return_single = false, $args = [], $field = 'name' ) {
1294
  $output = '';
1295
 
1296
+ // If we're on a taxonomy archive, use the selected term.
1297
  if ( is_category() || is_tag() || is_tax() ) {
1298
  $term = $GLOBALS['wp_query']->get_queried_object();
1299
  $output = $term->name;
1342
  unset( $terms, $term );
1343
 
1344
  /**
1345
+ * Filter: Allows changing the %category% and %tag% terms lists.
1346
  *
1347
+ * @param string $output The terms list, comma separated.
1348
  */
1349
  return $this->do_filter( 'vars/terms', $output );
1350
  }
includes/class-rewrite.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * This code handles the category and author rewrites.
4
  *
5
  * @since 0.9.0
6
  * @package RankMath
@@ -65,9 +65,10 @@ class Rewrite {
65
  }
66
 
67
  /**
68
- * Redirect the user permalink properly for the new one.
 
 
69
  *
70
- * @param array $query_vars Query vars to check for existence of redirect var.
71
  * @return array
72
  */
73
  public function author_request( $query_vars ) {
@@ -87,7 +88,7 @@ class Rewrite {
87
  }
88
 
89
  /**
90
- * Removes rewrite rules.
91
  */
92
  public function remove_rules() {
93
  $this->remove_filter( 'query_vars', 'query_vars' );
@@ -99,13 +100,13 @@ class Rewrite {
99
  }
100
 
101
  /**
102
- * Change author permalink base.
103
  */
104
  public static function change_author_base() {
105
  global $wp_rewrite;
106
 
107
  /**
108
- * Allow developers to change the author base.
109
  *
110
  * @param string $base The author base.
111
  */
@@ -119,9 +120,10 @@ class Rewrite {
119
  }
120
 
121
  /**
122
- * Update the query vars with the redirect var when stripcategorybase is active.
 
 
123
  *
124
- * @param array $query_vars Main query vars to filter.
125
  * @return array
126
  */
127
  public function query_vars( $query_vars ) {
@@ -131,9 +133,9 @@ class Rewrite {
131
  }
132
 
133
  /**
134
- * Redirect the "old" category URL to the new one.
135
  *
136
- * @param array $query_vars Query vars to check for existence of redirect var.
137
  * @return array
138
  */
139
  public function request( $query_vars ) {
@@ -147,7 +149,7 @@ class Rewrite {
147
  }
148
 
149
  /**
150
- * This function taken and only slightly adapted from WP No Category Base plugin by Saurabh Gupta.
151
  *
152
  * @return array
153
  */
@@ -189,7 +191,7 @@ class Rewrite {
189
  }
190
 
191
  /**
192
- * Override the category link to remove the category base.
193
  *
194
  * @param string $link Term link.
195
  * @param object $term Current Term Object.
@@ -218,7 +220,7 @@ class Rewrite {
218
  }
219
 
220
  /**
221
- * Get categories after handling for WPML
222
  *
223
  * @return array
224
  */
@@ -238,7 +240,7 @@ class Rewrite {
238
  }
239
 
240
  /**
241
- * Get blog prefix
242
  *
243
  * @return string
244
  */
1
  <?php
2
  /**
3
+ * This class handles the category and author rewrites.
4
  *
5
  * @since 0.9.0
6
  * @package RankMath
65
  }
66
 
67
  /**
68
+ * Redirect the old user permalink to the new one.
69
+ *
70
+ * @param array $query_vars Query vars to check for author_name var.
71
  *
 
72
  * @return array
73
  */
74
  public function author_request( $query_vars ) {
88
  }
89
 
90
  /**
91
+ * Remove the rewrite rules.
92
  */
93
  public function remove_rules() {
94
  $this->remove_filter( 'query_vars', 'query_vars' );
100
  }
101
 
102
  /**
103
+ * Change the base for author permalinks.
104
  */
105
  public static function change_author_base() {
106
  global $wp_rewrite;
107
 
108
  /**
109
+ * Filter: Change the author base.
110
  *
111
  * @param string $base The author base.
112
  */
120
  }
121
 
122
  /**
123
+ * Add the redirect var to the query vars if the "strip category bases" option is enabled.
124
+ *
125
+ * @param array $query_vars Query vars to filter.
126
  *
 
127
  * @return array
128
  */
129
  public function query_vars( $query_vars ) {
133
  }
134
 
135
  /**
136
+ * Redirect the original category URL to the new one.
137
  *
138
+ * @param array $query_vars Query vars to check for redirect var.
139
  * @return array
140
  */
141
  public function request( $query_vars ) {
149
  }
150
 
151
  /**
152
+ * This function was taken and slightly adapted from WP No Category Base plugin by Saurabh Gupta.
153
  *
154
  * @return array
155
  */
191
  }
192
 
193
  /**
194
+ * Remove the category base from the category link.
195
  *
196
  * @param string $link Term link.
197
  * @param object $term Current Term Object.
220
  }
221
 
222
  /**
223
+ * Get categories with WPML compatibility.
224
  *
225
  * @return array
226
  */
240
  }
241
 
242
  /**
243
+ * Get the blog prefix.
244
  *
245
  * @return string
246
  */
includes/class-term.php CHANGED
@@ -75,8 +75,8 @@ class Term extends Metadata {
75
  /**
76
  * Get term meta value.
77
  *
78
- * @param string $key Internal key of the value to get (without prefix).
79
- * @param mixed $term Term to get the meta value for either (string) term name, (int) term id or (object) term.
80
  * @param string $taxonomy Optional. Limit matched terms to those matching `$taxonomy`. Only used for
81
  * disambiguating potentially shared terms.
82
  * @return mixed
@@ -92,7 +92,7 @@ class Term extends Metadata {
92
  }
93
 
94
  /**
95
- * Check if term archive query is for multiple terms (/term-1,term2/ or /term-1+term-2/).
96
  *
97
  * @return bool
98
  */
75
  /**
76
  * Get term meta value.
77
  *
78
+ * @param string $key Meta key.
79
+ * @param mixed $term Term name, term ID, or term object.
80
  * @param string $taxonomy Optional. Limit matched terms to those matching `$taxonomy`. Only used for
81
  * disambiguating potentially shared terms.
82
  * @return mixed
92
  }
93
 
94
  /**
95
+ * Check if the current query is for multiple terms (e.g. /term-1,term-2/).
96
  *
97
  * @return bool
98
  */
includes/class-tracking.php CHANGED
@@ -177,9 +177,9 @@ class Tracking {
177
  }
178
 
179
  /**
180
- * Returns details about the curl version.
181
  *
182
- * @return array|null The curl info. Or null when curl isn't available..
183
  */
184
  private function get_curl_info() {
185
 
@@ -201,9 +201,9 @@ class Tracking {
201
  }
202
 
203
  /**
204
- * Formats the plugin array.
205
  *
206
- * @param array $plugin The plugin details.
207
  * @return array The formatted array.
208
  */
209
  protected function format_plugin( array $plugin ) {
177
  }
178
 
179
  /**
180
+ * Get curl version and SSL support.
181
  *
182
+ * @return array|null The curl info in an array or null when curl isn't available.
183
  */
184
  private function get_curl_info() {
185
 
201
  }
202
 
203
  /**
204
+ * Format the plugin array.
205
  *
206
+ * @param array $plugin The plugin info.
207
  * @return array The formatted array.
208
  */
209
  protected function format_plugin( array $plugin ) {
includes/class-updates.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /**
3
- * Updates related functions and actions.
4
  *
5
  * @since 0.9.0
6
  * @package RankMath
@@ -44,12 +44,12 @@ class Updates implements Runner {
44
  }
45
 
46
  /**
47
- * Check if need any update is required.
48
  */
49
  public function do_updates() {
50
  $installed_version = get_option( 'rank_math_version' );
51
 
52
- // may be it's the first install.
53
  if ( ! $installed_version ) {
54
  return;
55
  }
1
  <?php
2
  /**
3
+ * Functions and actions related to updates.
4
  *
5
  * @since 0.9.0
6
  * @package RankMath
44
  }
45
 
46
  /**
47
+ * Check if any update is required.
48
  */
49
  public function do_updates() {
50
  $installed_version = get_option( 'rank_math_version' );
51
 
52
+ // Maybe it's the first install.
53
  if ( ! $installed_version ) {
54
  return;
55
  }
includes/class-user.php CHANGED
@@ -20,17 +20,17 @@ defined( 'ABSPATH' ) || exit;
20
  class User extends Metadata {
21
 
22
  /**
23
- * Type of object metadata is for
24
  *
25
  * @var string
26
  */
27
  protected $meta_type = 'user';
28
 
29
  /**
30
- * Retrieve User instance.
31
  *
32
- * @param WP_User|object|int $user User to get either (int) user id or (WP_User|object) user.
33
- * @return User|false User object, false otherwise.
34
  */
35
  public static function get( $user = 0 ) {
36
  if ( is_int( $user ) && 0 === absint( $user ) ) {
@@ -55,10 +55,10 @@ class User extends Metadata {
55
  }
56
 
57
  /**
58
- * Get user meta value.
59
  *
60
- * @param string $key Internal key of the value to get (without prefix).
61
- * @param mixed $user User to get the meta value for either (string) term name, (int) term id or (object) term.
62
  * @return mixed
63
  */
64
  public static function get_meta( $key, $user = 0 ) {
20
  class User extends Metadata {
21
 
22
  /**
23
+ * The type of object the metadata is for.
24
  *
25
  * @var string
26
  */
27
  protected $meta_type = 'user';
28
 
29
  /**
30
+ * Get User instance.
31
  *
32
+ * @param WP_User|object|int $user User ID or user object.
33
+ * @return User|false User object or false if not found.
34
  */
35
  public static function get( $user = 0 ) {
36
  if ( is_int( $user ) && 0 === absint( $user ) ) {
55
  }
56
 
57
  /**
58
+ * Get user meta data.
59
  *
60
+ * @param string $key Meta key.
61
+ * @param mixed $user User ID or user object.
62
  * @return mixed
63
  */
64
  public static function get_meta( $key, $user = 0 ) {
includes/frontend/class-breadcrumbs.php CHANGED
@@ -272,16 +272,10 @@ class Breadcrumbs {
272
  global $post;
273
 
274
  $this->prepend_shop_page();
275
- $this->maybe_add_primary_term(
276
- wc_get_product_terms(
277
- $post->ID,
278
- 'product_cat',
279
- [
280
- 'orderby' => 'parent',
281
- 'order' => 'DESC',
282
- ]
283
- )
284
- );
285
 
286
  if ( isset( $post->ID ) ) {
287
  $this->add_crumb( $this->get_breadcrumb_title( 'post', $post->ID, get_the_title( $post ) ), get_permalink( $post ) );
272
  global $post;
273
 
274
  $this->prepend_shop_page();
275
+ $main_tax = Helper::get_settings( 'titles.pt_product_primary_taxonomy' );
276
+ if ( $main_tax ) {
277
+ $this->maybe_add_primary_term( get_the_terms( $post->ID, $main_tax ) );
278
+ }
 
 
 
 
 
 
279
 
280
  if ( isset( $post->ID ) ) {
281
  $this->add_crumb( $this->get_breadcrumb_title( 'post', $post->ID, get_the_title( $post ) ), get_permalink( $post ) );
includes/frontend/class-head.php CHANGED
@@ -49,6 +49,7 @@ class Head {
49
  $this->action( 'rank_math/head', 'robots', 10 );
50
  $this->action( 'rank_math/head', 'canonical', 20 );
51
  $this->action( 'rank_math/head', 'adjacent_rel_links', 21 );
 
52
 
53
  $this->filter( 'wp_title', 'title', 15 );
54
  $this->filter( 'thematic_doctitle', 'title', 15 );
@@ -243,6 +244,16 @@ class Head {
243
  $this->adjacent_rel_links_archive();
244
  }
245
 
 
 
 
 
 
 
 
 
 
 
246
  /**
247
  * Output the rel next/prev links for a single post / page.
248
  *
49
  $this->action( 'rank_math/head', 'robots', 10 );
50
  $this->action( 'rank_math/head', 'canonical', 20 );
51
  $this->action( 'rank_math/head', 'adjacent_rel_links', 21 );
52
+ $this->action( 'rank_math/head', 'metakeywords', 22 );
53
 
54
  $this->filter( 'wp_title', 'title', 15 );
55
  $this->filter( 'thematic_doctitle', 'title', 15 );
244
  $this->adjacent_rel_links_archive();
245
  }
246
 
247
+ /**
248
+ * Output the meta keywords value.
249
+ */
250
+ public function metakeywords() {
251
+ $keywords = Paper::get()->get_keywords();
252
+ if ( Str::is_non_empty( $keywords ) ) {
253
+ echo '<meta name="keywords" content="', esc_attr( $keywords ), '"/>', "\n";
254
+ }
255
+ }
256
+
257
  /**
258
  * Output the rel next/prev links for a single post / page.
259
  *
includes/frontend/paper/class-archive.php CHANGED
@@ -66,6 +66,15 @@ class Archive implements IPaper {
66
  return [ 'canonical' => get_post_type_archive_link( $this->get_queried_post_type() ) ];
67
  }
68
 
 
 
 
 
 
 
 
 
 
69
  /**
70
  * Retrieves the queried post type
71
  *
66
  return [ 'canonical' => get_post_type_archive_link( $this->get_queried_post_type() ) ];
67
  }
68
 
69
+ /**
70
+ * Retrieves meta keywords.
71
+ *
72
+ * @return string
73
+ */
74
+ public function keywords() {
75
+ return '';
76
+ }
77
+
78
  /**
79
  * Retrieves the queried post type
80
  *
includes/frontend/paper/class-author.php CHANGED
@@ -74,4 +74,13 @@ class Author implements IPaper {
74
  'canonical_override' => User::get_meta( 'canonical_url', get_query_var( 'author' ) ),
75
  ];
76
  }
 
 
 
 
 
 
 
 
 
77
  }
74
  'canonical_override' => User::get_meta( 'canonical_url', get_query_var( 'author' ) ),
75
  ];
76
  }
77
+
78
+ /**
79
+ * Retrieves the keywords.
80
+ *
81
+ * @return string The focus keywords.
82
+ */
83
+ public function keywords() {
84
+ return User::get_meta( 'focus_keyword', get_query_var( 'author' ) );
85
+ }
86
  }
includes/frontend/paper/class-blog.php CHANGED
@@ -74,4 +74,17 @@ class Blog implements IPaper {
74
 
75
  return [ 'canonical' => $canonical ];
76
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  }
74
 
75
  return [ 'canonical' => $canonical ];
76
  }
77
+
78
+ /**
79
+ * Retrieves the keywords.
80
+ *
81
+ * @return string The focus keywords.
82
+ */
83
+ public function keywords() {
84
+ if ( ! Post::is_posts_page() ) {
85
+ return '';
86
+ }
87
+
88
+ return Post::get_meta( 'focus_keyword', get_option( 'page_for_posts' ) );
89
+ }
90
  }
includes/frontend/paper/class-date.php CHANGED
@@ -70,4 +70,13 @@ class Date implements IPaper {
70
 
71
  return [ 'canonical' => $canonical ];
72
  }
 
 
 
 
 
 
 
 
 
73
  }
70
 
71
  return [ 'canonical' => $canonical ];
72
  }
73
+
74
+ /**
75
+ * Retrieves meta keywords.
76
+ *
77
+ * @return string
78
+ */
79
+ public function keywords() {
80
+ return '';
81
+ }
82
  }
includes/frontend/paper/class-error-404.php CHANGED
@@ -52,4 +52,13 @@ class Error_404 implements IPaper {
52
  public function canonical() {
53
  return [];
54
  }
 
 
 
 
 
 
 
 
 
55
  }
52
  public function canonical() {
53
  return [];
54
  }
55
+
56
+ /**
57
+ * Retrieves meta keywords.
58
+ *
59
+ * @return string
60
+ */
61
+ public function keywords() {
62
+ return '';
63
+ }
64
  }
includes/frontend/paper/class-paper.php CHANGED
@@ -65,6 +65,13 @@ class Paper {
65
  */
66
  private $canonical = null;
67
 
 
 
 
 
 
 
 
68
  /**
69
  * Initialize object
70
  *
@@ -213,6 +220,36 @@ class Paper {
213
  return $this->robots;
214
  }
215
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  /**
217
  * Respect some robots settings.
218
  */
65
  */
66
  private $canonical = null;
67
 
68
+ /**
69
+ * Hold keywords.
70
+ *
71
+ * @var string
72
+ */
73
+ private $keywords = null;
74
+
75
  /**
76
  * Initialize object
77
  *
220
  return $this->robots;
221
  }
222
 
223
+ /**
224
+ * Get focus keywords
225
+ *
226
+ * @return string
227
+ */
228
+ public function get_keywords() {
229
+ /**
230
+ * Passing a truthy value to the filter will effectively short-circuit the
231
+ * set keywords process.
232
+ *
233
+ * @param bool $return Short-circuit return value. Either false or true.
234
+ */
235
+ if ( ! apply_filters( 'rank_math/frontend/show_keywords', false ) ) {
236
+ return false;
237
+ }
238
+
239
+ if ( ! is_null( $this->keywords ) ) {
240
+ return $this->keywords;
241
+ }
242
+
243
+ $this->keywords = $this->paper->keywords();
244
+
245
+ /**
246
+ * Allows filtering of the meta keywords.
247
+ *
248
+ * @param array $keywords The meta keywords to be echoed.
249
+ */
250
+ return apply_filters( 'rank_math/frontend/keywords', $this->keywords );
251
+ }
252
+
253
  /**
254
  * Respect some robots settings.
255
  */
includes/frontend/paper/class-search.php CHANGED
@@ -55,4 +55,13 @@ class Search implements IPaper {
55
  $search_query = get_search_query();
56
  return [ 'canonical' => ! empty( $search_query ) && ! preg_match( '|^page/\d+$|', $search_query ) ? get_search_link() : '' ];
57
  }
 
 
 
 
 
 
 
 
 
58
  }
55
  $search_query = get_search_query();
56
  return [ 'canonical' => ! empty( $search_query ) && ! preg_match( '|^page/\d+$|', $search_query ) ? get_search_link() : '' ];
57
  }
58
+
59
+ /**
60
+ * Retrieves meta keywords.
61
+ *
62
+ * @return string
63
+ */
64
+ public function keywords() {
65
+ return '';
66
+ }
67
  }
includes/frontend/paper/class-shop.php CHANGED
@@ -58,6 +58,15 @@ class Shop extends Singular {
58
  return $this->get_post_robots( $post->get_object() );
59
  }
60
 
 
 
 
 
 
 
 
 
 
61
  /**
62
  * Auto-generate description.
63
  *
58
  return $this->get_post_robots( $post->get_object() );
59
  }
60
 
61
+ /**
62
+ * Retrieves meta keywords.
63
+ *
64
+ * @return string The focus keywords.
65
+ */
66
+ public function keywords() {
67
+ return Post::get_meta( 'focus_keyword', Post::get_shop_page_id() );
68
+ }
69
+
70
  /**
71
  * Auto-generate description.
72
  *
includes/frontend/paper/class-singular.php CHANGED
@@ -83,6 +83,15 @@ class Singular implements IPaper {
83
  ];
84
  }
85
 
 
 
 
 
 
 
 
 
 
86
  /**
87
  * Set post object.
88
  *
83
  ];
84
  }
85
 
86
+ /**
87
+ * Retrieves meta keywords.
88
+ *
89
+ * @return string The focus keywords.
90
+ */
91
+ public function keywords() {
92
+ return Post::get_meta( 'focus_keyword', $this->object->ID );
93
+ }
94
+
95
  /**
96
  * Set post object.
97
  *
includes/frontend/paper/class-taxonomy.php CHANGED
@@ -94,6 +94,21 @@ class Taxonomy implements IPaper {
94
  ];
95
  }
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  /**
98
  * Whether to noindex empty terms.
99
  *
94
  ];
95
  }
96
 
97
+ /**
98
+ * Retrieves the keywords.
99
+ *
100
+ * @return string The focus keywords.
101
+ */
102
+ public function keywords() {
103
+ $object = get_queried_object();
104
+
105
+ if ( empty( $object ) || Term::is_multiple_terms_query() ) {
106
+ return '';
107
+ }
108
+
109
+ return Term::get_meta( 'focus_keyword', $object, $object->taxonomy );
110
+ }
111
+
112
  /**
113
  * Whether to noindex empty terms.
114
  *
includes/frontend/paper/interface-paper.php CHANGED
@@ -44,4 +44,11 @@ interface IPaper {
44
  * @return array
45
  */
46
  public function canonical();
 
 
 
 
 
 
 
47
  }
44
  * @return array
45
  */
46
  public function canonical();
47
+
48
+ /**
49
+ * Retrieves the keywords.
50
+ *
51
+ * @return string The focus keywords.
52
+ */
53
+ public function keywords();
54
  }
includes/helpers/class-conditional.php CHANGED
@@ -102,16 +102,6 @@ trait Conditional {
102
  return true;
103
  }
104
 
105
- /**
106
- * Checks if the WP-REST-API is available.
107
- *
108
- * @param string $minimum_version The minimum version the API should be.
109
- * @return bool Returns true if the API is available.
110
- */
111
- public static function is_api_available( $minimum_version = '2.0' ) {
112
- return ( defined( 'REST_API_VERSION' ) && version_compare( REST_API_VERSION, $minimum_version, '>=' ) );
113
- }
114
-
115
  /**
116
  * Check if AMP module is active.
117
  *
102
  return true;
103
  }
104
 
 
 
 
 
 
 
 
 
 
 
105
  /**
106
  * Check if AMP module is active.
107
  *
includes/metaboxes/general.php CHANGED
@@ -21,7 +21,7 @@ $cmb->add_field( array(
21
  'type' => 'text',
22
  'desc' => esc_html__( 'This is what will appear in the first line when this post shows up in the search results.', 'rank-math' ),
23
  'classes' => 'rank-math-supports-variables',
24
- 'sanitization_cb' => true,
25
  'attributes' => array(
26
  'class' => 'regular-text wp-exclude-emoji',
27
  'data-gramm_editor' => 'false',
21
  'type' => 'text',
22
  'desc' => esc_html__( 'This is what will appear in the first line when this post shows up in the search results.', 'rank-math' ),
23
  'classes' => 'rank-math-supports-variables',
24
+ 'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
25
  'attributes' => array(
26
  'class' => 'regular-text wp-exclude-emoji',
27
  'data-gramm_editor' => 'false',
includes/modules/404-monitor/class-admin.php CHANGED
@@ -53,8 +53,10 @@ class Admin extends Module {
53
  $this->action( 'init', 'init' );
54
  }
55
 
56
- $this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 11 );
57
- $this->filter( 'rank_math/settings/general', 'add_settings' );
 
 
58
  }
59
 
60
  /**
53
  $this->action( 'init', 'init' );
54
  }
55
 
56
+ if ( Helper::has_cap( '404_monitor' ) ) {
57
+ $this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 11 );
58
+ $this->filter( 'rank_math/settings/general', 'add_settings' );
59
+ }
60
  }
61
 
62
  /**
includes/modules/404-monitor/class-table.php CHANGED
@@ -101,7 +101,7 @@ class Table extends List_Table {
101
  * @param object $item The current item.
102
  */
103
  protected function column_uri( $item ) {
104
- return $item['uri_decoded'] . $this->column_actions( $item );
105
  }
106
 
107
  /**
@@ -110,7 +110,7 @@ class Table extends List_Table {
110
  * @param object $item The current item.
111
  */
112
  protected function column_referer( $item ) {
113
- return '<a href="' . $item['referer'] . '" target="_blank">' . $item['referer'] . '</a>';
114
  }
115
 
116
  /**
@@ -121,7 +121,7 @@ class Table extends List_Table {
121
  */
122
  public function column_default( $item, $column_name ) {
123
  if ( in_array( $column_name, [ 'times_accessed', 'accessed', 'user_agent' ], true ) ) {
124
- return $item[ $column_name ];
125
  }
126
 
127
  return print_r( $item, true );
101
  * @param object $item The current item.
102
  */
103
  protected function column_uri( $item ) {
104
+ return esc_html( $item['uri_decoded'] ) . $this->column_actions( $item );
105
  }
106
 
107
  /**
110
  * @param object $item The current item.
111
  */
112
  protected function column_referer( $item ) {
113
+ return '<a href="' . esc_attr( $item['referer'] ) . '" target="_blank">' . esc_html( $item['referer'] ) . '</a>';
114
  }
115
 
116
  /**
121
  */
122
  public function column_default( $item, $column_name ) {
123
  if ( in_array( $column_name, [ 'times_accessed', 'accessed', 'user_agent' ], true ) ) {
124
+ return esc_html( $item[ $column_name ] );
125
  }
126
 
127
  return print_r( $item, true );
includes/modules/redirections/class-admin.php CHANGED
@@ -55,8 +55,10 @@ class Admin extends Module {
55
  $this->ajax_hooks();
56
  $this->load_metabox();
57
 
58
- $this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 12 );
59
- $this->filter( 'rank_math/settings/general', 'add_settings' );
 
 
60
 
61
  if ( $this->page->is_current_page() || 'rank_math_save_redirections' === Param::post( 'action' ) ) {
62
  $this->form = new Form;
55
  $this->ajax_hooks();
56
  $this->load_metabox();
57
 
58
+ if ( Helper::has_cap( 'redirections' ) ) {
59
+ $this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 12 );
60
+ $this->filter( 'rank_math/settings/general', 'add_settings' );
61
+ }
62
 
63
  if ( $this->page->is_current_page() || 'rank_math_save_redirections' === Param::post( 'action' ) ) {
64
  $this->form = new Form;
includes/modules/redirections/class-form.php CHANGED
@@ -140,6 +140,7 @@ class Form {
140
  }
141
 
142
  if ( $url = Param::get( 'url' ) ) { // phpcs:ignore
 
143
  return [ 'sources' => [ [ 'pattern' => $url ] ] ];
144
  }
145
 
140
  }
141
 
142
  if ( $url = Param::get( 'url' ) ) { // phpcs:ignore
143
+ $url = esc_attr( $url );
144
  return [ 'sources' => [ [ 'pattern' => $url ] ] ];
145
  }
146
 
includes/modules/rich-snippet/class-snippet-shortcode.php CHANGED
@@ -138,6 +138,8 @@ class Snippet_Shortcode {
138
  return;
139
  }
140
 
 
 
141
  if ( ! $value = Helper::get_post_meta( "snippet_{$id}", $post->ID ) ) { // phpcs:ignore
142
  return;
143
  }
@@ -151,6 +153,10 @@ class Snippet_Shortcode {
151
  return;
152
  }
153
 
 
 
 
 
154
  echo is_array( $value ) ? implode( ', ', $value ) : esc_html( $value );
155
  ?>
156
  </p>
138
  return;
139
  }
140
 
141
+ $id = 'event_startdate_date' === $id ? 'event_startdate' : $id;
142
+ $id = 'event__enddate' === $id ? 'event_enddate' : $id;
143
  if ( ! $value = Helper::get_post_meta( "snippet_{$id}", $post->ID ) ) { // phpcs:ignore
144
  return;
145
  }
153
  return;
154
  }
155
 
156
+ if ( in_array( $id, [ 'jobposting_startdate', 'jobposting_expirydate', 'event_startdate', 'event_enddate' ] ) ) {
157
+ echo date( 'Y-m-d H:i', $value );
158
+ return;
159
+ }
160
  echo is_array( $value ) ? implode( ', ', $value ) : esc_html( $value );
161
  ?>
162
  </p>
includes/modules/search-console/class-search-console.php CHANGED
@@ -75,8 +75,10 @@ class Search_Console extends Module {
75
  $this->crawler = new Data_Fetcher;
76
 
77
  if ( is_admin() ) {
78
- $this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 10 );
79
- $this->filter( 'rank_math/settings/general', 'add_settings' );
 
 
80
 
81
  // AJAX.
82
  $this->ajax( 'search_console_authentication', 'authentication' );
75
  $this->crawler = new Data_Fetcher;
76
 
77
  if ( is_admin() ) {
78
+ if ( Helper::has_cap( 'search_console' ) ) {
79
+ $this->action( 'rank_math/dashboard/widget', 'dashboard_widget', 10 );
80
+ $this->filter( 'rank_math/settings/general', 'add_settings' );
81
+ }
82
 
83
  // AJAX.
84
  $this->ajax( 'search_console_authentication', 'authentication' );
includes/modules/woocommerce/class-admin.php CHANGED
@@ -23,13 +23,6 @@ defined( 'ABSPATH' ) || exit;
23
  */
24
  class Admin extends Module {
25
 
26
- /**
27
- * Hold product categories.
28
- *
29
- * @var array
30
- */
31
- private $categories;
32
-
33
  /**
34
  * The Constructor.
35
  */
@@ -49,7 +42,6 @@ class Admin extends Module {
49
  // Permalink Manager.
50
  $this->filter( 'rank_math/settings/general', 'add_general_settings' );
51
  $this->filter( 'rank_math/flush_fields', 'flush_fields' );
52
- $this->filter( 'rewrite_rules_array', 'add_rewrite_rules', 99 );
53
  }
54
 
55
  /**
@@ -63,7 +55,7 @@ class Admin extends Module {
63
  'woocommerce' => array(
64
  'icon' => 'dashicons dashicons-cart',
65
  'title' => esc_html__( 'WooCommerce', 'rank-math' ),
66
- 'desc' => esc_html__( 'The WooCommerce lets you see the URLs where visitors and search engine crawlers run into 404 not found errors on your site. Turn on Redirections too to redirect the faulty URLs easily.', 'rank-math' ),
67
  'file' => $this->directory . '/views/options-general.php',
68
  ),
69
  ), 7 );
@@ -83,87 +75,4 @@ class Admin extends Module {
83
 
84
  return $fields;
85
  }
86
-
87
- /**
88
- * Add rewrite rules for wp.
89
- *
90
- * @param array $rules The compiled array of rewrite rules.
91
- * @return array
92
- */
93
- public function add_rewrite_rules( $rules ) {
94
- global $wp_rewrite;
95
-
96
- wp_cache_flush();
97
-
98
- $permalink_structure = wc_get_permalink_structure();
99
- $remove_product_base = Helper::get_settings( 'general.wc_remove_product_base' );
100
- $remove_category_base = Helper::get_settings( 'general.wc_remove_category_base' );
101
- $remove_parent_slugs = Helper::get_settings( 'general.wc_remove_category_parent_slugs' );
102
-
103
- $category_base = $remove_category_base ? '' : $permalink_structure['category_rewrite_slug'];
104
- $use_parent_slug = Str::contains( '%product_cat%', $permalink_structure['product_rewrite_slug'] );
105
-
106
- $product_rules = [];
107
- $category_rules = [];
108
- foreach ( $this->get_categories() as $category ) {
109
- $category_slug = $remove_parent_slugs ? $category['slug'] : $this->get_category_fullpath( $category );
110
-
111
- $category_rules[ $category_base . $category_slug . '/?$' ] = 'index.php?product_cat=' . $category['slug'];
112
- $category_rules[ $category_base . $category_slug . '/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?product_cat=' . $category['slug'] . '&feed=$matches[1]';
113
- $category_rules[ $category_base . $category_slug . '/' . $wp_rewrite->pagination_base . '/?([0-9]{1,})/?$' ] = 'index.php?product_cat=' . $category['slug'] . '&paged=$matches[1]';
114
-
115
- if ( $remove_product_base && $use_parent_slug ) {
116
- $product_rules[ $category_slug . '/([^/]+)/?$' ] = 'index.php?product=$matches[1]';
117
- $product_rules[ $category_slug . '/([^/]+)/' . $wp_rewrite->comments_pagination_base . '-([0-9]{1,})/?$' ] = 'index.php?product=$matches[1]&cpage=$matches[2]';
118
- }
119
- }
120
-
121
- $rules = empty( $rules ) ? [] : $rules;
122
- return $category_rules + $product_rules + $rules;
123
- }
124
-
125
- /**
126
- * Returns categories array.
127
- *
128
- * ['category id' => ['slug' => 'category slug', 'parent' => 'parent category id']]
129
- *
130
- * @return array
131
- */
132
- protected function get_categories() {
133
- if ( is_null( $this->categories ) ) {
134
- $categories = get_categories(array(
135
- 'taxonomy' => 'product_cat',
136
- 'hide_empty' => false,
137
- ));
138
-
139
- $slugs = [];
140
- foreach ( $categories as $category ) {
141
- $slugs[ $category->term_id ] = array(
142
- 'parent' => $category->parent,
143
- 'slug' => $category->slug,
144
- );
145
- }
146
-
147
- $this->categories = $slugs;
148
- }
149
-
150
- return $this->categories;
151
- }
152
-
153
- /**
154
- * Recursively builds category full path.
155
- *
156
- * @param object $category Term object.
157
- * @return string
158
- */
159
- protected function get_category_fullpath( $category ) {
160
- $categories = $this->get_categories();
161
- $parent = $category['parent'];
162
-
163
- if ( $parent > 0 && array_key_exists( $parent, $categories ) ) {
164
- return $this->get_category_fullpath( $categories[ $parent ] ) . '/' . $category['slug'];
165
- }
166
-
167
- return $category['slug'];
168
- }
169
  }
23
  */
24
  class Admin extends Module {
25
 
 
 
 
 
 
 
 
26
  /**
27
  * The Constructor.
28
  */
42
  // Permalink Manager.
43
  $this->filter( 'rank_math/settings/general', 'add_general_settings' );
44
  $this->filter( 'rank_math/flush_fields', 'flush_fields' );
 
45
  }
46
 
47
  /**
55
  'woocommerce' => array(
56
  'icon' => 'dashicons dashicons-cart',
57
  'title' => esc_html__( 'WooCommerce', 'rank-math' ),
58
+ 'desc' => esc_html__( 'Choose how you want Rank Math to handle your WooCommerce SEO. These options help you create cleaner, SEO friendly URLs, and optimize your WooCommerce product pages.', 'rank-math' ),
59
  'file' => $this->directory . '/views/options-general.php',
60
  ),
61
  ), 7 );
75
 
76
  return $fields;
77
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  }
includes/modules/woocommerce/class-woocommerce.php CHANGED
@@ -25,6 +25,13 @@ class WooCommerce {
25
 
26
  use Hooker;
27
 
 
 
 
 
 
 
 
28
  /**
29
  * The Constructor.
30
  */
@@ -34,41 +41,7 @@ class WooCommerce {
34
  new Admin;
35
  }
36
 
37
- // Permalink Manager.
38
- if ( ! is_admin() ) {
39
- if (
40
- Helper::get_settings( 'general.wc_remove_product_base' ) ||
41
- Helper::get_settings( 'general.wc_remove_category_base' ) ||
42
- Helper::get_settings( 'general.wc_remove_category_parent_slugs' )
43
- ) {
44
- $this->action( 'request', 'request' );
45
- }
46
-
47
- if ( Helper::get_settings( 'general.wc_remove_generator' ) ) {
48
- remove_action( 'get_the_generator_html', 'wc_generator_tag', 10 );
49
- remove_action( 'get_the_generator_xhtml', 'wc_generator_tag', 10 );
50
- }
51
-
52
- // Add metadescription filter.
53
- $this->filter( 'rank_math/frontend/description', 'metadesc' );
54
-
55
- // Robots.
56
- $this->filter( 'rank_math/frontend/robots', 'robots' );
57
-
58
- // OpenGraph.
59
- $this->filter( 'language_attributes', 'og_product_namespace', 11 );
60
- $this->filter( 'rank_math/opengraph/desc', 'og_desc_product_taxonomy' );
61
- $this->action( 'rank_math/opengraph/facebook', 'og_enhancement', 50 );
62
- $this->action( 'rank_math/opengraph/facebook/add_additional_images', 'set_opengraph_image' );
63
-
64
- // Sitemap.
65
- $this->filter( 'rank_math/sitemap/exclude_post_type', 'sitemap_exclude_post_type', 10, 2 );
66
- $this->filter( 'rank_math/sitemap/post_type_archive_link', 'sitemap_taxonomies', 10, 2 );
67
- $this->filter( 'rank_math/sitemap/post_type_archive_link', 'sitemap_post_type_archive_link', 10, 2 );
68
- $this->filter( 'rank_math/sitemap/urlimages', 'add_product_images_to_xml_sitemap', 10, 2 );
69
-
70
- }
71
-
72
  if ( Helper::get_settings( 'general.wc_remove_product_base' ) ) {
73
  $this->filter( 'post_type_link', 'product_post_type_link', 1, 2 );
74
  }
@@ -76,9 +49,47 @@ class WooCommerce {
76
  $this->filter( 'term_link', 'product_term_link', 1, 3 );
77
  }
78
 
 
79
  $this->action( 'rank_math/vars/register_extra_replacements', 'register_replacements' );
80
  }
81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  /**
83
  * Replace request if product found.
84
  *
@@ -197,6 +208,12 @@ class WooCommerce {
197
  * @return array Modified robots.
198
  */
199
  public function robots( $robots ) {
 
 
 
 
 
 
200
  if ( is_cart() || is_checkout() || is_account_page() ) {
201
  remove_action( 'wp_head', 'wc_page_noindex' );
202
  return array(
@@ -575,6 +592,88 @@ class WooCommerce {
575
  return $product->post->post_excerpt;
576
  }
577
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
578
  /**
579
  * Checks if product class has a description method.
580
  * Otherwise it returns the value of the post_content.
25
 
26
  use Hooker;
27
 
28
+ /**
29
+ * Hold product categories.
30
+ *
31
+ * @var array
32
+ */
33
+ private $categories;
34
+
35
  /**
36
  * The Constructor.
37
  */
41
  new Admin;
42
  }
43
 
44
+ $this->action( 'wp', 'integrations' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  if ( Helper::get_settings( 'general.wc_remove_product_base' ) ) {
46
  $this->filter( 'post_type_link', 'product_post_type_link', 1, 2 );
47
  }
49
  $this->filter( 'term_link', 'product_term_link', 1, 3 );
50
  }
51
 
52
+ $this->filter( 'rewrite_rules_array', 'add_rewrite_rules', 99 );
53
  $this->action( 'rank_math/vars/register_extra_replacements', 'register_replacements' );
54
  }
55
 
56
+ /**
57
+ * Initialize integrations.
58
+ */
59
+ public function integrations() {
60
+ // Permalink Manager.
61
+ if (
62
+ Helper::get_settings( 'general.wc_remove_product_base' ) ||
63
+ Helper::get_settings( 'general.wc_remove_category_base' ) ||
64
+ Helper::get_settings( 'general.wc_remove_category_parent_slugs' )
65
+ ) {
66
+ $this->action( 'request', 'request' );
67
+ }
68
+
69
+ if ( Helper::get_settings( 'general.wc_remove_generator' ) ) {
70
+ remove_action( 'get_the_generator_html', 'wc_generator_tag', 10 );
71
+ remove_action( 'get_the_generator_xhtml', 'wc_generator_tag', 10 );
72
+ }
73
+
74
+ // Add metadescription filter.
75
+ $this->filter( 'rank_math/frontend/description', 'metadesc' );
76
+
77
+ // Robots.
78
+ $this->filter( 'rank_math/frontend/robots', 'robots' );
79
+
80
+ // OpenGraph.
81
+ $this->filter( 'language_attributes', 'og_product_namespace', 11 );
82
+ $this->filter( 'rank_math/opengraph/desc', 'og_desc_product_taxonomy' );
83
+ $this->action( 'rank_math/opengraph/facebook', 'og_enhancement', 50 );
84
+ $this->action( 'rank_math/opengraph/facebook/add_additional_images', 'set_opengraph_image' );
85
+
86
+ // Sitemap.
87
+ $this->filter( 'rank_math/sitemap/exclude_post_type', 'sitemap_exclude_post_type', 10, 2 );
88
+ $this->filter( 'rank_math/sitemap/post_type_archive_link', 'sitemap_taxonomies', 10, 2 );
89
+ $this->filter( 'rank_math/sitemap/post_type_archive_link', 'sitemap_post_type_archive_link', 10, 2 );
90
+ $this->filter( 'rank_math/sitemap/urlimages', 'add_product_images_to_xml_sitemap', 10, 2 );
91
+ }
92
+
93
  /**
94
  * Replace request if product found.
95
  *
208
  * @return array Modified robots.
209
  */
210
  public function robots( $robots ) {
211
+
212
+ // Early Bail if current page is Woocommerce OnePage Checkout.
213
+ if ( function_exists( 'is_wcopc_checkout' ) && is_wcopc_checkout() ) {
214
+ return $robots;
215
+ }
216
+
217
  if ( is_cart() || is_checkout() || is_account_page() ) {
218
  remove_action( 'wp_head', 'wc_page_noindex' );
219
  return array(
592
  return $product->post->post_excerpt;
593
  }
594
 
595
+ /**
596
+ * Add rewrite rules for wp.
597
+ *
598
+ * @param array $rules The compiled array of rewrite rules.
599
+ * @return array
600
+ */
601
+ public function add_rewrite_rules( $rules ) {
602
+ global $wp_rewrite;
603
+ wp_cache_flush();
604
+
605
+ $permalink_structure = wc_get_permalink_structure();
606
+ $remove_product_base = Helper::get_settings( 'general.wc_remove_product_base' );
607
+ $remove_category_base = Helper::get_settings( 'general.wc_remove_category_base' );
608
+ $remove_parent_slugs = Helper::get_settings( 'general.wc_remove_category_parent_slugs' );
609
+
610
+ $category_base = $remove_category_base ? '' : $permalink_structure['category_rewrite_slug'];
611
+ $use_parent_slug = Str::contains( '%product_cat%', $permalink_structure['product_rewrite_slug'] );
612
+
613
+ $product_rules = [];
614
+ $category_rules = [];
615
+ foreach ( $this->get_categories() as $category ) {
616
+ $category_slug = $remove_parent_slugs ? $category['slug'] : $this->get_category_fullpath( $category );
617
+
618
+ $category_rules[ $category_base . $category_slug . '/?$' ] = 'index.php?product_cat=' . $category['slug'];
619
+ $category_rules[ $category_base . $category_slug . '/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?product_cat=' . $category['slug'] . '&feed=$matches[1]';
620
+ $category_rules[ $category_base . $category_slug . '/' . $wp_rewrite->pagination_base . '/?([0-9]{1,})/?$' ] = 'index.php?product_cat=' . $category['slug'] . '&paged=$matches[1]';
621
+
622
+ if ( $remove_product_base && $use_parent_slug ) {
623
+ $product_rules[ $category_slug . '/([^/]+)/?$' ] = 'index.php?product=$matches[1]';
624
+ $product_rules[ $category_slug . '/([^/]+)/' . $wp_rewrite->comments_pagination_base . '-([0-9]{1,})/?$' ] = 'index.php?product=$matches[1]&cpage=$matches[2]';
625
+ }
626
+ }
627
+
628
+ $rules = empty( $rules ) ? [] : $rules;
629
+ return $category_rules + $product_rules + $rules;
630
+ }
631
+
632
+ /**
633
+ * Returns categories array.
634
+ *
635
+ * ['category id' => ['slug' => 'category slug', 'parent' => 'parent category id']]
636
+ *
637
+ * @return array
638
+ */
639
+ protected function get_categories() {
640
+ if ( is_null( $this->categories ) ) {
641
+ $categories = get_categories(array(
642
+ 'taxonomy' => 'product_cat',
643
+ 'hide_empty' => false,
644
+ ));
645
+
646
+ $slugs = [];
647
+ foreach ( $categories as $category ) {
648
+ $slugs[ $category->term_id ] = array(
649
+ 'parent' => $category->parent,
650
+ 'slug' => $category->slug,
651
+ );
652
+ }
653
+
654
+ $this->categories = $slugs;
655
+ }
656
+
657
+ return $this->categories;
658
+ }
659
+
660
+ /**
661
+ * Recursively builds category full path.
662
+ *
663
+ * @param object $category Term object.
664
+ * @return string
665
+ */
666
+ protected function get_category_fullpath( $category ) {
667
+ $categories = $this->get_categories();
668
+ $parent = $category['parent'];
669
+
670
+ if ( $parent > 0 && array_key_exists( $parent, $categories ) ) {
671
+ return $this->get_category_fullpath( $categories[ $parent ] ) . '/' . $category['slug'];
672
+ }
673
+
674
+ return $category['slug'];
675
+ }
676
+
677
  /**
678
  * Checks if product class has a description method.
679
  * Otherwise it returns the value of the post_content.
includes/settings/general/others.php CHANGED
@@ -62,7 +62,7 @@ $cmb->add_field([
62
  '<code>&lt;?php&nbsp;rank_math_the_seo_score();&nbsp;?&gt;</code>'
63
  ),
64
  'classes' => 'nob',
65
- 'default' => 'bottom',
66
  'options' => [
67
  'bottom' => esc_html__( 'Below Content', 'rank-math' ),
68
  'top' => esc_html__( 'Above Content', 'rank-math' ),
62
  '<code>&lt;?php&nbsp;rank_math_the_seo_score();&nbsp;?&gt;</code>'
63
  ),
64
  'classes' => 'nob',
65
+ 'default' => 'top',
66
  'options' => [
67
  'bottom' => esc_html__( 'Below Content', 'rank-math' ),
68
  'top' => esc_html__( 'Above Content', 'rank-math' ),
includes/settings/titles/misc.php CHANGED
@@ -14,7 +14,7 @@ $cmb->add_field([
14
  'id' => 'disable_date_archives',
15
  'type' => 'switch',
16
  'name' => esc_html__( 'Date Archives', 'rank-math' ),
17
- 'desc' => esc_html__( 'Redirect date archives to homepage.', 'rank-math' ),
18
  'options' => [
19
  'off' => esc_html__( 'Enabled', 'rank-math' ),
20
  'on' => esc_html__( 'Disabled', 'rank-math' ),
14
  'id' => 'disable_date_archives',
15
  'type' => 'switch',
16
  'name' => esc_html__( 'Date Archives', 'rank-math' ),
17
+ 'desc' => esc_html__( 'Enable or disable the date archive (_e.g: domain.com/2019/06/_). If this option is disabled, the date archives will be redirected to the homepage.', 'rank-math' ),
18
  'options' => [
19
  'off' => esc_html__( 'Enabled', 'rank-math' ),
20
  'on' => esc_html__( 'Disabled', 'rank-math' ),
includes/settings/titles/post-types.php CHANGED
@@ -38,7 +38,7 @@ $cmb->add_field([
38
  'desc' => sprintf( esc_html__( 'Default title tag for single %s pages. This can be changed on a per-post basis on the post editor screen.', 'rank-math' ), $name ),
39
  'classes' => 'rank-math-supports-variables rank-math-title',
40
  'default' => '%title% %page% %sep% %sitename%',
41
- 'sanitization_cb' => true,
42
  ]);
43
 
44
  $cmb->add_field([
38
  'desc' => sprintf( esc_html__( 'Default title tag for single %s pages. This can be changed on a per-post basis on the post editor screen.', 'rank-math' ), $name ),
39
  'classes' => 'rank-math-supports-variables rank-math-title',
40
  'default' => '%title% %page% %sep% %sitename%',
41
+ 'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
42
  ]);
43
 
44
  $cmb->add_field([
includes/settings/titles/taxonomies.php CHANGED
@@ -34,7 +34,7 @@ $cmb->add_field([
34
  'desc' => sprintf( esc_html__( 'Title tag for %s archives', 'rank-math' ), $name ),
35
  'classes' => 'rank-math-supports-variables rank-math-title',
36
  'default' => '%term% Archives %page% %sep% %sitename%',
37
- 'sanitization_cb' => true,
38
  ]);
39
 
40
  $cmb->add_field([
@@ -46,9 +46,9 @@ $cmb->add_field([
46
  'desc' => sprintf( esc_html__( 'Description for %s archives', 'rank-math' ), $name ),
47
  'classes' => 'rank-math-supports-variables rank-math-description',
48
  'attributes' => [
49
- 'class' => 'cmb2-textarea-small wp-exclude-emoji',
50
- 'data-gramm_editor' => 'false',
51
- ],
52
  'sanitization_cb' => true,
53
  ]);
54
 
34
  'desc' => sprintf( esc_html__( 'Title tag for %s archives', 'rank-math' ), $name ),
35
  'classes' => 'rank-math-supports-variables rank-math-title',
36
  'default' => '%term% Archives %page% %sep% %sitename%',
37
+ 'sanitization_cb' => [ '\RankMath\CMB2', 'sanitize_textfield' ],
38
  ]);
39
 
40
  $cmb->add_field([
46
  'desc' => sprintf( esc_html__( 'Description for %s archives', 'rank-math' ), $name ),
47
  'classes' => 'rank-math-supports-variables rank-math-description',
48
  'attributes' => [
49
+ 'class' => 'cmb2-textarea-small wp-exclude-emoji',
50
+ 'data-gramm_editor' => 'false',
51
+ ],
52
  'sanitization_cb' => true,
53
  ]);
54
 
includes/template-tags.php CHANGED
@@ -57,19 +57,17 @@ function rank_math_the_seo_score( $args = [] ) {
57
  }
58
 
59
  /**
60
- * Register new replacement %variables%.
61
- * For use by other plugins/themes to register extra variables.
62
  *
63
  * @codeCoverageIgnore
64
  *
65
- * @param string $var The name of the variable to replace, i.e. '%var%'
66
- * - the surrounding % are optional.
67
- * @param mixed $callback Function or method to call to retrieve the replacement value for the variable
68
- * and should *return* the replacement value. DON'T echo it.
69
- * @param array $args Array with title, desc and example values.
70
  *
71
  * @return bool Whether the replacement function was succesfully registered.
72
  */
73
  function rank_math_register_var_replacement( $var, $callback, $args = [] ) {
74
- RankMath\Replace_Vars::register_replacement( $var, $callback, $args );
75
- }
57
  }
58
 
59
  /**
60
+ * Register extra %variables%. For developers.
61
+ * See rank_math_register_var_replacement().
62
  *
63
  * @codeCoverageIgnore
64
  *
65
+ * @param string $var Variable name, for example %custom%. '%' signs are optional.
66
+ * @param mixed $callback Replacement callback. Should return value, not output it.
67
+ * @param array $args Array with additional title, description and example values for the variable.
 
 
68
  *
69
  * @return bool Whether the replacement function was succesfully registered.
70
  */
71
  function rank_math_register_var_replacement( $var, $callback, $args = [] ) {
72
+ return RankMath\Replace_Vars::register_replacement( $var, $callback, $args );
73
+ }
includes/updates/update-1.0.27.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Updates routine for version 1.0.27.
4
+ *
5
+ * @since 1.0.27
6
+ * @package RankMath
7
+ * @subpackage RankMath\Updates
8
+ * @author Rank Math <support@rankmath.com>
9
+ */
10
+
11
+ /**
12
+ * // Clear SEO Analysis result.
13
+ */
14
+ function rank_math_1_0_27_rseset_options() {
15
+ delete_option( 'rank_math_seo_analysis_results' );
16
+ }
17
+ rank_math_1_0_27_rseset_options();
rank-math.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @wordpress-plugin
11
  * Plugin Name: Rank Math SEO
12
- * Version: 1.0.26
13
  * Plugin URI: https://s.rankmath.com/home
14
  * Description: Rank Math is a revolutionary SEO product that combines the features of many SEO tools and lets you multiply your traffic in the easiest way possible.
15
  * Author: Rank Math
@@ -25,16 +25,16 @@ defined( 'ABSPATH' ) || exit;
25
  /**
26
  * RankMath class.
27
  *
28
- * @class The class that holds the entire plugin.
29
  */
30
  final class RankMath {
31
 
32
  /**
33
- * Plugin version
34
  *
35
  * @var string
36
  */
37
- public $version = '1.0.26';
38
 
39
  /**
40
  * Rank Math database version.
@@ -44,42 +44,42 @@ final class RankMath {
44
  public $db_version = '1';
45
 
46
  /**
47
- * Minimum version of WordPress required to run the plugin
48
  *
49
  * @var string
50
  */
51
  private $wordpress_version = '4.6';
52
 
53
  /**
54
- * Minimum version of PHP required to run the plugin
55
  *
56
  * @var string
57
  */
58
  private $php_version = '5.6';
59
 
60
  /**
61
- * Holds various class instances
62
  *
63
  * @var array
64
  */
65
  private $container = [];
66
 
67
  /**
68
- * Hold messages
69
  *
70
  * @var bool
71
  */
72
  private $messages = [];
73
 
74
  /**
75
- * The single instance of the class
76
  *
77
  * @var RankMath
78
  */
79
  protected static $instance = null;
80
 
81
  /**
82
- * Magic isset to bypass referencing plugin
83
  *
84
  * @param string $prop Property to check.
85
  * @return bool
@@ -89,7 +89,7 @@ final class RankMath {
89
  }
90
 
91
  /**
92
- * Magic get method
93
  *
94
  * @param string $prop Property to get.
95
  * @return mixed Property value or NULL if it does not exists
@@ -103,7 +103,7 @@ final class RankMath {
103
  }
104
 
105
  /**
106
- * Magic set method
107
  *
108
  * @param mixed $prop Property to set.
109
  * @param mixed $value Value to set.
@@ -141,7 +141,13 @@ final class RankMath {
141
  }
142
 
143
  /**
144
- * Main RankMath instance
 
 
 
 
 
 
145
  *
146
  * Ensure only one instance is loaded or can be loaded.
147
  *
@@ -158,23 +164,23 @@ final class RankMath {
158
  }
159
 
160
  /**
161
- * Instantiate the plugin
162
  */
163
  private function setup() {
164
  if ( ! $this->is_requirements_meet() ) {
165
  return;
166
  }
167
 
168
- // Define constants.
169
  $this->define_constants();
170
 
171
  // Include required files.
172
  $this->includes();
173
 
174
- // instantiate classes.
175
  $this->instantiate();
176
 
177
- // Initialize the action hooks.
178
  $this->init_actions();
179
 
180
  // Loaded action.
@@ -182,19 +188,19 @@ final class RankMath {
182
  }
183
 
184
  /**
185
- * Check that the WordPress and PHP setup meets the plugin requirements
186
  *
187
  * @return bool
188
  */
189
  private function is_requirements_meet() {
190
 
191
- // Check if WordPress version is enough to run this plugin.
192
  if ( version_compare( get_bloginfo( 'version' ), $this->wordpress_version, '<' ) ) {
193
  /* translators: WordPress Version */
194
  $this->messages[] = sprintf( esc_html__( 'Rank Math requires WordPress version %s or above. Please update WordPress to run this plugin.', 'rank-math' ), $this->wordpress_version );
195
  }
196
 
197
- // Check if PHP version is enough to run this plugin.
198
  if ( version_compare( phpversion(), $this->php_version, '<' ) ) {
199
  /* translators: PHP Version */
200
  $this->messages[] = sprintf( esc_html__( 'Rank Math requires PHP version %s or above. Please update PHP to run this plugin.', 'rank-math' ), $this->php_version );
@@ -212,7 +218,7 @@ final class RankMath {
212
  }
213
 
214
  /**
215
- * Auto-deactivate plugin if requirement not meet and display a notice
216
  */
217
  public function auto_deactivate() {
218
  deactivate_plugins( plugin_basename( RANK_MATH_FILE ) );
@@ -222,7 +228,7 @@ final class RankMath {
222
  }
223
 
224
  /**
225
- * Plugin activation notice
226
  */
227
  public function activation_error() {
228
  ?>
@@ -235,7 +241,7 @@ final class RankMath {
235
  }
236
 
237
  /**
238
- * Define the plugin constants
239
  */
240
  private function define_constants() {
241
  define( 'RANK_MATH_VERSION', $this->version );
@@ -245,12 +251,13 @@ final class RankMath {
245
  }
246
 
247
  /**
248
- * Include the required files
249
  */
250
  private function includes() {
251
  include dirname( __FILE__ ) . '/vendor/autoload.php';
252
 
253
- // For Theme Developers.
 
254
  $file = get_stylesheet_directory() . '/rank-math.php';
255
  if ( file_exists( $file ) ) {
256
  require_once $file;
@@ -258,7 +265,7 @@ final class RankMath {
258
  }
259
 
260
  /**
261
- * Instantiate classes
262
  */
263
  private function instantiate() {
264
  new \RankMath\Rollbar;
@@ -281,12 +288,12 @@ final class RankMath {
281
 
282
  $this->container['manager'] = new \RankMath\Module_Manager;
283
 
284
- // Just Init.
285
  new \RankMath\Common;
286
  $this->container['rewrite'] = new \RankMath\Rewrite;
287
  new \RankMath\Compatibility;
288
 
289
- // Usage Tracking.
290
  if ( defined( 'DOING_CRON' ) && ! defined( 'DOING_AJAX' ) && \RankMath\Helper::get_settings( 'general.usage_tracking' ) ) {
291
  new \RankMath\Tracking;
292
  }
@@ -296,7 +303,7 @@ final class RankMath {
296
  }
297
 
298
  /**
299
- * Initialize WordPress action hooks
300
  */
301
  private function init_actions() {
302
 
@@ -311,11 +318,12 @@ final class RankMath {
311
  add_action( 'plugins_loaded', [ $this, 'init' ], 14 );
312
  add_action( 'rest_api_init', [ $this, 'init_rest_api' ] );
313
 
 
314
  if ( is_admin() ) {
315
  add_action( 'plugins_loaded', [ $this, 'init_admin' ], 15 );
316
  }
317
 
318
- // Frontend Only.
319
  if ( ! is_admin() || in_array( \MyThemeShop\Helpers\Param::request( 'action' ), [ 'elementor', 'elementor_ajax' ], true ) ) {
320
  add_action( 'plugins_loaded', [ $this, 'init_frontend' ], 15 );
321
  }
@@ -327,19 +335,9 @@ final class RankMath {
327
  }
328
 
329
  /**
330
- * Initialize the essential files.
331
- */
332
- public function init() {
333
- }
334
-
335
- /**
336
- * Loads the rest api endpoints.
337
  */
338
  public function init_rest_api() {
339
- // We can't do anything when requirements are not met.
340
- if ( ! \RankMath\Helper::is_api_available() ) {
341
- return;
342
- }
343
 
344
  $controllers = [
345
  new \RankMath\Rest\Admin,
@@ -352,21 +350,23 @@ final class RankMath {
352
  }
353
 
354
  /**
355
- * Initialize the admin.
 
356
  */
357
  public function init_admin() {
358
  new \RankMath\Admin\Engine;
359
  }
360
 
361
  /**
362
- * Initialize the frontend.
 
363
  */
364
  public function init_frontend() {
365
  $this->container['frontend'] = new \RankMath\Frontend\Frontend;
366
  }
367
 
368
  /**
369
- * Initialize the WP-CLI integration.
370
  */
371
  public function init_wp_cli() {
372
  WP_CLI::add_command( 'rankmath sitemap generate', [ '\RankMath\CLI\Commands', 'sitemap_generate' ] );
@@ -389,7 +389,7 @@ final class RankMath {
389
  }
390
 
391
  /**
392
- * Show row meta on the plugin screen.
393
  *
394
  * @param mixed $links Plugin Row Meta.
395
  * @param mixed $file Plugin Base file.
@@ -437,9 +437,9 @@ final class RankMath {
437
  }
438
 
439
  /**
440
- * Add more cron schedules.
441
  *
442
- * @param array $schedules List of WP scheduled cron jobs.
443
  * @return array
444
  */
445
  public function cron_schedules( $schedules ) {
@@ -454,8 +454,6 @@ final class RankMath {
454
  }
455
 
456
  /**
457
- * Main instance of RankMath.
458
- *
459
  * Returns the main instance of RankMath to prevent the need to use globals.
460
  *
461
  * @return RankMath
@@ -464,5 +462,5 @@ function rank_math() {
464
  return RankMath::get();
465
  }
466
 
467
- // Kick it off.
468
  rank_math();
9
  *
10
  * @wordpress-plugin
11
  * Plugin Name: Rank Math SEO
12
+ * Version: 1.0.27
13
  * Plugin URI: https://s.rankmath.com/home
14
  * Description: Rank Math is a revolutionary SEO product that combines the features of many SEO tools and lets you multiply your traffic in the easiest way possible.
15
  * Author: Rank Math
25
  /**
26
  * RankMath class.
27
  *
28
+ * @class Main class of the plugin.
29
  */
30
  final class RankMath {
31
 
32
  /**
33
+ * Plugin version.
34
  *
35
  * @var string
36
  */
37
+ public $version = '1.0.27';
38
 
39
  /**
40
  * Rank Math database version.
44
  public $db_version = '1';
45
 
46
  /**
47
+ * Minimum version of WordPress required to run Rank Math.
48
  *
49
  * @var string
50
  */
51
  private $wordpress_version = '4.6';
52
 
53
  /**
54
+ * Minimum version of PHP required to run Rank Math.
55
  *
56
  * @var string
57
  */
58
  private $php_version = '5.6';
59
 
60
  /**
61
+ * Holds various class instances.
62
  *
63
  * @var array
64
  */
65
  private $container = [];
66
 
67
  /**
68
+ * Hold install error messages.
69
  *
70
  * @var bool
71
  */
72
  private $messages = [];
73
 
74
  /**
75
+ * The single instance of the class.
76
  *
77
  * @var RankMath
78
  */
79
  protected static $instance = null;
80
 
81
  /**
82
+ * Magic isset to bypass referencing plugin.
83
  *
84
  * @param string $prop Property to check.
85
  * @return bool
89
  }
90
 
91
  /**
92
+ * Magic getter method.
93
  *
94
  * @param string $prop Property to get.
95
  * @return mixed Property value or NULL if it does not exists
103
  }
104
 
105
  /**
106
+ * Magic setter method.
107
  *
108
  * @param mixed $prop Property to set.
109
  * @param mixed $value Value to set.
141
  }
142
 
143
  /**
144
+ * Initialize.
145
+ */
146
+ public function init() {
147
+ }
148
+
149
+ /**
150
+ * Retrieve main RankMath instance.
151
  *
152
  * Ensure only one instance is loaded or can be loaded.
153
  *
164
  }
165
 
166
  /**
167
+ * Instantiate the plugin.
168
  */
169
  private function setup() {
170
  if ( ! $this->is_requirements_meet() ) {
171
  return;
172
  }
173
 
174
+ // Define plugin constants.
175
  $this->define_constants();
176
 
177
  // Include required files.
178
  $this->includes();
179
 
180
+ // Instantiate classes.
181
  $this->instantiate();
182
 
183
+ // Initialize the action and filter hooks.
184
  $this->init_actions();
185
 
186
  // Loaded action.
188
  }
189
 
190
  /**
191
+ * Check that the WordPress and PHP setup meets the plugin requirements.
192
  *
193
  * @return bool
194
  */
195
  private function is_requirements_meet() {
196
 
197
+ // Check WordPress version.
198
  if ( version_compare( get_bloginfo( 'version' ), $this->wordpress_version, '<' ) ) {
199
  /* translators: WordPress Version */
200
  $this->messages[] = sprintf( esc_html__( 'Rank Math requires WordPress version %s or above. Please update WordPress to run this plugin.', 'rank-math' ), $this->wordpress_version );
201
  }
202
 
203
+ // Check PHP version.
204
  if ( version_compare( phpversion(), $this->php_version, '<' ) ) {
205
  /* translators: PHP Version */
206
  $this->messages[] = sprintf( esc_html__( 'Rank Math requires PHP version %s or above. Please update PHP to run this plugin.', 'rank-math' ), $this->php_version );
218
  }
219
 
220
  /**
221
+ * Auto-deactivate plugin if requirements are not met, and display a notice.
222
  */
223
  public function auto_deactivate() {
224
  deactivate_plugins( plugin_basename( RANK_MATH_FILE ) );
228
  }
229
 
230
  /**
231
+ * Error notice on plugin activation.
232
  */
233
  public function activation_error() {
234
  ?>
241
  }
242
 
243
  /**
244
+ * Define the plugin constants.
245
  */
246
  private function define_constants() {
247
  define( 'RANK_MATH_VERSION', $this->version );
251
  }
252
 
253
  /**
254
+ * Include the required files.
255
  */
256
  private function includes() {
257
  include dirname( __FILE__ ) . '/vendor/autoload.php';
258
 
259
+ // For Theme Developers:
260
+ // theme-folder/rankmath.php will be loaded automatically.
261
  $file = get_stylesheet_directory() . '/rank-math.php';
262
  if ( file_exists( $file ) ) {
263
  require_once $file;
265
  }
266
 
267
  /**
268
+ * Instantiate classes.
269
  */
270
  private function instantiate() {
271
  new \RankMath\Rollbar;
288
 
289
  $this->container['manager'] = new \RankMath\Module_Manager;
290
 
291
+ // Just init without storing it in the container.
292
  new \RankMath\Common;
293
  $this->container['rewrite'] = new \RankMath\Rewrite;
294
  new \RankMath\Compatibility;
295
 
296
+ // Usage Tracking, if it's enabled and this is a CRON request.
297
  if ( defined( 'DOING_CRON' ) && ! defined( 'DOING_AJAX' ) && \RankMath\Helper::get_settings( 'general.usage_tracking' ) ) {
298
  new \RankMath\Tracking;
299
  }
303
  }
304
 
305
  /**
306
+ * Initialize WordPress action and filter hooks.
307
  */
308
  private function init_actions() {
309
 
318
  add_action( 'plugins_loaded', [ $this, 'init' ], 14 );
319
  add_action( 'rest_api_init', [ $this, 'init_rest_api' ] );
320
 
321
+ // Load admin-related functionality.
322
  if ( is_admin() ) {
323
  add_action( 'plugins_loaded', [ $this, 'init_admin' ], 15 );
324
  }
325
 
326
+ // Frontend-only functionality.
327
  if ( ! is_admin() || in_array( \MyThemeShop\Helpers\Param::request( 'action' ), [ 'elementor', 'elementor_ajax' ], true ) ) {
328
  add_action( 'plugins_loaded', [ $this, 'init_frontend' ], 15 );
329
  }
335
  }
336
 
337
  /**
338
+ * Load the REST API endpoints.
 
 
 
 
 
 
339
  */
340
  public function init_rest_api() {
 
 
 
 
341
 
342
  $controllers = [
343
  new \RankMath\Rest\Admin,
350
  }
351
 
352
  /**
353
+ * Initialize the admin-related functionality.
354
+ * Runs on 'plugins_loaded'.
355
  */
356
  public function init_admin() {
357
  new \RankMath\Admin\Engine;
358
  }
359
 
360
  /**
361
+ * Initialize the frontend functionality.
362
+ * Runs on 'plugins_loaded'.
363
  */
364
  public function init_frontend() {
365
  $this->container['frontend'] = new \RankMath\Frontend\Frontend;
366
  }
367
 
368
  /**
369
+ * Add our custom WP-CLI commands.
370
  */
371
  public function init_wp_cli() {
372
  WP_CLI::add_command( 'rankmath sitemap generate', [ '\RankMath\CLI\Commands', 'sitemap_generate' ] );
389
  }
390
 
391
  /**
392
+ * Add extra links as row meta on the plugin screen.
393
  *
394
  * @param mixed $links Plugin Row Meta.
395
  * @param mixed $file Plugin Base file.
437
  }
438
 
439
  /**
440
+ * Add cron schedules.
441
  *
442
+ * @param array $schedules List of schedules for cron jobs.
443
  * @return array
444
  */
445
  public function cron_schedules( $schedules ) {
454
  }
455
 
456
  /**
 
 
457
  * Returns the main instance of RankMath to prevent the need to use globals.
458
  *
459
  * @return RankMath
462
  return RankMath::get();
463
  }
464
 
465
+ // Start it.
466
  rank_math();
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: seo, sitemap, google search console, schema, redirection
5
  Tested up to: 5.2.1
6
  Requires at least: 4.6.0
7
  Requires PHP: 5.6
8
- Stable tag: 1.0.26
9
  License: GPL-2.0+
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.txt
11
 
@@ -451,18 +451,21 @@ We look forward to helping you.
451
 
452
  == Changelog ==
453
 
454
- = 1.0.26 [Jun 6, 2019] =
455
- * Added new variables to display custom taxonomies term in the post title & description fields
456
- * Improved the Review Schema options to honor decimals in the score
457
- * Improved SEO Analysis to detect external Sitemaps
458
- * Improved detection of title & description tags on the backend by adding proper sanitization
459
- * Improved the cron job related to the Search Console's data not updating regularly. It should be working fine now
460
- * Fixed a compatibility issue with ESSB plugin
461
- * Fixed an issue with the SEO Analyzer throwing errors on old installations
462
- * Fixed bulk edit options not working since the last version
463
- * Fixed insecure warning appearing due to one HTTP call in the plugin
464
- * Fixed bulk delete option not working in the 404 Monitor
465
- * Fixed an issue with the AMP plugin printing the Schema Markup twice
466
- * Fixed a problem with emojis not displaying in the Meta description settings in the plugin's settings page
 
 
 
467
 
468
  Full changelog can be found here - **[Rank Math SEO changelog](https://rankmath.com/changelog)**
5
  Tested up to: 5.2.1
6
  Requires at least: 4.6.0
7
  Requires PHP: 5.6
8
+ Stable tag: 1.0.27
9
  License: GPL-2.0+
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.txt
11
 
451
 
452
  == Changelog ==
453
 
454
+ = 1.0.27 [Jun 18, 2019] =
455
+ * Added a filter to [show Meta Keywords tag](https://s.rankmath.com/keywordmetatag) to the Search Engines like Yandex
456
+ * Added some important security fixes
457
+ * Added more improvements to how the SEO Analyzer works inside the plugin
458
+ * Enhanced the output of the Rich Snippet's Shortcode showing the formatted date
459
+ * Improved the comments to make them more meaningful
460
+ * Fixed an issue with the Breadcrumbs not showing the primary category on the product pages
461
+ * Fixed a compatibility issue with the Indexing API plugin and Rank Math
462
+ * Fixed an issue where product categories were showing 404 when Remove Category Base option was enabled
463
+ * Fixed the problem with the categories date variables not working correctly in the settings fields
464
+ * Fixed a conflict with Woocommerce One Page checkout plugin
465
+ * Fixed an issue where the feeds were not updating when the WooCommerce module was activated
466
+ * Fixed a compatibility issue with the Ultra theme, not showing the text editor
467
+ * Fixed an issue where the Search Console Box was appearing for all the users in the dashboard
468
+ * Fixed a problem in the SEO Analysis where missing 'Focus Keyword in Title' test wasn't working as intended
469
+ * Prepared the plugin for upcoming updates related to Gutenberg's compatibility
470
 
471
  Full changelog can be found here - **[Rank Math SEO changelog](https://rankmath.com/changelog)**