Version Description
This update adds major improvements and bugfixes.
Download this release
Release Info
Developer | benjaminprojas |
Plugin | All in One SEO Pack |
Version | 4.1.4.5 |
Comparing to | |
See all releases |
Code changes from version 4.1.3.4 to 4.1.4.5
- all_in_one_seo_pack.php +3 -3
- app/AIOSEO.php +15 -4
- app/Common/Admin/Admin.php +87 -42
- app/Common/Admin/Notices/Import.php +1 -16
- app/Common/Admin/PostSettings.php +35 -5
- app/Common/Admin/SiteHealth.php +12 -12
- app/Common/Api/Migration.php +4 -4
- app/Common/Api/PostsTerms.php +32 -8
- app/Common/Api/Settings.php +64 -15
- app/Common/Api/Sitemaps.php +3 -3
- app/Common/Api/Tools.php +8 -0
- app/Common/Api/Wizard.php +70 -66
- app/Common/HeadlineAnalyzer/HeadlineAnalyzer.php +2 -1
- app/Common/ImportExport/Helpers.php +3 -3
- app/Common/ImportExport/ImportExport.php +43 -0
- app/Common/ImportExport/RankMath/GeneralSettings.php +2 -2
- app/Common/ImportExport/RankMath/TitleMeta.php +15 -15
- app/Common/ImportExport/SeoPress/Analytics.php +34 -0
- app/Common/ImportExport/SeoPress/Breadcrumbs.php +57 -0
- app/Common/ImportExport/SeoPress/GeneralSettings.php +130 -0
- app/Common/ImportExport/SeoPress/Helpers.php +88 -9
- app/Common/ImportExport/SeoPress/PostMeta.php +174 -0
- app/Common/ImportExport/SeoPress/RobotsTxt.php +50 -0
- app/Common/ImportExport/SeoPress/Rss.php +47 -0
- app/Common/ImportExport/SeoPress/SearchAppearance.php +0 -46
- app/Common/ImportExport/SeoPress/SeoPress.php +57 -11
- app/Common/ImportExport/SeoPress/Sitemap.php +74 -0
- app/Common/ImportExport/SeoPress/SocialMeta.php +130 -0
- app/Common/ImportExport/SeoPress/Titles.php +288 -0
- app/Common/ImportExport/YoastSeo/GeneralSettings.php +0 -19
- app/Common/ImportExport/YoastSeo/PostMeta.php +47 -7
- app/Common/ImportExport/YoastSeo/SearchAppearance.php +18 -18
- app/Common/ImportExport/YoastSeo/SocialMeta.php +61 -0
- app/Common/ImportExport/YoastSeo/UserMeta.php +68 -0
- app/Common/ImportExport/YoastSeo/YoastSeo.php +12 -0
- app/Common/Main/Activate.php +10 -0
- app/Common/Main/Filters.php +63 -5
- app/Common/Main/Media.php +2 -2
- app/Common/Main/Updates.php +147 -1
- app/Common/Meta/Description.php +9 -9
- app/Common/Meta/Helpers.php +18 -1
- app/Common/Meta/Keywords.php +6 -6
- app/Common/Meta/Robots.php +38 -27
- app/Common/Meta/Title.php +10 -10
- app/Common/Migration/GeneralSettings.php +26 -26
- app/Common/Migration/Helpers.php +3 -3
- app/Common/Migration/Meta.php +18 -2
- app/Common/Migration/Sitemap.php +10 -7
- app/Common/Migration/SocialMeta.php +3 -3
- app/Common/Models/Model.php +3 -115
- app/Common/Models/Post.php +26 -6
- app/Common/Options/Cache.php +93 -0
- app/Common/{Utils → Options}/DynamicBackup.php +49 -48
- app/Common/Options/DynamicOptions.php +387 -0
- app/Common/{Utils → Options}/InternalOptions.php +14 -12
- app/Common/{Utils → Options}/Options.php +67 -336
- app/Common/Schema/Graphs/Article.php +1 -0
- app/Common/Schema/Graphs/BreadcrumbList.php +2 -2
- app/Common/Schema/Graphs/Graph.php +21 -4
- app/Common/Schema/Graphs/WebPage.php +1 -1
- app/Common/Schema/Graphs/WebSite.php +5 -1
- app/Common/Schema/Schema.php +7 -7
- app/Common/Sitemap/Content.php +8 -6
- app/Common/Sitemap/Helpers.php +6 -20
- app/Common/Sitemap/Html/Sitemap.php +0 -6
- app/Common/Sitemap/Image.php +5 -0
- app/Common/Sitemap/Priority.php +9 -4
- app/Common/Sitemap/Query.php +66 -49
- app/Common/Sitemap/Root.php +3 -3
- app/Common/Social/Facebook.php +209 -7
- app/Common/Social/Helpers.php +0 -55
- app/Common/Social/Output.php +1 -0
- app/Common/Social/Social.php +0 -1
- app/Common/Social/Twitter.php +17 -2
- app/Common/Tools/Htaccess.php +2 -1
- app/Common/Tools/RobotsTxt.php +16 -4
- app/Common/Traits/Helpers/ActionScheduler.php +12 -0
- app/Common/Traits/Helpers/Arrays.php +85 -0
- app/Common/Traits/Helpers/Constants.php +15 -1
- app/Common/Traits/Helpers/DateTime.php +37 -0
- app/Common/Traits/Helpers/ECommerce.php +0 -109
- app/Common/Traits/Helpers/Language.php +40 -0
- app/Common/Traits/Helpers/Strings.php +122 -1
- app/Common/Traits/Helpers/Svg.php +51 -0
- app/Common/Traits/Helpers/ThirdParty.php +338 -0
- app/Common/Traits/Helpers/Vue.php +367 -0
- app/Common/Traits/Helpers/Wp.php +549 -0
- app/Common/Traits/Helpers/WpContext.php +489 -0
- app/Common/Traits/Helpers/WpUri.php +306 -0
- app/Common/Traits/Options.php +184 -68
- app/Common/Utils/Database.php +3 -2
- app/Common/Utils/Helpers.php +88 -2133
- app/Common/Utils/VueSettings.php +2 -0
- app/Common/Views/main/meta.php +2 -2
- app/Common/Views/sitemap/html/widget-options.php +2 -2
- app/Lite/Admin/Connect.php +32 -0
- app/Lite/Options/InternalOptions.php +42 -0
- app/Lite/Options/Options.php +34 -0
- app/Lite/Traits/Options.php +98 -0
- app/Lite/Utils/InternalOptions.php +0 -102
- app/Lite/Utils/Options.php +0 -107
- dist/Lite/assets/css/aioseo-admin-bar.css +1 -1
- dist/Lite/assets/css/aioseo-admin-bar.css.gz +0 -0
- dist/Lite/assets/css/chunk-common.css +1 -1
- dist/Lite/assets/css/chunk-common.rtl.css +1 -1
- dist/Lite/assets/css/headline-analyzer.css +1 -1
- dist/Lite/assets/css/headline-analyzer.css.gz +0 -0
- dist/Lite/assets/css/local-seo-Maps-vue.css +1 -0
- dist/Lite/assets/css/local-seo-Maps-vue.rtl.css +1 -0
- dist/Lite/assets/css/local-seo-lite-Maps-vue.css +1 -0
- dist/Lite/assets/css/local-seo-lite-Maps-vue.rtl.css +1 -0
- dist/Lite/assets/css/local-seo-pro-Maps-vue.css +1 -0
- dist/Lite/assets/css/local-seo-pro-Maps-vue.rtl.css +1 -0
- dist/Lite/assets/css/post-settings.css +1 -1
- dist/Lite/assets/css/post-settings.rtl.css +1 -1
all_in_one_seo_pack.php
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
Â
/**
|
3 |
Â
* Plugin Name: All in One SEO
|
4 |
Â
* Plugin URI: https://aioseo.com/
|
5 |
-
* Description: SEO for WordPress. Features like XML Sitemaps, SEO for custom post types, SEO for blogs, business sites, ecommerce sites, and much more. More than
|
6 |
Â
* Author: All in One SEO Team
|
7 |
Â
* Author URI: https://aioseo.com/
|
8 |
-
* Version: 4.1.
|
9 |
Â
* Text Domain: all-in-one-seo-pack
|
10 |
Â
* Domain Path: /i18n/
|
11 |
Â
*
|
@@ -84,4 +84,4 @@ if ( version_compare( PHP_VERSION, '5.5', '<' ) ) {
|
|
84 |
Â
// Define the class and the function.
|
85 |
Â
require_once( dirname( __FILE__ ) . '/app/AIOSEO.php' );
|
86 |
Â
|
87 |
-
aioseo();
|
2 |
Â
/**
|
3 |
Â
* Plugin Name: All in One SEO
|
4 |
Â
* Plugin URI: https://aioseo.com/
|
5 |
+
* Description: SEO for WordPress. Features like XML Sitemaps, SEO for custom post types, SEO for blogs, business sites, ecommerce sites, and much more. More than 80 million downloads since 2007.
|
6 |
Â
* Author: All in One SEO Team
|
7 |
Â
* Author URI: https://aioseo.com/
|
8 |
+
* Version: 4.1.4.5
|
9 |
Â
* Text Domain: all-in-one-seo-pack
|
10 |
Â
* Domain Path: /i18n/
|
11 |
Â
*
|
84 |
Â
// Define the class and the function.
|
85 |
Â
require_once( dirname( __FILE__ ) . '/app/AIOSEO.php' );
|
86 |
Â
|
87 |
+
aioseo();
|
app/AIOSEO.php
CHANGED
@@ -57,6 +57,15 @@ namespace AIOSEO\Plugin {
|
|
57 |
Â
*/
|
58 |
Â
public $options = [];
|
59 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
60 |
Â
/**
|
61 |
Â
* The WordPress filters to run.
|
62 |
Â
*
|
@@ -275,9 +284,11 @@ namespace AIOSEO\Plugin {
|
|
275 |
Â
$this->badBotBlocker = new Common\Tools\BadBotBlocker();
|
276 |
Â
$this->headlineAnalyzer = new Common\HeadlineAnalyzer\HeadlineAnalyzer();
|
277 |
Â
$this->breadcrumbs = $this->pro ? new Pro\Breadcrumbs\Breadcrumbs() : new Common\Breadcrumbs\Breadcrumbs();
|
278 |
-
$this->dynamicBackup = $this->pro ? new Pro\
|
279 |
-
$this->
|
280 |
-
$this->
|
Â
|
|
Â
|
|
281 |
Â
$this->backup = new Common\Utils\Backup();
|
282 |
Â
$this->access = $this->pro ? new Pro\Utils\Access() : new Common\Utils\Access();
|
283 |
Â
$this->usage = $this->pro ? new Pro\Admin\Usage() : new Lite\Admin\Usage();
|
@@ -335,7 +346,7 @@ namespace AIOSEO\Plugin {
|
|
335 |
Â
$this->badBotBlocker->init();
|
336 |
Â
|
337 |
Â
// We call this again to reset any post types/taxonomies that have not yet been set up.
|
338 |
-
$this->
|
339 |
Â
}
|
340 |
Â
|
341 |
Â
/**
|
57 |
Â
*/
|
58 |
Â
public $options = [];
|
59 |
Â
|
60 |
+
/**
|
61 |
+
* The AIOSEO dynamic options.
|
62 |
+
*
|
63 |
+
* @since 4.1.4
|
64 |
+
*
|
65 |
+
* @var array
|
66 |
+
*/
|
67 |
+
public $dynamicOptions = [];
|
68 |
+
|
69 |
Â
/**
|
70 |
Â
* The WordPress filters to run.
|
71 |
Â
*
|
284 |
Â
$this->badBotBlocker = new Common\Tools\BadBotBlocker();
|
285 |
Â
$this->headlineAnalyzer = new Common\HeadlineAnalyzer\HeadlineAnalyzer();
|
286 |
Â
$this->breadcrumbs = $this->pro ? new Pro\Breadcrumbs\Breadcrumbs() : new Common\Breadcrumbs\Breadcrumbs();
|
287 |
+
$this->dynamicBackup = $this->pro ? new Pro\Options\DynamicBackup() : new Common\Options\DynamicBackup();
|
288 |
+
$this->optionsCache = new Common\Options\Cache();
|
289 |
+
$this->internalOptions = $this->pro ? new Pro\Options\InternalOptions() : new Lite\Options\InternalOptions();
|
290 |
+
$this->options = $this->pro ? new Pro\Options\Options() : new Lite\Options\Options();
|
291 |
+
$this->dynamicOptions = $this->pro ? new Pro\Options\DynamicOptions() : new Common\Options\DynamicOptions();
|
292 |
Â
$this->backup = new Common\Utils\Backup();
|
293 |
Â
$this->access = $this->pro ? new Pro\Utils\Access() : new Common\Utils\Access();
|
294 |
Â
$this->usage = $this->pro ? new Pro\Admin\Usage() : new Lite\Admin\Usage();
|
346 |
Â
$this->badBotBlocker->init();
|
347 |
Â
|
348 |
Â
// We call this again to reset any post types/taxonomies that have not yet been set up.
|
349 |
+
$this->dynamicOptions->refresh();
|
350 |
Â
}
|
351 |
Â
|
352 |
Â
/**
|
app/Common/Admin/Admin.php
CHANGED
@@ -72,6 +72,59 @@ class Admin {
|
|
72 |
Â
return;
|
73 |
Â
}
|
74 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
75 |
Â
$this->pages = [
|
76 |
Â
$this->pageSlug => [
|
77 |
Â
'menu_title' => esc_html__( 'Dashboard', 'all-in-one-seo-pack' ),
|
@@ -126,46 +179,6 @@ class Admin {
|
|
126 |
Â
'parent' => $this->pageSlug
|
127 |
Â
]
|
128 |
Â
];
|
129 |
-
|
130 |
-
add_action( 'sanitize_comment_cookies', [ $this, 'init' ], 20 );
|
131 |
-
|
132 |
-
$this->setupWizard = new SetupWizard();
|
133 |
-
}
|
134 |
-
|
135 |
-
/**
|
136 |
-
* Initialize the admin.
|
137 |
-
*
|
138 |
-
* @since 4.0.0
|
139 |
-
*
|
140 |
-
* @return void
|
141 |
-
*/
|
142 |
-
public function init() {
|
143 |
-
// Add the admin bar menu.
|
144 |
-
if ( is_user_logged_in() && ( ! is_multisite() || ! is_network_admin() ) ) {
|
145 |
-
add_action( 'admin_bar_menu', [ $this, 'adminBarMenu' ], 1000 );
|
146 |
-
}
|
147 |
-
|
148 |
-
if ( is_admin() ) {
|
149 |
-
// Add the menu to the sidebar.
|
150 |
-
add_action( 'admin_menu', [ $this, 'addMenu' ] );
|
151 |
-
add_action( 'admin_menu', [ $this, 'hideScheduledActionsMenu' ], 99999 );
|
152 |
-
if ( is_multisite() ) {
|
153 |
-
add_action( 'network_admin_menu', [ $this, 'addRobotsMenu' ] );
|
154 |
-
}
|
155 |
-
|
156 |
-
// Add the columns to page/posts.
|
157 |
-
add_action( 'current_screen', [ $this, 'addPostColumns' ], 1 );
|
158 |
-
|
159 |
-
// Add Score to Publish metabox.
|
160 |
-
add_action( 'post_submitbox_misc_actions', [ $this, 'addPublishScore' ] );
|
161 |
-
|
162 |
-
add_action( 'admin_init', [ $this, 'addPluginScripts' ] );
|
163 |
-
|
164 |
-
// Add redirects messages to trashed posts.
|
165 |
-
add_filter( 'bulk_post_updated_messages', [ $this, 'appendTrashedMessage' ], 10, 2 );
|
166 |
-
|
167 |
-
$this->registerLinkFormatHooks();
|
168 |
-
}
|
169 |
Â
}
|
170 |
Â
|
171 |
Â
/**
|
@@ -1108,7 +1121,7 @@ class Admin {
|
|
1108 |
Â
$postTypes = aioseo()->helpers->getPublicPostTypes();
|
1109 |
Â
$showTruSeo = aioseo()->options->advanced->truSeo;
|
1110 |
Â
$isSpecialPage = aioseo()->helpers->isSpecialPage( $post->ID );
|
1111 |
-
$showMetabox = aioseo()->
|
1112 |
Â
|
1113 |
Â
$postTypesMB = [];
|
1114 |
Â
foreach ( $postTypes as $pt ) {
|
@@ -1142,7 +1155,7 @@ class Admin {
|
|
1142 |
Â
echo sprintf( esc_html__( '%1$s Score', 'all-in-one-seo-pack' ), esc_html( AIOSEO_PLUGIN_SHORT_NAME ) );
|
1143 |
Â
?>
|
1144 |
Â
</span>
|
1145 |
-
<div id="aioseo-post-settings-sidebar-button" class="aioseo-score-button classic-editor <?php echo esc_attr(
|
1146 |
Â
<span id="aioseo-post-score"><?php echo esc_attr( $score . '/100' ); ?></span>
|
1147 |
Â
</div>
|
1148 |
Â
</div>
|
@@ -1378,4 +1391,36 @@ class Admin {
|
|
1378 |
Â
$messages['page']['trashed'] = $messages['page']['trashed'] . ' <a href="' . $url . '">' . $addRedirect . '</a> |';
|
1379 |
Â
return $messages;
|
1380 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
1381 |
Â
}
|
72 |
Â
return;
|
73 |
Â
}
|
74 |
Â
|
75 |
+
add_action( 'sanitize_comment_cookies', [ $this, 'init' ], 20 );
|
76 |
+
|
77 |
+
$this->setupWizard = new SetupWizard();
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Initialize the admin.
|
82 |
+
*
|
83 |
+
* @since 4.0.0
|
84 |
+
*
|
85 |
+
* @return void
|
86 |
+
*/
|
87 |
+
public function init() {
|
88 |
+
// Add the admin bar menu.
|
89 |
+
if ( is_user_logged_in() && ( ! is_multisite() || ! is_network_admin() ) ) {
|
90 |
+
add_action( 'admin_bar_menu', [ $this, 'adminBarMenu' ], 1000 );
|
91 |
+
}
|
92 |
+
|
93 |
+
if ( is_admin() ) {
|
94 |
+
// Add the menu to the sidebar.
|
95 |
+
add_action( 'admin_menu', [ $this, 'addMenu' ] );
|
96 |
+
add_action( 'admin_menu', [ $this, 'hideScheduledActionsMenu' ], 99999 );
|
97 |
+
if ( is_multisite() ) {
|
98 |
+
add_action( 'network_admin_menu', [ $this, 'addRobotsMenu' ] );
|
99 |
+
}
|
100 |
+
|
101 |
+
// Add the columns to page/posts.
|
102 |
+
add_action( 'current_screen', [ $this, 'addPostColumns' ], 1 );
|
103 |
+
|
104 |
+
// Add Score to Publish metabox.
|
105 |
+
add_action( 'post_submitbox_misc_actions', [ $this, 'addPublishScore' ] );
|
106 |
+
|
107 |
+
add_action( 'admin_init', [ $this, 'addPluginScripts' ] );
|
108 |
+
|
109 |
+
// Add redirects messages to trashed posts.
|
110 |
+
add_filter( 'bulk_post_updated_messages', [ $this, 'appendTrashedMessage' ], 10, 2 );
|
111 |
+
|
112 |
+
$this->registerLinkFormatHooks();
|
113 |
+
}
|
114 |
+
|
115 |
+
$this->loadTextDomain();
|
116 |
+
$this->setPages();
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Sets our menu pages.
|
121 |
+
* It is important this runs AFTER we've loaded the text domain.
|
122 |
+
*
|
123 |
+
* @since 4.1.4
|
124 |
+
*
|
125 |
+
* @return void
|
126 |
+
*/
|
127 |
+
private function setPages() {
|
128 |
Â
$this->pages = [
|
129 |
Â
$this->pageSlug => [
|
130 |
Â
'menu_title' => esc_html__( 'Dashboard', 'all-in-one-seo-pack' ),
|
179 |
Â
'parent' => $this->pageSlug
|
180 |
Â
]
|
181 |
Â
];
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
182 |
Â
}
|
183 |
Â
|
184 |
Â
/**
|
1121 |
Â
$postTypes = aioseo()->helpers->getPublicPostTypes();
|
1122 |
Â
$showTruSeo = aioseo()->options->advanced->truSeo;
|
1123 |
Â
$isSpecialPage = aioseo()->helpers->isSpecialPage( $post->ID );
|
1124 |
+
$showMetabox = aioseo()->dynamicOptions->searchAppearance->postTypes->{$post->post_type}->advanced->showMetaBox;
|
1125 |
Â
|
1126 |
Â
$postTypesMB = [];
|
1127 |
Â
foreach ( $postTypes as $pt ) {
|
1155 |
Â
echo sprintf( esc_html__( '%1$s Score', 'all-in-one-seo-pack' ), esc_html( AIOSEO_PLUGIN_SHORT_NAME ) );
|
1156 |
Â
?>
|
1157 |
Â
</span>
|
1158 |
+
<div id="aioseo-post-settings-sidebar-button" class="aioseo-score-button classic-editor <?php echo esc_attr( $this->getScoreClass( $score ) ); ?>">
|
1159 |
Â
<span id="aioseo-post-score"><?php echo esc_attr( $score . '/100' ); ?></span>
|
1160 |
Â
</div>
|
1161 |
Â
</div>
|
1391 |
Â
$messages['page']['trashed'] = $messages['page']['trashed'] . ' <a href="' . $url . '">' . $addRedirect . '</a> |';
|
1392 |
Â
return $messages;
|
1393 |
Â
}
|
1394 |
+
|
1395 |
+
/**
|
1396 |
+
* Get the class name for the Score button.
|
1397 |
+
* Depending on the score the button should have different color.
|
1398 |
+
*
|
1399 |
+
* @since 4.0.0
|
1400 |
+
*
|
1401 |
+
* @param int $score The content to retrieve from the remote URL.
|
1402 |
+
*
|
1403 |
+
* @return string The class name for Score button.
|
1404 |
+
*/
|
1405 |
+
private function getScoreClass( $score ) {
|
1406 |
+
$scoreClass = 50 < $score ? 'score-orange' : 'score-red';
|
1407 |
+
if ( 0 === $score ) {
|
1408 |
+
$scoreClass = 'score-none';
|
1409 |
+
}
|
1410 |
+
if ( $score >= 80 ) {
|
1411 |
+
$scoreClass = 'score-green';
|
1412 |
+
}
|
1413 |
+
return $scoreClass;
|
1414 |
+
}
|
1415 |
+
|
1416 |
+
/**
|
1417 |
+
* Loads the plugin text domain.
|
1418 |
+
*
|
1419 |
+
* @since 4.1.4
|
1420 |
+
*
|
1421 |
+
* @return void
|
1422 |
+
*/
|
1423 |
+
public function loadTextDomain() {
|
1424 |
+
aioseo()->helpers->loadTextDomain( 'all-in-one-seo-pack' );
|
1425 |
+
}
|
1426 |
Â
}
|
app/Common/Admin/Notices/Import.php
CHANGED
@@ -20,22 +20,7 @@ class Import {
|
|
20 |
Â
* @return void
|
21 |
Â
*/
|
22 |
Â
public function maybeShowNotice() {
|
23 |
-
|
24 |
-
->start( 'options' )
|
25 |
-
->select( 'option_name as name' )
|
26 |
-
->whereRaw( "`option_name` LIKE '_aioseo_cache_%'" )
|
27 |
-
->run()
|
28 |
-
->result();
|
29 |
-
|
30 |
-
$foundImportTransient = false;
|
31 |
-
foreach ( $transients as $transient ) {
|
32 |
-
if ( preg_match( '#import_.*_meta_.*#', $transient->name ) ) {
|
33 |
-
$foundImportTransient = true;
|
34 |
-
break;
|
35 |
-
}
|
36 |
-
}
|
37 |
-
|
38 |
-
if ( ! $foundImportTransient ) {
|
39 |
Â
return;
|
40 |
Â
}
|
41 |
Â
|
20 |
Â
* @return void
|
21 |
Â
*/
|
22 |
Â
public function maybeShowNotice() {
|
23 |
+
if ( ! aioseo()->importExport->isImportRunning() ) {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
24 |
Â
return;
|
25 |
Â
}
|
26 |
Â
|
app/Common/Admin/PostSettings.php
CHANGED
@@ -71,6 +71,10 @@ class PostSettings {
|
|
71 |
Â
aioseo()->helpers->getVueData( $page )
|
72 |
Â
);
|
73 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
74 |
Â
$rtl = is_rtl() ? '.rtl' : '';
|
75 |
Â
aioseo()->helpers->enqueueStyle(
|
76 |
Â
'aioseo-post-settings-metabox',
|
@@ -84,6 +88,26 @@ class PostSettings {
|
|
84 |
Â
}
|
85 |
Â
}
|
86 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
87 |
Â
/**
|
88 |
Â
* Adds a meta box to page/posts screens.
|
89 |
Â
*
|
@@ -92,9 +116,9 @@ class PostSettings {
|
|
92 |
Â
* @return void
|
93 |
Â
*/
|
94 |
Â
public function addPostSettingsMetabox() {
|
95 |
-
$
|
96 |
-
$screen
|
97 |
-
$postType
|
98 |
Â
|
99 |
Â
$pageAnalysisSettingsCapability = aioseo()->access->hasCapability( 'aioseo_page_analysis' );
|
100 |
Â
$generalSettingsCapability = aioseo()->access->hasCapability( 'aioseo_page_general_settings' );
|
@@ -103,8 +127,8 @@ class PostSettings {
|
|
103 |
Â
$advancedSettingsCapability = aioseo()->access->hasCapability( 'aioseo_page_advanced_settings' );
|
104 |
Â
|
105 |
Â
if (
|
106 |
-
$
|
107 |
-
$
|
108 |
Â
! (
|
109 |
Â
empty( $pageAnalysisSettingsCapability ) &&
|
110 |
Â
empty( $generalSettingsCapability ) &&
|
@@ -195,6 +219,12 @@ class PostSettings {
|
|
195 |
Â
|
196 |
Â
$currentPost = json_decode( stripslashes( $_POST['aioseo-post-settings'] ), true ); // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
197 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
198 |
Â
Models\Post::savePost( $postId, $currentPost );
|
199 |
Â
|
200 |
Â
}
|
71 |
Â
aioseo()->helpers->getVueData( $page )
|
72 |
Â
);
|
73 |
Â
|
74 |
+
if ( 'post' === $page ) {
|
75 |
+
$this->enqueuePublishPanelAssets();
|
76 |
+
}
|
77 |
+
|
78 |
Â
$rtl = is_rtl() ? '.rtl' : '';
|
79 |
Â
aioseo()->helpers->enqueueStyle(
|
80 |
Â
'aioseo-post-settings-metabox',
|
88 |
Â
}
|
89 |
Â
}
|
90 |
Â
|
91 |
+
/**
|
92 |
+
* Enqueues the JS/CSS for the Block Editor integrations.
|
93 |
+
*
|
94 |
+
* @since 4.1.4
|
95 |
+
*
|
96 |
+
* @return void
|
97 |
+
*/
|
98 |
+
private function enqueuePublishPanelAssets() {
|
99 |
+
aioseo()->helpers->enqueueScript(
|
100 |
+
'aioseo-publish-panel',
|
101 |
+
'js/publish-panel.js'
|
102 |
+
);
|
103 |
+
|
104 |
+
$rtl = is_rtl() ? '.rtl' : '';
|
105 |
+
aioseo()->helpers->enqueueStyle(
|
106 |
+
'aioseo-publish-panel',
|
107 |
+
"css/publish-panel$rtl.css"
|
108 |
+
);
|
109 |
+
}
|
110 |
+
|
111 |
Â
/**
|
112 |
Â
* Adds a meta box to page/posts screens.
|
113 |
Â
*
|
116 |
Â
* @return void
|
117 |
Â
*/
|
118 |
Â
public function addPostSettingsMetabox() {
|
119 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
120 |
+
$screen = get_current_screen();
|
121 |
+
$postType = $screen->post_type;
|
122 |
Â
|
123 |
Â
$pageAnalysisSettingsCapability = aioseo()->access->hasCapability( 'aioseo_page_analysis' );
|
124 |
Â
$generalSettingsCapability = aioseo()->access->hasCapability( 'aioseo_page_general_settings' );
|
127 |
Â
$advancedSettingsCapability = aioseo()->access->hasCapability( 'aioseo_page_advanced_settings' );
|
128 |
Â
|
129 |
Â
if (
|
130 |
+
$dynamicOptions->searchAppearance->postTypes->has( $postType ) &&
|
131 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->advanced->showMetaBox &&
|
132 |
Â
! (
|
133 |
Â
empty( $pageAnalysisSettingsCapability ) &&
|
134 |
Â
empty( $generalSettingsCapability ) &&
|
219 |
Â
|
220 |
Â
$currentPost = json_decode( stripslashes( $_POST['aioseo-post-settings'] ), true ); // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
221 |
Â
|
222 |
+
// If there is no data, there likely was an error, e.g. if the hidden field wasn't populated on load and the user saved the post without making changes in the metabox - #2254
|
223 |
+
// In that case we should return to prevent a complete reset of the data.
|
224 |
+
if ( empty( $currentPost ) ) {
|
225 |
+
return;
|
226 |
+
}
|
227 |
+
|
228 |
Â
Models\Post::savePost( $postId, $currentPost );
|
229 |
Â
|
230 |
Â
}
|
app/Common/Admin/SiteHealth.php
CHANGED
@@ -335,9 +335,9 @@ class SiteHealth {
|
|
335 |
Â
|
336 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes() as $postType ) {
|
337 |
Â
if (
|
338 |
-
aioseo()->
|
339 |
-
! aioseo()->
|
340 |
-
aioseo()->
|
341 |
Â
) {
|
342 |
Â
$noindexed[] = $postType['label'] . ' (' . $postType['name'] . ')';
|
343 |
Â
}
|
@@ -345,9 +345,9 @@ class SiteHealth {
|
|
345 |
Â
|
346 |
Â
foreach ( aioseo()->helpers->getPublicTaxonomies() as $taxonomy ) {
|
347 |
Â
if (
|
348 |
-
aioseo()->
|
349 |
-
! aioseo()->
|
350 |
-
aioseo()->
|
351 |
Â
) {
|
352 |
Â
$noindexed[] = $taxonomy['label'] . ' (' . $taxonomy['name'] . ')';
|
353 |
Â
}
|
@@ -401,9 +401,9 @@ class SiteHealth {
|
|
401 |
Â
|
402 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes() as $postType ) {
|
403 |
Â
if (
|
404 |
-
aioseo()->
|
405 |
-
! aioseo()->
|
406 |
-
aioseo()->
|
407 |
Â
) {
|
408 |
Â
$nofollowed[] = $postType['label'] . ' (' . $postType['name'] . ')';
|
409 |
Â
}
|
@@ -411,9 +411,9 @@ class SiteHealth {
|
|
411 |
Â
|
412 |
Â
foreach ( aioseo()->helpers->getPublicTaxonomies() as $taxonomy ) {
|
413 |
Â
if (
|
414 |
-
aioseo()->
|
415 |
-
! aioseo()->
|
416 |
-
aioseo()->
|
417 |
Â
) {
|
418 |
Â
$nofollowed[] = $taxonomy['label'] . ' (' . $taxonomy['name'] . ')';
|
419 |
Â
}
|
335 |
Â
|
336 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes() as $postType ) {
|
337 |
Â
if (
|
338 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->has( $postType['name'] ) &&
|
339 |
+
! aioseo()->dynamicOptions->searchAppearance->postTypes->{ $postType['name'] }->advanced->robotsMeta->default &&
|
340 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->{ $postType['name'] }->advanced->robotsMeta->noindex
|
341 |
Â
) {
|
342 |
Â
$noindexed[] = $postType['label'] . ' (' . $postType['name'] . ')';
|
343 |
Â
}
|
345 |
Â
|
346 |
Â
foreach ( aioseo()->helpers->getPublicTaxonomies() as $taxonomy ) {
|
347 |
Â
if (
|
348 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->has( $taxonomy['name'] ) &&
|
349 |
+
! aioseo()->dynamicOptions->searchAppearance->taxonomies->{ $taxonomy['name'] }->advanced->robotsMeta->default &&
|
350 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->{ $taxonomy['name'] }->advanced->robotsMeta->noindex
|
351 |
Â
) {
|
352 |
Â
$noindexed[] = $taxonomy['label'] . ' (' . $taxonomy['name'] . ')';
|
353 |
Â
}
|
401 |
Â
|
402 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes() as $postType ) {
|
403 |
Â
if (
|
404 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->has( $postType['name'] ) &&
|
405 |
+
! aioseo()->dynamicOptions->searchAppearance->postTypes->{ $postType['name'] }->advanced->robotsMeta->default &&
|
406 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->{ $postType['name'] }->advanced->robotsMeta->nofollow
|
407 |
Â
) {
|
408 |
Â
$nofollowed[] = $postType['label'] . ' (' . $postType['name'] . ')';
|
409 |
Â
}
|
411 |
Â
|
412 |
Â
foreach ( aioseo()->helpers->getPublicTaxonomies() as $taxonomy ) {
|
413 |
Â
if (
|
414 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->has( $taxonomy['name'] ) &&
|
415 |
+
! aioseo()->dynamicOptions->searchAppearance->taxonomies->{ $taxonomy['name'] }->advanced->robotsMeta->default &&
|
416 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->{ $taxonomy['name'] }->advanced->robotsMeta->nofollow
|
417 |
Â
) {
|
418 |
Â
$nofollowed[] = $taxonomy['label'] . ' (' . $taxonomy['name'] . ')';
|
419 |
Â
}
|
app/Common/Api/Migration.php
CHANGED
@@ -39,13 +39,13 @@ class Migration {
|
|
39 |
Â
}
|
40 |
Â
|
41 |
Â
$objectName = $match[1];
|
42 |
-
if ( in_array( $objectName, $postTypes, true ) && aioseo()->
|
43 |
-
aioseo()->
|
44 |
Â
continue;
|
45 |
Â
}
|
46 |
Â
|
47 |
-
if ( in_array( $objectName, $taxonomies, true ) && aioseo()->
|
48 |
-
aioseo()->
|
49 |
Â
}
|
50 |
Â
}
|
51 |
Â
|
39 |
Â
}
|
40 |
Â
|
41 |
Â
$objectName = $match[1];
|
42 |
+
if ( in_array( $objectName, $postTypes, true ) && aioseo()->dynamicOptions->searchAppearance->postTypes->has( $objectName ) ) {
|
43 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$objectName->title = '#post_title #separator_sa #site_title';
|
44 |
Â
continue;
|
45 |
Â
}
|
46 |
Â
|
47 |
+
if ( in_array( $objectName, $taxonomies, true ) && aioseo()->dynamicOptions->searchAppearance->taxonomies->has( $objectName ) ) {
|
48 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$objectName->title = '#taxonomy_title #separator_sa #site_title';
|
49 |
Â
}
|
50 |
Â
}
|
51 |
Â
|
app/Common/Api/PostsTerms.php
CHANGED
@@ -40,14 +40,14 @@ class PostsTerms {
|
|
40 |
Â
|
41 |
Â
$searchQuery = esc_sql( aioseo()->db->db->esc_like( $body['query'] ) );
|
42 |
Â
|
43 |
-
$objects
|
44 |
-
$
|
45 |
Â
if ( 'posts' === $body['type'] ) {
|
46 |
Â
|
47 |
Â
$postTypes = aioseo()->helpers->getPublicPostTypes( true );
|
48 |
Â
foreach ( $postTypes as $postType ) {
|
49 |
Â
// Check if post type isn't noindexed.
|
50 |
-
if ( $
|
51 |
Â
$postTypes = aioseo()->helpers->unsetValue( $postTypes, $postType );
|
52 |
Â
}
|
53 |
Â
}
|
@@ -68,7 +68,7 @@ class PostsTerms {
|
|
68 |
Â
$taxonomies = aioseo()->helpers->getPublicTaxonomies( true );
|
69 |
Â
foreach ( $taxonomies as $taxonomy ) {
|
70 |
Â
// Check if taxonomy isn't noindexed.
|
71 |
-
if ( $
|
72 |
Â
$taxonomies = aioseo()->helpers->unsetValue( $taxonomies, $taxonomy );
|
73 |
Â
}
|
74 |
Â
}
|
@@ -145,12 +145,35 @@ class PostsTerms {
|
|
145 |
Â
'postData' => [
|
146 |
Â
'parsedTitle' => aioseo()->tags->replaceTags( $thePost->title, $args['postId'] ),
|
147 |
Â
'parsedDescription' => aioseo()->tags->replaceTags( $thePost->description, $args['postId'] ),
|
148 |
-
'content' => aioseo()->helpers->doShortcodes(
|
149 |
Â
'slug' => get_post_field( 'post_name', $args['postId'] )
|
150 |
Â
]
|
151 |
Â
], 200 );
|
152 |
Â
}
|
153 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
154 |
Â
/**
|
155 |
Â
* Update post settings.
|
156 |
Â
*
|
@@ -181,12 +204,13 @@ class PostsTerms {
|
|
181 |
Â
$body['twitter_title'] = ! empty( $body['twitter_title'] ) ? sanitize_text_field( $body['twitter_title'] ) : null;
|
182 |
Â
$body['twitter_description'] = ! empty( $body['twitter_description'] ) ? sanitize_text_field( $body['twitter_description'] ) : null;
|
183 |
Â
|
184 |
-
|
Â
|
|
185 |
Â
|
186 |
-
if ( ! empty( $
|
187 |
Â
return new \WP_REST_Response( [
|
188 |
Â
'success' => false,
|
189 |
-
'message' => 'Failed update query: ' . $
|
190 |
Â
], 401 );
|
191 |
Â
}
|
192 |
Â
|
40 |
Â
|
41 |
Â
$searchQuery = esc_sql( aioseo()->db->db->esc_like( $body['query'] ) );
|
42 |
Â
|
43 |
+
$objects = [];
|
44 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
45 |
Â
if ( 'posts' === $body['type'] ) {
|
46 |
Â
|
47 |
Â
$postTypes = aioseo()->helpers->getPublicPostTypes( true );
|
48 |
Â
foreach ( $postTypes as $postType ) {
|
49 |
Â
// Check if post type isn't noindexed.
|
50 |
+
if ( $dynamicOptions->searchAppearance->postTypes->has( $postType ) && ! $dynamicOptions->searchAppearance->postTypes->$postType->show ) {
|
51 |
Â
$postTypes = aioseo()->helpers->unsetValue( $postTypes, $postType );
|
52 |
Â
}
|
53 |
Â
}
|
68 |
Â
$taxonomies = aioseo()->helpers->getPublicTaxonomies( true );
|
69 |
Â
foreach ( $taxonomies as $taxonomy ) {
|
70 |
Â
// Check if taxonomy isn't noindexed.
|
71 |
+
if ( $dynamicOptions->searchAppearance->taxonomies->has( $taxonomy ) && ! $dynamicOptions->searchAppearance->taxonomies->$taxonomy->show ) {
|
72 |
Â
$taxonomies = aioseo()->helpers->unsetValue( $taxonomies, $taxonomy );
|
73 |
Â
}
|
74 |
Â
}
|
145 |
Â
'postData' => [
|
146 |
Â
'parsedTitle' => aioseo()->tags->replaceTags( $thePost->title, $args['postId'] ),
|
147 |
Â
'parsedDescription' => aioseo()->tags->replaceTags( $thePost->description, $args['postId'] ),
|
148 |
+
'content' => aioseo()->helpers->doShortcodes( self::getAnalysisContent( $args['postId'] ) ),
|
149 |
Â
'slug' => get_post_field( 'post_name', $args['postId'] )
|
150 |
Â
]
|
151 |
Â
], 200 );
|
152 |
Â
}
|
153 |
Â
|
154 |
+
/**
|
155 |
+
* Returns the posts custom fields.
|
156 |
+
*
|
157 |
+
* @since 4.0.6
|
158 |
+
*
|
159 |
+
* @param WP_Post|int $post The post.
|
160 |
+
* @return string The custom field content.
|
161 |
+
*/
|
162 |
+
private static function getAnalysisContent( $post = null ) {
|
163 |
+
$post = ( $post && is_object( $post ) ) ? $post : aioseo()->helpers->getPost( $post );
|
164 |
+
$customFieldKeys = aioseo()->dynamicOptions->searchAppearance->postTypes->{$post->post_type}->customFields;
|
165 |
+
|
166 |
+
if ( empty( $customFieldKeys ) ) {
|
167 |
+
return get_post_field( 'post_content', $post->ID );
|
168 |
+
}
|
169 |
+
|
170 |
+
$customFieldKeys = explode( ' ', sanitize_text_field( $customFieldKeys ) );
|
171 |
+
$customFieldContent = aioseo()->helpers->getCustomFieldsContent( $post->ID, $customFieldKeys );
|
172 |
+
$analysisContent = $post->post_content . apply_filters( 'aioseo_analysis_content', $customFieldContent );
|
173 |
+
|
174 |
+
return sanitize_post_field( 'post_content', $analysisContent, $post->ID, 'display' );
|
175 |
+
}
|
176 |
+
|
177 |
Â
/**
|
178 |
Â
* Update post settings.
|
179 |
Â
*
|
204 |
Â
$body['twitter_title'] = ! empty( $body['twitter_title'] ) ? sanitize_text_field( $body['twitter_title'] ) : null;
|
205 |
Â
$body['twitter_description'] = ! empty( $body['twitter_description'] ) ? sanitize_text_field( $body['twitter_description'] ) : null;
|
206 |
Â
|
207 |
+
// @TODO: Refactor this as it's not the best way to look for errors.
|
208 |
+
$error = Models\Post::savePost( $postId, $body );
|
209 |
Â
|
210 |
+
if ( ! empty( $error ) ) {
|
211 |
Â
return new \WP_REST_Response( [
|
212 |
Â
'success' => false,
|
213 |
+
'message' => 'Failed update query: ' . $error
|
214 |
Â
], 401 );
|
215 |
Â
}
|
216 |
Â
|
app/Common/Api/Settings.php
CHANGED
@@ -116,9 +116,10 @@ class Settings {
|
|
116 |
Â
* @return \WP_REST_Response The response.
|
117 |
Â
*/
|
118 |
Â
public static function saveChanges( $request ) {
|
119 |
-
$body
|
120 |
-
$options
|
121 |
-
$
|
Â
|
|
122 |
Â
|
123 |
Â
// If this is the network admin, reset the options.
|
124 |
Â
if ( $network ) {
|
@@ -126,6 +127,7 @@ class Settings {
|
|
126 |
Â
}
|
127 |
Â
|
128 |
Â
aioseo()->options->sanitizeAndSave( $options );
|
Â
|
|
129 |
Â
|
130 |
Â
// Re-initialize notices.
|
131 |
Â
aioseo()->notices->init();
|
@@ -152,9 +154,9 @@ class Settings {
|
|
152 |
Â
$notAllowedOptions = aioseo()->access->getNotAllowedOptions();
|
153 |
Â
|
154 |
Â
foreach ( $settings as $setting ) {
|
155 |
-
$
|
156 |
Â
|
157 |
-
if ( in_array( $
|
158 |
Â
continue;
|
159 |
Â
}
|
160 |
Â
|
@@ -166,8 +168,11 @@ class Settings {
|
|
166 |
Â
aioseo()->options->deprecated->tools->blocker->reset();
|
167 |
Â
break;
|
168 |
Â
default:
|
169 |
-
if ( aioseo()->options->has( $
|
170 |
-
aioseo()->options->$
|
Â
|
|
Â
|
|
Â
|
|
171 |
Â
}
|
172 |
Â
}
|
173 |
Â
|
@@ -177,8 +182,7 @@ class Settings {
|
|
177 |
Â
}
|
178 |
Â
|
179 |
Â
return new \WP_REST_Response( [
|
180 |
-
'success' => true
|
181 |
-
'options' => aioseo()->options->all()
|
182 |
Â
], 200 );
|
183 |
Â
}
|
184 |
Â
|
@@ -211,6 +215,32 @@ class Settings {
|
|
211 |
Â
$contents['settings']['deprecated'] = array_diff_key( $contents['settings']['deprecated'], $notAllowedOptions );
|
212 |
Â
}
|
213 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
214 |
Â
aioseo()->options->sanitizeAndSave( $contents['settings'] );
|
215 |
Â
}
|
216 |
Â
|
@@ -266,15 +296,34 @@ class Settings {
|
|
266 |
Â
|
267 |
Â
if ( ! empty( $settings ) ) {
|
268 |
Â
$options = aioseo()->options->noConflict();
|
Â
|
|
269 |
Â
$notAllowedOptions = aioseo()->access->getNotAllowedOptions();
|
270 |
Â
foreach ( $settings as $setting ) {
|
271 |
-
|
272 |
-
$allSettings['settings'][ $setting ] = $options->$setting->all();
|
273 |
Â
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
278 |
Â
}
|
279 |
Â
}
|
280 |
Â
}
|
116 |
Â
* @return \WP_REST_Response The response.
|
117 |
Â
*/
|
118 |
Â
public static function saveChanges( $request ) {
|
119 |
+
$body = $request->get_json_params();
|
120 |
+
$options = ! empty( $body['options'] ) ? $body['options'] : [];
|
121 |
+
$dynamicOptions = ! empty( $body['dynamicOptions'] ) ? $body['dynamicOptions'] : [];
|
122 |
+
$network = ! empty( $body['network'] ) ? (bool) $body['network'] : false;
|
123 |
Â
|
124 |
Â
// If this is the network admin, reset the options.
|
125 |
Â
if ( $network ) {
|
127 |
Â
}
|
128 |
Â
|
129 |
Â
aioseo()->options->sanitizeAndSave( $options );
|
130 |
+
aioseo()->dynamicOptions->sanitizeAndSave( $dynamicOptions );
|
131 |
Â
|
132 |
Â
// Re-initialize notices.
|
133 |
Â
aioseo()->notices->init();
|
154 |
Â
$notAllowedOptions = aioseo()->access->getNotAllowedOptions();
|
155 |
Â
|
156 |
Â
foreach ( $settings as $setting ) {
|
157 |
+
$optionAccess = in_array( $setting, [ 'robots', 'blocker' ], true ) ? 'tools' : $setting;
|
158 |
Â
|
159 |
+
if ( in_array( $optionAccess, $notAllowedOptions, true ) ) {
|
160 |
Â
continue;
|
161 |
Â
}
|
162 |
Â
|
168 |
Â
aioseo()->options->deprecated->tools->blocker->reset();
|
169 |
Â
break;
|
170 |
Â
default:
|
171 |
+
if ( aioseo()->options->has( $setting ) ) {
|
172 |
+
aioseo()->options->$setting->reset();
|
173 |
+
}
|
174 |
+
if ( aioseo()->dynamicOptions->has( $setting ) ) {
|
175 |
+
aioseo()->dynamicOptions->$setting->reset();
|
176 |
Â
}
|
177 |
Â
}
|
178 |
Â
|
182 |
Â
}
|
183 |
Â
|
184 |
Â
return new \WP_REST_Response( [
|
185 |
+
'success' => true
|
Â
|
|
186 |
Â
], 200 );
|
187 |
Â
}
|
188 |
Â
|
215 |
Â
$contents['settings']['deprecated'] = array_diff_key( $contents['settings']['deprecated'], $notAllowedOptions );
|
216 |
Â
}
|
217 |
Â
|
218 |
+
// Remove any dynamic options and save them separately since this has been refactored.
|
219 |
+
$commonDynamic = [
|
220 |
+
'sitemap',
|
221 |
+
'searchAppearance',
|
222 |
+
'breadcrumbs',
|
223 |
+
'accessControl'
|
224 |
+
];
|
225 |
+
|
226 |
+
foreach ( $commonDynamic as $cd ) {
|
227 |
+
if ( ! empty( $contents['settings'][ $cd ]['dynamic'] ) ) {
|
228 |
+
$contents['settings']['dynamic'][ $cd ] = $contents['settings'][ $cd ]['dynamic'];
|
229 |
+
unset( $contents['settings'][ $cd ]['dynamic'] );
|
230 |
+
}
|
231 |
+
}
|
232 |
+
|
233 |
+
// These options have a very different structure so we'll do them separately.
|
234 |
+
if ( ! empty( $contents['settings']['social']['facebook']['general']['dynamic'] ) ) {
|
235 |
+
$contents['settings']['dynamic']['social']['facebook']['general'] = $contents['settings']['social']['facebook']['general']['dynamic'];
|
236 |
+
unset( $contents['settings']['social']['facebook']['general']['dynamic'] );
|
237 |
+
}
|
238 |
+
|
239 |
+
if ( ! empty( $contents['settings']['dynamic'] ) ) {
|
240 |
+
aioseo()->dynamicOptions->sanitizeAndSave( $contents['settings']['dynamic'] );
|
241 |
+
unset( $contents['settings']['dynamic'] );
|
242 |
+
}
|
243 |
+
|
244 |
Â
aioseo()->options->sanitizeAndSave( $contents['settings'] );
|
245 |
Â
}
|
246 |
Â
|
296 |
Â
|
297 |
Â
if ( ! empty( $settings ) ) {
|
298 |
Â
$options = aioseo()->options->noConflict();
|
299 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
300 |
Â
$notAllowedOptions = aioseo()->access->getNotAllowedOptions();
|
301 |
Â
foreach ( $settings as $setting ) {
|
302 |
+
$optionAccess = in_array( $setting, [ 'robots', 'blocker' ], true ) ? 'tools' : $setting;
|
Â
|
|
303 |
Â
|
304 |
+
if ( in_array( $optionAccess, $notAllowedOptions, true ) ) {
|
305 |
+
continue;
|
306 |
+
}
|
307 |
+
|
308 |
+
switch ( $setting ) {
|
309 |
+
case 'robots':
|
310 |
+
$allSettings['settings']['tools']['robots'] = $options->tools->robots->all();
|
311 |
+
break;
|
312 |
+
default:
|
313 |
+
if ( $options->has( $setting ) ) {
|
314 |
+
$allSettings['settings'][ $setting ] = $options->$setting->all();
|
315 |
+
}
|
316 |
+
|
317 |
+
// If there are related dynamic settings, let's include them.
|
318 |
+
if ( $dynamicOptions->has( $setting ) ) {
|
319 |
+
$allSettings['settings']['dynamic'][ $setting ] = $dynamicOptions->$setting->all();
|
320 |
+
}
|
321 |
+
|
322 |
+
// It there is a related deprecated $setting, include it.
|
323 |
+
if ( $options->deprecated->has( $setting ) ) {
|
324 |
+
$allSettings['settings']['deprecated'][ $setting ] = $options->deprecated->$setting->all();
|
325 |
+
}
|
326 |
+
break;
|
327 |
Â
}
|
328 |
Â
}
|
329 |
Â
}
|
app/Common/Api/Sitemaps.php
CHANGED
@@ -137,11 +137,11 @@ class Sitemaps {
|
|
137 |
Â
], 400 );
|
138 |
Â
}
|
139 |
Â
|
140 |
-
$path
|
141 |
-
$
|
142 |
Â
|
143 |
Â
return new \WP_REST_Response( [
|
144 |
-
'exists' =>
|
145 |
Â
], 200 );
|
146 |
Â
}
|
147 |
Â
}
|
137 |
Â
], 400 );
|
138 |
Â
}
|
139 |
Â
|
140 |
+
$path = trim( $pageUrl['path'], '/' );
|
141 |
+
$exists = aioseo()->helpers->pathExists( $path );
|
142 |
Â
|
143 |
Â
return new \WP_REST_Response( [
|
144 |
+
'exists' => $exists
|
145 |
Â
], 200 );
|
146 |
Â
}
|
147 |
Â
}
|
app/Common/Api/Tools.php
CHANGED
@@ -210,6 +210,14 @@ class Tools {
|
|
210 |
Â
$body = $request->get_json_params();
|
211 |
Â
$htaccess = ! empty( $body['htaccess'] ) ? sanitize_textarea_field( $body['htaccess'] ) : '';
|
212 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
213 |
Â
if ( ! aioseo()->htaccess->saveContents( $htaccess ) ) {
|
214 |
Â
return new \WP_REST_Response( [
|
215 |
Â
'success' => false,
|
210 |
Â
$body = $request->get_json_params();
|
211 |
Â
$htaccess = ! empty( $body['htaccess'] ) ? sanitize_textarea_field( $body['htaccess'] ) : '';
|
212 |
Â
|
213 |
+
if ( empty( $htaccess ) ) {
|
214 |
+
return new \WP_REST_Response( [
|
215 |
+
'success' => false,
|
216 |
+
'message' => __( '.htaccess file is empty.', 'all-in-one-seo-pack' )
|
217 |
+
], 400 );
|
218 |
+
}
|
219 |
+
|
220 |
+
$htaccess = aioseo()->helpers->decodeHtmlEntities( $htaccess );
|
221 |
Â
if ( ! aioseo()->htaccess->saveContents( $htaccess ) ) {
|
222 |
Â
return new \WP_REST_Response( [
|
223 |
Â
'success' => false,
|
app/Common/Api/Wizard.php
CHANGED
@@ -23,9 +23,11 @@ class Wizard {
|
|
23 |
Â
* @return \WP_REST_Response The response.
|
24 |
Â
*/
|
25 |
Â
public static function saveWizard( $request ) {
|
26 |
-
$body
|
27 |
-
$section
|
28 |
-
$wizard
|
Â
|
|
Â
|
|
29 |
Â
|
30 |
Â
aioseo()->internalOptions->internal->wizard = wp_json_encode( $wizard );
|
31 |
Â
|
@@ -77,21 +79,31 @@ class Wizard {
|
|
77 |
Â
// If the home page is a static page, let's find and set that,
|
78 |
Â
// otherwise set our home page settings.
|
79 |
Â
$staticHomePage = 'page' === get_option( 'show_on_front' ) ? get_post( get_option( 'page_on_front' ) ) : null;
|
80 |
-
if ( ! empty( $
|
81 |
-
|
82 |
-
|
Â
|
|
Â
|
|
83 |
Â
$page->title = $category['siteTitle'];
|
84 |
-
} else {
|
85 |
-
aioseo()->options->searchAppearance->global->siteTitle = $category['siteTitle'];
|
86 |
Â
}
|
87 |
-
}
|
88 |
Â
|
89 |
-
|
90 |
-
|
91 |
-
$page = Models\Post::getPost( $staticHomePage->ID );
|
92 |
Â
$page->description = $category['metaDescription'];
|
93 |
-
}
|
94 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
95 |
Â
}
|
96 |
Â
}
|
97 |
Â
}
|
@@ -100,44 +112,44 @@ class Wizard {
|
|
100 |
Â
if ( 'additionalInformation' === $section && ! empty( $wizard['additionalInformation'] ) ) {
|
101 |
Â
$additionalInformation = $wizard['additionalInformation'];
|
102 |
Â
if ( ! empty( $additionalInformation['siteRepresents'] ) ) {
|
103 |
-
|
104 |
Â
}
|
105 |
Â
|
106 |
Â
if ( ! empty( $additionalInformation['person'] ) ) {
|
107 |
-
|
108 |
Â
}
|
109 |
Â
|
110 |
Â
if ( ! empty( $additionalInformation['organizationName'] ) ) {
|
111 |
-
|
112 |
Â
}
|
113 |
Â
|
114 |
Â
if ( ! empty( $additionalInformation['phone'] ) ) {
|
115 |
-
|
116 |
Â
}
|
117 |
Â
|
118 |
Â
if ( ! empty( $additionalInformation['organizationLogo'] ) ) {
|
119 |
-
|
120 |
Â
}
|
121 |
Â
|
122 |
Â
if ( ! empty( $additionalInformation['personName'] ) ) {
|
123 |
-
|
124 |
Â
}
|
125 |
Â
|
126 |
Â
if ( ! empty( $additionalInformation['personLogo'] ) ) {
|
127 |
-
|
128 |
Â
}
|
129 |
Â
|
130 |
Â
if ( ! empty( $additionalInformation['contactType'] ) ) {
|
131 |
-
|
132 |
Â
}
|
133 |
Â
|
134 |
Â
if ( ! empty( $additionalInformation['contactManual'] ) ) {
|
135 |
-
|
136 |
Â
}
|
137 |
Â
|
138 |
Â
if ( ! empty( $additionalInformation['socialShareImage'] ) ) {
|
139 |
-
|
140 |
-
|
141 |
Â
}
|
142 |
Â
|
143 |
Â
if ( ! empty( $additionalInformation['social'] ) && ! empty( $additionalInformation['social']['profiles'] ) ) {
|
@@ -145,66 +157,66 @@ class Wizard {
|
|
145 |
Â
if ( ! empty( $profiles['sameUsername'] ) ) {
|
146 |
Â
$sameUsername = $profiles['sameUsername'];
|
147 |
Â
if ( isset( $sameUsername['enable'] ) ) {
|
148 |
-
|
149 |
Â
}
|
150 |
Â
|
151 |
Â
if ( ! empty( $sameUsername['username'] ) ) {
|
152 |
-
|
153 |
Â
}
|
154 |
Â
|
155 |
Â
if ( ! empty( $sameUsername['included'] ) ) {
|
156 |
-
|
157 |
Â
}
|
158 |
Â
}
|
159 |
Â
|
160 |
Â
if ( ! empty( $profiles['urls'] ) ) {
|
161 |
Â
$urls = $profiles['urls'];
|
162 |
Â
if ( ! empty( $urls['facebookPageUrl'] ) ) {
|
163 |
-
|
164 |
Â
}
|
165 |
Â
|
166 |
Â
if ( ! empty( $urls['twitterUrl'] ) ) {
|
167 |
-
|
168 |
Â
}
|
169 |
Â
|
170 |
Â
if ( ! empty( $urls['instagramUrl'] ) ) {
|
171 |
-
|
172 |
Â
}
|
173 |
Â
|
174 |
Â
if ( ! empty( $urls['pinterestUrl'] ) ) {
|
175 |
-
|
176 |
Â
}
|
177 |
Â
|
178 |
Â
if ( ! empty( $urls['youtubeUrl'] ) ) {
|
179 |
-
|
180 |
Â
}
|
181 |
Â
|
182 |
Â
if ( ! empty( $urls['linkedinUrl'] ) ) {
|
183 |
-
|
184 |
Â
}
|
185 |
Â
|
186 |
Â
if ( ! empty( $urls['tumblrUrl'] ) ) {
|
187 |
-
|
188 |
Â
}
|
189 |
Â
|
190 |
Â
if ( ! empty( $urls['yelpPageUrl'] ) ) {
|
191 |
-
|
192 |
Â
}
|
193 |
Â
|
194 |
Â
if ( ! empty( $urls['soundCloudUrl'] ) ) {
|
195 |
-
|
196 |
Â
}
|
197 |
Â
|
198 |
Â
if ( ! empty( $urls['wikipediaUrl'] ) ) {
|
199 |
-
|
200 |
Â
}
|
201 |
Â
|
202 |
Â
if ( ! empty( $urls['myspaceUrl'] ) ) {
|
203 |
-
|
204 |
Â
}
|
205 |
Â
|
206 |
Â
if ( ! empty( $urls['googlePlacesUrl'] ) ) {
|
207 |
-
|
208 |
Â
}
|
209 |
Â
}
|
210 |
Â
}
|
@@ -279,55 +291,47 @@ class Wizard {
|
|
279 |
Â
) {
|
280 |
Â
// Robots.
|
281 |
Â
if ( ! empty( $searchAppearance['postTypes']['postTypes']['all'] ) ) {
|
282 |
-
$options = aioseo()->options->noConflict();
|
283 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes( true ) as $postType ) {
|
284 |
-
if ( $
|
285 |
-
$
|
286 |
-
$
|
287 |
-
$
|
288 |
Â
}
|
289 |
Â
}
|
290 |
-
|
291 |
-
aioseo()->options->refresh();
|
292 |
Â
} else {
|
293 |
-
$options = aioseo()->options->noConflict();
|
294 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes( true ) as $postType ) {
|
295 |
-
if ( $
|
296 |
Â
if ( in_array( $postType, (array) $searchAppearance['postTypes']['postTypes']['included'], true ) ) {
|
297 |
-
$
|
298 |
-
$
|
299 |
-
$
|
300 |
Â
} else {
|
301 |
-
$
|
302 |
-
$
|
303 |
-
$
|
304 |
Â
}
|
305 |
Â
}
|
306 |
Â
}
|
307 |
-
|
308 |
-
aioseo()->options->refresh();
|
309 |
Â
}
|
310 |
Â
|
311 |
Â
// Sitemaps.
|
312 |
Â
if ( isset( $searchAppearance['postTypes']['postTypes']['all'] ) ) {
|
313 |
-
|
314 |
Â
}
|
315 |
Â
|
316 |
Â
if ( isset( $searchAppearance['postTypes']['postTypes']['included'] ) ) {
|
317 |
-
|
318 |
Â
}
|
319 |
Â
}
|
320 |
Â
|
321 |
Â
if ( isset( $searchAppearance['multipleAuthors'] ) ) {
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
Â
}
|
326 |
Â
|
327 |
-
|
328 |
-
|
329 |
-
$options->searchAppearance->dynamic->postTypes->attachment->redirectAttachmentUrls = $searchAppearance['redirectAttachmentPages'] ? 'attachment' : 'disabled';
|
330 |
-
aioseo()->options->refresh();
|
331 |
Â
}
|
332 |
Â
}
|
333 |
Â
|
23 |
Â
* @return \WP_REST_Response The response.
|
24 |
Â
*/
|
25 |
Â
public static function saveWizard( $request ) {
|
26 |
+
$body = $request->get_json_params();
|
27 |
+
$section = ! empty( $body['section'] ) ? sanitize_text_field( $body['section'] ) : null;
|
28 |
+
$wizard = ! empty( $body['wizard'] ) ? $body['wizard'] : null;
|
29 |
+
$options = aioseo()->options->noConflict();
|
30 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
31 |
Â
|
32 |
Â
aioseo()->internalOptions->internal->wizard = wp_json_encode( $wizard );
|
33 |
Â
|
79 |
Â
// If the home page is a static page, let's find and set that,
|
80 |
Â
// otherwise set our home page settings.
|
81 |
Â
$staticHomePage = 'page' === get_option( 'show_on_front' ) ? get_post( get_option( 'page_on_front' ) ) : null;
|
82 |
+
if ( ! empty( $staticHomePage ) ) {
|
83 |
+
$update = false;
|
84 |
+
$page = Models\Post::getPost( $staticHomePage->ID );
|
85 |
+
if ( ! empty( $category['siteTitle'] ) ) {
|
86 |
+
$update = true;
|
87 |
Â
$page->title = $category['siteTitle'];
|
Â
|
|
Â
|
|
88 |
Â
}
|
Â
|
|
89 |
Â
|
90 |
+
if ( ! empty( $category['metaDescription'] ) ) {
|
91 |
+
$update = true;
|
Â
|
|
92 |
Â
$page->description = $category['metaDescription'];
|
93 |
+
}
|
94 |
+
|
95 |
+
if ( $update ) {
|
96 |
+
$page->save();
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
if ( empty( $staticHomePage ) ) {
|
101 |
+
if ( ! empty( $category['siteTitle'] ) ) {
|
102 |
+
$options->searchAppearance->global->siteTitle = $category['siteTitle'];
|
103 |
+
}
|
104 |
+
|
105 |
+
if ( ! empty( $category['metaDescription'] ) ) {
|
106 |
+
$options->searchAppearance->global->metaDescription = $category['metaDescription'];
|
107 |
Â
}
|
108 |
Â
}
|
109 |
Â
}
|
112 |
Â
if ( 'additionalInformation' === $section && ! empty( $wizard['additionalInformation'] ) ) {
|
113 |
Â
$additionalInformation = $wizard['additionalInformation'];
|
114 |
Â
if ( ! empty( $additionalInformation['siteRepresents'] ) ) {
|
115 |
+
$options->searchAppearance->global->schema->siteRepresents = $additionalInformation['siteRepresents'];
|
116 |
Â
}
|
117 |
Â
|
118 |
Â
if ( ! empty( $additionalInformation['person'] ) ) {
|
119 |
+
$options->searchAppearance->global->schema->person = $additionalInformation['person'];
|
120 |
Â
}
|
121 |
Â
|
122 |
Â
if ( ! empty( $additionalInformation['organizationName'] ) ) {
|
123 |
+
$options->searchAppearance->global->schema->organizationName = $additionalInformation['organizationName'];
|
124 |
Â
}
|
125 |
Â
|
126 |
Â
if ( ! empty( $additionalInformation['phone'] ) ) {
|
127 |
+
$options->searchAppearance->global->schema->phone = $additionalInformation['phone'];
|
128 |
Â
}
|
129 |
Â
|
130 |
Â
if ( ! empty( $additionalInformation['organizationLogo'] ) ) {
|
131 |
+
$options->searchAppearance->global->schema->organizationLogo = $additionalInformation['organizationLogo'];
|
132 |
Â
}
|
133 |
Â
|
134 |
Â
if ( ! empty( $additionalInformation['personName'] ) ) {
|
135 |
+
$options->searchAppearance->global->schema->personName = $additionalInformation['personName'];
|
136 |
Â
}
|
137 |
Â
|
138 |
Â
if ( ! empty( $additionalInformation['personLogo'] ) ) {
|
139 |
+
$options->searchAppearance->global->schema->personLogo = $additionalInformation['personLogo'];
|
140 |
Â
}
|
141 |
Â
|
142 |
Â
if ( ! empty( $additionalInformation['contactType'] ) ) {
|
143 |
+
$options->searchAppearance->global->schema->contactType = $additionalInformation['contactType'];
|
144 |
Â
}
|
145 |
Â
|
146 |
Â
if ( ! empty( $additionalInformation['contactManual'] ) ) {
|
147 |
+
$options->searchAppearance->global->schema->contactManual = $additionalInformation['contactManual'];
|
148 |
Â
}
|
149 |
Â
|
150 |
Â
if ( ! empty( $additionalInformation['socialShareImage'] ) ) {
|
151 |
+
$options->social->facebook->general->defaultImagePosts = $additionalInformation['socialShareImage'];
|
152 |
+
$options->social->twitter->general->defaultImagePosts = $additionalInformation['socialShareImage'];
|
153 |
Â
}
|
154 |
Â
|
155 |
Â
if ( ! empty( $additionalInformation['social'] ) && ! empty( $additionalInformation['social']['profiles'] ) ) {
|
157 |
Â
if ( ! empty( $profiles['sameUsername'] ) ) {
|
158 |
Â
$sameUsername = $profiles['sameUsername'];
|
159 |
Â
if ( isset( $sameUsername['enable'] ) ) {
|
160 |
+
$options->social->profiles->sameUsername->enable = $sameUsername['enable'];
|
161 |
Â
}
|
162 |
Â
|
163 |
Â
if ( ! empty( $sameUsername['username'] ) ) {
|
164 |
+
$options->social->profiles->sameUsername->username = $sameUsername['username'];
|
165 |
Â
}
|
166 |
Â
|
167 |
Â
if ( ! empty( $sameUsername['included'] ) ) {
|
168 |
+
$options->social->profiles->sameUsername->included = $sameUsername['included'];
|
169 |
Â
}
|
170 |
Â
}
|
171 |
Â
|
172 |
Â
if ( ! empty( $profiles['urls'] ) ) {
|
173 |
Â
$urls = $profiles['urls'];
|
174 |
Â
if ( ! empty( $urls['facebookPageUrl'] ) ) {
|
175 |
+
$options->social->profiles->urls->facebookPageUrl = $urls['facebookPageUrl'];
|
176 |
Â
}
|
177 |
Â
|
178 |
Â
if ( ! empty( $urls['twitterUrl'] ) ) {
|
179 |
+
$options->social->profiles->urls->twitterUrl = $urls['twitterUrl'];
|
180 |
Â
}
|
181 |
Â
|
182 |
Â
if ( ! empty( $urls['instagramUrl'] ) ) {
|
183 |
+
$options->social->profiles->urls->instagramUrl = $urls['instagramUrl'];
|
184 |
Â
}
|
185 |
Â
|
186 |
Â
if ( ! empty( $urls['pinterestUrl'] ) ) {
|
187 |
+
$options->social->profiles->urls->pinterestUrl = $urls['pinterestUrl'];
|
188 |
Â
}
|
189 |
Â
|
190 |
Â
if ( ! empty( $urls['youtubeUrl'] ) ) {
|
191 |
+
$options->social->profiles->urls->youtubeUrl = $urls['youtubeUrl'];
|
192 |
Â
}
|
193 |
Â
|
194 |
Â
if ( ! empty( $urls['linkedinUrl'] ) ) {
|
195 |
+
$options->social->profiles->urls->linkedinUrl = $urls['linkedinUrl'];
|
196 |
Â
}
|
197 |
Â
|
198 |
Â
if ( ! empty( $urls['tumblrUrl'] ) ) {
|
199 |
+
$options->social->profiles->urls->tumblrUrl = $urls['tumblrUrl'];
|
200 |
Â
}
|
201 |
Â
|
202 |
Â
if ( ! empty( $urls['yelpPageUrl'] ) ) {
|
203 |
+
$options->social->profiles->urls->yelpPageUrl = $urls['yelpPageUrl'];
|
204 |
Â
}
|
205 |
Â
|
206 |
Â
if ( ! empty( $urls['soundCloudUrl'] ) ) {
|
207 |
+
$options->social->profiles->urls->soundCloudUrl = $urls['soundCloudUrl'];
|
208 |
Â
}
|
209 |
Â
|
210 |
Â
if ( ! empty( $urls['wikipediaUrl'] ) ) {
|
211 |
+
$options->social->profiles->urls->wikipediaUrl = $urls['wikipediaUrl'];
|
212 |
Â
}
|
213 |
Â
|
214 |
Â
if ( ! empty( $urls['myspaceUrl'] ) ) {
|
215 |
+
$options->social->profiles->urls->myspaceUrl = $urls['myspaceUrl'];
|
216 |
Â
}
|
217 |
Â
|
218 |
Â
if ( ! empty( $urls['googlePlacesUrl'] ) ) {
|
219 |
+
$options->social->profiles->urls->googlePlacesUrl = $urls['googlePlacesUrl'];
|
220 |
Â
}
|
221 |
Â
}
|
222 |
Â
}
|
291 |
Â
) {
|
292 |
Â
// Robots.
|
293 |
Â
if ( ! empty( $searchAppearance['postTypes']['postTypes']['all'] ) ) {
|
Â
|
|
294 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes( true ) as $postType ) {
|
295 |
+
if ( $dynamicOptions->searchAppearance->postTypes->has( $postType ) ) {
|
296 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->show = true;
|
297 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = true;
|
298 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = false;
|
299 |
Â
}
|
300 |
Â
}
|
Â
|
|
Â
|
|
301 |
Â
} else {
|
Â
|
|
302 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes( true ) as $postType ) {
|
303 |
+
if ( $dynamicOptions->searchAppearance->postTypes->has( $postType ) ) {
|
304 |
Â
if ( in_array( $postType, (array) $searchAppearance['postTypes']['postTypes']['included'], true ) ) {
|
305 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->show = true;
|
306 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = true;
|
307 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = false;
|
308 |
Â
} else {
|
309 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->show = false;
|
310 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
|
311 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = true;
|
312 |
Â
}
|
313 |
Â
}
|
314 |
Â
}
|
Â
|
|
Â
|
|
315 |
Â
}
|
316 |
Â
|
317 |
Â
// Sitemaps.
|
318 |
Â
if ( isset( $searchAppearance['postTypes']['postTypes']['all'] ) ) {
|
319 |
+
$options->sitemap->general->postTypes->all = $searchAppearance['postTypes']['postTypes']['all'];
|
320 |
Â
}
|
321 |
Â
|
322 |
Â
if ( isset( $searchAppearance['postTypes']['postTypes']['included'] ) ) {
|
323 |
+
$options->sitemap->general->postTypes->included = $searchAppearance['postTypes']['postTypes']['included'];
|
324 |
Â
}
|
325 |
Â
}
|
326 |
Â
|
327 |
Â
if ( isset( $searchAppearance['multipleAuthors'] ) ) {
|
328 |
+
$options->searchAppearance->archives->author->show = $searchAppearance['multipleAuthors'];
|
329 |
+
$options->searchAppearance->archives->author->advanced->robotsMeta->default = $searchAppearance['multipleAuthors'];
|
330 |
+
$options->searchAppearance->archives->author->advanced->robotsMeta->noindex = ! $searchAppearance['multipleAuthors'];
|
331 |
Â
}
|
332 |
Â
|
333 |
+
if ( isset( $searchAppearance['redirectAttachmentPages'] ) && $dynamicOptions->searchAppearance->postTypes->has( 'attachment' ) ) {
|
334 |
+
$dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = $searchAppearance['redirectAttachmentPages'] ? 'attachment' : 'disabled';
|
Â
|
|
Â
|
|
335 |
Â
}
|
336 |
Â
}
|
337 |
Â
|
app/Common/HeadlineAnalyzer/HeadlineAnalyzer.php
CHANGED
@@ -55,7 +55,8 @@ class HeadlineAnalyzer {
|
|
55 |
Â
|
56 |
Â
aioseo()->helpers->enqueueStyle(
|
57 |
Â
'aioseo-headline-analyzer',
|
58 |
-
'css/headline-analyzer.css'
|
Â
|
|
59 |
Â
);
|
60 |
Â
}
|
61 |
Â
|
55 |
Â
|
56 |
Â
aioseo()->helpers->enqueueStyle(
|
57 |
Â
'aioseo-headline-analyzer',
|
58 |
+
'css/headline-analyzer.css',
|
59 |
+
false
|
60 |
Â
);
|
61 |
Â
}
|
62 |
Â
|
app/Common/ImportExport/Helpers.php
CHANGED
@@ -42,13 +42,15 @@ abstract class Helpers {
|
|
42 |
Â
return;
|
43 |
Â
}
|
44 |
Â
|
Â
|
|
Â
|
|
45 |
Â
foreach ( $mappings as $name => $values ) {
|
46 |
Â
if ( ! isset( $group[ $name ] ) ) {
|
47 |
Â
continue;
|
48 |
Â
}
|
49 |
Â
|
50 |
Â
$error = false;
|
51 |
-
$options =
|
52 |
Â
$lastOption = '';
|
53 |
Â
for ( $i = 0; $i < count( $values['newOption'] ); $i++ ) {
|
54 |
Â
$lastOption = $values['newOption'][ $i ];
|
@@ -89,7 +91,5 @@ abstract class Helpers {
|
|
89 |
Â
break;
|
90 |
Â
}
|
91 |
Â
}
|
92 |
-
|
93 |
-
aioseo()->options->refresh();
|
94 |
Â
}
|
95 |
Â
}
|
42 |
Â
return;
|
43 |
Â
}
|
44 |
Â
|
45 |
+
$mainOptions = aioseo()->options->noConflict();
|
46 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
47 |
Â
foreach ( $mappings as $name => $values ) {
|
48 |
Â
if ( ! isset( $group[ $name ] ) ) {
|
49 |
Â
continue;
|
50 |
Â
}
|
51 |
Â
|
52 |
Â
$error = false;
|
53 |
+
$options = ! empty( $values['dynamic'] ) ? $dynamicOptions : $mainOptions;
|
54 |
Â
$lastOption = '';
|
55 |
Â
for ( $i = 0; $i < count( $values['newOption'] ); $i++ ) {
|
56 |
Â
$lastOption = $values['newOption'][ $i ];
|
91 |
Â
break;
|
92 |
Â
}
|
93 |
Â
}
|
Â
|
|
Â
|
|
94 |
Â
}
|
95 |
Â
}
|
app/Common/ImportExport/ImportExport.php
CHANGED
@@ -31,6 +31,7 @@ class ImportExport {
|
|
31 |
Â
public function __construct() {
|
32 |
Â
$this->yoastSeo = new YoastSeo\YoastSeo( $this );
|
33 |
Â
$this->rankMath = new RankMath\RankMath( $this );
|
Â
|
|
34 |
Â
}
|
35 |
Â
|
36 |
Â
/**
|
@@ -297,6 +298,9 @@ class ImportExport {
|
|
297 |
Â
* @return void
|
298 |
Â
*/
|
299 |
Â
public function startImport( $plugin, $settings ) {
|
Â
|
|
Â
|
|
Â
|
|
300 |
Â
foreach ( $this->plugins as $pluginData ) {
|
301 |
Â
if ( $pluginData['slug'] === $plugin ) {
|
302 |
Â
$pluginData['class']->doImport( $settings );
|
@@ -305,6 +309,45 @@ class ImportExport {
|
|
305 |
Â
}
|
306 |
Â
}
|
307 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
308 |
Â
/**
|
309 |
Â
* Adds plugins to the import/export.
|
310 |
Â
*
|
31 |
Â
public function __construct() {
|
32 |
Â
$this->yoastSeo = new YoastSeo\YoastSeo( $this );
|
33 |
Â
$this->rankMath = new RankMath\RankMath( $this );
|
34 |
+
$this->seoPress = new SeoPress\SeoPress( $this );
|
35 |
Â
}
|
36 |
Â
|
37 |
Â
/**
|
298 |
Â
* @return void
|
299 |
Â
*/
|
300 |
Â
public function startImport( $plugin, $settings ) {
|
301 |
+
// First cancel any scans running that might interfere with our import.
|
302 |
+
$this->cancelScans();
|
303 |
+
|
304 |
Â
foreach ( $this->plugins as $pluginData ) {
|
305 |
Â
if ( $pluginData['slug'] === $plugin ) {
|
306 |
Â
$pluginData['class']->doImport( $settings );
|
309 |
Â
}
|
310 |
Â
}
|
311 |
Â
|
312 |
+
/**
|
313 |
+
* Cancel scans that are currently running and could conflict with our migration.
|
314 |
+
*
|
315 |
+
* @since 4.1.4
|
316 |
+
*
|
317 |
+
* @return void
|
318 |
+
*/
|
319 |
+
private function cancelScans() {
|
320 |
+
// Figure out how to check if these addons are enabled and then get the action names that way.
|
321 |
+
aioseo()->helpers->unscheduleAction( 'aioseo_video_sitemap_scan' );
|
322 |
+
aioseo()->helpers->unscheduleAction( 'aioseo_image_sitemap_scan' );
|
323 |
+
}
|
324 |
+
|
325 |
+
/**
|
326 |
+
* Checks if an import is currently running.
|
327 |
+
*
|
328 |
+
* @since 4.1.4
|
329 |
+
*
|
330 |
+
* @return boolean True if an import is currently running.
|
331 |
+
*/
|
332 |
+
public function isImportRunning() {
|
333 |
+
$transients = aioseo()->db
|
334 |
+
->start( 'options' )
|
335 |
+
->select( 'option_name as name' )
|
336 |
+
->whereRaw( "`option_name` LIKE '_aioseo_cache_%'" )
|
337 |
+
->run()
|
338 |
+
->result();
|
339 |
+
|
340 |
+
$foundImportTransient = false;
|
341 |
+
foreach ( $transients as $transient ) {
|
342 |
+
if ( preg_match( '#import_.*_meta_.*#', $transient->name ) ) {
|
343 |
+
$foundImportTransient = true;
|
344 |
+
break;
|
345 |
+
}
|
346 |
+
}
|
347 |
+
|
348 |
+
return $foundImportTransient;
|
349 |
+
}
|
350 |
+
|
351 |
Â
/**
|
352 |
Â
* Adds plugins to the import/export.
|
353 |
Â
*
|
app/Common/ImportExport/RankMath/GeneralSettings.php
CHANGED
@@ -63,9 +63,9 @@ class GeneralSettings {
|
|
63 |
Â
private function migrateRedirectAttachments() {
|
64 |
Â
if ( isset( $this->options['attachment_redirect_urls'] ) ) {
|
65 |
Â
if ( 'on' === $this->options['attachment_redirect_urls'] ) {
|
66 |
-
aioseo()->
|
67 |
Â
} else {
|
68 |
-
aioseo()->
|
69 |
Â
}
|
70 |
Â
}
|
71 |
Â
}
|
63 |
Â
private function migrateRedirectAttachments() {
|
64 |
Â
if ( isset( $this->options['attachment_redirect_urls'] ) ) {
|
65 |
Â
if ( 'on' === $this->options['attachment_redirect_urls'] ) {
|
66 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
|
67 |
Â
} else {
|
68 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
|
69 |
Â
}
|
70 |
Â
}
|
71 |
Â
}
|
app/Common/ImportExport/RankMath/TitleMeta.php
CHANGED
@@ -188,7 +188,7 @@ class TitleMeta extends ImportExport\SearchAppearance {
|
|
188 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes( true ) as $postType ) {
|
189 |
Â
// Reset existing values first.
|
190 |
Â
foreach ( $this->robotMetaSettings as $robotsMetaName ) {
|
191 |
-
aioseo()->
|
192 |
Â
}
|
193 |
Â
|
194 |
Â
foreach ( $this->options as $name => $value ) {
|
@@ -202,7 +202,7 @@ class TitleMeta extends ImportExport\SearchAppearance {
|
|
202 |
Â
$value = aioseo()->helpers->pregReplace( '#%category%#', '', $value );
|
203 |
Â
$value = aioseo()->helpers->pregReplace( '#%excerpt%#', '', $value );
|
204 |
Â
}
|
205 |
-
aioseo()->
|
206 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $value ) );
|
207 |
Â
break;
|
208 |
Â
case 'description':
|
@@ -210,11 +210,11 @@ class TitleMeta extends ImportExport\SearchAppearance {
|
|
210 |
Â
$value = aioseo()->helpers->pregReplace( '#%category%#', '', $value );
|
211 |
Â
$value = aioseo()->helpers->pregReplace( '#%excerpt%#', '', $value );
|
212 |
Â
}
|
213 |
-
aioseo()->
|
214 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $value ) );
|
215 |
Â
break;
|
216 |
Â
case 'custom_robots':
|
217 |
-
aioseo()->
|
218 |
Â
break;
|
219 |
Â
case 'robots':
|
220 |
Â
if ( ! empty( $value ) ) {
|
@@ -222,33 +222,33 @@ class TitleMeta extends ImportExport\SearchAppearance {
|
|
222 |
Â
if ( 'index' === $robotsName ) {
|
223 |
Â
continue;
|
224 |
Â
}
|
225 |
-
aioseo()->
|
226 |
Â
}
|
227 |
Â
}
|
228 |
Â
break;
|
229 |
Â
case 'advanced_robots':
|
230 |
Â
if ( ! empty( $value['max-snippet'] ) ) {
|
231 |
-
aioseo()->
|
232 |
Â
}
|
233 |
Â
if ( ! empty( $value['max-video-preview'] ) ) {
|
234 |
-
aioseo()->
|
235 |
Â
}
|
236 |
Â
if ( ! empty( $value['max-image-preview'] ) ) {
|
237 |
-
aioseo()->
|
238 |
Â
aioseo()->helpers->sanitizeOption( $value['max-image-preview'] );
|
239 |
Â
}
|
240 |
Â
break;
|
241 |
Â
case 'add_meta_box':
|
242 |
-
aioseo()->
|
243 |
Â
break;
|
244 |
Â
case 'default_rich_snippet':
|
245 |
Â
$value = aioseo()->helpers->pregReplace( '#\s#', '', $value );
|
246 |
Â
if ( 'off' === lcfirst( $value ) || in_array( $postType, [ 'page', 'attachment' ], true ) ) {
|
247 |
-
aioseo()->
|
248 |
Â
break;
|
249 |
Â
}
|
250 |
Â
if ( in_array( ucfirst( $value ), ImportExport\SearchAppearance::$supportedSchemaGraphs, true ) ) {
|
251 |
-
aioseo()->
|
252 |
Â
}
|
253 |
Â
break;
|
254 |
Â
case 'default_article_type':
|
@@ -257,9 +257,9 @@ class TitleMeta extends ImportExport\SearchAppearance {
|
|
257 |
Â
}
|
258 |
Â
$value = aioseo()->helpers->pregReplace( '#\s#', '', $value );
|
259 |
Â
if ( in_array( ucfirst( $value ), ImportExport\SearchAppearance::$supportedArticleGraphs, true ) ) {
|
260 |
-
aioseo()->
|
261 |
Â
} else {
|
262 |
-
aioseo()->
|
263 |
Â
}
|
264 |
Â
break;
|
265 |
Â
default:
|
@@ -290,11 +290,11 @@ class TitleMeta extends ImportExport\SearchAppearance {
|
|
290 |
Â
|
291 |
Â
switch ( $match[1] ) {
|
292 |
Â
case 'title':
|
293 |
-
aioseo()->
|
294 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $value, 'archive' ) );
|
295 |
Â
break;
|
296 |
Â
case 'description':
|
297 |
-
aioseo()->
|
298 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $value, 'archive' ) );
|
299 |
Â
break;
|
300 |
Â
default:
|
188 |
Â
foreach ( aioseo()->helpers->getPublicPostTypes( true ) as $postType ) {
|
189 |
Â
// Reset existing values first.
|
190 |
Â
foreach ( $this->robotMetaSettings as $robotsMetaName ) {
|
191 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->$robotsMetaName = false;
|
192 |
Â
}
|
193 |
Â
|
194 |
Â
foreach ( $this->options as $name => $value ) {
|
202 |
Â
$value = aioseo()->helpers->pregReplace( '#%category%#', '', $value );
|
203 |
Â
$value = aioseo()->helpers->pregReplace( '#%excerpt%#', '', $value );
|
204 |
Â
}
|
205 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->title =
|
206 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $value ) );
|
207 |
Â
break;
|
208 |
Â
case 'description':
|
210 |
Â
$value = aioseo()->helpers->pregReplace( '#%category%#', '', $value );
|
211 |
Â
$value = aioseo()->helpers->pregReplace( '#%excerpt%#', '', $value );
|
212 |
Â
}
|
213 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->metaDescription =
|
214 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $value ) );
|
215 |
Â
break;
|
216 |
Â
case 'custom_robots':
|
217 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = 'off' === $value;
|
218 |
Â
break;
|
219 |
Â
case 'robots':
|
220 |
Â
if ( ! empty( $value ) ) {
|
222 |
Â
if ( 'index' === $robotsName ) {
|
223 |
Â
continue;
|
224 |
Â
}
|
225 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->$robotsName = true;
|
226 |
Â
}
|
227 |
Â
}
|
228 |
Â
break;
|
229 |
Â
case 'advanced_robots':
|
230 |
Â
if ( ! empty( $value['max-snippet'] ) ) {
|
231 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->maxSnippet = intval( $value['max-snippet'] );
|
232 |
Â
}
|
233 |
Â
if ( ! empty( $value['max-video-preview'] ) ) {
|
234 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->maxVideoPreview = intval( $value['max-video-preview'] );
|
235 |
Â
}
|
236 |
Â
if ( ! empty( $value['max-image-preview'] ) ) {
|
237 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->maxImagePreview =
|
238 |
Â
aioseo()->helpers->sanitizeOption( $value['max-image-preview'] );
|
239 |
Â
}
|
240 |
Â
break;
|
241 |
Â
case 'add_meta_box':
|
242 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->showMetaBox = 'on' === $value;
|
243 |
Â
break;
|
244 |
Â
case 'default_rich_snippet':
|
245 |
Â
$value = aioseo()->helpers->pregReplace( '#\s#', '', $value );
|
246 |
Â
if ( 'off' === lcfirst( $value ) || in_array( $postType, [ 'page', 'attachment' ], true ) ) {
|
247 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->schemaType = 'none';
|
248 |
Â
break;
|
249 |
Â
}
|
250 |
Â
if ( in_array( ucfirst( $value ), ImportExport\SearchAppearance::$supportedSchemaGraphs, true ) ) {
|
251 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->schemaType = ucfirst( $value );
|
252 |
Â
}
|
253 |
Â
break;
|
254 |
Â
case 'default_article_type':
|
257 |
Â
}
|
258 |
Â
$value = aioseo()->helpers->pregReplace( '#\s#', '', $value );
|
259 |
Â
if ( in_array( ucfirst( $value ), ImportExport\SearchAppearance::$supportedArticleGraphs, true ) ) {
|
260 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->articleType = ucfirst( $value );
|
261 |
Â
} else {
|
262 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->articleType = 'BlogPosting';
|
263 |
Â
}
|
264 |
Â
break;
|
265 |
Â
default:
|
290 |
Â
|
291 |
Â
switch ( $match[1] ) {
|
292 |
Â
case 'title':
|
293 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->title =
|
294 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $value, 'archive' ) );
|
295 |
Â
break;
|
296 |
Â
case 'description':
|
297 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->metaDescription =
|
298 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->rankMath->helpers->macrosToSmartTags( $value, 'archive' ) );
|
299 |
Â
break;
|
300 |
Â
default:
|
app/Common/ImportExport/SeoPress/Analytics.php
ADDED
@@ -0,0 +1,34 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Migrates the Analytics Settings.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class Analytics {
|
17 |
+
/**
|
18 |
+
* Class constructor.
|
19 |
+
*
|
20 |
+
* @since 4.1.4
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
$this->options = get_option( 'seopress_google_analytics_option_name' );
|
24 |
+
if ( empty( $this->options ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$settings = [
|
29 |
+
'seopress_google_analytics_other_tracking' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'miscellaneousVerification' ] ],
|
30 |
+
];
|
31 |
+
|
32 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
33 |
+
}
|
34 |
+
}
|
app/Common/ImportExport/SeoPress/Breadcrumbs.php
ADDED
@@ -0,0 +1,57 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Migrates the Breadcrumb settings.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class Breadcrumbs {
|
17 |
+
/**
|
18 |
+
* Class constructor.
|
19 |
+
*
|
20 |
+
* @since 4.1.4
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
$this->options = get_option( 'seopress_pro_option_name' );
|
24 |
+
if ( empty( $this->options ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$this->migrate();
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Migrates the Breadcrumbs settings.
|
33 |
+
*
|
34 |
+
* @since 4.1.4
|
35 |
+
*
|
36 |
+
* @return void
|
37 |
+
*/
|
38 |
+
private function migrate() {
|
39 |
+
if ( ! empty( $this->options['seopress_breadcrumbs_i18n_search'] ) ) {
|
40 |
+
aioseo()->options->breadcrumbs->searchResultFormat = sprintf( '%1$s #breadcrumb_archive_post_type_name', $this->options['seopress_breadcrumbs_i18n_search'] );
|
41 |
+
}
|
42 |
+
|
43 |
+
if ( ! empty( $this->options['seopress_breadcrumbs_remove_blog_page'] ) ) {
|
44 |
+
aioseo()->options->breadcrumbs->showBlogHome = false;
|
45 |
+
}
|
46 |
+
|
47 |
+
$settings = [
|
48 |
+
'seopress_breadcrumbs_enable' => [ 'type' => 'boolean', 'newOption' => [ 'breadcrumbs', 'enable' ] ],
|
49 |
+
'seopress_breadcrumbs_separator' => [ 'type' => 'string', 'newOption' => [ 'breadcrumbs', 'separator' ] ],
|
50 |
+
'seopress_breadcrumbs_i18n_home' => [ 'type' => 'string', 'newOption' => [ 'breadcrumbs', 'homepageLabel' ] ],
|
51 |
+
'seopress_breadcrumbs_i18n_here' => [ 'type' => 'string', 'newOption' => [ 'breadcrumbs', 'breadcrumbPrefix' ] ],
|
52 |
+
'seopress_breadcrumbs_i18n_404' => [ 'type' => 'string', 'newOption' => [ 'breadcrumbs', 'errorFormat404' ] ],
|
53 |
+
];
|
54 |
+
|
55 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
56 |
+
}
|
57 |
+
}
|
app/Common/ImportExport/SeoPress/GeneralSettings.php
ADDED
@@ -0,0 +1,130 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Migrates the General Settings.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class GeneralSettings {
|
17 |
+
/**
|
18 |
+
* Class constructor.
|
19 |
+
*
|
20 |
+
* @since 4.1.4
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
$this->options = get_option( 'seopress_advanced_option_name' );
|
24 |
+
if ( empty( $this->options ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$this->roles = aioseo()->access->getRoles();
|
29 |
+
|
30 |
+
$this->migrateBlockMetaboxRoles();
|
31 |
+
$this->migrateBlockContentAnalysisRoles();
|
32 |
+
$this->migrateAttachmentRedirects();
|
33 |
+
|
34 |
+
$settings = [
|
35 |
+
'seopress_advanced_advanced_google' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
|
36 |
+
'seopress_advanced_advanced_bing' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
|
37 |
+
'seopress_advanced_advanced_pinterest' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ],
|
38 |
+
'seopress_advanced_advanced_yandex' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'yandex' ] ],
|
39 |
+
];
|
40 |
+
|
41 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Migrates Block AIOSEO metabox setting.
|
46 |
+
*
|
47 |
+
* @since 4.1.4
|
48 |
+
*
|
49 |
+
* @return void
|
50 |
+
*/
|
51 |
+
private function migrateBlockMetaboxRoles() {
|
52 |
+
$seoPressRoles = $this->options['seopress_advanced_security_metaboxe_role'];
|
53 |
+
if ( empty( $seoPressRoles ) ) {
|
54 |
+
return;
|
55 |
+
}
|
56 |
+
|
57 |
+
$roleSettings = [ 'useDefault', 'pageAnalysis', 'pageGeneralSettings', 'pageSocialSettings', 'pageSchemaSettings', 'pageAdvancedSettings' ];
|
58 |
+
|
59 |
+
foreach ( $seoPressRoles as $wpRole => $value ) {
|
60 |
+
$role = $this->roles[ $wpRole ];
|
61 |
+
if ( empty( $role ) || aioseo()->access->isAdmin( $role ) ) {
|
62 |
+
continue;
|
63 |
+
}
|
64 |
+
|
65 |
+
if ( aioseo()->options->accessControl->has( $role ) ) {
|
66 |
+
foreach ( $roleSettings as $setting ) {
|
67 |
+
aioseo()->options->accessControl->$role->$setting = false;
|
68 |
+
}
|
69 |
+
} elseif ( aioseo()->dynamicOptions->accessControl->has( $role ) ) {
|
70 |
+
foreach ( $roleSettings as $setting ) {
|
71 |
+
aioseo()->dynamicOptions->accessControl->$role->$setting = false;
|
72 |
+
}
|
73 |
+
}
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Migrates Block Content analysis metabox setting.
|
79 |
+
*
|
80 |
+
* @since 4.1.4
|
81 |
+
*
|
82 |
+
* @return void
|
83 |
+
*/
|
84 |
+
private function migrateBlockContentAnalysisRoles() {
|
85 |
+
$seoPressRoles = $this->options['seopress_advanced_security_metaboxe_ca_role'];
|
86 |
+
if ( empty( $seoPressRoles ) ) {
|
87 |
+
return;
|
88 |
+
}
|
89 |
+
|
90 |
+
$roleSettings = [ 'useDefault', 'pageAnalysis' ];
|
91 |
+
|
92 |
+
foreach ( $seoPressRoles as $wpRole => $value ) {
|
93 |
+
$role = $this->roles[ $wpRole ];
|
94 |
+
if ( empty( $role ) || aioseo()->access->isAdmin( $role ) ) {
|
95 |
+
continue;
|
96 |
+
}
|
97 |
+
|
98 |
+
if ( aioseo()->options->accessControl->has( $role ) ) {
|
99 |
+
foreach ( $roleSettings as $setting ) {
|
100 |
+
aioseo()->options->accessControl->$role->$setting = false;
|
101 |
+
}
|
102 |
+
} elseif ( aioseo()->dynamicOptions->accessControl->has( $role ) ) {
|
103 |
+
foreach ( $roleSettings as $setting ) {
|
104 |
+
aioseo()->dynamicOptions->accessControl->$role->$setting = false;
|
105 |
+
}
|
106 |
+
}
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Migrates redirect attachment pages settings.
|
112 |
+
*
|
113 |
+
* @since 4.1.4
|
114 |
+
*
|
115 |
+
* @return void
|
116 |
+
*/
|
117 |
+
private function migrateAttachmentRedirects() {
|
118 |
+
if ( ! empty( $this->options['seopress_advanced_advanced_attachments'] ) ) {
|
119 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
|
120 |
+
}
|
121 |
+
|
122 |
+
if ( ! empty( $this->options['seopress_advanced_advanced_attachments_file'] ) ) {
|
123 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment';
|
124 |
+
}
|
125 |
+
|
126 |
+
if ( empty( $this->options['seopress_advanced_advanced_attachments'] ) && empty( $this->options['seopress_advanced_advanced_attachments_file'] ) ) {
|
127 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
|
128 |
+
}
|
129 |
+
}
|
130 |
+
}
|
app/Common/ImportExport/SeoPress/Helpers.php
CHANGED
@@ -13,25 +13,104 @@ use AIOSEO\Plugin\Common\ImportExport;
|
|
13 |
Â
/**
|
14 |
Â
* Contains helper methods for the import from SEOPress.
|
15 |
Â
*
|
16 |
-
* @since 4.
|
17 |
Â
*/
|
18 |
Â
class Helpers extends ImportExport\Helpers {
|
19 |
Â
/**
|
20 |
Â
* Converts the macros from SEOPress to our own smart tags.
|
21 |
Â
*
|
22 |
-
* @since 4.
|
23 |
Â
*
|
24 |
-
* @param string $string
|
25 |
-
* @
|
Â
|
|
26 |
Â
*/
|
27 |
-
public function macrosToSmartTags( $string ) {
|
28 |
-
$macros =
|
29 |
-
'%%tagline%%' => '#tagline',
|
30 |
-
];
|
31 |
Â
|
32 |
Â
foreach ( $macros as $macro => $tag ) {
|
33 |
Â
$string = aioseo()->helpers->pregReplace( "#$macro(?![a-zA-Z0-9_])#im", $tag, $string );
|
34 |
Â
}
|
35 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
36 |
Â
}
|
37 |
Â
}
|
13 |
Â
/**
|
14 |
Â
* Contains helper methods for the import from SEOPress.
|
15 |
Â
*
|
16 |
+
* @since 4.1.4
|
17 |
Â
*/
|
18 |
Â
class Helpers extends ImportExport\Helpers {
|
19 |
Â
/**
|
20 |
Â
* Converts the macros from SEOPress to our own smart tags.
|
21 |
Â
*
|
22 |
+
* @since 4.1.4
|
23 |
Â
*
|
24 |
+
* @param string $string The string with macros.
|
25 |
+
* @param string $pageType The page type.
|
26 |
+
* @return string $string The string with smart tags.
|
27 |
Â
*/
|
28 |
+
public function macrosToSmartTags( $string, $postType = null ) {
|
29 |
+
$macros = $this->getMacros( $postType );
|
Â
|
|
Â
|
|
30 |
Â
|
31 |
Â
foreach ( $macros as $macro => $tag ) {
|
32 |
Â
$string = aioseo()->helpers->pregReplace( "#$macro(?![a-zA-Z0-9_])#im", $tag, $string );
|
33 |
Â
}
|
34 |
+
|
35 |
+
return trim( $string );
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Returns the macro mappings.
|
40 |
+
*
|
41 |
+
* @since 4.1.4
|
42 |
+
*
|
43 |
+
* @param string $postType The post type.
|
44 |
+
* @param string $pageType The page type.
|
45 |
+
* @return array $macros The macros.
|
46 |
+
*/
|
47 |
+
protected function getMacros( $postType = null, $pageType = null ) {
|
48 |
+
$macros = [
|
49 |
+
'%%sep%%' => '#separator_sa',
|
50 |
+
'%%sitetitle%%' => '#site_title',
|
51 |
+
'%%sitename%%' => '#site_title',
|
52 |
+
'%%tagline%%' => '#tagline',
|
53 |
+
'%%sitedesc%%' => '#tagline',
|
54 |
+
'%%title%%' => '#site_title',
|
55 |
+
'%%post_title%%' => '#post_title',
|
56 |
+
'%%post_excerpt%%' => '#post_excerpt',
|
57 |
+
'%%excerpt%%' => '#post_excerpt',
|
58 |
+
'%%post_content%%' => '#post_content',
|
59 |
+
'%%post_url%%' => '#permalink',
|
60 |
+
'%%post_date%%' => '#post_date',
|
61 |
+
'%%post_permalink%%' => '#permalink',
|
62 |
+
'%%date%%' => '#post_date',
|
63 |
+
'%%post_author%%' => '#author_name',
|
64 |
+
'%%post_category%%' => '#categories',
|
65 |
+
'%%_category_title%%' => '#taxonomy_title',
|
66 |
+
'%%_category_description%%' => '#taxonomy_description',
|
67 |
+
'%%tag_title%%' => '#taxonomy_title',
|
68 |
+
'%%tag_description%%' => '#taxonomy_description',
|
69 |
+
'%%term_title%%' => '#taxonomy_title',
|
70 |
+
'%%term_description%%' => '#taxonomy_description',
|
71 |
+
'%%search_keywords%%' => '#search_term',
|
72 |
+
'%%current_pagination%%' => '#page_number',
|
73 |
+
'%%page%%' => '#page_number',
|
74 |
+
'%%archive_title%%' => '#archive_title',
|
75 |
+
'%%archive_date%%' => '#archive_date',
|
76 |
+
'%%wc_single_price%%' => '#woocommerce_price',
|
77 |
+
'%%wc_sku%%' => '#woocommerce_sku',
|
78 |
+
'%%currentday%%' => '#current_day',
|
79 |
+
'%%currentmonth%%' => '#current_month',
|
80 |
+
'%%currentmonth_short%%' => '#current_month',
|
81 |
+
'%%currentyear%%' => '#current_year',
|
82 |
+
'%%currentdate%%' => '#current_date',
|
83 |
+
'%%author_first_name%%' => '#author_first_name',
|
84 |
+
'%%author_last_name%%' => '#author_last_name',
|
85 |
+
'%%author_website%%' => '#author_link',
|
86 |
+
'%%author_nickname%%' => '#author_first_name',
|
87 |
+
'%%author_bio%%' => '#author_bio',
|
88 |
+
'%%currentmonth_num%%' => '#current_month',
|
89 |
+
];
|
90 |
+
|
91 |
+
if ( $postType ) {
|
92 |
+
$postType = get_post_type_object( $postType );
|
93 |
+
if ( ! empty( $postType ) ) {
|
94 |
+
$macros += [
|
95 |
+
'%%cpt_plural%%' => $postType->labels->name,
|
96 |
+
];
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
switch ( $pageType ) {
|
101 |
+
case 'archive':
|
102 |
+
$macros['%%title%%'] = '#archive_title';
|
103 |
+
break;
|
104 |
+
case 'term':
|
105 |
+
$macros['%%title%%'] = '#taxonomy_title';
|
106 |
+
break;
|
107 |
+
default:
|
108 |
+
$macros['%%title%%'] = '#post_title';
|
109 |
+
break;
|
110 |
+
}
|
111 |
+
|
112 |
+
// Strip all other tags.
|
113 |
+
$macros['%%[^%]*%%'] = '';
|
114 |
+
return $macros;
|
115 |
Â
}
|
116 |
Â
}
|
app/Common/ImportExport/SeoPress/PostMeta.php
ADDED
@@ -0,0 +1,174 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
use AIOSEO\Plugin\Common\Models;
|
10 |
+
|
11 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Imports the post meta from SEOPress.
|
15 |
+
*
|
16 |
+
* @since 4.1.4
|
17 |
+
*/
|
18 |
+
class PostMeta {
|
19 |
+
/**
|
20 |
+
* The mapped meta
|
21 |
+
*
|
22 |
+
* @since 4.1.4
|
23 |
+
*
|
24 |
+
* @var array
|
25 |
+
*/
|
26 |
+
private $mappedMeta = [
|
27 |
+
'_seopress_analysis_target_kw' => '',
|
28 |
+
'_seopress_robots_archive' => 'robots_noarchive',
|
29 |
+
'_seopress_robots_canonical' => 'canonical_url',
|
30 |
+
'_seopress_robots_follow' => 'robots_nofollow',
|
31 |
+
'_seopress_robots_imageindex' => 'robots_noimageindex',
|
32 |
+
'_seopress_robots_index' => 'robots_noindex',
|
33 |
+
'_seopress_robots_odp' => 'robots_noodp',
|
34 |
+
'_seopress_robots_snippet' => 'robots_nosnippet',
|
35 |
+
'_seopress_social_twitter_desc' => 'twitter_description',
|
36 |
+
'_seopress_social_twitter_img' => 'twitter_image_custom_url',
|
37 |
+
'_seopress_social_twitter_title' => 'twitter_title',
|
38 |
+
'_seopress_social_fb_desc' => 'og_description',
|
39 |
+
'_seopress_social_fb_img' => 'og_image_custom_url',
|
40 |
+
'_seopress_social_fb_title' => 'og_title',
|
41 |
+
'_seopress_titles_desc' => 'description',
|
42 |
+
'_seopress_titles_title' => 'title',
|
43 |
+
];
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Class constructor.
|
47 |
+
*
|
48 |
+
* @since 4.1.4
|
49 |
+
*/
|
50 |
+
public function scheduleImport() {
|
51 |
+
if ( aioseo()->helpers->scheduleSingleAction( aioseo()->importExport->seoPress->postActionName, 0 ) ) {
|
52 |
+
if ( ! aioseo()->transients->get( 'import_post_meta_seopress' ) ) {
|
53 |
+
aioseo()->transients->update( 'import_post_meta_seopress', time(), WEEK_IN_SECONDS );
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Imports the post meta.
|
60 |
+
*
|
61 |
+
* @since 4.1.4
|
62 |
+
*
|
63 |
+
* @return void
|
64 |
+
*/
|
65 |
+
public function importPostMeta() {
|
66 |
+
$postsPerAction = 100;
|
67 |
+
$publicPostTypes = implode( "', '", aioseo()->helpers->getPublicPostTypes( true ) );
|
68 |
+
$timeStarted = gmdate( 'Y-m-d H:i:s', aioseo()->transients->get( 'import_post_meta_seopress' ) );
|
69 |
+
|
70 |
+
$posts = aioseo()->db
|
71 |
+
->start( 'posts as p' )
|
72 |
+
->select( 'p.ID, p.post_type' )
|
73 |
+
->join( 'postmeta as pm', '`p`.`ID` = `pm`.`post_id`' )
|
74 |
+
->leftJoin( 'aioseo_posts as ap', '`p`.`ID` = `ap`.`post_id`' )
|
75 |
+
->whereRaw( "pm.meta_key LIKE '_seopress_%'" )
|
76 |
+
->whereRaw( "( p.post_type IN ( '$publicPostTypes' ) )" )
|
77 |
+
->whereRaw( "( ap.post_id IS NULL OR ap.updated < '$timeStarted' )" )
|
78 |
+
->orderBy( 'p.ID DESC' )
|
79 |
+
->limit( $postsPerAction )
|
80 |
+
->run()
|
81 |
+
->result();
|
82 |
+
|
83 |
+
if ( ! $posts || ! count( $posts ) ) {
|
84 |
+
aioseo()->transients->delete( 'import_post_meta_seopress' );
|
85 |
+
return;
|
86 |
+
}
|
87 |
+
|
88 |
+
foreach ( $posts as $post ) {
|
89 |
+
$postMeta = aioseo()->db
|
90 |
+
->start( 'postmeta' . ' as pm' )
|
91 |
+
->select( 'pm.meta_key, pm.meta_value' )
|
92 |
+
->where( 'pm.post_id', $post->ID )
|
93 |
+
->whereRaw( "`pm`.`meta_key` LIKE '_seopress_%'" )
|
94 |
+
->run()
|
95 |
+
->result();
|
96 |
+
|
97 |
+
if ( ! $postMeta || ! count( $postMeta ) ) {
|
98 |
+
continue;
|
99 |
+
}
|
100 |
+
|
101 |
+
$meta = array_merge( [
|
102 |
+
'post_id' => (int) $post->ID,
|
103 |
+
], $this->getMetaData( $postMeta, $post->ID ) );
|
104 |
+
|
105 |
+
$aioseoPost = Models\Post::getPost( (int) $post->ID );
|
106 |
+
$aioseoPost->set( $meta );
|
107 |
+
$aioseoPost->save();
|
108 |
+
}
|
109 |
+
|
110 |
+
if ( count( $posts ) === $postsPerAction ) {
|
111 |
+
aioseo()->helpers->scheduleSingleAction( aioseo()->importExport->seoPress->postActionName, 5 );
|
112 |
+
} else {
|
113 |
+
aioseo()->transients->delete( 'import_post_meta_seopress' );
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Get the meta data by post meta.
|
119 |
+
*
|
120 |
+
* @since 4.1.4
|
121 |
+
*
|
122 |
+
* @param object $postMeta The post meta from database.
|
123 |
+
* @return array The meta data.
|
124 |
+
*/
|
125 |
+
public function getMetaData( $postMeta, $post_id ) {
|
126 |
+
$meta = [];
|
127 |
+
foreach ( $postMeta as $record ) {
|
128 |
+
$name = $record->meta_key;
|
129 |
+
$value = $record->meta_value;
|
130 |
+
|
131 |
+
if ( ! in_array( $name, array_keys( $this->mappedMeta ), true ) ) {
|
132 |
+
continue;
|
133 |
+
}
|
134 |
+
|
135 |
+
switch ( $name ) {
|
136 |
+
case '_seopress_analysis_target_kw':
|
137 |
+
$keyphrase = [
|
138 |
+
'focus' => [ 'keyphrase' => aioseo()->helpers->sanitizeOption( $value ) ],
|
139 |
+
'additional' => []
|
140 |
+
];
|
141 |
+
$meta['keyphrases'] = wp_json_encode( $keyphrase );
|
142 |
+
break;
|
143 |
+
case '_seopress_robots_snippet':
|
144 |
+
case '_seopress_robots_archive':
|
145 |
+
case '_seopress_robots_imageindex':
|
146 |
+
case '_seopress_robots_odp':
|
147 |
+
case '_seopress_robots_follow':
|
148 |
+
case '_seopress_robots_index':
|
149 |
+
if ( 'yes' === $value ) {
|
150 |
+
$meta['robots_default'] = false;
|
151 |
+
$meta[ $this->mappedMeta[ $name ] ] = true;
|
152 |
+
}
|
153 |
+
break;
|
154 |
+
case '_seopress_social_twitter_img':
|
155 |
+
$meta['twitter_use_og'] = false;
|
156 |
+
$meta['twitter_image_type'] = 'custom_image';
|
157 |
+
$meta[ $this->mappedMeta[ $name ] ] = esc_url( $value );
|
158 |
+
break;
|
159 |
+
case '_seopress_social_fb_img':
|
160 |
+
$meta['og_image_type'] = 'custom_image';
|
161 |
+
$meta[ $this->mappedMeta[ $name ] ] = esc_url( $value );
|
162 |
+
break;
|
163 |
+
case '_seopress_titles_title':
|
164 |
+
case '_seopress_titles_desc':
|
165 |
+
$value = aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $value );
|
166 |
+
default:
|
167 |
+
$meta[ $this->mappedMeta[ $name ] ] = esc_html( wp_strip_all_tags( strval( $value ) ) );
|
168 |
+
break;
|
169 |
+
}
|
170 |
+
}
|
171 |
+
|
172 |
+
return $meta;
|
173 |
+
}
|
174 |
+
}
|
app/Common/ImportExport/SeoPress/RobotsTxt.php
ADDED
@@ -0,0 +1,50 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Migrates the robots.txt settings.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class RobotsTxt {
|
17 |
+
/**
|
18 |
+
* Class constructor.
|
19 |
+
*
|
20 |
+
* @since 4.1.4
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
$this->options = get_option( 'seopress_pro_option_name' );
|
24 |
+
if ( empty( $this->options ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$this->migrateRobotsTxt();
|
29 |
+
|
30 |
+
$settings = [
|
31 |
+
'seopress_robots_enable' => [ 'type' => 'boolean', 'newOption' => [ 'tools', 'robots', 'enable' ] ],
|
32 |
+
];
|
33 |
+
|
34 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Migrates the robots.txt.
|
39 |
+
*
|
40 |
+
* @since 4.1.4
|
41 |
+
*
|
42 |
+
* @return void
|
43 |
+
*/
|
44 |
+
public function migrateRobotsTxt() {
|
45 |
+
$lines = explode( "\n", $this->options['seopress_robots_file'] );
|
46 |
+
$allRules = aioseo()->robotsTxt->extractRules( $lines );
|
47 |
+
|
48 |
+
aioseo()->options->tools->robots->rules = aioseo()->robotsTxt->prepareRobotsTxt( $allRules );
|
49 |
+
}
|
50 |
+
}
|
app/Common/ImportExport/SeoPress/Rss.php
ADDED
@@ -0,0 +1,47 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Migrates the RSS settings.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class Rss {
|
17 |
+
/**
|
18 |
+
* Class constructor.
|
19 |
+
*
|
20 |
+
* @since 4.1.4
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
$this->options = get_option( 'seopress_pro_option_name' );
|
24 |
+
if ( empty( $this->options ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$this->migrateRss();
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Migrates the RSS settings.
|
33 |
+
*
|
34 |
+
* @since 4.1.4
|
35 |
+
*
|
36 |
+
* @return void
|
37 |
+
*/
|
38 |
+
public function migrateRss() {
|
39 |
+
if ( ! empty( $this->options['seopress_rss_before_html'] ) ) {
|
40 |
+
aioseo()->options->rssContent->before = esc_html( aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $this->options['seopress_rss_before_html'] ) );
|
41 |
+
}
|
42 |
+
|
43 |
+
if ( ! empty( $this->options['seopress_rss_after_html'] ) ) {
|
44 |
+
aioseo()->options->rssContent->after = esc_html( aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $this->options['seopress_rss_after_html'] ) );
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
app/Common/ImportExport/SeoPress/SearchAppearance.php
DELETED
@@ -1,46 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
-
|
4 |
-
// Exit if accessed directly.
|
5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
-
exit;
|
7 |
-
}
|
8 |
-
|
9 |
-
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Migrates the Search Appearance settings.
|
13 |
-
*
|
14 |
-
* @since 4.0.0
|
15 |
-
*/
|
16 |
-
class SearchAppearance {
|
17 |
-
/**
|
18 |
-
* Class constructor.
|
19 |
-
*
|
20 |
-
* @since 4.0.0
|
21 |
-
*/
|
22 |
-
public function __construct() {
|
23 |
-
$this->options = get_option( 'seopress_titles_option_name' );
|
24 |
-
if ( empty( $this->options ) ) {
|
25 |
-
return;
|
26 |
-
}
|
27 |
-
|
28 |
-
$this->migrateTitleFormats();
|
29 |
-
|
30 |
-
}
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Migrates the title format settings.
|
34 |
-
*
|
35 |
-
* @since 4.0.0
|
36 |
-
*
|
37 |
-
* @return void
|
38 |
-
*/
|
39 |
-
private function migrateTitleFormats() {
|
40 |
-
if ( isset( $this->options['seopress_titles_home_site_title'] ) ) {
|
41 |
-
aioseo()->options->searchAppearance->global->siteTitle =
|
42 |
-
aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $this->options['seopress_titles_home_site_title'] );
|
43 |
-
}
|
44 |
-
}
|
45 |
-
|
46 |
-
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
app/Common/ImportExport/SeoPress/SeoPress.php
CHANGED
@@ -6,28 +6,74 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
6 |
Â
exit;
|
7 |
Â
}
|
8 |
Â
|
9 |
-
|
Â
|
|
Â
|
|
10 |
Â
/**
|
11 |
-
*
|
12 |
Â
*
|
13 |
-
* @since 4.
|
14 |
Â
*
|
15 |
-
* @
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
16 |
Â
*/
|
17 |
-
public
|
18 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
19 |
Â
}
|
20 |
Â
|
21 |
Â
/**
|
22 |
Â
* Imports the settings.
|
23 |
Â
*
|
24 |
-
* @since 4.
|
25 |
Â
*
|
26 |
Â
* @return void
|
27 |
Â
*/
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
new
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
32 |
Â
}
|
33 |
Â
}
|
6 |
Â
exit;
|
7 |
Â
}
|
8 |
Â
|
9 |
+
use AIOSEO\Plugin\Common\ImportExport;
|
10 |
+
|
11 |
+
class SeoPress extends ImportExport\Importer {
|
12 |
Â
/**
|
13 |
+
* A list of plugins to look for to import.
|
14 |
Â
*
|
15 |
+
* @since 4.1.4
|
16 |
Â
*
|
17 |
+
* @var array
|
18 |
+
*/
|
19 |
+
public $plugins = [
|
20 |
+
[
|
21 |
+
'name' => 'SEOPress',
|
22 |
+
'version' => '4.0',
|
23 |
+
'basename' => 'wp-seopress/seopress.php',
|
24 |
+
'slug' => 'seopress'
|
25 |
+
],
|
26 |
+
[
|
27 |
+
'name' => 'SEOPress PRO',
|
28 |
+
'version' => '4.0',
|
29 |
+
'basename' => 'wp-seopress-pro/seopress-pro.php',
|
30 |
+
'slug' => 'seopress-pro'
|
31 |
+
],
|
32 |
+
];
|
33 |
+
|
34 |
+
/**
|
35 |
+
* The post action name.
|
36 |
+
*
|
37 |
+
* @since 4.1.4
|
38 |
+
*
|
39 |
+
* @var string
|
40 |
Â
*/
|
41 |
+
public $postActionName = 'aioseo_import_post_meta_seopress';
|
42 |
+
|
43 |
+
/**
|
44 |
+
* The post action name.
|
45 |
+
*
|
46 |
+
* @since 4.1.4
|
47 |
+
*
|
48 |
+
* @param ImportExport $importer The main importer class.
|
49 |
+
*/
|
50 |
+
public function __construct( $importer ) {
|
51 |
+
$this->helpers = new Helpers();
|
52 |
+
$this->postMeta = new PostMeta();
|
53 |
+
add_action( $this->postActionName, [ $this->postMeta, 'importPostMeta' ] );
|
54 |
+
|
55 |
+
$plugins = $this->plugins;
|
56 |
+
foreach ( $plugins as $key => $plugin ) {
|
57 |
+
$plugins[ $key ]['class'] = $this;
|
58 |
+
}
|
59 |
+
$importer->addPlugins( $plugins );
|
60 |
Â
}
|
61 |
Â
|
62 |
Â
/**
|
63 |
Â
* Imports the settings.
|
64 |
Â
*
|
65 |
+
* @since 4.1.4
|
66 |
Â
*
|
67 |
Â
* @return void
|
68 |
Â
*/
|
69 |
+
protected function importSettings() {
|
70 |
+
new GeneralSettings();
|
71 |
+
new Analytics();
|
72 |
+
new SocialMeta();
|
73 |
+
new Titles();
|
74 |
+
new Sitemap();
|
75 |
+
new RobotsTxt();
|
76 |
+
new Rss();
|
77 |
+
new Breadcrumbs();
|
78 |
Â
}
|
79 |
Â
}
|
app/Common/ImportExport/SeoPress/Sitemap.php
ADDED
@@ -0,0 +1,74 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Migrates the Sitemap Settings.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class Sitemap {
|
17 |
+
/**
|
18 |
+
* Class constructor.
|
19 |
+
*
|
20 |
+
* @since 4.1.4
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
$this->options = get_option( 'seopress_xml_sitemap_option_name' );
|
24 |
+
if ( empty( $this->options ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$this->migratePostTypesInclude();
|
29 |
+
$this->migrateTaxonomiesInclude();
|
30 |
+
|
31 |
+
$settings = [
|
32 |
+
'seopress_xml_sitemap_general_enable' => [ 'type' => 'boolean', 'newOption' => [ 'sitemap', 'general', 'enable' ] ],
|
33 |
+
'seopress_xml_sitemap_author_enable' => [ 'type' => 'boolean', 'newOption' => [ 'sitemap', 'general', 'author' ] ],
|
34 |
+
];
|
35 |
+
|
36 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Migrates the post types to include in sitemap settings.
|
41 |
+
*
|
42 |
+
* @since 4.1.4
|
43 |
+
*
|
44 |
+
* @return void
|
45 |
+
*/
|
46 |
+
public function migratePostTypesInclude() {
|
47 |
+
$postTypesMigrate = $this->options['seopress_xml_sitemap_post_types_list'];
|
48 |
+
$postTypesInclude = [];
|
49 |
+
|
50 |
+
foreach ( $postTypesMigrate as $postType => $options ) {
|
51 |
+
$postTypesInclude[] = $postType;
|
52 |
+
}
|
53 |
+
|
54 |
+
aioseo()->options->sitemap->general->postTypes->included = $postTypesInclude;
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Migrates the taxonomies to include in sitemap settings.
|
59 |
+
*
|
60 |
+
* @since 4.1.4
|
61 |
+
*
|
62 |
+
* @return void
|
63 |
+
*/
|
64 |
+
public function migrateTaxonomiesInclude() {
|
65 |
+
$taxonomiesMigrate = $this->options['seopress_xml_sitemap_taxonomies_list'];
|
66 |
+
$taxonomiesInclude = [];
|
67 |
+
|
68 |
+
foreach ( $taxonomiesMigrate as $taxonomy => $options ) {
|
69 |
+
$taxonomiesInclude[] = $taxonomy;
|
70 |
+
}
|
71 |
+
|
72 |
+
aioseo()->options->sitemap->general->taxonomies->included = $taxonomiesInclude;
|
73 |
+
}
|
74 |
+
}
|
app/Common/ImportExport/SeoPress/SocialMeta.php
ADDED
@@ -0,0 +1,130 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Migrates the Social Meta Settings.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class SocialMeta {
|
17 |
+
/**
|
18 |
+
* Class constructor.
|
19 |
+
*
|
20 |
+
* @since 4.1.4
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
$this->options = get_option( 'seopress_social_option_name' );
|
24 |
+
if ( empty( $this->options ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$this->migrateSocialUrls();
|
29 |
+
$this->migrateKnowledge();
|
30 |
+
$this->migrateFacebookSettings();
|
31 |
+
$this->migrateTwitterSettings();
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Migrates Basic Social Profiles URLs.
|
36 |
+
*
|
37 |
+
* @since 4.1.4
|
38 |
+
*
|
39 |
+
* @return void
|
40 |
+
*/
|
41 |
+
private function migrateSocialUrls() {
|
42 |
+
$settings = [
|
43 |
+
'seopress_social_accounts_facebook' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'facebookPageUrl' ] ],
|
44 |
+
'seopress_social_accounts_twitter' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'twitterUrl' ] ],
|
45 |
+
'seopress_social_accounts_pinterest' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'pinterestUrl' ] ],
|
46 |
+
'seopress_social_accounts_instagram' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'instagramUrl' ] ],
|
47 |
+
'seopress_social_accounts_youtube' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'youtubeUrl' ] ],
|
48 |
+
'seopress_social_accounts_linkedin' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'linkedinUrl' ] ],
|
49 |
+
'seopress_social_accounts_myspace' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'myspaceUrl' ] ],
|
50 |
+
'seopress_social_accounts_soundcloud' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'soundCloudUrl' ] ],
|
51 |
+
'seopress_social_accounts_tumblr' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'tumblrUrl' ] ],
|
52 |
+
];
|
53 |
+
|
54 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Migrates Knowledge Graph data.
|
59 |
+
*
|
60 |
+
* @since 4.1.4
|
61 |
+
*
|
62 |
+
* @return void
|
63 |
+
*/
|
64 |
+
private function migrateKnowledge() {
|
65 |
+
$type = 'organization';
|
66 |
+
if ( ! empty( $this->options['seopress_social_knowledge_type'] ) ) {
|
67 |
+
$type = strtolower( $this->options['seopress_social_knowledge_type'] );
|
68 |
+
if ( 'person' === $type ) {
|
69 |
+
aioseo()->options->searchAppearance->global->schema->person = 'manual';
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
aioseo()->options->searchAppearance->global->schema->siteRepresents = $type;
|
74 |
+
|
75 |
+
if ( ! empty( $this->options['seopress_social_knowledge_contact_type'] ) ) {
|
76 |
+
aioseo()->options->searchAppearance->global->schema->contactType = ucwords( $this->options['seopress_social_knowledge_contact_type'] );
|
77 |
+
}
|
78 |
+
|
79 |
+
$settings = [
|
80 |
+
'seopress_social_knowledge_img' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', $type . 'Logo' ] ],
|
81 |
+
'seopress_social_knowledge_name' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', $type . 'Name' ] ],
|
82 |
+
'seopress_social_knowledge_phone' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'schema', 'phone' ] ],
|
83 |
+
];
|
84 |
+
|
85 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Migrates the Facebook settings.
|
90 |
+
*
|
91 |
+
* @since 4.1.4
|
92 |
+
*
|
93 |
+
* @return void
|
94 |
+
*/
|
95 |
+
private function migrateFacebookSettings() {
|
96 |
+
if ( ! empty( $this->options['seopress_social_facebook_admin_id'] ) || ! empty( $this->options['seopress_social_facebook_app_id'] ) ) {
|
97 |
+
aioseo()->options->social->facebook->advanced->enable = true;
|
98 |
+
}
|
99 |
+
|
100 |
+
$settings = [
|
101 |
+
'seopress_social_facebook_og' => [ 'type' => 'boolean', 'newOption' => [ 'social', 'facebook', 'general', 'enable' ] ],
|
102 |
+
'seopress_social_facebook_img' => [ 'type' => 'string', 'newOption' => [ 'social', 'facebook', 'homePage', 'image' ] ],
|
103 |
+
'seopress_social_facebook_admin_id' => [ 'type' => 'string', 'newOption' => [ 'social', 'facebook', 'advanced', 'adminId' ] ],
|
104 |
+
'seopress_social_facebook_app_id' => [ 'type' => 'string', 'newOption' => [ 'social', 'facebook', 'advanced', 'appId' ] ],
|
105 |
+
];
|
106 |
+
|
107 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Migrates the Twitter settings.
|
112 |
+
*
|
113 |
+
* @since 4.1.4
|
114 |
+
*
|
115 |
+
* @return void
|
116 |
+
*/
|
117 |
+
private function migrateTwitterSettings() {
|
118 |
+
if ( ! empty( $this->options['seopress_social_twitter_card_img_size'] ) ) {
|
119 |
+
$twitterCard = ( 'large' === $this->options['seopress_social_twitter_card_img_size'] ) ? 'summary-card' : 'summary';
|
120 |
+
aioseo()->options->social->twitter->general->defaultCardType = $twitterCard;
|
121 |
+
}
|
122 |
+
|
123 |
+
$settings = [
|
124 |
+
'seopress_social_twitter_card' => [ 'type' => 'boolean', 'newOption' => [ 'social', 'twitter', 'general', 'enable' ] ],
|
125 |
+
'seopress_social_twitter_card_img' => [ 'type' => 'string', 'newOption' => [ 'social', 'twitter', 'homePage', 'image' ] ],
|
126 |
+
];
|
127 |
+
|
128 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
129 |
+
}
|
130 |
+
}
|
app/Common/ImportExport/SeoPress/Titles.php
ADDED
@@ -0,0 +1,288 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\SeoPress;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Migrates the Titles Settings.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class Titles {
|
17 |
+
/**
|
18 |
+
* Class constructor.
|
19 |
+
*
|
20 |
+
* @since 4.1.4
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
$this->options = get_option( 'seopress_titles_option_name' );
|
24 |
+
if ( empty( $this->options ) ) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
if (
|
29 |
+
! empty( $this->options['seopress_titles_archives_author_title'] ) ||
|
30 |
+
! empty( $this->options['seopress_titles_archives_author_desc'] ) ||
|
31 |
+
! empty( $this->options['seopress_titles_archives_author_noindex'] )
|
32 |
+
) {
|
33 |
+
aioseo()->options->searchAppearance->archives->author->show = true;
|
34 |
+
}
|
35 |
+
|
36 |
+
if (
|
37 |
+
! empty( $this->options['seopress_titles_archives_date_title'] ) ||
|
38 |
+
! empty( $this->options['seopress_titles_archives_date_desc'] ) ||
|
39 |
+
! empty( $this->options['seopress_titles_archives_date_noindex'] )
|
40 |
+
) {
|
41 |
+
aioseo()->options->searchAppearance->archives->date->show = true;
|
42 |
+
}
|
43 |
+
|
44 |
+
if (
|
45 |
+
! empty( $this->options['seopress_titles_archives_search_title'] ) ||
|
46 |
+
! empty( $this->options['seopress_titles_archives_search_desc'] )
|
47 |
+
) {
|
48 |
+
aioseo()->options->searchAppearance->archives->search->show = true;
|
49 |
+
}
|
50 |
+
|
51 |
+
$this->migrateTitleFormats();
|
52 |
+
$this->migrateDescriptionFormats();
|
53 |
+
$this->migrateNoIndexFormats();
|
54 |
+
$this->migratePostTypeSettings();
|
55 |
+
$this->migrateTaxonomiesSettings();
|
56 |
+
$this->migrateArchiveSettings();
|
57 |
+
$this->migrateAdvancedSettings();
|
58 |
+
|
59 |
+
$settings = [
|
60 |
+
'seopress_titles_sep' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'separator' ] ],
|
61 |
+
];
|
62 |
+
|
63 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options, true );
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Migrates the title formats.
|
68 |
+
*
|
69 |
+
* @since 4.1.4
|
70 |
+
*
|
71 |
+
* @return void
|
72 |
+
*/
|
73 |
+
private function migrateTitleFormats() {
|
74 |
+
$settings = [
|
75 |
+
'seopress_titles_home_site_title' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'siteTitle' ] ],
|
76 |
+
'seopress_titles_archives_author_title' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'author', 'title' ] ],
|
77 |
+
'seopress_titles_archives_date_title' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'date', 'title' ] ],
|
78 |
+
'seopress_titles_archives_search_title' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'search', 'title' ] ],
|
79 |
+
];
|
80 |
+
|
81 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options, true );
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Migrates the description formats.
|
86 |
+
*
|
87 |
+
* @since 4.1.4
|
88 |
+
*
|
89 |
+
* @return void
|
90 |
+
*/
|
91 |
+
private function migrateDescriptionFormats() {
|
92 |
+
$settings = [
|
93 |
+
'seopress_titles_home_site_desc' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'global', 'metaDescription' ] ],
|
94 |
+
'seopress_titles_archives_author_desc' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'author', 'metaDescription' ] ],
|
95 |
+
'seopress_titles_archives_date_desc' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'date', 'metaDescription' ] ],
|
96 |
+
'seopress_titles_archives_search_desc' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'search', 'metaDescription' ] ],
|
97 |
+
];
|
98 |
+
|
99 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options, true );
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Migrates the NoIndex formats.
|
104 |
+
*
|
105 |
+
* @since 4.1.4
|
106 |
+
*
|
107 |
+
* @return void
|
108 |
+
*/
|
109 |
+
private function migrateNoIndexFormats() {
|
110 |
+
$settings = [
|
111 |
+
'seopress_titles_archives_author_noindex' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'archives', 'author', 'show' ] ],
|
112 |
+
'seopress_titles_archives_date_noindex' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'archives', 'date', 'show' ] ],
|
113 |
+
];
|
114 |
+
|
115 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Migrates the post type settings.
|
120 |
+
*
|
121 |
+
* @since 4.1.4
|
122 |
+
*
|
123 |
+
* @return void
|
124 |
+
*/
|
125 |
+
private function migratePostTypeSettings() {
|
126 |
+
$titles = $this->options['seopress_titles_single_titles'];
|
127 |
+
if ( empty( $titles ) ) {
|
128 |
+
return;
|
129 |
+
}
|
130 |
+
|
131 |
+
foreach ( $titles as $postType => $options ) {
|
132 |
+
if ( ! aioseo()->dynamicOptions->searchAppearance->postTypes->has( $postType ) ) {
|
133 |
+
continue;
|
134 |
+
}
|
135 |
+
|
136 |
+
if ( ! empty( $options['title'] ) ) {
|
137 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->title =
|
138 |
+
aioseo()->helpers->sanitizeOption( aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $options['title'] ) );
|
139 |
+
}
|
140 |
+
|
141 |
+
if ( ! empty( $options['description'] ) ) {
|
142 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->metaDescription =
|
143 |
+
aioseo()->helpers->sanitizeOption( aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $options['description'] ) );
|
144 |
+
}
|
145 |
+
|
146 |
+
if ( ! empty( $options['enable'] ) ) {
|
147 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->showMetaBox = false;
|
148 |
+
}
|
149 |
+
|
150 |
+
if ( ! empty( $options['noindex'] ) ) {
|
151 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->show = false;
|
152 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
|
153 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = true;
|
154 |
+
}
|
155 |
+
|
156 |
+
if ( ! empty( $options['nofollow'] ) ) {
|
157 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->show = false;
|
158 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
|
159 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->nofollow = true;
|
160 |
+
}
|
161 |
+
|
162 |
+
if ( ! empty( $options['date'] ) ) {
|
163 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->showDateInGooglePreview = false;
|
164 |
+
}
|
165 |
+
|
166 |
+
if ( ! empty( $options['thumb_gcs'] ) ) {
|
167 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->showPostThumbnailInSearch = true;
|
168 |
+
}
|
169 |
+
}
|
170 |
+
}
|
171 |
+
|
172 |
+
/**
|
173 |
+
* Migrates the taxonomies settings.
|
174 |
+
*
|
175 |
+
* @since 4.1.4
|
176 |
+
*
|
177 |
+
* @return void
|
178 |
+
*/
|
179 |
+
private function migrateTaxonomiesSettings() {
|
180 |
+
$titles = $this->options['seopress_titles_tax_titles'];
|
181 |
+
if ( empty( $titles ) ) {
|
182 |
+
return;
|
183 |
+
}
|
184 |
+
|
185 |
+
foreach ( $titles as $taxonomy => $options ) {
|
186 |
+
if ( ! aioseo()->dynamicOptions->searchAppearance->taxonomies->has( $taxonomy ) ) {
|
187 |
+
continue;
|
188 |
+
}
|
189 |
+
|
190 |
+
if ( ! empty( $options['title'] ) ) {
|
191 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->title =
|
192 |
+
aioseo()->helpers->sanitizeOption( aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $options['title'] ) );
|
193 |
+
}
|
194 |
+
|
195 |
+
if ( ! empty( $options['description'] ) ) {
|
196 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->metaDescription =
|
197 |
+
aioseo()->helpers->sanitizeOption( aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $options['description'] ) );
|
198 |
+
}
|
199 |
+
|
200 |
+
if ( ! empty( $options['enable'] ) ) {
|
201 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->showMetaBox = false;
|
202 |
+
}
|
203 |
+
|
204 |
+
if ( ! empty( $options['noindex'] ) ) {
|
205 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->show = false;
|
206 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->default = false;
|
207 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->noindex = true;
|
208 |
+
}
|
209 |
+
|
210 |
+
if ( ! empty( $options['nofollow'] ) ) {
|
211 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->show = false;
|
212 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->default = false;
|
213 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->nofollow = true;
|
214 |
+
}
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
/**
|
219 |
+
* Migrates the archives settings.
|
220 |
+
*
|
221 |
+
* @since 4.1.4
|
222 |
+
*
|
223 |
+
* @return void
|
224 |
+
*/
|
225 |
+
private function migrateArchiveSettings() {
|
226 |
+
$titles = $this->options['seopress_titles_archive_titles'];
|
227 |
+
if ( empty( $titles ) ) {
|
228 |
+
return;
|
229 |
+
}
|
230 |
+
|
231 |
+
foreach ( $titles as $archive => $options ) {
|
232 |
+
if ( ! aioseo()->dynamicOptions->searchAppearance->archives->has( $archive ) ) {
|
233 |
+
continue;
|
234 |
+
}
|
235 |
+
|
236 |
+
if ( ! empty( $options['title'] ) ) {
|
237 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->title =
|
238 |
+
aioseo()->helpers->sanitizeOption( aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $options['title'] ) );
|
239 |
+
}
|
240 |
+
|
241 |
+
if ( ! empty( $options['description'] ) ) {
|
242 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->metaDescription =
|
243 |
+
aioseo()->helpers->sanitizeOption( aioseo()->importExport->seoPress->helpers->macrosToSmartTags( $options['description'] ) );
|
244 |
+
}
|
245 |
+
|
246 |
+
if ( ! empty( $options['noindex'] ) ) {
|
247 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->show = false;
|
248 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->advanced->robotsMeta->default = false;
|
249 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->advanced->robotsMeta->noindex = true;
|
250 |
+
}
|
251 |
+
|
252 |
+
if ( ! empty( $options['nofollow'] ) ) {
|
253 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->show = false;
|
254 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->advanced->robotsMeta->default = false;
|
255 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->advanced->robotsMeta->nofollow = true;
|
256 |
+
}
|
257 |
+
}
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Migrates the advanced settings.
|
262 |
+
*
|
263 |
+
* @since 4.1.4
|
264 |
+
*
|
265 |
+
* @return void
|
266 |
+
*/
|
267 |
+
private function migrateAdvancedSettings() {
|
268 |
+
if (
|
269 |
+
! empty( $this->options['seopress_titles_noindex'] ) || ! empty( $this->options['seopress_titles_nofollow'] ) || ! empty( $this->options['seopress_titles_noodp'] ) ||
|
270 |
+
! empty( $this->options['seopress_titles_noimageindex'] ) || ! empty( $this->options['seopress_titles_noarchive'] ) ||
|
271 |
+
! empty( $this->options['seopress_titles_nosnippet'] ) || ! empty( $this->options['seopress_titles_paged_noindex'] )
|
272 |
+
) {
|
273 |
+
aioseo()->options->searchAppearance->advanced->globalRobotsMeta->default = false;
|
274 |
+
}
|
275 |
+
|
276 |
+
$settings = [
|
277 |
+
'seopress_titles_noindex' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'globalRobotsMeta', 'noindex' ] ],
|
278 |
+
'seopress_titles_nofollow' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'globalRobotsMeta', 'nofollow' ] ],
|
279 |
+
'seopress_titles_noodp' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'globalRobotsMeta', 'noodp' ] ],
|
280 |
+
'seopress_titles_noimageindex' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'globalRobotsMeta', 'noimageindex' ] ],
|
281 |
+
'seopress_titles_noarchive' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'globalRobotsMeta', 'noarchive' ] ],
|
282 |
+
'seopress_titles_nosnippet' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'globalRobotsMeta', 'nosnippet' ] ],
|
283 |
+
'seopress_titles_paged_noindex' => [ 'type' => 'boolean', 'newOption' => [ 'searchAppearance', 'advanced', 'globalRobotsMeta', 'noindexPaginated' ] ],
|
284 |
+
];
|
285 |
+
|
286 |
+
aioseo()->importExport->seoPress->helpers->mapOldToNew( $settings, $this->options );
|
287 |
+
}
|
288 |
+
}
|
app/Common/ImportExport/YoastSeo/GeneralSettings.php
CHANGED
@@ -25,8 +25,6 @@ class GeneralSettings {
|
|
25 |
Â
return;
|
26 |
Â
}
|
27 |
Â
|
28 |
-
$this->checkIfTrueSeoIsDisabled();
|
29 |
-
|
30 |
Â
$settings = [
|
31 |
Â
'googleverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
|
32 |
Â
'msverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
|
@@ -37,21 +35,4 @@ class GeneralSettings {
|
|
37 |
Â
|
38 |
Â
aioseo()->importExport->yoastSeo->helpers->mapOldToNew( $settings, $this->options );
|
39 |
Â
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Checks if TrueSEO should be disabled.
|
43 |
-
*
|
44 |
-
* @since 4.0.0
|
45 |
-
*
|
46 |
-
* @return void
|
47 |
-
*/
|
48 |
-
private function checkIfTrueSeoIsDisabled() {
|
49 |
-
if ( ! isset( $this->options['content_analysis_active'] ) || ! isset( $this->options['keyword_analysis_active'] ) ) {
|
50 |
-
return;
|
51 |
-
}
|
52 |
-
|
53 |
-
if ( ! $this->options['content_analysis_active'] && ! $this->options['keyword_analysis_active'] ) {
|
54 |
-
aioseo()->options->advanced->truSeo = false;
|
55 |
-
}
|
56 |
-
}
|
57 |
Â
}
|
25 |
Â
return;
|
26 |
Â
}
|
27 |
Â
|
Â
|
|
Â
|
|
28 |
Â
$settings = [
|
29 |
Â
'googleverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'google' ] ],
|
30 |
Â
'msverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'bing' ] ],
|
35 |
Â
|
36 |
Â
aioseo()->importExport->yoastSeo->helpers->mapOldToNew( $settings, $this->options );
|
37 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
38 |
Â
}
|
app/Common/ImportExport/YoastSeo/PostMeta.php
CHANGED
@@ -53,9 +53,7 @@ class PostMeta {
|
|
53 |
Â
$posts = aioseo()->db
|
54 |
Â
->start( 'posts' . ' as p' )
|
55 |
Â
->select( 'p.ID, p.post_type' )
|
56 |
-
->join( 'postmeta as pm', '`p`.`ID` = `pm`.`post_id`' )
|
57 |
Â
->leftJoin( 'aioseo_posts as ap', '`p`.`ID` = `ap`.`post_id`' )
|
58 |
-
->whereRaw( "pm.meta_key LIKE '_yoast_wpseo_%'" )
|
59 |
Â
->whereRaw( "( p.post_type IN ( '$publicPostTypes' ) )" )
|
60 |
Â
->whereRaw( "( ap.post_id IS NULL OR ap.updated < '$timeStarted' )" )
|
61 |
Â
->orderBy( 'p.ID DESC' )
|
@@ -84,7 +82,8 @@ class PostMeta {
|
|
84 |
Â
'_yoast_wpseo_twitter-description' => 'twitter_description',
|
85 |
Â
'_yoast_wpseo_twitter-image' => 'twitter_image_custom_url',
|
86 |
Â
'_yoast_wpseo_schema_page_type' => '',
|
87 |
-
'_yoast_wpseo_schema_article_type' => ''
|
Â
|
|
88 |
Â
];
|
89 |
Â
|
90 |
Â
foreach ( $posts as $post ) {
|
@@ -96,14 +95,25 @@ class PostMeta {
|
|
96 |
Â
->run()
|
97 |
Â
->result();
|
98 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
99 |
Â
if ( ! $postMeta || ! count( $postMeta ) ) {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
100 |
Â
continue;
|
101 |
Â
}
|
102 |
Â
|
103 |
-
$
|
104 |
-
'post_id' => (int) $post->ID,
|
105 |
-
];
|
106 |
-
|
107 |
Â
foreach ( $postMeta as $record ) {
|
108 |
Â
$name = $record->meta_key;
|
109 |
Â
$value = $record->meta_value;
|
@@ -113,6 +123,17 @@ class PostMeta {
|
|
113 |
Â
}
|
114 |
Â
|
115 |
Â
switch ( $name ) {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
116 |
Â
case '_yoast_wpseo_meta-robots-noindex':
|
117 |
Â
case '_yoast_wpseo_meta-robots-nofollow':
|
118 |
Â
if ( (bool) $value ) {
|
@@ -205,20 +226,39 @@ class PostMeta {
|
|
205 |
Â
case '_yoast_wpseo_metadesc':
|
206 |
Â
case '_yoast_wpseo_opengraph-title':
|
207 |
Â
case '_yoast_wpseo_opengraph-description':
|
Â
|
|
Â
|
|
208 |
Â
if ( 'page' === $post->post_type ) {
|
209 |
Â
$value = aioseo()->helpers->pregReplace( '#%%primary_category%%#', '', $value );
|
210 |
Â
$value = aioseo()->helpers->pregReplace( '#%%excerpt%%#', '', $value );
|
211 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
212 |
Â
$value = aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, 'post', $post->post_type );
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
213 |
Â
default:
|
214 |
Â
$meta[ $mappedMeta[ $name ] ] = esc_html( wp_strip_all_tags( strval( $value ) ) );
|
215 |
Â
break;
|
216 |
Â
}
|
217 |
Â
}
|
218 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
219 |
Â
$aioseoPost = Models\Post::getPost( (int) $post->ID );
|
220 |
Â
$aioseoPost->set( $meta );
|
221 |
Â
$aioseoPost->save();
|
Â
|
|
Â
|
|
222 |
Â
}
|
223 |
Â
|
224 |
Â
if ( count( $posts ) === $postsPerAction ) {
|
53 |
Â
$posts = aioseo()->db
|
54 |
Â
->start( 'posts' . ' as p' )
|
55 |
Â
->select( 'p.ID, p.post_type' )
|
Â
|
|
56 |
Â
->leftJoin( 'aioseo_posts as ap', '`p`.`ID` = `ap`.`post_id`' )
|
Â
|
|
57 |
Â
->whereRaw( "( p.post_type IN ( '$publicPostTypes' ) )" )
|
58 |
Â
->whereRaw( "( ap.post_id IS NULL OR ap.updated < '$timeStarted' )" )
|
59 |
Â
->orderBy( 'p.ID DESC' )
|
82 |
Â
'_yoast_wpseo_twitter-description' => 'twitter_description',
|
83 |
Â
'_yoast_wpseo_twitter-image' => 'twitter_image_custom_url',
|
84 |
Â
'_yoast_wpseo_schema_page_type' => '',
|
85 |
+
'_yoast_wpseo_schema_article_type' => '',
|
86 |
+
'_yoast_wpseo_primary_category' => 'og_article_section'
|
87 |
Â
];
|
88 |
Â
|
89 |
Â
foreach ( $posts as $post ) {
|
95 |
Â
->run()
|
96 |
Â
->result();
|
97 |
Â
|
98 |
+
$categories = aioseo()->helpers->getAllCategories( $post->ID );
|
99 |
+
$featuredImage = get_the_post_thumbnail_url( $post->ID );
|
100 |
+
$meta = [
|
101 |
+
'post_id' => (int) $post->ID,
|
102 |
+
'twitter_use_og' => true,
|
103 |
+
'og_image_type' => $featuredImage ? 'featured' : 'content',
|
104 |
+
'og_article_section' => ! empty( $categories ) ? $categories[0] : null
|
105 |
+
];
|
106 |
+
|
107 |
Â
if ( ! $postMeta || ! count( $postMeta ) ) {
|
108 |
+
$aioseoPost = Models\Post::getPost( (int) $post->ID );
|
109 |
+
$aioseoPost->set( $meta );
|
110 |
+
$aioseoPost->save();
|
111 |
+
|
112 |
+
aioseo()->migration->meta->migrateAdditionalPostMeta( $post->ID );
|
113 |
Â
continue;
|
114 |
Â
}
|
115 |
Â
|
116 |
+
$title = '';
|
Â
|
|
Â
|
|
Â
|
|
117 |
Â
foreach ( $postMeta as $record ) {
|
118 |
Â
$name = $record->meta_key;
|
119 |
Â
$value = $record->meta_value;
|
123 |
Â
}
|
124 |
Â
|
125 |
Â
switch ( $name ) {
|
126 |
+
case '_yoast_wpseo_primary_category':
|
127 |
+
$primaryCategory = get_cat_name( $value );
|
128 |
+
foreach ( $categories as $category ) {
|
129 |
+
if ( aioseo()->helpers->toLowerCase( $primaryCategory ) === aioseo()->helpers->toLowerCase( $category ) ) {
|
130 |
+
$meta[ $mappedMeta[ $name ] ] = $category;
|
131 |
+
break 2;
|
132 |
+
}
|
133 |
+
}
|
134 |
+
|
135 |
+
$meta[ $mappedMeta[ $name ] ] = ! empty( $categories ) ? $categories[0] : ( ! empty( $primaryCategory ) ? $primaryCategory : '' );
|
136 |
+
break;
|
137 |
Â
case '_yoast_wpseo_meta-robots-noindex':
|
138 |
Â
case '_yoast_wpseo_meta-robots-nofollow':
|
139 |
Â
if ( (bool) $value ) {
|
226 |
Â
case '_yoast_wpseo_metadesc':
|
227 |
Â
case '_yoast_wpseo_opengraph-title':
|
228 |
Â
case '_yoast_wpseo_opengraph-description':
|
229 |
+
case '_yoast_wpseo_twitter-title':
|
230 |
+
case '_yoast_wpseo_twitter-description':
|
231 |
Â
if ( 'page' === $post->post_type ) {
|
232 |
Â
$value = aioseo()->helpers->pregReplace( '#%%primary_category%%#', '', $value );
|
233 |
Â
$value = aioseo()->helpers->pregReplace( '#%%excerpt%%#', '', $value );
|
234 |
Â
}
|
235 |
+
|
236 |
+
if ( '_yoast_wpseo_twitter-title' === $name || '_yoast_wpseo_twitter-description' === $name ) {
|
237 |
+
$meta['twitter_use_og'] = false;
|
238 |
+
}
|
239 |
+
|
240 |
Â
$value = aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, 'post', $post->post_type );
|
241 |
+
|
242 |
+
if ( '_yoast_wpseo_title' === $name ) {
|
243 |
+
$title = $value;
|
244 |
+
}
|
245 |
Â
default:
|
246 |
Â
$meta[ $mappedMeta[ $name ] ] = esc_html( wp_strip_all_tags( strval( $value ) ) );
|
247 |
Â
break;
|
248 |
Â
}
|
249 |
Â
}
|
250 |
Â
|
251 |
+
// Resetting the `twitter_use_og` option if the user has a custom title and no twitter title.
|
252 |
+
if ( $meta['twitter_use_og'] && $title && empty( $meta['twitter_title'] ) ) {
|
253 |
+
$meta['twitter_use_og'] = false;
|
254 |
+
$meta['twitter_title'] = $title;
|
255 |
+
}
|
256 |
+
|
257 |
Â
$aioseoPost = Models\Post::getPost( (int) $post->ID );
|
258 |
Â
$aioseoPost->set( $meta );
|
259 |
Â
$aioseoPost->save();
|
260 |
+
|
261 |
+
aioseo()->migration->meta->migrateAdditionalPostMeta( $post->ID );
|
262 |
Â
}
|
263 |
Â
|
264 |
Â
if ( count( $posts ) === $postsPerAction ) {
|
app/Common/ImportExport/YoastSeo/SearchAppearance.php
CHANGED
@@ -161,7 +161,7 @@ class SearchAppearance {
|
|
161 |
Â
$value = aioseo()->helpers->pregReplace( '#%%primary_category%%#', '', $value );
|
162 |
Â
$value = aioseo()->helpers->pregReplace( '#%%excerpt%%#', '', $value );
|
163 |
Â
}
|
164 |
-
aioseo()->
|
165 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, $postType ) );
|
166 |
Â
break;
|
167 |
Â
case 'metadesc':
|
@@ -169,17 +169,17 @@ class SearchAppearance {
|
|
169 |
Â
$value = aioseo()->helpers->pregReplace( '#%%primary_category%%#', '', $value );
|
170 |
Â
$value = aioseo()->helpers->pregReplace( '#%%excerpt%%#', '', $value );
|
171 |
Â
}
|
172 |
-
aioseo()->
|
173 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, $postType ) );
|
174 |
Â
break;
|
175 |
Â
case 'noindex':
|
176 |
-
aioseo()->
|
177 |
-
aioseo()->
|
178 |
-
aioseo()->
|
179 |
Â
break;
|
180 |
Â
case 'display-metabox-pt':
|
181 |
Â
if ( empty( $value ) ) {
|
182 |
-
aioseo()->
|
183 |
Â
}
|
184 |
Â
break;
|
185 |
Â
case 'schema-page-type':
|
@@ -187,25 +187,25 @@ class SearchAppearance {
|
|
187 |
Â
if ( in_array( $postType, [ 'post', 'page', 'attachment' ], true ) ) {
|
188 |
Â
break;
|
189 |
Â
}
|
190 |
-
aioseo()->
|
191 |
Â
if ( in_array( $value, ImportExport\SearchAppearance::$supportedWebPageGraphs, true ) ) {
|
192 |
-
aioseo()->
|
193 |
Â
}
|
194 |
Â
break;
|
195 |
Â
case 'schema-article-type':
|
196 |
Â
$value = aioseo()->helpers->pregReplace( '#\s#', '', $value );
|
197 |
Â
if ( 'none' === lcfirst( $value ) ) {
|
198 |
-
aioseo()->
|
199 |
Â
break;
|
200 |
Â
}
|
201 |
Â
|
202 |
-
aioseo()->
|
203 |
Â
if ( in_array( $value, ImportExport\SearchAppearance::$supportedArticleGraphs, true ) ) {
|
204 |
Â
if ( ! in_array( $postType, [ 'page', 'attachment' ], true ) ) {
|
205 |
-
aioseo()->
|
206 |
Â
}
|
207 |
Â
} else {
|
208 |
-
aioseo()->
|
209 |
Â
}
|
210 |
Â
break;
|
211 |
Â
default:
|
@@ -237,17 +237,17 @@ class SearchAppearance {
|
|
237 |
Â
|
238 |
Â
switch ( $match[1] ) {
|
239 |
Â
case 'title':
|
240 |
-
aioseo()->
|
241 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, $postType, 'archive' ) );
|
242 |
Â
break;
|
243 |
Â
case 'metadesc':
|
244 |
-
aioseo()->
|
245 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, $postType, 'archive' ) );
|
246 |
Â
break;
|
247 |
Â
case 'noindex':
|
248 |
-
aioseo()->
|
249 |
-
aioseo()->
|
250 |
-
aioseo()->
|
251 |
Â
break;
|
252 |
Â
default:
|
253 |
Â
break;
|
@@ -305,6 +305,6 @@ class SearchAppearance {
|
|
305 |
Â
* @return void
|
306 |
Â
*/
|
307 |
Â
private function migrateRedirectAttachments() {
|
308 |
-
aioseo()->
|
309 |
Â
}
|
310 |
Â
}
|
161 |
Â
$value = aioseo()->helpers->pregReplace( '#%%primary_category%%#', '', $value );
|
162 |
Â
$value = aioseo()->helpers->pregReplace( '#%%excerpt%%#', '', $value );
|
163 |
Â
}
|
164 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->title =
|
165 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, $postType ) );
|
166 |
Â
break;
|
167 |
Â
case 'metadesc':
|
169 |
Â
$value = aioseo()->helpers->pregReplace( '#%%primary_category%%#', '', $value );
|
170 |
Â
$value = aioseo()->helpers->pregReplace( '#%%excerpt%%#', '', $value );
|
171 |
Â
}
|
172 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->metaDescription =
|
173 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, $postType ) );
|
174 |
Â
break;
|
175 |
Â
case 'noindex':
|
176 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->show = empty( $value ) ? true : false;
|
177 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = empty( $value ) ? true : false;
|
178 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = empty( $value ) ? false : true;
|
179 |
Â
break;
|
180 |
Â
case 'display-metabox-pt':
|
181 |
Â
if ( empty( $value ) ) {
|
182 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->showMetaBox = false;
|
183 |
Â
}
|
184 |
Â
break;
|
185 |
Â
case 'schema-page-type':
|
187 |
Â
if ( in_array( $postType, [ 'post', 'page', 'attachment' ], true ) ) {
|
188 |
Â
break;
|
189 |
Â
}
|
190 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->schemaType = 'WebPage';
|
191 |
Â
if ( in_array( $value, ImportExport\SearchAppearance::$supportedWebPageGraphs, true ) ) {
|
192 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->webPageType = $value;
|
193 |
Â
}
|
194 |
Â
break;
|
195 |
Â
case 'schema-article-type':
|
196 |
Â
$value = aioseo()->helpers->pregReplace( '#\s#', '', $value );
|
197 |
Â
if ( 'none' === lcfirst( $value ) ) {
|
198 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->articleType = 'none';
|
199 |
Â
break;
|
200 |
Â
}
|
201 |
Â
|
202 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->articleType = 'Article';
|
203 |
Â
if ( in_array( $value, ImportExport\SearchAppearance::$supportedArticleGraphs, true ) ) {
|
204 |
Â
if ( ! in_array( $postType, [ 'page', 'attachment' ], true ) ) {
|
205 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->articleType = $value;
|
206 |
Â
}
|
207 |
Â
} else {
|
208 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->articleType = 'BlogPosting';
|
209 |
Â
}
|
210 |
Â
break;
|
211 |
Â
default:
|
237 |
Â
|
238 |
Â
switch ( $match[1] ) {
|
239 |
Â
case 'title':
|
240 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->title =
|
241 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, $postType, 'archive' ) );
|
242 |
Â
break;
|
243 |
Â
case 'metadesc':
|
244 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->metaDescription =
|
245 |
Â
aioseo()->helpers->sanitizeOption( aioseo()->importExport->yoastSeo->helpers->macrosToSmartTags( $value, $postType, 'archive' ) );
|
246 |
Â
break;
|
247 |
Â
case 'noindex':
|
248 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->show = empty( $value ) ? true : false;
|
249 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->advanced->robotsMeta->default = empty( $value ) ? true : false;
|
250 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->advanced->robotsMeta->noindex = empty( $value ) ? false : true;
|
251 |
Â
break;
|
252 |
Â
default:
|
253 |
Â
break;
|
305 |
Â
* @return void
|
306 |
Â
*/
|
307 |
Â
private function migrateRedirectAttachments() {
|
308 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = empty( $this->options['disable-attachment'] ) ? 'disabled' : 'attachment';
|
309 |
Â
}
|
310 |
Â
}
|
app/Common/ImportExport/YoastSeo/SocialMeta.php
CHANGED
@@ -6,6 +6,8 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
6 |
Â
exit;
|
7 |
Â
}
|
8 |
Â
|
Â
|
|
Â
|
|
9 |
Â
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
10 |
Â
|
11 |
Â
/**
|
@@ -30,6 +32,9 @@ class SocialMeta {
|
|
30 |
Â
$this->migrateFacebookSettings();
|
31 |
Â
$this->migrateTwitterSettings();
|
32 |
Â
$this->migrateFacebookAdminId();
|
Â
|
|
Â
|
|
Â
|
|
33 |
Â
|
34 |
Â
$settings = [
|
35 |
Â
'pinterestverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ]
|
@@ -38,6 +43,13 @@ class SocialMeta {
|
|
38 |
Â
aioseo()->importExport->yoastSeo->helpers->mapOldToNew( $settings, $this->options );
|
39 |
Â
}
|
40 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
41 |
Â
private function migrateSocialUrls() {
|
42 |
Â
$settings = [
|
43 |
Â
'facebook_site' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'facebookPageUrl' ] ],
|
@@ -82,6 +94,18 @@ class SocialMeta {
|
|
82 |
Â
];
|
83 |
Â
|
84 |
Â
aioseo()->importExport->yoastSeo->helpers->mapOldToNew( $settings, $this->options, true );
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
85 |
Â
}
|
86 |
Â
|
87 |
Â
/**
|
@@ -113,4 +137,41 @@ class SocialMeta {
|
|
113 |
Â
aioseo()->options->social->facebook->advanced->adminId = aioseo()->helpers->sanitizeOption( $this->options['fbadminapp'] );
|
114 |
Â
}
|
115 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
116 |
Â
}
|
6 |
Â
exit;
|
7 |
Â
}
|
8 |
Â
|
9 |
+
use AIOSEO\Plugin\Common\Models;
|
10 |
+
|
11 |
Â
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
12 |
Â
|
13 |
Â
/**
|
32 |
Â
$this->migrateFacebookSettings();
|
33 |
Â
$this->migrateTwitterSettings();
|
34 |
Â
$this->migrateFacebookAdminId();
|
35 |
+
$this->migrateSiteName();
|
36 |
+
$this->migrateArticleTags();
|
37 |
+
$this->migrateAdditionalTwitterData();
|
38 |
Â
|
39 |
Â
$settings = [
|
40 |
Â
'pinterestverify' => [ 'type' => 'string', 'newOption' => [ 'webmasterTools', 'pinterest' ] ]
|
43 |
Â
aioseo()->importExport->yoastSeo->helpers->mapOldToNew( $settings, $this->options );
|
44 |
Â
}
|
45 |
Â
|
46 |
+
/**
|
47 |
+
* Migrates the Social URLs.
|
48 |
+
*
|
49 |
+
* @since 4.0.0
|
50 |
+
*
|
51 |
+
* @return void
|
52 |
+
*/
|
53 |
Â
private function migrateSocialUrls() {
|
54 |
Â
$settings = [
|
55 |
Â
'facebook_site' => [ 'type' => 'string', 'newOption' => [ 'social', 'profiles', 'urls', 'facebookPageUrl' ] ],
|
94 |
Â
];
|
95 |
Â
|
96 |
Â
aioseo()->importExport->yoastSeo->helpers->mapOldToNew( $settings, $this->options, true );
|
97 |
+
|
98 |
+
// Migrate home page object type.
|
99 |
+
aioseo()->options->social->facebook->homePage->objectType = 'website';
|
100 |
+
if ( 'page' === get_option( 'show_on_front' ) ) {
|
101 |
+
$staticHomePageId = get_option( 'page_on_front' );
|
102 |
+
|
103 |
+
$aioseoPost = Models\Post::getPost( (int) $staticHomePageId );
|
104 |
+
$aioseoPost->set( [
|
105 |
+
'og_object_type' => 'website'
|
106 |
+
] );
|
107 |
+
$aioseoPost->save();
|
108 |
+
}
|
109 |
Â
}
|
110 |
Â
|
111 |
Â
/**
|
137 |
Â
aioseo()->options->social->facebook->advanced->adminId = aioseo()->helpers->sanitizeOption( $this->options['fbadminapp'] );
|
138 |
Â
}
|
139 |
Â
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Yoast sets the og:site_name to '#site_title';
|
143 |
+
*
|
144 |
+
* @since 4.1.4
|
145 |
+
*
|
146 |
+
* @return void
|
147 |
+
*/
|
148 |
+
private function migrateSiteName() {
|
149 |
+
aioseo()->options->social->facebook->general->siteName = '#site_title';
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* Yoast uses post tags by default, so we need to enable this.
|
154 |
+
*
|
155 |
+
* @since 4.1.4
|
156 |
+
*
|
157 |
+
* @return void
|
158 |
+
*/
|
159 |
+
private function migrateArticleTags() {
|
160 |
+
aioseo()->options->social->facebook->advanced->enable = true;
|
161 |
+
aioseo()->options->social->facebook->advanced->generateArticleTags = true;
|
162 |
+
aioseo()->options->social->facebook->advanced->usePostTagsInTags = true;
|
163 |
+
aioseo()->options->social->facebook->advanced->useKeywordsInTags = false;
|
164 |
+
aioseo()->options->social->facebook->advanced->useCategoriesInTags = false;
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Enable additional Twitter Data.
|
169 |
+
*
|
170 |
+
* @since 4.1.4
|
171 |
+
*
|
172 |
+
* @return void
|
173 |
+
*/
|
174 |
+
private function migrateAdditionalTwitterData() {
|
175 |
+
aioseo()->options->social->twitter->general->additionalData = true;
|
176 |
+
}
|
177 |
Â
}
|
app/Common/ImportExport/YoastSeo/UserMeta.php
ADDED
@@ -0,0 +1,68 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\ImportExport\YoastSeo;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
use AIOSEO\Plugin\Common\ImportExport;
|
10 |
+
use AIOSEO\Plugin\Common\Models;
|
11 |
+
|
12 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Imports the user meta from Yoast SEO.
|
16 |
+
*
|
17 |
+
* @since 4.0.0
|
18 |
+
*/
|
19 |
+
class UserMeta {
|
20 |
+
/**
|
21 |
+
* Class constructor.
|
22 |
+
*
|
23 |
+
* @since 4.0.0
|
24 |
+
*/
|
25 |
+
public function scheduleImport() {
|
26 |
+
aioseo()->helpers->scheduleSingleAction( aioseo()->importExport->yoastSeo->userActionName, 30 );
|
27 |
+
|
28 |
+
if ( ! aioseo()->transients->get( 'import_user_meta_yoast_seo' ) ) {
|
29 |
+
aioseo()->transients->update( 'import_user_meta_yoast_seo', 0, WEEK_IN_SECONDS );
|
30 |
+
}
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Imports the post meta.
|
35 |
+
*
|
36 |
+
* @since 4.0.0
|
37 |
+
*
|
38 |
+
* @return void
|
39 |
+
*/
|
40 |
+
public function importUserMeta() {
|
41 |
+
$usersPerAction = 100;
|
42 |
+
$offset = aioseo()->transients->get( 'import_user_meta_yoast_seo' );
|
43 |
+
|
44 |
+
$usersMeta = aioseo()->db
|
45 |
+
->start( 'usermeta' . ' as um' )
|
46 |
+
->whereRaw( "um.meta_key IN ('facebook', 'twitter')" )
|
47 |
+
->whereRaw( "um.meta_value != ''" )
|
48 |
+
->limit( $offset . ',' . $usersPerAction )
|
49 |
+
->run()
|
50 |
+
->result();
|
51 |
+
|
52 |
+
if ( ! $usersMeta || ! count( $usersMeta ) ) {
|
53 |
+
aioseo()->transients->delete( 'import_user_meta_yoast_seo' );
|
54 |
+
return;
|
55 |
+
}
|
56 |
+
|
57 |
+
foreach ( $usersMeta as $meta ) {
|
58 |
+
update_user_meta( $meta->user_id, 'aioseo_' . $meta->meta_key, $meta->meta_value );
|
59 |
+
}
|
60 |
+
|
61 |
+
if ( count( $usersMeta ) === $usersPerAction ) {
|
62 |
+
aioseo()->transients->update( 'import_user_meta_yoast_seo', 100 + $offset, WEEK_IN_SECONDS );
|
63 |
+
aioseo()->helpers->scheduleSingleAction( aioseo()->importExport->yoastSeo->userActionName, 5 );
|
64 |
+
} else {
|
65 |
+
aioseo()->transients->delete( 'import_user_meta_yoast_seo' );
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
app/Common/ImportExport/YoastSeo/YoastSeo.php
CHANGED
@@ -40,6 +40,15 @@ class YoastSeo extends ImportExport\Importer {
|
|
40 |
Â
*/
|
41 |
Â
public $postActionName = 'aioseo_import_post_meta_yoast_seo';
|
42 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
43 |
Â
/**
|
44 |
Â
* The post action name.
|
45 |
Â
*
|
@@ -50,7 +59,9 @@ class YoastSeo extends ImportExport\Importer {
|
|
50 |
Â
public function __construct( $importer ) {
|
51 |
Â
$this->helpers = new Helpers();
|
52 |
Â
$this->postMeta = new PostMeta();
|
Â
|
|
53 |
Â
add_action( $this->postActionName, [ $this->postMeta, 'importPostMeta' ] );
|
Â
|
|
54 |
Â
|
55 |
Â
$plugins = $this->plugins;
|
56 |
Â
foreach ( $plugins as $key => $plugin ) {
|
@@ -70,5 +81,6 @@ class YoastSeo extends ImportExport\Importer {
|
|
70 |
Â
new GeneralSettings();
|
71 |
Â
new SearchAppearance();
|
72 |
Â
new SocialMeta();
|
Â
|
|
73 |
Â
}
|
74 |
Â
}
|
40 |
Â
*/
|
41 |
Â
public $postActionName = 'aioseo_import_post_meta_yoast_seo';
|
42 |
Â
|
43 |
+
/**
|
44 |
+
* The user action name.
|
45 |
+
*
|
46 |
+
* @since 4.1.4
|
47 |
+
*
|
48 |
+
* @var string
|
49 |
+
*/
|
50 |
+
public $userActionName = 'aioseo_import_user_meta_yoast_seo';
|
51 |
+
|
52 |
Â
/**
|
53 |
Â
* The post action name.
|
54 |
Â
*
|
59 |
Â
public function __construct( $importer ) {
|
60 |
Â
$this->helpers = new Helpers();
|
61 |
Â
$this->postMeta = new PostMeta();
|
62 |
+
$this->userMeta = new UserMeta();
|
63 |
Â
add_action( $this->postActionName, [ $this->postMeta, 'importPostMeta' ] );
|
64 |
+
add_action( $this->userActionName, [ $this->userMeta, 'importUserMeta' ] );
|
65 |
Â
|
66 |
Â
$plugins = $this->plugins;
|
67 |
Â
foreach ( $plugins as $key => $plugin ) {
|
81 |
Â
new GeneralSettings();
|
82 |
Â
new SearchAppearance();
|
83 |
Â
new SocialMeta();
|
84 |
+
$this->userMeta->scheduleImport();
|
85 |
Â
}
|
86 |
Â
}
|
app/Common/Main/Activate.php
CHANGED
@@ -20,7 +20,17 @@ class Activate {
|
|
20 |
Â
public function __construct() {
|
21 |
Â
register_activation_hook( AIOSEO_FILE, [ $this, 'activate' ] );
|
22 |
Â
register_deactivation_hook( AIOSEO_FILE, [ $this, 'deactivate' ] );
|
Â
|
|
Â
|
|
23 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
24 |
Â
// If Pro just deactivated the lite version, we need to manually run the activation hook, because it doesn't run here.
|
25 |
Â
$proDeactivatedLite = (bool) aioseo()->transients->get( 'pro_just_deactivated_lite' );
|
26 |
Â
if ( $proDeactivatedLite ) {
|
20 |
Â
public function __construct() {
|
21 |
Â
register_activation_hook( AIOSEO_FILE, [ $this, 'activate' ] );
|
22 |
Â
register_deactivation_hook( AIOSEO_FILE, [ $this, 'deactivate' ] );
|
23 |
+
add_action( 'init', [ $this, 'init' ] );
|
24 |
+
}
|
25 |
Â
|
26 |
+
/**
|
27 |
+
* Initialize activation.
|
28 |
+
*
|
29 |
+
* @since 4.1.5
|
30 |
+
*
|
31 |
+
* @return void
|
32 |
+
*/
|
33 |
+
public function init() {
|
34 |
Â
// If Pro just deactivated the lite version, we need to manually run the activation hook, because it doesn't run here.
|
35 |
Â
$proDeactivatedLite = (bool) aioseo()->transients->get( 'pro_just_deactivated_lite' );
|
36 |
Â
if ( $proDeactivatedLite ) {
|
app/Common/Main/Filters.php
CHANGED
@@ -23,6 +23,15 @@ abstract class Filters {
|
|
23 |
Â
*/
|
24 |
Â
private $plugin;
|
25 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
26 |
Â
/**
|
27 |
Â
* Construct method.
|
28 |
Â
*
|
@@ -44,11 +53,15 @@ abstract class Filters {
|
|
44 |
Â
add_filter( 'wpaas_cdn_file_ext', [ $this, 'goDaddySitemapXml' ] );
|
45 |
Â
|
46 |
Â
// Duplicate Post integration.
|
47 |
-
add_action( 'dp_duplicate_post', [ $this, '
|
48 |
-
add_action( 'dp_duplicate_page', [ $this, '
|
Â
|
|
49 |
Â
|
50 |
Â
// Classic Editor emoji
|
51 |
Â
add_action( 'init', [ $this, 'removeEmojiScript' ] );
|
Â
|
|
Â
|
|
Â
|
|
52 |
Â
}
|
53 |
Â
|
54 |
Â
/**
|
@@ -58,11 +71,11 @@ abstract class Filters {
|
|
58 |
Â
*
|
59 |
Â
* @param integer $newPostId The new post ID.
|
60 |
Â
* @param WP_Post $originalPost The original post object.
|
61 |
-
* @param string $status The status of the post.
|
62 |
Â
* @return void
|
63 |
Â
*/
|
64 |
-
public function
|
65 |
-
$
|
Â
|
|
66 |
Â
if ( ! $originalAioseoPost->exists() ) {
|
67 |
Â
return;
|
68 |
Â
}
|
@@ -89,6 +102,37 @@ abstract class Filters {
|
|
89 |
Â
$newPost->save();
|
90 |
Â
}
|
91 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
92 |
Â
/**
|
93 |
Â
* Disable SEO inside the Genesis theme if it's running.
|
94 |
Â
*
|
@@ -178,4 +222,18 @@ abstract class Filters {
|
|
178 |
Â
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
|
179 |
Â
}
|
180 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
181 |
Â
}
|
23 |
Â
*/
|
24 |
Â
private $plugin;
|
25 |
Â
|
26 |
+
/**
|
27 |
+
* ID of the WooCommerce product that is being duplicated.
|
28 |
+
*
|
29 |
+
* @since 4.1.4
|
30 |
+
*
|
31 |
+
* @var integer
|
32 |
+
*/
|
33 |
+
private static $originalProductId;
|
34 |
+
|
35 |
Â
/**
|
36 |
Â
* Construct method.
|
37 |
Â
*
|
53 |
Â
add_filter( 'wpaas_cdn_file_ext', [ $this, 'goDaddySitemapXml' ] );
|
54 |
Â
|
55 |
Â
// Duplicate Post integration.
|
56 |
+
add_action( 'dp_duplicate_post', [ $this, 'duplicatePost' ], 10, 2 );
|
57 |
+
add_action( 'dp_duplicate_page', [ $this, 'duplicatePost' ], 10, 2 );
|
58 |
+
add_action( 'woocommerce_product_duplicate_before_save', [ $this, 'scheduleDuplicateProduct' ], 10, 2 );
|
59 |
Â
|
60 |
Â
// Classic Editor emoji
|
61 |
Â
add_action( 'init', [ $this, 'removeEmojiScript' ] );
|
62 |
+
|
63 |
+
// Bypass the JWT Auth plugin's unnecessary restrictions. https://wordpress.org/plugins/jwt-auth/
|
64 |
+
add_filter( 'jwt_auth_default_whitelist', [ $this, 'allowRestRoutes' ] );
|
65 |
Â
}
|
66 |
Â
|
67 |
Â
/**
|
71 |
Â
*
|
72 |
Â
* @param integer $newPostId The new post ID.
|
73 |
Â
* @param WP_Post $originalPost The original post object.
|
Â
|
|
74 |
Â
* @return void
|
75 |
Â
*/
|
76 |
+
public function duplicatePost( $newPostId, $originalPost ) {
|
77 |
+
$originalPostId = is_object( $originalPost ) ? $originalPost->ID : $originalPost;
|
78 |
+
$originalAioseoPost = Models\Post::getPost( $originalPostId );
|
79 |
Â
if ( ! $originalAioseoPost->exists() ) {
|
80 |
Â
return;
|
81 |
Â
}
|
102 |
Â
$newPost->save();
|
103 |
Â
}
|
104 |
Â
|
105 |
+
/**
|
106 |
+
* Schedules an action to duplicate our meta after the duplicated WooCommerce product has been saved.
|
107 |
+
*
|
108 |
+
* @since 4.1.4
|
109 |
+
*
|
110 |
+
* @param \WP_Product $newProduct The new, duplicated product.
|
111 |
+
* @param \WP_Product $originalProduct The original product.
|
112 |
+
* @return void
|
113 |
+
*/
|
114 |
+
public function scheduleDuplicateProduct( $newProduct, $originalProduct ) {
|
115 |
+
self::$originalProductId = $originalProduct->get_id();
|
116 |
+
add_action( 'wp_insert_post', [ $this, 'duplicateProduct' ], 10, 2 );
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Duplicates our meta for the new WooCommerce product.
|
121 |
+
*
|
122 |
+
* @since 4.1.4
|
123 |
+
*
|
124 |
+
* @param integer $postId The new post ID.
|
125 |
+
* @param \WP_Post $post The new post object.
|
126 |
+
* @return void
|
127 |
+
*/
|
128 |
+
public function duplicateProduct( $postId, $post ) {
|
129 |
+
if ( ! self::$originalProductId || 'product' !== $post->post_type ) {
|
130 |
+
return;
|
131 |
+
}
|
132 |
+
|
133 |
+
$this->duplicatePost( $postId, self::$originalProductId );
|
134 |
+
}
|
135 |
+
|
136 |
Â
/**
|
137 |
Â
* Disable SEO inside the Genesis theme if it's running.
|
138 |
Â
*
|
222 |
Â
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
|
223 |
Â
}
|
224 |
Â
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Add our routes to this plugins allow list.
|
228 |
+
*
|
229 |
+
* @since 4.1.4
|
230 |
+
*
|
231 |
+
* @param array $allowList The original list.
|
232 |
+
* @return array The modified list.
|
233 |
+
*/
|
234 |
+
public function allowRestRoutes( $allowList ) {
|
235 |
+
return array_merge( $allowList, [
|
236 |
+
'/aioseo/'
|
237 |
+
] );
|
238 |
+
}
|
239 |
Â
}
|
app/Common/Main/Media.php
CHANGED
@@ -34,12 +34,12 @@ class Media {
|
|
34 |
Â
}
|
35 |
Â
|
36 |
Â
if (
|
37 |
-
! aioseo()->
|
38 |
Â
) {
|
39 |
Â
return;
|
40 |
Â
}
|
41 |
Â
|
42 |
-
$redirect = aioseo()->
|
43 |
Â
if ( 'disabled' === $redirect ) {
|
44 |
Â
return;
|
45 |
Â
}
|
34 |
Â
}
|
35 |
Â
|
36 |
Â
if (
|
37 |
+
! aioseo()->dynamicOptions->searchAppearance->postTypes->has( 'attachment' )
|
38 |
Â
) {
|
39 |
Â
return;
|
40 |
Â
}
|
41 |
Â
|
42 |
+
$redirect = aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls;
|
43 |
Â
if ( 'disabled' === $redirect ) {
|
44 |
Â
return;
|
45 |
Â
}
|
app/Common/Main/Updates.php
CHANGED
@@ -66,6 +66,9 @@ class Updates {
|
|
66 |
Â
* @return void
|
67 |
Â
*/
|
68 |
Â
public function runUpdates() {
|
Â
|
|
Â
|
|
Â
|
|
69 |
Â
$lastActiveVersion = aioseo()->internalOptions->internal->lastActiveVersion;
|
70 |
Â
if ( version_compare( $lastActiveVersion, '4.0.5', '<' ) ) {
|
71 |
Â
$this->addImageScanDateColumn();
|
@@ -102,9 +105,30 @@ class Updates {
|
|
102 |
Â
$this->accessControlNewCapabilities();
|
103 |
Â
}
|
104 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
105 |
Â
do_action( 'aioseo_run_updates', $lastActiveVersion );
|
106 |
Â
}
|
107 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
108 |
Â
/**
|
109 |
Â
* Updates the latest version after all migrations and updates have run.
|
110 |
Â
*
|
@@ -113,7 +137,9 @@ class Updates {
|
|
113 |
Â
* @return void
|
114 |
Â
*/
|
115 |
Â
public function updateLatestVersion() {
|
116 |
-
aioseo()->internalOptions->internal->lastActiveVersion
|
Â
|
|
Â
|
|
117 |
Â
}
|
118 |
Â
|
119 |
Â
/**
|
@@ -442,4 +468,124 @@ class Updates {
|
|
442 |
Â
public function accessControlNewCapabilities() {
|
443 |
Â
aioseo()->access->addCapabilities();
|
444 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
445 |
Â
}
|
66 |
Â
* @return void
|
67 |
Â
*/
|
68 |
Â
public function runUpdates() {
|
69 |
+
// The dynamic options have not yet fully loaded, so let's refresh here to force that to happen.
|
70 |
+
aioseo()->dynamicOptions->refresh(); // TODO: Check if we still need this since it already runs on 999 in the main AIOSEO file.
|
71 |
+
|
72 |
Â
$lastActiveVersion = aioseo()->internalOptions->internal->lastActiveVersion;
|
73 |
Â
if ( version_compare( $lastActiveVersion, '4.0.5', '<' ) ) {
|
74 |
Â
$this->addImageScanDateColumn();
|
105 |
Â
$this->accessControlNewCapabilities();
|
106 |
Â
}
|
107 |
Â
|
108 |
+
if ( version_compare( $lastActiveVersion, '4.1.4.3', '<' ) ) {
|
109 |
+
$this->migrateDynamicSettings();
|
110 |
+
}
|
111 |
+
|
112 |
Â
do_action( 'aioseo_run_updates', $lastActiveVersion );
|
113 |
Â
}
|
114 |
Â
|
115 |
+
/**
|
116 |
+
* Retrieve the raw options from the database for migration.
|
117 |
+
*
|
118 |
+
* @since 4.1.4
|
119 |
+
*
|
120 |
+
* @return array An array of options.
|
121 |
+
*/
|
122 |
+
private function getRawOptions() {
|
123 |
+
// Options from the DB.
|
124 |
+
$commonOptions = json_decode( get_option( aioseo()->options->optionsName ), true );
|
125 |
+
if ( empty( $commonOptions ) ) {
|
126 |
+
$commonOptions = [];
|
127 |
+
}
|
128 |
+
|
129 |
+
return $commonOptions;
|
130 |
+
}
|
131 |
+
|
132 |
Â
/**
|
133 |
Â
* Updates the latest version after all migrations and updates have run.
|
134 |
Â
*
|
137 |
Â
* @return void
|
138 |
Â
*/
|
139 |
Â
public function updateLatestVersion() {
|
140 |
+
if ( aioseo()->version !== aioseo()->internalOptions->internal->lastActiveVersion ) {
|
141 |
+
aioseo()->internalOptions->internal->lastActiveVersion = aioseo()->version;
|
142 |
+
}
|
143 |
Â
}
|
144 |
Â
|
145 |
Â
/**
|
468 |
Â
public function accessControlNewCapabilities() {
|
469 |
Â
aioseo()->access->addCapabilities();
|
470 |
Â
}
|
471 |
+
|
472 |
+
/**
|
473 |
+
* Migrate dynamic settings to a separate options structure.
|
474 |
+
*
|
475 |
+
* @since 4.1.4
|
476 |
+
*
|
477 |
+
* @return void
|
478 |
+
*/
|
479 |
+
public function migrateDynamicSettings() {
|
480 |
+
$rawOptions = $this->getRawOptions();
|
481 |
+
$options = aioseo()->dynamicOptions->noConflict();
|
482 |
+
|
483 |
+
// Sitemap post type priorities/frequencies.
|
484 |
+
if (
|
485 |
+
! empty( $rawOptions['sitemap']['dynamic']['priority']['postTypes'] )
|
486 |
+
) {
|
487 |
+
foreach ( $rawOptions['sitemap']['dynamic']['priority']['postTypes'] as $postTypeName => $data ) {
|
488 |
+
if ( $options->sitemap->priority->postTypes->has( $postTypeName ) ) {
|
489 |
+
$options->sitemap->priority->postTypes->$postTypeName->priority = $data['priority'];
|
490 |
+
$options->sitemap->priority->postTypes->$postTypeName->frequency = $data['frequency'];
|
491 |
+
}
|
492 |
+
}
|
493 |
+
}
|
494 |
+
|
495 |
+
// Sitemap taxonomy priorities/frequencies.
|
496 |
+
if (
|
497 |
+
! empty( $rawOptions['sitemap']['dynamic']['priority']['taxonomies'] )
|
498 |
+
) {
|
499 |
+
foreach ( $rawOptions['sitemap']['dynamic']['priority']['taxonomies'] as $taxonomyName => $data ) {
|
500 |
+
if ( $options->sitemap->priority->taxonomies->has( $taxonomyName ) ) {
|
501 |
+
$options->sitemap->priority->taxonomies->$taxonomyName->priority = $data['priority'];
|
502 |
+
$options->sitemap->priority->taxonomies->$taxonomyName->frequency = $data['frequency'];
|
503 |
+
}
|
504 |
+
}
|
505 |
+
}
|
506 |
+
|
507 |
+
// Facebook post type object types.
|
508 |
+
if (
|
509 |
+
! empty( $rawOptions['social']['facebook']['general']['dynamic']['postTypes'] )
|
510 |
+
) {
|
511 |
+
foreach ( $rawOptions['social']['facebook']['general']['dynamic']['postTypes'] as $postTypeName => $data ) {
|
512 |
+
if ( $options->social->facebook->general->postTypes->has( $postTypeName ) ) {
|
513 |
+
$options->social->facebook->general->postTypes->$postTypeName->objectType = $data['objectType'];
|
514 |
+
}
|
515 |
+
}
|
516 |
+
}
|
517 |
+
|
518 |
+
// Search appearance post type data.
|
519 |
+
if (
|
520 |
+
! empty( $rawOptions['searchAppearance']['dynamic']['postTypes'] )
|
521 |
+
) {
|
522 |
+
foreach ( $rawOptions['searchAppearance']['dynamic']['postTypes'] as $postTypeName => $data ) {
|
523 |
+
if ( $options->searchAppearance->postTypes->has( $postTypeName ) ) {
|
524 |
+
$options->searchAppearance->postTypes->$postTypeName->show = $data['show'];
|
525 |
+
$options->searchAppearance->postTypes->$postTypeName->title = $data['title'];
|
526 |
+
$options->searchAppearance->postTypes->$postTypeName->metaDescription = $data['metaDescription'];
|
527 |
+
$options->searchAppearance->postTypes->$postTypeName->schemaType = $data['schemaType'];
|
528 |
+
$options->searchAppearance->postTypes->$postTypeName->webPageType = $data['webPageType'];
|
529 |
+
$options->searchAppearance->postTypes->$postTypeName->articleType = $data['articleType'];
|
530 |
+
$options->searchAppearance->postTypes->$postTypeName->customFields = $data['customFields'];
|
531 |
+
|
532 |
+
// Advanced settings.
|
533 |
+
$advanced = ! empty( $data['advanced']['robotsMeta'] ) ? $data['advanced']['robotsMeta'] : null;
|
534 |
+
if ( ! empty( $advanced ) ) {
|
535 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->default = $data['advanced']['robotsMeta']['default'];
|
536 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->noindex = $data['advanced']['robotsMeta']['noindex'];
|
537 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->nofollow = $data['advanced']['robotsMeta']['nofollow'];
|
538 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->noarchive = $data['advanced']['robotsMeta']['noarchive'];
|
539 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->noimageindex = $data['advanced']['robotsMeta']['noimageindex'];
|
540 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->notranslate = $data['advanced']['robotsMeta']['notranslate'];
|
541 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->nosnippet = $data['advanced']['robotsMeta']['nosnippet'];
|
542 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->noodp = $data['advanced']['robotsMeta']['noodp'];
|
543 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->maxSnippet = $data['advanced']['robotsMeta']['maxSnippet'];
|
544 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->maxVideoPreview = $data['advanced']['robotsMeta']['maxVideoPreview'];
|
545 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->robotsMeta->maxImagePreview = $data['advanced']['robotsMeta']['maxImagePreview'];
|
546 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->showDateInGooglePreview = $data['advanced']['showDateInGooglePreview'];
|
547 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->showPostThumbnailInSearch = $data['advanced']['showPostThumbnailInSearch'];
|
548 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->showMetaBox = $data['advanced']['showMetaBox'];
|
549 |
+
$options->searchAppearance->postTypes->$postTypeName->advanced->bulkEditing = $data['advanced']['bulkEditing'];
|
550 |
+
}
|
551 |
+
|
552 |
+
if ( 'attachment' === $postTypeName ) {
|
553 |
+
$options->searchAppearance->postTypes->$postTypeName->redirectAttachmentUrls = $data['redirectAttachmentUrls'];
|
554 |
+
}
|
555 |
+
}
|
556 |
+
}
|
557 |
+
}
|
558 |
+
|
559 |
+
// Search appearance taxonomy data.
|
560 |
+
if (
|
561 |
+
! empty( $rawOptions['searchAppearance']['dynamic']['taxonomies'] )
|
562 |
+
) {
|
563 |
+
foreach ( $rawOptions['searchAppearance']['dynamic']['taxonomies'] as $taxonomyName => $data ) {
|
564 |
+
if ( $options->searchAppearance->taxonomies->has( $taxonomyName ) ) {
|
565 |
+
$options->searchAppearance->taxonomies->$taxonomyName->show = $data['show'];
|
566 |
+
$options->searchAppearance->taxonomies->$taxonomyName->title = $data['title'];
|
567 |
+
$options->searchAppearance->taxonomies->$taxonomyName->metaDescription = $data['metaDescription'];
|
568 |
+
|
569 |
+
// Advanced settings.
|
570 |
+
$advanced = ! empty( $data['advanced']['robotsMeta'] ) ? $data['advanced']['robotsMeta'] : null;
|
571 |
+
if ( ! empty( $advanced ) ) {
|
572 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->default = $data['advanced']['robotsMeta']['default'];
|
573 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->noindex = $data['advanced']['robotsMeta']['noindex'];
|
574 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->nofollow = $data['advanced']['robotsMeta']['nofollow'];
|
575 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->noarchive = $data['advanced']['robotsMeta']['noarchive'];
|
576 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->noimageindex = $data['advanced']['robotsMeta']['noimageindex'];
|
577 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->notranslate = $data['advanced']['robotsMeta']['notranslate'];
|
578 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->nosnippet = $data['advanced']['robotsMeta']['nosnippet'];
|
579 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->noodp = $data['advanced']['robotsMeta']['noodp'];
|
580 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->maxSnippet = $data['advanced']['robotsMeta']['maxSnippet'];
|
581 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->maxVideoPreview = $data['advanced']['robotsMeta']['maxVideoPreview'];
|
582 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->robotsMeta->maxImagePreview = $data['advanced']['robotsMeta']['maxImagePreview'];
|
583 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->showDateInGooglePreview = $data['advanced']['showDateInGooglePreview'];
|
584 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->showPostThumbnailInSearch = $data['advanced']['showPostThumbnailInSearch'];
|
585 |
+
$options->searchAppearance->taxonomies->$taxonomyName->advanced->showMetaBox = $data['advanced']['showMetaBox'];
|
586 |
+
}
|
587 |
+
}
|
588 |
+
}
|
589 |
+
}
|
590 |
+
}
|
591 |
Â
}
|
app/Common/Meta/Description.php
CHANGED
@@ -89,10 +89,10 @@ class Description {
|
|
89 |
Â
}
|
90 |
Â
|
91 |
Â
if ( is_archive() ) {
|
92 |
-
$postType
|
93 |
-
$
|
94 |
-
if ( $
|
95 |
-
return $this->helpers->prepare( aioseo()->
|
96 |
Â
}
|
97 |
Â
}
|
98 |
Â
}
|
@@ -177,8 +177,8 @@ class Description {
|
|
177 |
Â
return $postTypeDescription[ $postType ];
|
178 |
Â
}
|
179 |
Â
|
180 |
-
if ( aioseo()->
|
181 |
-
$description = aioseo()->
|
182 |
Â
}
|
183 |
Â
|
184 |
Â
$postTypeDescription[ $postType ] = empty( $description ) ? '' : $description;
|
@@ -210,9 +210,9 @@ class Description {
|
|
210 |
Â
return $description;
|
211 |
Â
}
|
212 |
Â
|
213 |
-
$
|
214 |
-
if ( ! $description && $
|
215 |
-
$description = $this->helpers->prepare( aioseo()->
|
216 |
Â
}
|
217 |
Â
|
218 |
Â
$terms[ $term->term_id ] = $description ? $description : $this->helpers->prepare( term_description( $term->term_id ), false, $default );
|
89 |
Â
}
|
90 |
Â
|
91 |
Â
if ( is_archive() ) {
|
92 |
+
$postType = get_queried_object();
|
93 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
94 |
+
if ( $dynamicOptions->searchAppearance->archives->has( $postType->name ) ) {
|
95 |
+
return $this->helpers->prepare( aioseo()->dynamicOptions->searchAppearance->archives->{ $postType->name }->metaDescription );
|
96 |
Â
}
|
97 |
Â
}
|
98 |
Â
}
|
177 |
Â
return $postTypeDescription[ $postType ];
|
178 |
Â
}
|
179 |
Â
|
180 |
+
if ( aioseo()->dynamicOptions->searchAppearance->postTypes->has( $postType ) ) {
|
181 |
+
$description = aioseo()->dynamicOptions->searchAppearance->postTypes->{$postType}->metaDescription;
|
182 |
Â
}
|
183 |
Â
|
184 |
Â
$postTypeDescription[ $postType ] = empty( $description ) ? '' : $description;
|
210 |
Â
return $description;
|
211 |
Â
}
|
212 |
Â
|
213 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
214 |
+
if ( ! $description && $dynamicOptions->searchAppearance->taxonomies->has( $term->taxonomy ) ) {
|
215 |
+
$description = $this->helpers->prepare( aioseo()->dynamicOptions->searchAppearance->taxonomies->{$term->taxonomy}->metaDescription, false, $default );
|
216 |
Â
}
|
217 |
Â
|
218 |
Â
$terms[ $term->term_id ] = $description ? $description : $this->helpers->prepare( term_description( $term->term_id ), false, $default );
|
app/Common/Meta/Helpers.php
CHANGED
@@ -61,7 +61,7 @@ class Helpers {
|
|
61 |
Â
}
|
62 |
Â
|
63 |
Â
$value = aioseo()->helpers->decodeHtmlEntities( $value );
|
64 |
-
$value =
|
65 |
Â
$value = wp_strip_all_tags( strip_shortcodes( $value ) );
|
66 |
Â
// Because we encoded the exceptions, we need to decode them again first to prevent double encoding later down the line.
|
67 |
Â
$value = aioseo()->helpers->decodeHtmlEntities( $value );
|
@@ -91,4 +91,21 @@ class Helpers {
|
|
91 |
Â
|
92 |
Â
return $this->sanitize( $value, $objectId, $replaceTags );
|
93 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
94 |
Â
}
|
61 |
Â
}
|
62 |
Â
|
63 |
Â
$value = aioseo()->helpers->decodeHtmlEntities( $value );
|
64 |
+
$value = $this->encodeExceptions( $value );
|
65 |
Â
$value = wp_strip_all_tags( strip_shortcodes( $value ) );
|
66 |
Â
// Because we encoded the exceptions, we need to decode them again first to prevent double encoding later down the line.
|
67 |
Â
$value = aioseo()->helpers->decodeHtmlEntities( $value );
|
91 |
Â
|
92 |
Â
return $this->sanitize( $value, $objectId, $replaceTags );
|
93 |
Â
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Encodes a number of exceptions before we strip tags.
|
97 |
+
* We need this function to allow certain character (combinations) in the title/description.
|
98 |
+
*
|
99 |
+
* @since 4.1.1
|
100 |
+
*
|
101 |
+
* @param string $string The string.
|
102 |
+
* @return string $string The string with exceptions encoded.
|
103 |
+
*/
|
104 |
+
public function encodeExceptions( $string ) {
|
105 |
+
$exceptions = [ '<3' ];
|
106 |
+
foreach ( $exceptions as $exception ) {
|
107 |
+
$string = preg_replace( "/$exception/", aioseo()->helpers->encodeOutputHtml( $exception ), $string );
|
108 |
+
}
|
109 |
+
return $string;
|
110 |
+
}
|
111 |
Â
}
|
app/Common/Meta/Keywords.php
CHANGED
@@ -52,10 +52,10 @@ class Keywords {
|
|
52 |
Â
return $this->prepareKeywords( $keywords );
|
53 |
Â
}
|
54 |
Â
|
55 |
-
$postType
|
56 |
-
$
|
57 |
-
if ( $postType && $
|
58 |
-
$keywords = $this->extractMetaKeywords( aioseo()->
|
59 |
Â
return $this->prepareKeywords( $keywords );
|
60 |
Â
}
|
61 |
Â
|
@@ -136,11 +136,11 @@ class Keywords {
|
|
136 |
Â
|
137 |
Â
if ( $post ) {
|
138 |
Â
if ( aioseo()->options->searchAppearance->advanced->useTagsForMetaKeywords ) {
|
139 |
-
$keywords = array_merge( $keywords, aioseo()->
|
140 |
Â
}
|
141 |
Â
|
142 |
Â
if ( aioseo()->options->searchAppearance->advanced->useCategoriesForMetaKeywords && ! is_page() ) {
|
143 |
-
$keywords = array_merge( $keywords, aioseo()->
|
144 |
Â
}
|
145 |
Â
}
|
146 |
Â
|
52 |
Â
return $this->prepareKeywords( $keywords );
|
53 |
Â
}
|
54 |
Â
|
55 |
+
$postType = get_queried_object();
|
56 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
57 |
+
if ( $postType && $dynamicOptions->searchAppearance->archives->has( $postType->name ) ) {
|
58 |
+
$keywords = $this->extractMetaKeywords( aioseo()->dynamicOptions->searchAppearance->archives->{ $postType->name }->advanced->keywords );
|
59 |
Â
return $this->prepareKeywords( $keywords );
|
60 |
Â
}
|
61 |
Â
|
136 |
Â
|
137 |
Â
if ( $post ) {
|
138 |
Â
if ( aioseo()->options->searchAppearance->advanced->useTagsForMetaKeywords ) {
|
139 |
+
$keywords = array_merge( $keywords, aioseo()->helpers->getAllTags( $post->ID ) );
|
140 |
Â
}
|
141 |
Â
|
142 |
Â
if ( aioseo()->options->searchAppearance->advanced->useCategoriesForMetaKeywords && ! is_page() ) {
|
143 |
+
$keywords = array_merge( $keywords, aioseo()->helpers->getAllCategories( $post->ID ) );
|
144 |
Â
}
|
145 |
Â
}
|
146 |
Â
|
app/Common/Meta/Robots.php
CHANGED
@@ -99,10 +99,6 @@ class Robots {
|
|
99 |
Â
return $this->term();
|
100 |
Â
}
|
101 |
Â
|
102 |
-
if ( ! get_option( 'blog_public' ) ) {
|
103 |
-
return false;
|
104 |
-
}
|
105 |
-
|
106 |
Â
if ( is_home() && 'posts' === get_option( 'show_on_front' ) ) {
|
107 |
Â
$this->globalValues();
|
108 |
Â
return $this->metaHelper();
|
@@ -171,6 +167,12 @@ class Robots {
|
|
171 |
Â
$this->attributes['noindex'] = '';
|
172 |
Â
}
|
173 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
174 |
Â
$this->attributes = apply_filters( 'aioseo_robots_meta', $this->attributes );
|
175 |
Â
return implode( ', ', array_filter( $this->attributes ) );
|
176 |
Â
}
|
@@ -183,17 +185,17 @@ class Robots {
|
|
183 |
Â
* @return void
|
184 |
Â
*/
|
185 |
Â
private function post() {
|
186 |
-
$
|
187 |
-
$post
|
188 |
-
$metaData
|
189 |
Â
|
190 |
Â
if ( ! empty( $metaData ) && ! $metaData->robots_default ) {
|
191 |
Â
$this->metaValues( $metaData );
|
192 |
Â
return;
|
193 |
Â
}
|
194 |
Â
|
195 |
-
if ( $
|
196 |
-
$this->globalValues( [ '
|
197 |
Â
}
|
198 |
Â
}
|
199 |
Â
|
@@ -205,11 +207,11 @@ class Robots {
|
|
205 |
Â
* @return string The robots meta tag value.
|
206 |
Â
*/
|
207 |
Â
private function term() {
|
208 |
-
$
|
209 |
-
$term
|
210 |
Â
|
211 |
-
if ( $
|
212 |
-
$this->globalValues( [ '
|
213 |
Â
return$this->metaHelper();
|
214 |
Â
}
|
215 |
Â
|
@@ -225,11 +227,11 @@ class Robots {
|
|
225 |
Â
* @return void
|
226 |
Â
*/
|
227 |
Â
private function archives() {
|
228 |
-
$
|
229 |
-
$postType
|
230 |
Â
|
231 |
-
if ( $
|
232 |
-
$this->globalValues( [ '
|
233 |
Â
}
|
234 |
Â
}
|
235 |
Â
|
@@ -238,13 +240,14 @@ class Robots {
|
|
238 |
Â
*
|
239 |
Â
* @since 4.0.0
|
240 |
Â
*
|
241 |
-
* @param array
|
Â
|
|
242 |
Â
* @return void
|
243 |
Â
*/
|
244 |
-
protected function globalValues( $optionOrder = [] ) {
|
245 |
Â
$robotsMeta = [];
|
246 |
Â
if ( count( $optionOrder ) ) {
|
247 |
-
$options = aioseo()->options->noConflict()->searchAppearance;
|
248 |
Â
foreach ( $optionOrder as $option ) {
|
249 |
Â
if ( ! $options->has( $option, false ) ) {
|
250 |
Â
return;
|
@@ -265,6 +268,8 @@ class Robots {
|
|
265 |
Â
$robotsMeta = aioseo()->options->searchAppearance->advanced->globalRobotsMeta->all();
|
266 |
Â
}
|
267 |
Â
|
Â
|
|
Â
|
|
268 |
Â
if ( $robotsMeta['default'] ) {
|
269 |
Â
return;
|
270 |
Â
}
|
@@ -282,10 +287,6 @@ class Robots {
|
|
282 |
Â
if ( $noSnippet ) {
|
283 |
Â
$this->attributes['nosnippet'] = 'nosnippet';
|
284 |
Â
}
|
285 |
-
$noImageIndex = $robotsMeta['noimageindex'];
|
286 |
-
if ( $noImageIndex ) {
|
287 |
-
$this->attributes['noimageindex'] = 'noimageindex';
|
288 |
-
}
|
289 |
Â
if ( $robotsMeta['noodp'] ) {
|
290 |
Â
$this->attributes['noodp'] = 'noodp';
|
291 |
Â
}
|
@@ -297,6 +298,7 @@ class Robots {
|
|
297 |
Â
$this->attributes['max-snippet'] = "max-snippet:$maxSnippet";
|
298 |
Â
}
|
299 |
Â
$maxImagePreview = $robotsMeta['maxImagePreview'];
|
Â
|
|
300 |
Â
if ( ! $noImageIndex && $maxImagePreview && in_array( $maxImagePreview, [ 'none', 'standard', 'large' ], true ) ) {
|
301 |
Â
$this->attributes['max-image-preview'] = "max-image-preview:$maxImagePreview";
|
302 |
Â
}
|
@@ -304,6 +306,12 @@ class Robots {
|
|
304 |
Â
if ( $maxVideoPreview && intval( $maxVideoPreview ) ) {
|
305 |
Â
$this->attributes['max-video-preview'] = "max-video-preview:$maxVideoPreview";
|
306 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
307 |
Â
}
|
308 |
Â
|
309 |
Â
/**
|
@@ -327,9 +335,6 @@ class Robots {
|
|
327 |
Â
if ( $metaData->robots_nosnippet ) {
|
328 |
Â
$this->attributes['nosnippet'] = 'nosnippet';
|
329 |
Â
}
|
330 |
-
if ( $metaData->robots_noimageindex ) {
|
331 |
-
$this->attributes['noimageindex'] = 'noimageindex';
|
332 |
-
}
|
333 |
Â
if ( $metaData->robots_noodp ) {
|
334 |
Â
$this->attributes['noodp'] = 'noodp';
|
335 |
Â
}
|
@@ -345,6 +350,12 @@ class Robots {
|
|
345 |
Â
if ( $metaData->robots_max_videopreview && intval( $metaData->robots_max_videopreview ) ) {
|
346 |
Â
$this->attributes['max-video-preview'] = "max-video-preview:$metaData->robots_max_videopreview";
|
347 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
348 |
Â
}
|
349 |
Â
|
350 |
Â
/**
|
99 |
Â
return $this->term();
|
100 |
Â
}
|
101 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
102 |
Â
if ( is_home() && 'posts' === get_option( 'show_on_front' ) ) {
|
103 |
Â
$this->globalValues();
|
104 |
Â
return $this->metaHelper();
|
167 |
Â
$this->attributes['noindex'] = '';
|
168 |
Â
}
|
169 |
Â
|
170 |
+
// Because we prevent WordPress Core from outputting a robots tag in disableWpRobotsCore(), we need to noindex/nofollow non-public sites ourselves.
|
171 |
+
if ( ! get_option( 'blog_public' ) ) {
|
172 |
+
$this->attributes['noindex'] = 'noindex';
|
173 |
+
$this->attributes['nofollow'] = 'nofollow';
|
174 |
+
}
|
175 |
+
|
176 |
Â
$this->attributes = apply_filters( 'aioseo_robots_meta', $this->attributes );
|
177 |
Â
return implode( ', ', array_filter( $this->attributes ) );
|
178 |
Â
}
|
185 |
Â
* @return void
|
186 |
Â
*/
|
187 |
Â
private function post() {
|
188 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
189 |
+
$post = aioseo()->helpers->getPost();
|
190 |
+
$metaData = aioseo()->meta->metaData->getMetaData( $post );
|
191 |
Â
|
192 |
Â
if ( ! empty( $metaData ) && ! $metaData->robots_default ) {
|
193 |
Â
$this->metaValues( $metaData );
|
194 |
Â
return;
|
195 |
Â
}
|
196 |
Â
|
197 |
+
if ( $dynamicOptions->searchAppearance->postTypes->has( $post->post_type ) ) {
|
198 |
+
$this->globalValues( [ 'postTypes', $post->post_type ], true );
|
199 |
Â
}
|
200 |
Â
}
|
201 |
Â
|
207 |
Â
* @return string The robots meta tag value.
|
208 |
Â
*/
|
209 |
Â
private function term() {
|
210 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
211 |
+
$term = get_queried_object();
|
212 |
Â
|
213 |
+
if ( $dynamicOptions->searchAppearance->taxonomies->has( $term->taxonomy ) ) {
|
214 |
+
$this->globalValues( [ 'taxonomies', $term->taxonomy ], true );
|
215 |
Â
return$this->metaHelper();
|
216 |
Â
}
|
217 |
Â
|
227 |
Â
* @return void
|
228 |
Â
*/
|
229 |
Â
private function archives() {
|
230 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
231 |
+
$postType = get_queried_object();
|
232 |
Â
|
233 |
+
if ( $dynamicOptions->searchAppearance->archives->has( $postType->name ) ) {
|
234 |
+
$this->globalValues( [ 'archives', $postType->name ], true );
|
235 |
Â
}
|
236 |
Â
}
|
237 |
Â
|
240 |
Â
*
|
241 |
Â
* @since 4.0.0
|
242 |
Â
*
|
243 |
+
* @param array $optionOrder The order in which the options need to be called to get the relevant robots meta settings.
|
244 |
+
* @param boolean $isDynamicOption Whether this is for a dynamic option.
|
245 |
Â
* @return void
|
246 |
Â
*/
|
247 |
+
protected function globalValues( $optionOrder = [], $isDynamicOption = false ) {
|
248 |
Â
$robotsMeta = [];
|
249 |
Â
if ( count( $optionOrder ) ) {
|
250 |
+
$options = $isDynamicOption ? aioseo()->dynamicOptions->noConflict()->searchAppearance : aioseo()->options->noConflict()->searchAppearance;
|
251 |
Â
foreach ( $optionOrder as $option ) {
|
252 |
Â
if ( ! $options->has( $option, false ) ) {
|
253 |
Â
return;
|
268 |
Â
$robotsMeta = aioseo()->options->searchAppearance->advanced->globalRobotsMeta->all();
|
269 |
Â
}
|
270 |
Â
|
271 |
+
$this->attributes['max-image-preview'] = 'max-image-preview:large';
|
272 |
+
|
273 |
Â
if ( $robotsMeta['default'] ) {
|
274 |
Â
return;
|
275 |
Â
}
|
287 |
Â
if ( $noSnippet ) {
|
288 |
Â
$this->attributes['nosnippet'] = 'nosnippet';
|
289 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
290 |
Â
if ( $robotsMeta['noodp'] ) {
|
291 |
Â
$this->attributes['noodp'] = 'noodp';
|
292 |
Â
}
|
298 |
Â
$this->attributes['max-snippet'] = "max-snippet:$maxSnippet";
|
299 |
Â
}
|
300 |
Â
$maxImagePreview = $robotsMeta['maxImagePreview'];
|
301 |
+
$noImageIndex = $robotsMeta['noimageindex'];
|
302 |
Â
if ( ! $noImageIndex && $maxImagePreview && in_array( $maxImagePreview, [ 'none', 'standard', 'large' ], true ) ) {
|
303 |
Â
$this->attributes['max-image-preview'] = "max-image-preview:$maxImagePreview";
|
304 |
Â
}
|
306 |
Â
if ( $maxVideoPreview && intval( $maxVideoPreview ) ) {
|
307 |
Â
$this->attributes['max-video-preview'] = "max-video-preview:$maxVideoPreview";
|
308 |
Â
}
|
309 |
+
|
310 |
+
// Check this last so that we can prevent max-image-preview from being output if noimageindex is enabled.
|
311 |
+
if ( $noImageIndex ) {
|
312 |
+
$this->attributes['max-image-preview'] = '';
|
313 |
+
$this->attributes['noimageindex'] = 'noimageindex';
|
314 |
+
}
|
315 |
Â
}
|
316 |
Â
|
317 |
Â
/**
|
335 |
Â
if ( $metaData->robots_nosnippet ) {
|
336 |
Â
$this->attributes['nosnippet'] = 'nosnippet';
|
337 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
338 |
Â
if ( $metaData->robots_noodp ) {
|
339 |
Â
$this->attributes['noodp'] = 'noodp';
|
340 |
Â
}
|
350 |
Â
if ( $metaData->robots_max_videopreview && intval( $metaData->robots_max_videopreview ) ) {
|
351 |
Â
$this->attributes['max-video-preview'] = "max-video-preview:$metaData->robots_max_videopreview";
|
352 |
Â
}
|
353 |
+
|
354 |
+
// Check this last so that we can prevent max-image-preview from being output if noimageindex is enabled.
|
355 |
+
if ( $metaData->robots_noimageindex ) {
|
356 |
+
$this->attributes['max-image-preview'] = '';
|
357 |
+
$this->attributes['noimageindex'] = 'noimageindex';
|
358 |
+
}
|
359 |
Â
}
|
360 |
Â
|
361 |
Â
/**
|
app/Common/Meta/Title.php
CHANGED
@@ -88,10 +88,10 @@ class Title {
|
|
88 |
Â
}
|
89 |
Â
|
90 |
Â
if ( is_archive() ) {
|
91 |
-
$postType
|
92 |
-
$
|
93 |
-
if ( $
|
94 |
-
return $this->helpers->prepare( aioseo()->
|
95 |
Â
}
|
96 |
Â
}
|
97 |
Â
}
|
@@ -146,8 +146,8 @@ class Title {
|
|
146 |
Â
return $postTypeTitle[ $postType ];
|
147 |
Â
}
|
148 |
Â
|
149 |
-
if ( aioseo()->
|
150 |
-
$title = aioseo()->
|
151 |
Â
}
|
152 |
Â
|
153 |
Â
$postTypeTitle[ $postType ] = empty( $title ) ? '' : $title;
|
@@ -170,10 +170,10 @@ class Title {
|
|
170 |
Â
return $terms[ $term->term_id ];
|
171 |
Â
}
|
172 |
Â
|
173 |
-
$title
|
174 |
-
$
|
175 |
-
if ( ! $title && $
|
176 |
-
$newTitle = aioseo()->
|
177 |
Â
$newTitle = preg_replace( '/#taxonomy_title/', aioseo()->helpers->escapeRegexReplacement( $term->name ), $newTitle );
|
178 |
Â
$title = $this->helpers->prepare( $newTitle, false, $default );
|
179 |
Â
}
|
88 |
Â
}
|
89 |
Â
|
90 |
Â
if ( is_archive() ) {
|
91 |
+
$postType = get_queried_object();
|
92 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
93 |
+
if ( $dynamicOptions->searchAppearance->archives->has( $postType->name ) ) {
|
94 |
+
return $this->helpers->prepare( aioseo()->dynamicOptions->searchAppearance->archives->{ $postType->name }->title );
|
95 |
Â
}
|
96 |
Â
}
|
97 |
Â
}
|
146 |
Â
return $postTypeTitle[ $postType ];
|
147 |
Â
}
|
148 |
Â
|
149 |
+
if ( aioseo()->dynamicOptions->searchAppearance->postTypes->has( $postType ) ) {
|
150 |
+
$title = aioseo()->dynamicOptions->searchAppearance->postTypes->{$postType}->title;
|
151 |
Â
}
|
152 |
Â
|
153 |
Â
$postTypeTitle[ $postType ] = empty( $title ) ? '' : $title;
|
170 |
Â
return $terms[ $term->term_id ];
|
171 |
Â
}
|
172 |
Â
|
173 |
+
$title = '';
|
174 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
175 |
+
if ( ! $title && $dynamicOptions->searchAppearance->taxonomies->has( $term->taxonomy ) ) {
|
176 |
+
$newTitle = aioseo()->dynamicOptions->searchAppearance->taxonomies->{$term->taxonomy}->title;
|
177 |
Â
$newTitle = preg_replace( '/#taxonomy_title/', aioseo()->helpers->escapeRegexReplacement( $term->name ), $newTitle );
|
178 |
Â
$title = $this->helpers->prepare( $newTitle, false, $default );
|
179 |
Â
}
|
app/Common/Migration/GeneralSettings.php
CHANGED
@@ -104,8 +104,8 @@ class GeneralSettings {
|
|
104 |
Â
* @return void
|
105 |
Â
*/
|
106 |
Â
private function setDefaultArticleType() {
|
107 |
-
if ( aioseo()->
|
108 |
-
aioseo()->
|
109 |
Â
}
|
110 |
Â
}
|
111 |
Â
|
@@ -385,19 +385,19 @@ class GeneralSettings {
|
|
385 |
Â
*/
|
386 |
Â
private function migrateTitleFormats() {
|
387 |
Â
if ( ! empty( $this->oldOptions['aiosp_archive_title_format'] ) ) {
|
388 |
-
$archives = array_keys( aioseo()->
|
389 |
Â
$format = aioseo()->helpers->sanitizeOption( aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_archive_title_format'] ) );
|
390 |
Â
foreach ( $archives as $archive ) {
|
391 |
-
aioseo()->
|
392 |
Â
}
|
393 |
Â
}
|
394 |
Â
|
395 |
Â
$settings = [
|
396 |
-
'aiosp_post_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', '
|
397 |
-
'aiosp_page_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', '
|
398 |
-
'aiosp_attachment_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', '
|
399 |
-
'aiosp_category_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', '
|
400 |
-
'aiosp_tag_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', '
|
401 |
Â
'aiosp_date_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'date', 'title' ] ],
|
402 |
Â
'aiosp_author_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'author', 'title' ] ],
|
403 |
Â
'aiosp_search_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'search', 'title' ] ],
|
@@ -415,11 +415,11 @@ class GeneralSettings {
|
|
415 |
Â
|
416 |
Â
$objectSlug = aioseo()->helpers->pregReplace( '#_tax#', '', $slug[1] );
|
417 |
Â
if ( in_array( $objectSlug, aioseo()->helpers->getPublicPostTypes( true ), true ) ) {
|
418 |
-
$settings[ $name ] = [ 'type' => 'string', 'newOption' => [ 'searchAppearance', '
|
419 |
Â
continue;
|
420 |
Â
}
|
421 |
Â
if ( in_array( $objectSlug, aioseo()->helpers->getPublicTaxonomies( true ), true ) ) {
|
422 |
-
$settings[ $name ] = [ 'type' => 'string', 'newOption' => [ 'searchAppearance', '
|
423 |
Â
}
|
424 |
Â
}
|
425 |
Â
}
|
@@ -488,8 +488,8 @@ class GeneralSettings {
|
|
488 |
Â
continue;
|
489 |
Â
}
|
490 |
Â
|
491 |
-
if ( aioseo()->
|
492 |
-
aioseo()->
|
493 |
Â
}
|
494 |
Â
}
|
495 |
Â
}
|
@@ -523,10 +523,10 @@ class GeneralSettings {
|
|
523 |
Â
|
524 |
Â
$noindexedPostTypes = is_array( $this->oldOptions['aiosp_cpostnoindex'] ) ? $this->oldOptions['aiosp_cpostnoindex'] : explode( ', ', $this->oldOptions['aiosp_cpostnoindex'] );
|
525 |
Â
foreach ( array_intersect( aioseo()->helpers->getPublicPostTypes( true ), $noindexedPostTypes ) as $postType ) {
|
526 |
-
if ( aioseo()->
|
527 |
-
aioseo()->
|
528 |
-
aioseo()->
|
529 |
-
aioseo()->
|
530 |
Â
}
|
531 |
Â
}
|
532 |
Â
|
@@ -541,10 +541,10 @@ class GeneralSettings {
|
|
541 |
Â
|
542 |
Â
if ( ! empty( $noindexedTaxonomies ) ) {
|
543 |
Â
foreach ( array_intersect( aioseo()->helpers->getPublicTaxonomies( true ), $noindexedTaxonomies ) as $taxonomy ) {
|
544 |
-
if ( aioseo()->
|
545 |
-
aioseo()->
|
546 |
-
aioseo()->
|
547 |
-
aioseo()->
|
548 |
Â
}
|
549 |
Â
}
|
550 |
Â
}
|
@@ -588,9 +588,9 @@ class GeneralSettings {
|
|
588 |
Â
private function migrateNofollowSettings() {
|
589 |
Â
if ( ! empty( $this->oldOptions['aiosp_cpostnofollow'] ) ) {
|
590 |
Â
foreach ( array_intersect( aioseo()->helpers->getPublicPostTypes( true ), $this->oldOptions['aiosp_cpostnofollow'] ) as $postType ) {
|
591 |
-
if ( aioseo()->
|
592 |
-
aioseo()->
|
593 |
-
aioseo()->
|
594 |
Â
}
|
595 |
Â
}
|
596 |
Â
}
|
@@ -818,9 +818,9 @@ class GeneralSettings {
|
|
818 |
Â
private function migrateRedirectToParent() {
|
819 |
Â
if ( isset( $this->oldOptions['aiosp_redirect_attachement_parent'] ) ) {
|
820 |
Â
if ( ! empty( $this->oldOptions['aiosp_redirect_attachement_parent'] ) ) {
|
821 |
-
aioseo()->
|
822 |
Â
} else {
|
823 |
-
aioseo()->
|
824 |
Â
}
|
825 |
Â
}
|
826 |
Â
}
|
104 |
Â
* @return void
|
105 |
Â
*/
|
106 |
Â
private function setDefaultArticleType() {
|
107 |
+
if ( aioseo()->dynamicOptions->searchAppearance->postTypes->has( 'post' ) ) {
|
108 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->post->articleType = 'Article';
|
109 |
Â
}
|
110 |
Â
}
|
111 |
Â
|
385 |
Â
*/
|
386 |
Â
private function migrateTitleFormats() {
|
387 |
Â
if ( ! empty( $this->oldOptions['aiosp_archive_title_format'] ) ) {
|
388 |
+
$archives = array_keys( aioseo()->dynamicOptions->searchAppearance->archives->all() );
|
389 |
Â
$format = aioseo()->helpers->sanitizeOption( aioseo()->migration->helpers->macrosToSmartTags( $this->oldOptions['aiosp_archive_title_format'] ) );
|
390 |
Â
foreach ( $archives as $archive ) {
|
391 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$archive->title = $format;
|
392 |
Â
}
|
393 |
Â
}
|
394 |
Â
|
395 |
Â
$settings = [
|
396 |
+
'aiosp_post_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'post', 'title' ], 'dynamic' => true ],
|
397 |
+
'aiosp_page_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'page', 'title' ], 'dynamic' => true ],
|
398 |
+
'aiosp_attachment_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', 'attachment', 'title' ], 'dynamic' => true ],
|
399 |
+
'aiosp_category_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', 'category', 'title' ], 'dynamic' => true ],
|
400 |
+
'aiosp_tag_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', 'post_tag', 'title' ], 'dynamic' => true ],
|
401 |
Â
'aiosp_date_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'date', 'title' ] ],
|
402 |
Â
'aiosp_author_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'author', 'title' ] ],
|
403 |
Â
'aiosp_search_title_format' => [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'archives', 'search', 'title' ] ],
|
415 |
Â
|
416 |
Â
$objectSlug = aioseo()->helpers->pregReplace( '#_tax#', '', $slug[1] );
|
417 |
Â
if ( in_array( $objectSlug, aioseo()->helpers->getPublicPostTypes( true ), true ) ) {
|
418 |
+
$settings[ $name ] = [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'postTypes', $objectSlug, 'title' ], 'dynamic' => true ];
|
419 |
Â
continue;
|
420 |
Â
}
|
421 |
Â
if ( in_array( $objectSlug, aioseo()->helpers->getPublicTaxonomies( true ), true ) ) {
|
422 |
+
$settings[ $name ] = [ 'type' => 'string', 'newOption' => [ 'searchAppearance', 'taxonomies', $objectSlug, 'title' ], 'dynamic' => true ];
|
423 |
Â
}
|
424 |
Â
}
|
425 |
Â
}
|
488 |
Â
continue;
|
489 |
Â
}
|
490 |
Â
|
491 |
+
if ( aioseo()->dynamicOptions->searchAppearance->postTypes->has( $postType['name'] ) ) {
|
492 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->{$postType['name']}->metaDescription = '#post_excerpt';
|
493 |
Â
}
|
494 |
Â
}
|
495 |
Â
}
|
523 |
Â
|
524 |
Â
$noindexedPostTypes = is_array( $this->oldOptions['aiosp_cpostnoindex'] ) ? $this->oldOptions['aiosp_cpostnoindex'] : explode( ', ', $this->oldOptions['aiosp_cpostnoindex'] );
|
525 |
Â
foreach ( array_intersect( aioseo()->helpers->getPublicPostTypes( true ), $noindexedPostTypes ) as $postType ) {
|
526 |
+
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->postTypes->has( $postType ) ) {
|
527 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->show = false;
|
528 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
|
529 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = true;
|
530 |
Â
}
|
531 |
Â
}
|
532 |
Â
|
541 |
Â
|
542 |
Â
if ( ! empty( $noindexedTaxonomies ) ) {
|
543 |
Â
foreach ( array_intersect( aioseo()->helpers->getPublicTaxonomies( true ), $noindexedTaxonomies ) as $taxonomy ) {
|
544 |
+
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->taxonomies->has( $taxonomy ) ) {
|
545 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->show = false;
|
546 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->default = false;
|
547 |
+
aioseo()->dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->noindex = true;
|
548 |
Â
}
|
549 |
Â
}
|
550 |
Â
}
|
588 |
Â
private function migrateNofollowSettings() {
|
589 |
Â
if ( ! empty( $this->oldOptions['aiosp_cpostnofollow'] ) ) {
|
590 |
Â
foreach ( array_intersect( aioseo()->helpers->getPublicPostTypes( true ), $this->oldOptions['aiosp_cpostnofollow'] ) as $postType ) {
|
591 |
+
if ( aioseo()->dynamicOptions->noConflict()->searchAppearance->postTypes->has( $postType ) ) {
|
592 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false;
|
593 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->nofollow = true;
|
594 |
Â
}
|
595 |
Â
}
|
596 |
Â
}
|
818 |
Â
private function migrateRedirectToParent() {
|
819 |
Â
if ( isset( $this->oldOptions['aiosp_redirect_attachement_parent'] ) ) {
|
820 |
Â
if ( ! empty( $this->oldOptions['aiosp_redirect_attachement_parent'] ) ) {
|
821 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'attachment_parent';
|
822 |
Â
} else {
|
823 |
+
aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = 'disabled';
|
824 |
Â
}
|
825 |
Â
}
|
826 |
Â
}
|
app/Common/Migration/Helpers.php
CHANGED
@@ -34,13 +34,15 @@ class Helpers {
|
|
34 |
Â
return;
|
35 |
Â
}
|
36 |
Â
|
Â
|
|
Â
|
|
37 |
Â
foreach ( $mappings as $name => $values ) {
|
38 |
Â
if ( ! isset( $group[ $name ] ) ) {
|
39 |
Â
continue;
|
40 |
Â
}
|
41 |
Â
|
42 |
Â
$error = false;
|
43 |
-
$options =
|
44 |
Â
$lastOption = '';
|
45 |
Â
for ( $i = 0; $i < count( $values['newOption'] ); $i++ ) {
|
46 |
Â
$lastOption = $values['newOption'][ $i ];
|
@@ -81,8 +83,6 @@ class Helpers {
|
|
81 |
Â
break;
|
82 |
Â
}
|
83 |
Â
}
|
84 |
-
|
85 |
-
aioseo()->options->refresh();
|
86 |
Â
}
|
87 |
Â
|
88 |
Â
/**
|
34 |
Â
return;
|
35 |
Â
}
|
36 |
Â
|
37 |
+
$mainOptions = aioseo()->options->noConflict();
|
38 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
39 |
Â
foreach ( $mappings as $name => $values ) {
|
40 |
Â
if ( ! isset( $group[ $name ] ) ) {
|
41 |
Â
continue;
|
42 |
Â
}
|
43 |
Â
|
44 |
Â
$error = false;
|
45 |
+
$options = ! empty( $values['dynamic'] ) ? $dynamicOptions : $mainOptions;
|
46 |
Â
$lastOption = '';
|
47 |
Â
for ( $i = 0; $i < count( $values['newOption'] ); $i++ ) {
|
48 |
Â
$lastOption = $values['newOption'][ $i ];
|
83 |
Â
break;
|
84 |
Â
}
|
85 |
Â
}
|
Â
|
|
Â
|
|
86 |
Â
}
|
87 |
Â
|
88 |
Â
/**
|
app/Common/Migration/Meta.php
CHANGED
@@ -67,6 +67,7 @@ class Meta {
|
|
67 |
Â
->leftJoin( 'aioseo_posts as ap', '`p`.`ID` = `ap`.`post_id`' )
|
68 |
Â
->whereRaw( "( ap.post_id IS NULL OR ap.updated < '$timeStarted' )" )
|
69 |
Â
->whereRaw( "( p.post_type IN ( '$publicPostTypes' ) )" )
|
Â
|
|
70 |
Â
->orderBy( 'p.ID DESC' )
|
71 |
Â
->limit( $postsPerAction )
|
72 |
Â
->run()
|
@@ -327,8 +328,23 @@ class Meta {
|
|
327 |
Â
* @param int $postId The post ID.
|
328 |
Â
* @return void
|
329 |
Â
*/
|
330 |
-
|
331 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
332 |
Â
}
|
333 |
Â
|
334 |
Â
/**
|
67 |
Â
->leftJoin( 'aioseo_posts as ap', '`p`.`ID` = `ap`.`post_id`' )
|
68 |
Â
->whereRaw( "( ap.post_id IS NULL OR ap.updated < '$timeStarted' )" )
|
69 |
Â
->whereRaw( "( p.post_type IN ( '$publicPostTypes' ) )" )
|
70 |
+
->whereRaw( 'p.post_status NOT IN( \'auto-draft\' )' )
|
71 |
Â
->orderBy( 'p.ID DESC' )
|
72 |
Â
->limit( $postsPerAction )
|
73 |
Â
->run()
|
328 |
Â
* @param int $postId The post ID.
|
329 |
Â
* @return void
|
330 |
Â
*/
|
331 |
+
public function migrateAdditionalPostMeta( $postId ) {
|
332 |
+
static $disabled = null;
|
333 |
+
|
334 |
+
if ( null === $disabled ) {
|
335 |
+
$disabled = (
|
336 |
+
! aioseo()->options->sitemap->general->enable ||
|
337 |
+
(
|
338 |
+
aioseo()->options->sitemap->general->advancedSettings->enable &&
|
339 |
+
aioseo()->options->sitemap->general->advancedSettings->excludeImages
|
340 |
+
)
|
341 |
+
);
|
342 |
+
}
|
343 |
+
if ( $disabled ) {
|
344 |
+
return;
|
345 |
+
}
|
346 |
+
|
347 |
+
aioseo()->sitemap->image->scanPost( $postId );
|
348 |
Â
}
|
349 |
Â
|
350 |
Â
/**
|
app/Common/Migration/Sitemap.php
CHANGED
@@ -275,8 +275,8 @@ class Sitemap {
|
|
275 |
Â
'aiosp_sitemap_freq_homepage' => [ 'type' => 'string', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'homePage', 'frequency' ] ],
|
276 |
Â
'aiosp_sitemap_prio_post' => [ 'type' => 'float', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'postTypes', 'priority' ] ],
|
277 |
Â
'aiosp_sitemap_freq_post' => [ 'type' => 'string', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'postTypes', 'frequency' ] ],
|
278 |
-
'aiosp_sitemap_prio_post_post' => [ 'type' => 'float', 'newOption' => [ 'sitemap', '
|
279 |
-
'aiosp_sitemap_freq_post_post' => [ 'type' => 'string', 'newOption' => [ 'sitemap', '
|
280 |
Â
'aiosp_sitemap_prio_taxonomies' => [ 'type' => 'float', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'taxonomies', 'priority' ] ],
|
281 |
Â
'aiosp_sitemap_freq_taxonomies' => [ 'type' => 'string', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'taxonomies', 'frequency' ] ],
|
282 |
Â
'aiosp_sitemap_prio_archive' => [ 'type' => 'float', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'archive', 'priority' ] ],
|
@@ -308,7 +308,8 @@ class Sitemap {
|
|
308 |
Â
if ( in_array( $objectSlug, aioseo()->helpers->getPublicPostTypes( true ), true ) ) {
|
309 |
Â
$settings[ $name ] = [
|
310 |
Â
'type' => 'priority' === $type ? 'float' : 'string',
|
311 |
-
'newOption' => [ 'sitemap', '
|
Â
|
|
312 |
Â
];
|
313 |
Â
continue;
|
314 |
Â
}
|
@@ -316,11 +317,14 @@ class Sitemap {
|
|
316 |
Â
if ( in_array( $objectSlug, aioseo()->helpers->getPublicTaxonomies( true ), true ) ) {
|
317 |
Â
$settings[ $name ] = [
|
318 |
Â
'type' => 'priority' === $type ? 'float' : 'string',
|
319 |
-
'newOption' => [ 'sitemap', '
|
Â
|
|
320 |
Â
];
|
321 |
Â
}
|
322 |
Â
}
|
323 |
Â
|
Â
|
|
Â
|
|
324 |
Â
foreach ( $settings as $name => $values ) {
|
325 |
Â
// If setting is set to default, do nothing.
|
326 |
Â
if (
|
@@ -347,7 +351,7 @@ class Sitemap {
|
|
347 |
Â
$object->value = $value;
|
348 |
Â
|
349 |
Â
$error = false;
|
350 |
-
$options =
|
351 |
Â
$lastOption = '';
|
352 |
Â
for ( $i = 0; $i < count( $values['newOption'] ); $i++ ) {
|
353 |
Â
$lastOption = $values['newOption'][ $i ];
|
@@ -365,11 +369,10 @@ class Sitemap {
|
|
365 |
Â
}
|
366 |
Â
|
367 |
Â
$options->$lastOption = wp_json_encode( $object );
|
368 |
-
aioseo()->options->refresh();
|
369 |
Â
}
|
370 |
Â
|
371 |
Â
if ( count( $settings ) ) {
|
372 |
-
|
373 |
Â
}
|
374 |
Â
}
|
375 |
Â
|
275 |
Â
'aiosp_sitemap_freq_homepage' => [ 'type' => 'string', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'homePage', 'frequency' ] ],
|
276 |
Â
'aiosp_sitemap_prio_post' => [ 'type' => 'float', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'postTypes', 'priority' ] ],
|
277 |
Â
'aiosp_sitemap_freq_post' => [ 'type' => 'string', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'postTypes', 'frequency' ] ],
|
278 |
+
'aiosp_sitemap_prio_post_post' => [ 'type' => 'float', 'newOption' => [ 'sitemap', 'priority', 'postTypes', 'post', 'priority' ], 'dynamic' => true ],
|
279 |
+
'aiosp_sitemap_freq_post_post' => [ 'type' => 'string', 'newOption' => [ 'sitemap', 'priority', 'postTypes', 'post', 'frequency' ], 'dynamic' => true ],
|
280 |
Â
'aiosp_sitemap_prio_taxonomies' => [ 'type' => 'float', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'taxonomies', 'priority' ] ],
|
281 |
Â
'aiosp_sitemap_freq_taxonomies' => [ 'type' => 'string', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'taxonomies', 'frequency' ] ],
|
282 |
Â
'aiosp_sitemap_prio_archive' => [ 'type' => 'float', 'newOption' => [ 'sitemap', 'general', 'advancedSettings', 'priority', 'archive', 'priority' ] ],
|
308 |
Â
if ( in_array( $objectSlug, aioseo()->helpers->getPublicPostTypes( true ), true ) ) {
|
309 |
Â
$settings[ $name ] = [
|
310 |
Â
'type' => 'priority' === $type ? 'float' : 'string',
|
311 |
+
'newOption' => [ 'sitemap', 'priority', 'postTypes', $objectSlug, $type ],
|
312 |
+
'dynamic' => true
|
313 |
Â
];
|
314 |
Â
continue;
|
315 |
Â
}
|
317 |
Â
if ( in_array( $objectSlug, aioseo()->helpers->getPublicTaxonomies( true ), true ) ) {
|
318 |
Â
$settings[ $name ] = [
|
319 |
Â
'type' => 'priority' === $type ? 'float' : 'string',
|
320 |
+
'newOption' => [ 'sitemap', 'priority', 'taxonomies', $objectSlug, $type ],
|
321 |
+
'dynamic' => true
|
322 |
Â
];
|
323 |
Â
}
|
324 |
Â
}
|
325 |
Â
|
326 |
+
$mainOptions = aioseo()->options->noConflict();
|
327 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
328 |
Â
foreach ( $settings as $name => $values ) {
|
329 |
Â
// If setting is set to default, do nothing.
|
330 |
Â
if (
|
351 |
Â
$object->value = $value;
|
352 |
Â
|
353 |
Â
$error = false;
|
354 |
+
$options = ! empty( $values['dynamic'] ) ? $dynamicOptions : $mainOptions;
|
355 |
Â
$lastOption = '';
|
356 |
Â
for ( $i = 0; $i < count( $values['newOption'] ); $i++ ) {
|
357 |
Â
$lastOption = $values['newOption'][ $i ];
|
369 |
Â
}
|
370 |
Â
|
371 |
Â
$options->$lastOption = wp_json_encode( $object );
|
Â
|
|
372 |
Â
}
|
373 |
Â
|
374 |
Â
if ( count( $settings ) ) {
|
375 |
+
$mainOptions->sitemap->general->advancedSettings->enable = true;
|
376 |
Â
}
|
377 |
Â
}
|
378 |
Â
|
app/Common/Migration/SocialMeta.php
CHANGED
@@ -376,9 +376,9 @@ class SocialMeta {
|
|
376 |
Â
continue;
|
377 |
Â
}
|
378 |
Â
|
379 |
-
$
|
380 |
-
if ( $
|
381 |
-
aioseo()->
|
382 |
Â
aioseo()->helpers->sanitizeOption( $this->oldOptions['modules']['aiosp_opengraph_options'][ $settingName ] );
|
383 |
Â
}
|
384 |
Â
|
376 |
Â
continue;
|
377 |
Â
}
|
378 |
Â
|
379 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
380 |
+
if ( $dynamicOptions->social->facebook->general->postTypes->has( $postType ) ) {
|
381 |
+
aioseo()->dynamicOptions->social->facebook->general->postTypes->$postType->objectType =
|
382 |
Â
aioseo()->helpers->sanitizeOption( $this->oldOptions['modules']['aiosp_opengraph_options'][ $settingName ] );
|
383 |
Â
}
|
384 |
Â
|
app/Common/Models/Model.php
CHANGED
@@ -236,6 +236,9 @@ class Model implements \JsonSerializable {
|
|
236 |
Â
|
237 |
Â
foreach ( $this->jsonFields as $field ) {
|
238 |
Â
if ( isset( $data[ $field ] ) && ! aioseo()->helpers->isJsonString( $data[ $field ] ) ) {
|
Â
|
|
Â
|
|
Â
|
|
239 |
Â
$data[ $field ] = wp_json_encode( $data[ $field ] );
|
240 |
Â
}
|
241 |
Â
}
|
@@ -495,119 +498,4 @@ class Model implements \JsonSerializable {
|
|
495 |
Â
|
496 |
Â
return wp_json_encode( $existingOptions );
|
497 |
Â
}
|
498 |
-
|
499 |
-
/**
|
500 |
-
* Returns a JSON object with default local seo options.
|
501 |
-
*
|
502 |
-
* @since 4.0.0
|
503 |
-
*
|
504 |
-
* @param string $existingOptions The existing options in JSON.
|
505 |
-
* @return string The existing options with defaults added in JSON.
|
506 |
-
*/
|
507 |
-
public static function getDefaultLocalSeoOptions( $existingOptions = '' ) {
|
508 |
-
$defaults = [
|
509 |
-
'locations' => [
|
510 |
-
'business' => [
|
511 |
-
'name' => '',
|
512 |
-
'businessType' => '',
|
513 |
-
'image' => '',
|
514 |
-
'areaServed' => '',
|
515 |
-
'urls' => [
|
516 |
-
'website' => '',
|
517 |
-
'aboutPage' => '',
|
518 |
-
'contactPage' => ''
|
519 |
-
],
|
520 |
-
'address' => [
|
521 |
-
'streetLine1' => '',
|
522 |
-
'streetLine2' => '',
|
523 |
-
'zipCode' => '',
|
524 |
-
'city' => '',
|
525 |
-
'state' => '',
|
526 |
-
'country' => '',
|
527 |
-
'addressFormat' => '#streetLineOne\n#streetLineTwo\n#city, #state #zipCode'
|
528 |
-
],
|
529 |
-
'contact' => [
|
530 |
-
'email' => '',
|
531 |
-
'phone' => '',
|
532 |
-
'phoneFormatted' => '',
|
533 |
-
'fax' => '',
|
534 |
-
'faxFormatted' => ''
|
535 |
-
],
|
536 |
-
'ids' => [
|
537 |
-
'vat' => '',
|
538 |
-
'tax' => '',
|
539 |
-
'chamberOfCommerce' => ''
|
540 |
-
],
|
541 |
-
'payment' => [
|
542 |
-
'priceRange' => '',
|
543 |
-
'currenciesAccepted' => '',
|
544 |
-
'methods' => ''
|
545 |
-
],
|
546 |
-
],
|
547 |
-
],
|
548 |
-
'openingHours' => [
|
549 |
-
'useDefaults' => true,
|
550 |
-
'show' => true,
|
551 |
-
'alwaysOpen' => false,
|
552 |
-
'use24hFormat' => false,
|
553 |
-
'timezone' => '',
|
554 |
-
'labels' => [
|
555 |
-
'closed' => '',
|
556 |
-
'alwaysOpen' => ''
|
557 |
-
],
|
558 |
-
'days' => [
|
559 |
-
'monday' => [
|
560 |
-
'open24h' => false,
|
561 |
-
'closed' => false,
|
562 |
-
'openTime' => '09:00',
|
563 |
-
'closeTime' => '17:00'
|
564 |
-
],
|
565 |
-
'tuesday' => [
|
566 |
-
'open24h' => false,
|
567 |
-
'closed' => false,
|
568 |
-
'openTime' => '09:00',
|
569 |
-
'closeTime' => '17:00'
|
570 |
-
],
|
571 |
-
'wednesday' => [
|
572 |
-
'open24h' => false,
|
573 |
-
'closed' => false,
|
574 |
-
'openTime' => '09:00',
|
575 |
-
'closeTime' => '17:00'
|
576 |
-
],
|
577 |
-
'thursday' => [
|
578 |
-
'open24h' => false,
|
579 |
-
'closed' => false,
|
580 |
-
'openTime' => '09:00',
|
581 |
-
'closeTime' => '17:00'
|
582 |
-
],
|
583 |
-
'friday' => [
|
584 |
-
'open24h' => false,
|
585 |
-
'closed' => false,
|
586 |
-
'openTime' => '09:00',
|
587 |
-
'closeTime' => '17:00'
|
588 |
-
],
|
589 |
-
'saturday' => [
|
590 |
-
'open24h' => false,
|
591 |
-
'closed' => false,
|
592 |
-
'openTime' => '09:00',
|
593 |
-
'closeTime' => '17:00'
|
594 |
-
],
|
595 |
-
'sunday' => [
|
596 |
-
'open24h' => false,
|
597 |
-
'closed' => false,
|
598 |
-
'openTime' => '09:00',
|
599 |
-
'closeTime' => '17:00'
|
600 |
-
]
|
601 |
-
]
|
602 |
-
]
|
603 |
-
];
|
604 |
-
|
605 |
-
if ( empty( $existingOptions ) ) {
|
606 |
-
$defaults = wp_json_encode( $defaults );
|
607 |
-
return str_replace( '\\\n', '\n', $defaults );
|
608 |
-
}
|
609 |
-
|
610 |
-
$existingOptions = json_decode( $existingOptions, true );
|
611 |
-
return array_replace_recursive( $defaults, $existingOptions );
|
612 |
-
}
|
613 |
Â
}
|
236 |
Â
|
237 |
Â
foreach ( $this->jsonFields as $field ) {
|
238 |
Â
if ( isset( $data[ $field ] ) && ! aioseo()->helpers->isJsonString( $data[ $field ] ) ) {
|
239 |
+
if ( is_array( $data[ $field ] ) && aioseo()->helpers->isArrayNumeric( $data[ $field ] ) ) {
|
240 |
+
$data[ $field ] = array_values( $data[ $field ] );
|
241 |
+
}
|
242 |
Â
$data[ $field ] = wp_json_encode( $data[ $field ] );
|
243 |
Â
}
|
244 |
Â
}
|
498 |
Â
|
499 |
Â
return wp_json_encode( $existingOptions );
|
500 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
501 |
Â
}
|
app/Common/Models/Post.php
CHANGED
@@ -74,8 +74,25 @@ class Post extends Model {
|
|
74 |
Â
->run()
|
75 |
Â
->model( 'AIOSEO\\Plugin\\Common\\Models\\Post' );
|
76 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
77 |
Â
if (
|
78 |
-
! $post->exists() &&
|
79 |
Â
'page' === get_post_type( $postId ) && // This check cannot be deleted and is required to prevent errors after WordPress cleans up the attachment it creates when a plugin is updated.
|
80 |
Â
(
|
81 |
Â
aioseo()->helpers->isWooCommerceCheckoutPage( $postId ) ||
|
@@ -86,6 +103,11 @@ class Post extends Model {
|
|
86 |
Â
$post->robots_default = false;
|
87 |
Â
$post->robots_noindex = true;
|
88 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
89 |
Â
return $post;
|
90 |
Â
}
|
91 |
Â
|
@@ -94,9 +116,9 @@ class Post extends Model {
|
|
94 |
Â
*
|
95 |
Â
* @since 4.0.3
|
96 |
Â
*
|
97 |
-
* @param int
|
98 |
-
* @param array
|
99 |
-
* @return
|
100 |
Â
*/
|
101 |
Â
public static function savePost( $postId, $data ) {
|
102 |
Â
$thePost = self::getPost( $postId );
|
@@ -189,8 +211,6 @@ class Post extends Model {
|
|
189 |
Â
if ( ! empty( $lastError ) ) {
|
190 |
Â
return $lastError;
|
191 |
Â
}
|
192 |
-
|
193 |
-
return true;
|
194 |
Â
}
|
195 |
Â
|
196 |
Â
/**
|
74 |
Â
->run()
|
75 |
Â
->model( 'AIOSEO\\Plugin\\Common\\Models\\Post' );
|
76 |
Â
|
77 |
+
if ( ! $post->exists() ) {
|
78 |
+
$post->post_id = $postId;
|
79 |
+
$post = self::setDynamicDefaults( $post, $postId );
|
80 |
+
}
|
81 |
+
|
82 |
+
return $post;
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Sets the dynamic defaults on the post object if it doesn't exist in the DB yet.
|
87 |
+
*
|
88 |
+
* @since 4.1.4
|
89 |
+
*
|
90 |
+
* @param Post $post The post object.
|
91 |
+
* @param int $postId The post ID.
|
92 |
+
* @return Post The modified post object.
|
93 |
+
*/
|
94 |
+
private static function setDynamicDefaults( $post, $postId ) {
|
95 |
Â
if (
|
Â
|
|
96 |
Â
'page' === get_post_type( $postId ) && // This check cannot be deleted and is required to prevent errors after WordPress cleans up the attachment it creates when a plugin is updated.
|
97 |
Â
(
|
98 |
Â
aioseo()->helpers->isWooCommerceCheckoutPage( $postId ) ||
|
103 |
Â
$post->robots_default = false;
|
104 |
Â
$post->robots_noindex = true;
|
105 |
Â
}
|
106 |
+
|
107 |
+
if ( aioseo()->helpers->isStaticHomePage( $postId ) ) {
|
108 |
+
$post->og_object_type = 'website';
|
109 |
+
}
|
110 |
+
|
111 |
Â
return $post;
|
112 |
Â
}
|
113 |
Â
|
116 |
Â
*
|
117 |
Â
* @since 4.0.3
|
118 |
Â
*
|
119 |
+
* @param int $postId The Post ID.
|
120 |
+
* @param array $data The post data to save.
|
121 |
+
* @return void|string True if post data was saved or error response.
|
122 |
Â
*/
|
123 |
Â
public static function savePost( $postId, $data ) {
|
124 |
Â
$thePost = self::getPost( $postId );
|
211 |
Â
if ( ! empty( $lastError ) ) {
|
212 |
Â
return $lastError;
|
213 |
Â
}
|
Â
|
|
Â
|
|
214 |
Â
}
|
215 |
Â
|
216 |
Â
/**
|
app/Common/Options/Cache.php
ADDED
@@ -0,0 +1,93 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Options;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class that holds all the cache for the AIOSEO options.
|
11 |
+
*
|
12 |
+
* @since 4.1.4
|
13 |
+
*/
|
14 |
+
class Cache {
|
15 |
+
/**
|
16 |
+
* The DB options cache.
|
17 |
+
*
|
18 |
+
* @since 4.1.4
|
19 |
+
*
|
20 |
+
* @var array
|
21 |
+
*/
|
22 |
+
private static $db = [];
|
23 |
+
|
24 |
+
/**
|
25 |
+
* The options cache.
|
26 |
+
*
|
27 |
+
* @since 4.1.4
|
28 |
+
*
|
29 |
+
* @var array
|
30 |
+
*/
|
31 |
+
private static $options = [];
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Sets the cache for the DB option.
|
35 |
+
*
|
36 |
+
* @since 4.1.4
|
37 |
+
*
|
38 |
+
* @param string $name The cache name.
|
39 |
+
* @param array $value The value.
|
40 |
+
* @return void
|
41 |
+
*/
|
42 |
+
public function setDb( $name, $value ) {
|
43 |
+
self::$db[ $name ] = $value;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Gets the cache for the DB option.
|
48 |
+
*
|
49 |
+
* @since 4.1.4
|
50 |
+
*
|
51 |
+
* @param string $name The cache name.
|
52 |
+
* @return array The data from the cache.
|
53 |
+
*/
|
54 |
+
public function getDb( $name ) {
|
55 |
+
return ! empty( self::$db[ $name ] ) ? self::$db[ $name ] : [];
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Sets the cache for the options.
|
60 |
+
*
|
61 |
+
* @since 4.1.4
|
62 |
+
*
|
63 |
+
* @param string $name The cache name.
|
64 |
+
* @param array $value The value.
|
65 |
+
* @return void
|
66 |
+
*/
|
67 |
+
public function setOptions( $name, $value ) {
|
68 |
+
self::$options[ $name ] = $value;
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Gets the cache for the options.
|
73 |
+
*
|
74 |
+
* @since 4.1.4
|
75 |
+
*
|
76 |
+
* @param string $name The cache name.
|
77 |
+
* @return array The data from the cache.
|
78 |
+
*/
|
79 |
+
public function getOptions( $name ) {
|
80 |
+
return ! empty( self::$options[ $name ] ) ? self::$options[ $name ] : [];
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Resets the DB cache.
|
85 |
+
*
|
86 |
+
* @since 4.1.4
|
87 |
+
*
|
88 |
+
* @return void
|
89 |
+
*/
|
90 |
+
public function resetDb() {
|
91 |
+
self::$db = [];
|
92 |
+
}
|
93 |
+
}
|
app/Common/{Utils → Options}/DynamicBackup.php
RENAMED
@@ -1,11 +1,16 @@
|
|
1 |
Â
<?php
|
2 |
-
namespace AIOSEO\Plugin\Common\
|
3 |
Â
|
4 |
Â
// Exit if accessed directly.
|
5 |
Â
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
Â
exit;
|
7 |
Â
}
|
8 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
9 |
Â
class DynamicBackup {
|
10 |
Â
/**
|
11 |
Â
* A the name of the option to save dynamic backups to.
|
@@ -25,15 +30,6 @@ class DynamicBackup {
|
|
25 |
Â
*/
|
26 |
Â
protected $backup = [];
|
27 |
Â
|
28 |
-
/**
|
29 |
-
* Whether the backup data needs to updated after it has been restored.
|
30 |
-
*
|
31 |
-
* @since 4.1.3
|
32 |
-
*
|
33 |
-
* @var boolean
|
34 |
-
*/
|
35 |
-
protected $needsUpdate = false;
|
36 |
-
|
37 |
Â
/**
|
38 |
Â
* Whether the backup should be updated.
|
39 |
Â
*
|
@@ -58,7 +54,7 @@ class DynamicBackup {
|
|
58 |
Â
* @since 4.1.3
|
59 |
Â
*/
|
60 |
Â
public function __construct() {
|
61 |
-
add_action( 'wp_loaded', [ $this, 'init' ],
|
62 |
Â
add_action( 'shutdown', [ $this, 'updateBackup' ] );
|
63 |
Â
}
|
64 |
Â
|
@@ -70,9 +66,10 @@ class DynamicBackup {
|
|
70 |
Â
* @return void
|
71 |
Â
*/
|
72 |
Â
public function updateBackup() {
|
73 |
-
if ( $this->
|
74 |
-
$this->
|
75 |
-
|
Â
|
|
76 |
Â
}
|
77 |
Â
}
|
78 |
Â
|
@@ -91,7 +88,7 @@ class DynamicBackup {
|
|
91 |
Â
}
|
92 |
Â
|
93 |
Â
$this->backup = $backup;
|
94 |
-
$this->options = aioseo()->
|
95 |
Â
|
96 |
Â
$this->restorePostTypes();
|
97 |
Â
$this->restoreTaxonomies();
|
@@ -114,15 +111,15 @@ class DynamicBackup {
|
|
114 |
Â
}
|
115 |
Â
|
116 |
Â
if ( ! empty( $this->backup['postTypes'][ $name ]['searchAppearance'] ) ) {
|
117 |
-
$this->restoreOptions( $this->backup['postTypes'][ $name ]['searchAppearance'], [ 'searchAppearance', '
|
118 |
Â
unset( $this->backup['postTypes'][ $name ]['searchAppearance'] );
|
119 |
-
$this->
|
120 |
Â
}
|
121 |
Â
|
122 |
Â
if ( ! empty( $this->backup['postTypes'][ $name ]['social']['facebook'] ) ) {
|
123 |
-
$this->restoreOptions( $this->backup['postTypes'][ $name ]['social']['facebook'], [ 'social', 'facebook', 'general', '
|
124 |
Â
unset( $this->backup['postTypes'][ $name ]['social']['facebook'] );
|
125 |
-
$this->
|
126 |
Â
}
|
127 |
Â
}
|
128 |
Â
}
|
@@ -143,15 +140,15 @@ class DynamicBackup {
|
|
143 |
Â
}
|
144 |
Â
|
145 |
Â
if ( ! empty( $this->backup['taxonomies'][ $name ]['searchAppearance'] ) ) {
|
146 |
-
$this->restoreOptions( $this->backup['taxonomies'][ $name ]['searchAppearance'], [ 'searchAppearance', '
|
147 |
Â
unset( $this->backup['taxonomies'][ $name ]['searchAppearance'] );
|
148 |
-
$this->
|
149 |
Â
}
|
150 |
Â
|
151 |
Â
if ( ! empty( $this->backup['taxonomies'][ $name ]['social']['facebook'] ) ) {
|
152 |
-
$this->restoreOptions( $this->backup['taxonomies'][ $name ]['social']['facebook'], [ 'social', 'facebook', 'general', '
|
153 |
Â
unset( $this->backup['taxonomies'][ $name ]['social']['facebook'] );
|
154 |
-
$this->
|
155 |
Â
}
|
156 |
Â
}
|
157 |
Â
}
|
@@ -172,9 +169,9 @@ class DynamicBackup {
|
|
172 |
Â
}
|
173 |
Â
|
174 |
Â
if ( ! empty( $this->backup['archives'][ $name ]['searchAppearance'] ) ) {
|
175 |
-
$this->restoreOptions( $this->backup['archives'][ $name ]['searchAppearance'], [ 'searchAppearance', '
|
176 |
Â
unset( $this->backup['archives'][ $name ]['searchAppearance'] );
|
177 |
-
$this->
|
178 |
Â
}
|
179 |
Â
}
|
180 |
Â
}
|
@@ -197,7 +194,7 @@ class DynamicBackup {
|
|
197 |
Â
$groupPath = $groupPath[ $group ];
|
198 |
Â
}
|
199 |
Â
|
200 |
-
$options = aioseo()->
|
201 |
Â
foreach ( $backupOptions as $setting => $value ) {
|
202 |
Â
// Check if the option exists by checking if the type is defined.
|
203 |
Â
$type = ! empty( $groupPath[ $setting ]['type'] ) ? $groupPath[ $setting ]['type'] : '';
|
@@ -209,9 +206,8 @@ class DynamicBackup {
|
|
209 |
Â
$options = $options->$group;
|
210 |
Â
}
|
211 |
Â
|
212 |
-
$options->$setting = $value
|
213 |
Â
}
|
214 |
-
aioseo()->options->refresh();
|
215 |
Â
}
|
216 |
Â
|
217 |
Â
/**
|
@@ -223,14 +219,9 @@ class DynamicBackup {
|
|
223 |
Â
* @return void
|
224 |
Â
*/
|
225 |
Â
public function maybeBackup( $newOptions ) {
|
226 |
-
$this->maybeBackupPostType( $newOptions['searchAppearance']['
|
227 |
-
$this->maybeBackupTaxonomy( $newOptions['searchAppearance']['
|
228 |
-
$this->maybeBackupArchives( $newOptions['searchAppearance']['
|
229 |
-
|
230 |
-
if ( $this->shouldBackup ) {
|
231 |
-
$this->shouldBackup = false;
|
232 |
-
update_option( $this->optionsName, wp_json_encode( $this->backup ) );
|
233 |
-
}
|
234 |
Â
}
|
235 |
Â
|
236 |
Â
/**
|
@@ -244,7 +235,7 @@ class DynamicBackup {
|
|
244 |
Â
*/
|
245 |
Â
private function maybeBackupPostType( $dynamicPostTypes, $dynamicPostTypesOG ) {
|
246 |
Â
$postTypes = aioseo()->helpers->getPublicPostTypes();
|
247 |
-
$postTypes =
|
248 |
Â
|
249 |
Â
foreach ( $dynamicPostTypes as $dynamicPostTypeName => $dynamicPostTypeSettings ) {
|
250 |
Â
$found = wp_list_filter( $postTypes, [ 'name' => $dynamicPostTypeName ] );
|
@@ -272,9 +263,9 @@ class DynamicBackup {
|
|
272 |
Â
* @param array $dynamicTaxonomiesOG An array of dynamic taxonomy from Social Facebook to check.
|
273 |
Â
* @return void
|
274 |
Â
*/
|
275 |
-
|
276 |
Â
$taxonomies = aioseo()->helpers->getPublicTaxonomies();
|
277 |
-
$taxonomies =
|
278 |
Â
|
279 |
Â
foreach ( $dynamicTaxonomies as $dynamicTaxonomyName => $dynamicTaxonomySettings ) {
|
280 |
Â
$found = wp_list_filter( $taxonomies, [ 'name' => $dynamicTaxonomyName ] );
|
@@ -283,14 +274,6 @@ class DynamicBackup {
|
|
283 |
Â
$this->shouldBackup = true;
|
284 |
Â
}
|
285 |
Â
}
|
286 |
-
|
287 |
-
foreach ( $dynamicTaxonomiesOG as $dynamicTaxonomyNameOG => $dynamicTaxonomySettingsOG ) {
|
288 |
-
$found = wp_list_filter( $taxonomies, [ 'name' => $dynamicTaxonomyNameOG ] );
|
289 |
-
if ( count( $found ) === 0 ) {
|
290 |
-
$this->backup['taxonomies'][ $dynamicTaxonomyNameOG ]['social']['facebook'] = $dynamicTaxonomySettingsOG;
|
291 |
-
$this->shouldBackup = true;
|
292 |
-
}
|
293 |
-
}
|
294 |
Â
}
|
295 |
Â
|
296 |
Â
/**
|
@@ -303,7 +286,7 @@ class DynamicBackup {
|
|
303 |
Â
*/
|
304 |
Â
private function maybeBackupArchives( $dynamicArchives ) {
|
305 |
Â
$postTypes = aioseo()->helpers->getPublicPostTypes( false, true );
|
306 |
-
$postTypes =
|
307 |
Â
|
308 |
Â
foreach ( $dynamicArchives as $archiveName => $archiveSettings ) {
|
309 |
Â
$found = wp_list_filter( $postTypes, [ 'name' => $archiveName ] );
|
@@ -313,4 +296,22 @@ class DynamicBackup {
|
|
313 |
Â
}
|
314 |
Â
}
|
315 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
316 |
Â
}
|
1 |
Â
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Options;
|
3 |
Â
|
4 |
Â
// Exit if accessed directly.
|
5 |
Â
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
Â
exit;
|
7 |
Â
}
|
8 |
Â
|
9 |
+
/**
|
10 |
+
* Handles the dynamic backup.
|
11 |
+
*
|
12 |
+
* @since 4.1.3
|
13 |
+
*/
|
14 |
Â
class DynamicBackup {
|
15 |
Â
/**
|
16 |
Â
* A the name of the option to save dynamic backups to.
|
30 |
Â
*/
|
31 |
Â
protected $backup = [];
|
32 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
33 |
Â
/**
|
34 |
Â
* Whether the backup should be updated.
|
35 |
Â
*
|
54 |
Â
* @since 4.1.3
|
55 |
Â
*/
|
56 |
Â
public function __construct() {
|
57 |
+
add_action( 'wp_loaded', [ $this, 'init' ], 5000 );
|
58 |
Â
add_action( 'shutdown', [ $this, 'updateBackup' ] );
|
59 |
Â
}
|
60 |
Â
|
66 |
Â
* @return void
|
67 |
Â
*/
|
68 |
Â
public function updateBackup() {
|
69 |
+
if ( $this->shouldBackup ) {
|
70 |
+
$this->shouldBackup = false;
|
71 |
+
$backup = aioseo()->dynamicOptions->convertOptionsToValues( $this->backup, 'value' );
|
72 |
+
update_option( $this->optionsName, wp_json_encode( $backup ) );
|
73 |
Â
}
|
74 |
Â
}
|
75 |
Â
|
88 |
Â
}
|
89 |
Â
|
90 |
Â
$this->backup = $backup;
|
91 |
+
$this->options = aioseo()->dynamicOptions->getDefaults();
|
92 |
Â
|
93 |
Â
$this->restorePostTypes();
|
94 |
Â
$this->restoreTaxonomies();
|
111 |
Â
}
|
112 |
Â
|
113 |
Â
if ( ! empty( $this->backup['postTypes'][ $name ]['searchAppearance'] ) ) {
|
114 |
+
$this->restoreOptions( $this->backup['postTypes'][ $name ]['searchAppearance'], [ 'searchAppearance', 'postTypes', $name ] );
|
115 |
Â
unset( $this->backup['postTypes'][ $name ]['searchAppearance'] );
|
116 |
+
$this->shouldBackup = true;
|
117 |
Â
}
|
118 |
Â
|
119 |
Â
if ( ! empty( $this->backup['postTypes'][ $name ]['social']['facebook'] ) ) {
|
120 |
+
$this->restoreOptions( $this->backup['postTypes'][ $name ]['social']['facebook'], [ 'social', 'facebook', 'general', 'postTypes', $name ] );
|
121 |
Â
unset( $this->backup['postTypes'][ $name ]['social']['facebook'] );
|
122 |
+
$this->shouldBackup = true;
|
123 |
Â
}
|
124 |
Â
}
|
125 |
Â
}
|
140 |
Â
}
|
141 |
Â
|
142 |
Â
if ( ! empty( $this->backup['taxonomies'][ $name ]['searchAppearance'] ) ) {
|
143 |
+
$this->restoreOptions( $this->backup['taxonomies'][ $name ]['searchAppearance'], [ 'searchAppearance', 'taxonomies', $name ] );
|
144 |
Â
unset( $this->backup['taxonomies'][ $name ]['searchAppearance'] );
|
145 |
+
$this->shouldBackup = true;
|
146 |
Â
}
|
147 |
Â
|
148 |
Â
if ( ! empty( $this->backup['taxonomies'][ $name ]['social']['facebook'] ) ) {
|
149 |
+
$this->restoreOptions( $this->backup['taxonomies'][ $name ]['social']['facebook'], [ 'social', 'facebook', 'general', 'taxonomies', $name ] );
|
150 |
Â
unset( $this->backup['taxonomies'][ $name ]['social']['facebook'] );
|
151 |
+
$this->shouldBackup = true;
|
152 |
Â
}
|
153 |
Â
}
|
154 |
Â
}
|
169 |
Â
}
|
170 |
Â
|
171 |
Â
if ( ! empty( $this->backup['archives'][ $name ]['searchAppearance'] ) ) {
|
172 |
+
$this->restoreOptions( $this->backup['archives'][ $name ]['searchAppearance'], [ 'searchAppearance', 'archives', $name ] );
|
173 |
Â
unset( $this->backup['archives'][ $name ]['searchAppearance'] );
|
174 |
+
$this->shouldBackup = true;
|
175 |
Â
}
|
176 |
Â
}
|
177 |
Â
}
|
194 |
Â
$groupPath = $groupPath[ $group ];
|
195 |
Â
}
|
196 |
Â
|
197 |
+
$options = aioseo()->dynamicOptions->noConflict();
|
198 |
Â
foreach ( $backupOptions as $setting => $value ) {
|
199 |
Â
// Check if the option exists by checking if the type is defined.
|
200 |
Â
$type = ! empty( $groupPath[ $setting ]['type'] ) ? $groupPath[ $setting ]['type'] : '';
|
206 |
Â
$options = $options->$group;
|
207 |
Â
}
|
208 |
Â
|
209 |
+
$options->$setting = $value;
|
210 |
Â
}
|
Â
|
|
211 |
Â
}
|
212 |
Â
|
213 |
Â
/**
|
219 |
Â
* @return void
|
220 |
Â
*/
|
221 |
Â
public function maybeBackup( $newOptions ) {
|
222 |
+
$this->maybeBackupPostType( $newOptions['searchAppearance']['postTypes'], $newOptions['social']['facebook']['general']['postTypes'] );
|
223 |
+
$this->maybeBackupTaxonomy( $newOptions['searchAppearance']['taxonomies'] );
|
224 |
+
$this->maybeBackupArchives( $newOptions['searchAppearance']['archives'] );
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
225 |
Â
}
|
226 |
Â
|
227 |
Â
/**
|
235 |
Â
*/
|
236 |
Â
private function maybeBackupPostType( $dynamicPostTypes, $dynamicPostTypesOG ) {
|
237 |
Â
$postTypes = aioseo()->helpers->getPublicPostTypes();
|
238 |
+
$postTypes = $this->normalizeObjectName( $postTypes );
|
239 |
Â
|
240 |
Â
foreach ( $dynamicPostTypes as $dynamicPostTypeName => $dynamicPostTypeSettings ) {
|
241 |
Â
$found = wp_list_filter( $postTypes, [ 'name' => $dynamicPostTypeName ] );
|
263 |
Â
* @param array $dynamicTaxonomiesOG An array of dynamic taxonomy from Social Facebook to check.
|
264 |
Â
* @return void
|
265 |
Â
*/
|
266 |
+
protected function maybeBackupTaxonomy( $dynamicTaxonomies, $dynamicTaxonomiesOG = [] ) {
|
267 |
Â
$taxonomies = aioseo()->helpers->getPublicTaxonomies();
|
268 |
+
$taxonomies = $this->normalizeObjectName( $taxonomies );
|
269 |
Â
|
270 |
Â
foreach ( $dynamicTaxonomies as $dynamicTaxonomyName => $dynamicTaxonomySettings ) {
|
271 |
Â
$found = wp_list_filter( $taxonomies, [ 'name' => $dynamicTaxonomyName ] );
|
274 |
Â
$this->shouldBackup = true;
|
275 |
Â
}
|
276 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
277 |
Â
}
|
278 |
Â
|
279 |
Â
/**
|
286 |
Â
*/
|
287 |
Â
private function maybeBackupArchives( $dynamicArchives ) {
|
288 |
Â
$postTypes = aioseo()->helpers->getPublicPostTypes( false, true );
|
289 |
+
$postTypes = $this->normalizeObjectName( $postTypes );
|
290 |
Â
|
291 |
Â
foreach ( $dynamicArchives as $archiveName => $archiveSettings ) {
|
292 |
Â
$found = wp_list_filter( $postTypes, [ 'name' => $archiveName ] );
|
296 |
Â
}
|
297 |
Â
}
|
298 |
Â
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Normalize object name to work properly with AIOSEO.
|
302 |
+
*
|
303 |
+
* @since 4.1.3
|
304 |
+
*
|
305 |
+
* @param array $items The items.
|
306 |
+
* @return array The normalized items.
|
307 |
+
*/
|
308 |
+
public function normalizeObjectName( $items ) {
|
309 |
+
foreach ( $items as &$item ) {
|
310 |
+
if ( 'type' === $item['name'] ) {
|
311 |
+
$item['name'] = '_aioseo_type';
|
312 |
+
}
|
313 |
+
}
|
314 |
+
|
315 |
+
return $items;
|
316 |
+
}
|
317 |
Â
}
|
app/Common/Options/DynamicOptions.php
ADDED
@@ -0,0 +1,387 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Options;
|
3 |
+
|
4 |
+
use AIOSEO\Plugin\Common\Traits;
|
5 |
+
|
6 |
+
// Exit if accessed directly.
|
7 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
8 |
+
exit;
|
9 |
+
}
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Handles the dynamic options.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
class DynamicOptions {
|
17 |
+
use Traits\Options;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The default options.
|
21 |
+
*
|
22 |
+
* @since 4.1.4
|
23 |
+
*
|
24 |
+
* @var array
|
25 |
+
*/
|
26 |
+
protected $defaults = [
|
27 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
28 |
+
'sitemap' => [
|
29 |
+
'priority' => [
|
30 |
+
'postTypes' => [],
|
31 |
+
'taxonomies' => []
|
32 |
+
]
|
33 |
+
],
|
34 |
+
'social' => [
|
35 |
+
'facebook' => [
|
36 |
+
'general' => [
|
37 |
+
'postTypes' => []
|
38 |
+
]
|
39 |
+
]
|
40 |
+
],
|
41 |
+
'searchAppearance' => [
|
42 |
+
'postTypes' => [],
|
43 |
+
'taxonomies' => [],
|
44 |
+
'archives' => []
|
45 |
+
]
|
46 |
+
// phpcs:enable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
47 |
+
];
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Class constructor.
|
51 |
+
*
|
52 |
+
* @since 4.1.4
|
53 |
+
*
|
54 |
+
* @param string $optionsName The options name.
|
55 |
+
*/
|
56 |
+
public function __construct( $optionsName = 'aioseo_options_dynamic' ) {
|
57 |
+
$this->optionsName = is_network_admin() ? $optionsName . '_network' : $optionsName;
|
58 |
+
|
59 |
+
// Load defaults in case this is a complete fresh install.
|
60 |
+
$this->init();
|
61 |
+
|
62 |
+
add_action( 'shutdown', [ $this, 'save' ] );
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Initializes the options.
|
67 |
+
*
|
68 |
+
* @since 4.1.4
|
69 |
+
*
|
70 |
+
* @return void
|
71 |
+
*/
|
72 |
+
protected function init() {
|
73 |
+
$this->addDynamicDefaults();
|
74 |
+
$this->setDbOptions();
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Sets the DB options.
|
79 |
+
*
|
80 |
+
* @since 4.1.4
|
81 |
+
*
|
82 |
+
* @return void
|
83 |
+
*/
|
84 |
+
protected function setDbOptions() {
|
85 |
+
$dbOptions = $this->getDbOptions( $this->optionsName );
|
86 |
+
|
87 |
+
// Refactor options.
|
88 |
+
$this->defaultsMerged = array_replace_recursive( $this->defaults, $this->defaultsMerged );
|
89 |
+
|
90 |
+
$dbOptions = array_replace_recursive(
|
91 |
+
$this->defaultsMerged,
|
92 |
+
$this->addValueToValuesArray( $this->defaultsMerged, $dbOptions )
|
93 |
+
);
|
94 |
+
|
95 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, $dbOptions );
|
96 |
+
|
97 |
+
// Get the localized options.
|
98 |
+
$dbOptionsLocalized = get_option( $this->optionsName . '_localized' );
|
99 |
+
if ( empty( $dbOptionsLocalized ) ) {
|
100 |
+
$dbOptionsLocalized = [];
|
101 |
+
}
|
102 |
+
$this->localized = $dbOptionsLocalized;
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Sanitizes, then saves the options to the database.
|
107 |
+
*
|
108 |
+
* @since 4.1.4
|
109 |
+
*
|
110 |
+
* @param array $options An array of options to sanitize, then save.
|
111 |
+
* @return void
|
112 |
+
*/
|
113 |
+
public function sanitizeAndSave( $options ) {
|
114 |
+
if ( ! is_array( $options ) ) {
|
115 |
+
return;
|
116 |
+
}
|
117 |
+
|
118 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
119 |
+
|
120 |
+
aioseo()->dynamicBackup->maybeBackup( $cachedOptions );
|
121 |
+
|
122 |
+
// Refactor options.
|
123 |
+
$dbOptions = array_replace_recursive(
|
124 |
+
$cachedOptions,
|
125 |
+
$this->addValueToValuesArray( $cachedOptions, $options, [], true )
|
126 |
+
);
|
127 |
+
|
128 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, $dbOptions );
|
129 |
+
|
130 |
+
// Update localized options.
|
131 |
+
update_option( $this->optionsName . '_localized', $this->localized );
|
132 |
+
|
133 |
+
// Update values.
|
134 |
+
$this->save( true );
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Adds some defaults that are dynamically generated.
|
139 |
+
*
|
140 |
+
* @since 4.1.4
|
141 |
+
*
|
142 |
+
* @return void
|
143 |
+
*/
|
144 |
+
public function addDynamicDefaults() {
|
145 |
+
$this->addDynamicPostTypeDefaults();
|
146 |
+
$this->addDynamicTaxonomyDefaults();
|
147 |
+
$this->addDynamicArchiveDefaults();
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Adds the dynamic defaults for the public post types.
|
152 |
+
*
|
153 |
+
* @since 4.1.4
|
154 |
+
*
|
155 |
+
* @return void
|
156 |
+
*/
|
157 |
+
protected function addDynamicPostTypeDefaults() {
|
158 |
+
$postTypes = aioseo()->helpers->getPublicPostTypes();
|
159 |
+
foreach ( $postTypes as $postType ) {
|
160 |
+
if ( 'type' === $postType['name'] ) {
|
161 |
+
$postType['name'] = '_aioseo_type';
|
162 |
+
}
|
163 |
+
|
164 |
+
$defaultTitle = '#post_title #separator_sa #site_title';
|
165 |
+
$defaultDescription = $postType['hasExcerpt'] ? '#post_excerpt' : '#post_content';
|
166 |
+
$defaultSchemaType = 'WebPage';
|
167 |
+
$defaultWebPageType = 'WebPage';
|
168 |
+
$defaultArticleType = 'BlogPosting';
|
169 |
+
|
170 |
+
switch ( $postType['name'] ) {
|
171 |
+
case 'post':
|
172 |
+
$defaultSchemaType = 'Article';
|
173 |
+
break;
|
174 |
+
case 'attachment':
|
175 |
+
$defaultDescription = '#attachment_caption';
|
176 |
+
$defaultSchemaType = 'ItemPage';
|
177 |
+
$defaultWebPageType = 'ItemPage';
|
178 |
+
break;
|
179 |
+
case 'product':
|
180 |
+
$defaultSchemaType = 'WebPage';
|
181 |
+
$defaultWebPageType = 'ItemPage';
|
182 |
+
break;
|
183 |
+
case 'news':
|
184 |
+
$defaultArticleType = 'NewsArticle';
|
185 |
+
break;
|
186 |
+
default:
|
187 |
+
break;
|
188 |
+
}
|
189 |
+
|
190 |
+
$defaultOptions = array_replace_recursive(
|
191 |
+
$this->getDefaultSearchAppearanceOptions(),
|
192 |
+
[
|
193 |
+
'title' => [
|
194 |
+
'type' => 'string',
|
195 |
+
'localized' => true,
|
196 |
+
'default' => $defaultTitle
|
197 |
+
],
|
198 |
+
'metaDescription' => [
|
199 |
+
'type' => 'string',
|
200 |
+
'localized' => true,
|
201 |
+
'default' => $defaultDescription
|
202 |
+
],
|
203 |
+
'schemaType' => [
|
204 |
+
'type' => 'string',
|
205 |
+
'default' => $defaultSchemaType
|
206 |
+
],
|
207 |
+
'webPageType' => [
|
208 |
+
'type' => 'string',
|
209 |
+
'default' => $defaultWebPageType
|
210 |
+
],
|
211 |
+
'articleType' => [
|
212 |
+
'type' => 'string',
|
213 |
+
'default' => $defaultArticleType
|
214 |
+
],
|
215 |
+
'customFields' => [ 'type' => 'html' ],
|
216 |
+
'advanced' => [
|
217 |
+
'bulkEditing' => [
|
218 |
+
'type' => 'string',
|
219 |
+
'default' => 'enabled'
|
220 |
+
]
|
221 |
+
]
|
222 |
+
]
|
223 |
+
);
|
224 |
+
|
225 |
+
if ( 'attachment' === $postType['name'] ) {
|
226 |
+
$defaultOptions['redirectAttachmentUrls'] = [
|
227 |
+
'type' => 'string',
|
228 |
+
'default' => 'attachment'
|
229 |
+
];
|
230 |
+
}
|
231 |
+
|
232 |
+
$this->defaults['searchAppearance']['postTypes'][ $postType['name'] ] = $defaultOptions;
|
233 |
+
$this->setDynamicSocialOptions( 'postTypes', $postType['name'] );
|
234 |
+
$this->setDynamicSitemapOptions( 'postTypes', $postType['name'] );
|
235 |
+
}
|
236 |
+
}
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Adds the dynamic defaults for the public taxonomies.
|
240 |
+
*
|
241 |
+
* @since 4.1.4
|
242 |
+
*
|
243 |
+
* @return void
|
244 |
+
*/
|
245 |
+
protected function addDynamicTaxonomyDefaults() {
|
246 |
+
$taxonomies = aioseo()->helpers->getPublicTaxonomies();
|
247 |
+
foreach ( $taxonomies as $taxonomy ) {
|
248 |
+
if ( 'type' === $taxonomy['name'] ) {
|
249 |
+
$taxonomy['name'] = '_aioseo_type';
|
250 |
+
}
|
251 |
+
|
252 |
+
$defaultOptions = array_replace_recursive(
|
253 |
+
$this->getDefaultSearchAppearanceOptions(),
|
254 |
+
[
|
255 |
+
'title' => [
|
256 |
+
'type' => 'string',
|
257 |
+
'localized' => true,
|
258 |
+
'default' => '#taxonomy_title #separator_sa #site_title'
|
259 |
+
],
|
260 |
+
'metaDescription' => [
|
261 |
+
'type' => 'string',
|
262 |
+
'localized' => true,
|
263 |
+
'default' => '#taxonomy_description'
|
264 |
+
],
|
265 |
+
]
|
266 |
+
);
|
267 |
+
|
268 |
+
$this->defaults['searchAppearance']['taxonomies'][ $taxonomy['name'] ] = $defaultOptions;
|
269 |
+
}
|
270 |
+
}
|
271 |
+
|
272 |
+
/**
|
273 |
+
* Adds the dynamic defaults for the archive pages.
|
274 |
+
*
|
275 |
+
* @since 4.1.4
|
276 |
+
*
|
277 |
+
* @return void
|
278 |
+
*/
|
279 |
+
protected function addDynamicArchiveDefaults() {
|
280 |
+
$postTypes = aioseo()->helpers->getPublicPostTypes( false, true );
|
281 |
+
foreach ( $postTypes as $postType ) {
|
282 |
+
if ( 'type' === $postType['name'] ) {
|
283 |
+
$postType['name'] = '_aioseo_type';
|
284 |
+
}
|
285 |
+
|
286 |
+
$defaultOptions = array_replace_recursive(
|
287 |
+
$this->getDefaultSearchAppearanceOptions(),
|
288 |
+
[
|
289 |
+
'title' => [
|
290 |
+
'type' => 'string',
|
291 |
+
'localized' => true,
|
292 |
+
'default' => '#archive_title #separator_sa #site_title'
|
293 |
+
],
|
294 |
+
'metaDescription' => [
|
295 |
+
'type' => 'string',
|
296 |
+
'localized' => true,
|
297 |
+
'default' => ''
|
298 |
+
],
|
299 |
+
'customFields' => [ 'type' => 'html' ],
|
300 |
+
'advanced' => [
|
301 |
+
'keywords' => [
|
302 |
+
'type' => 'string',
|
303 |
+
'localized' => true
|
304 |
+
]
|
305 |
+
]
|
306 |
+
]
|
307 |
+
);
|
308 |
+
|
309 |
+
$this->defaults['searchAppearance']['archives'][ $postType['name'] ] = $defaultOptions;
|
310 |
+
}
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Returns the search appearance options for dynamic objects.
|
315 |
+
*
|
316 |
+
* @since 4.1.4
|
317 |
+
*
|
318 |
+
* @return array The default options.
|
319 |
+
*/
|
320 |
+
protected function getDefaultSearchAppearanceOptions() {
|
321 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
322 |
+
return [
|
323 |
+
'show' => [ 'type' => 'boolean', 'default' => true ],
|
324 |
+
'advanced' => [
|
325 |
+
'robotsMeta' => [
|
326 |
+
'default' => [ 'type' => 'boolean', 'default' => true ],
|
327 |
+
'noindex' => [ 'type' => 'boolean', 'default' => false ],
|
328 |
+
'nofollow' => [ 'type' => 'boolean', 'default' => false ],
|
329 |
+
'noarchive' => [ 'type' => 'boolean', 'default' => false ],
|
330 |
+
'noimageindex' => [ 'type' => 'boolean', 'default' => false ],
|
331 |
+
'notranslate' => [ 'type' => 'boolean', 'default' => false ],
|
332 |
+
'nosnippet' => [ 'type' => 'boolean', 'default' => false ],
|
333 |
+
'noodp' => [ 'type' => 'boolean', 'default' => false ],
|
334 |
+
'maxSnippet' => [ 'type' => 'number', 'default' => -1 ],
|
335 |
+
'maxVideoPreview' => [ 'type' => 'number', 'default' => -1 ],
|
336 |
+
'maxImagePreview' => [ 'type' => 'string', 'default' => 'large' ]
|
337 |
+
],
|
338 |
+
'showDateInGooglePreview' => [ 'type' => 'boolean', 'default' => true ],
|
339 |
+
'showPostThumbnailInSearch' => [ 'type' => 'boolean', 'default' => true ],
|
340 |
+
'showMetaBox' => [ 'type' => 'boolean', 'default' => true ]
|
341 |
+
]
|
342 |
+
];
|
343 |
+
// phpcs:enable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
344 |
+
}
|
345 |
+
|
346 |
+
/**
|
347 |
+
* Sets the dynamic social settings for a given post type or taxonomy.
|
348 |
+
*
|
349 |
+
* @since 4.1.4
|
350 |
+
*
|
351 |
+
* @param string $objectType Whether the object belongs to the dynamic "postTypes" or "taxonomies".
|
352 |
+
* @param string $objectName The object name.
|
353 |
+
* @return void
|
354 |
+
*/
|
355 |
+
protected function setDynamicSocialOptions( $objectType, $objectName ) {
|
356 |
+
$defaultOptions = [
|
357 |
+
'objectType' => [
|
358 |
+
'type' => 'string',
|
359 |
+
'default' => 'article'
|
360 |
+
]
|
361 |
+
];
|
362 |
+
|
363 |
+
$this->defaults['social']['facebook']['general'][ $objectType ][ $objectName ] = $defaultOptions;
|
364 |
+
}
|
365 |
+
|
366 |
+
/**
|
367 |
+
* Sets the dynamic sitemap settings for a given post type or taxonomy.
|
368 |
+
*
|
369 |
+
* @since 4.1.4
|
370 |
+
*
|
371 |
+
* @param string $objectType Whether the object belongs to the dynamic "postTypes" or "taxonomies".
|
372 |
+
* @param string $objectName The object name.
|
373 |
+
* @return void
|
374 |
+
*/
|
375 |
+
protected function setDynamicSitemapOptions( $objectType, $objectName ) {
|
376 |
+
$this->defaults['sitemap']['priority'][ $objectType ][ $objectName ] = [
|
377 |
+
'priority' => [
|
378 |
+
'type' => 'string',
|
379 |
+
'default' => '{"label":"default","value":"default"}'
|
380 |
+
],
|
381 |
+
'frequency' => [
|
382 |
+
'type' => 'string',
|
383 |
+
'default' => '{"label":"default","value":"default"}'
|
384 |
+
]
|
385 |
+
];
|
386 |
+
}
|
387 |
+
}
|
app/Common/{Utils → Options}/InternalOptions.php
RENAMED
@@ -1,5 +1,5 @@
|
|
1 |
Â
<?php
|
2 |
-
namespace AIOSEO\Plugin\Common\
|
3 |
Â
|
4 |
Â
// Exit if accessed directly.
|
5 |
Â
if ( ! defined( 'ABSPATH' ) ) {
|
@@ -77,12 +77,14 @@ class InternalOptions {
|
|
77 |
Â
*
|
78 |
Â
* @since 4.0.0
|
79 |
Â
*
|
80 |
-
* @param string $optionsName
|
81 |
Â
*/
|
82 |
Â
public function __construct( $optionsName = 'aioseo_options_internal' ) {
|
83 |
Â
$this->optionsName = is_network_admin() ? $optionsName . '_network' : $optionsName;
|
84 |
Â
|
85 |
Â
$this->init();
|
Â
|
|
Â
|
|
86 |
Â
}
|
87 |
Â
|
88 |
Â
/**
|
@@ -94,10 +96,7 @@ class InternalOptions {
|
|
94 |
Â
*/
|
95 |
Â
protected function init() {
|
96 |
Â
// Options from the DB.
|
97 |
-
$dbOptions =
|
98 |
-
if ( empty( $dbOptions ) ) {
|
99 |
-
$dbOptions = [];
|
100 |
-
}
|
101 |
Â
|
102 |
Â
// Refactor options.
|
103 |
Â
$this->defaultsMerged = array_replace_recursive( $this->defaults, $this->defaultsMerged );
|
@@ -107,7 +106,7 @@ class InternalOptions {
|
|
107 |
Â
$this->addValueToValuesArray( $this->defaultsMerged, $dbOptions )
|
108 |
Â
);
|
109 |
Â
|
110 |
-
$this->
|
111 |
Â
|
112 |
Â
// Get the localized options.
|
113 |
Â
$dbOptionsLocalized = get_option( $this->optionsName . '_localized' );
|
@@ -142,17 +141,20 @@ class InternalOptions {
|
|
142 |
Â
}
|
143 |
Â
|
144 |
Â
// Refactor options.
|
145 |
-
$
|
146 |
-
|
147 |
-
$
|
Â
|
|
148 |
Â
);
|
149 |
Â
|
150 |
-
$
|
Â
|
|
Â
|
|
151 |
Â
|
152 |
Â
// Update localized options.
|
153 |
Â
update_option( $this->optionsName . '_localized', $this->localized );
|
154 |
Â
|
155 |
Â
// Update values.
|
156 |
-
$this->
|
157 |
Â
}
|
158 |
Â
}
|
1 |
Â
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Options;
|
3 |
Â
|
4 |
Â
// Exit if accessed directly.
|
5 |
Â
if ( ! defined( 'ABSPATH' ) ) {
|
77 |
Â
*
|
78 |
Â
* @since 4.0.0
|
79 |
Â
*
|
80 |
+
* @param string $optionsName The options name.
|
81 |
Â
*/
|
82 |
Â
public function __construct( $optionsName = 'aioseo_options_internal' ) {
|
83 |
Â
$this->optionsName = is_network_admin() ? $optionsName . '_network' : $optionsName;
|
84 |
Â
|
85 |
Â
$this->init();
|
86 |
+
|
87 |
+
add_action( 'shutdown', [ $this, 'save' ] );
|
88 |
Â
}
|
89 |
Â
|
90 |
Â
/**
|
96 |
Â
*/
|
97 |
Â
protected function init() {
|
98 |
Â
// Options from the DB.
|
99 |
+
$dbOptions = $this->getDbOptions( $this->optionsName );
|
Â
|
|
Â
|
|
Â
|
|
100 |
Â
|
101 |
Â
// Refactor options.
|
102 |
Â
$this->defaultsMerged = array_replace_recursive( $this->defaults, $this->defaultsMerged );
|
106 |
Â
$this->addValueToValuesArray( $this->defaultsMerged, $dbOptions )
|
107 |
Â
);
|
108 |
Â
|
109 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, apply_filters( 'aioseo_get_options_internal', $options ) );
|
110 |
Â
|
111 |
Â
// Get the localized options.
|
112 |
Â
$dbOptionsLocalized = get_option( $this->optionsName . '_localized' );
|
141 |
Â
}
|
142 |
Â
|
143 |
Â
// Refactor options.
|
144 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
145 |
+
$dbOptions = array_replace_recursive(
|
146 |
+
$cachedOptions,
|
147 |
+
$this->addValueToValuesArray( $cachedOptions, $options, [], true )
|
148 |
Â
);
|
149 |
Â
|
150 |
+
$dbOptions['internal']['siteAnalysis']['competitors']['value'] = $this->sanitizeField( $options['internal']['siteAnalysis']['competitors'], 'array', true );
|
151 |
+
|
152 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, $dbOptions );
|
153 |
Â
|
154 |
Â
// Update localized options.
|
155 |
Â
update_option( $this->optionsName . '_localized', $this->localized );
|
156 |
Â
|
157 |
Â
// Update values.
|
158 |
+
$this->save( true );
|
159 |
Â
}
|
160 |
Â
}
|
app/Common/{Utils → Options}/Options.php
RENAMED
@@ -1,5 +1,5 @@
|
|
1 |
Â
<?php
|
2 |
-
namespace AIOSEO\Plugin\Common\
|
3 |
Â
|
4 |
Â
// Exit if accessed directly.
|
5 |
Â
if ( ! defined( 'ABSPATH' ) ) {
|
@@ -17,15 +17,6 @@ use AIOSEO\Plugin\Common\Traits;
|
|
17 |
Â
class Options {
|
18 |
Â
use Traits\Options;
|
19 |
Â
|
20 |
-
/**
|
21 |
-
* Whether the options need to be updated.
|
22 |
-
*
|
23 |
-
* @since 4.1.1
|
24 |
-
*
|
25 |
-
* @var bool
|
26 |
-
*/
|
27 |
-
protected $needsUpdate = false;
|
28 |
-
|
29 |
Â
/**
|
30 |
Â
* All the default options.
|
31 |
Â
*
|
@@ -169,12 +160,6 @@ TEMPLATE
|
|
169 |
Â
'excludeTerms' => [ 'type' => 'array', 'default' => [] ]
|
170 |
Â
]
|
171 |
Â
],
|
172 |
-
'dynamic' => [
|
173 |
-
'priority' => [
|
174 |
-
'postTypes' => [],
|
175 |
-
'taxonomies' => []
|
176 |
-
]
|
177 |
-
]
|
178 |
Â
],
|
179 |
Â
'social' => [
|
180 |
Â
'profiles' => [
|
@@ -208,12 +193,7 @@ TEMPLATE
|
|
208 |
Â
'defaultImagePostsWidth' => [ 'type' => 'number', 'default' => '' ],
|
209 |
Â
'defaultImagePostsHeight' => [ 'type' => 'number', 'default' => '' ],
|
210 |
Â
'showAuthor' => [ 'type' => 'boolean', 'default' => true ],
|
211 |
-
'siteName' => [ 'type' => 'string', 'localized' => true, 'default' => '#site_title #separator_sa #tagline' ]
|
212 |
-
'dynamic' => [
|
213 |
-
'postTypes' => [],
|
214 |
-
'taxonomies' => [],
|
215 |
-
'archives' => []
|
216 |
-
]
|
217 |
Â
],
|
218 |
Â
'homePage' => [
|
219 |
Â
'image' => [ 'type' => 'string', 'default' => '' ],
|
@@ -371,11 +351,6 @@ TEMPLATE
|
|
371 |
Â
'keywords' => [ 'type' => 'string', 'localized' => true ]
|
372 |
Â
]
|
373 |
Â
]
|
374 |
-
],
|
375 |
-
'dynamic' => [
|
376 |
-
'postTypes' => [],
|
377 |
-
'taxonomies' => [],
|
378 |
-
'archives' => []
|
379 |
Â
]
|
380 |
Â
],
|
381 |
Â
'tools' => [
|
@@ -456,6 +431,8 @@ TEMPLATE
|
|
456 |
Â
$this->optionsName = is_network_admin() ? $optionsName . '_network' : $optionsName;
|
457 |
Â
|
458 |
Â
$this->init();
|
Â
|
|
Â
|
|
459 |
Â
}
|
460 |
Â
|
461 |
Â
/**
|
@@ -463,322 +440,63 @@ TEMPLATE
|
|
463 |
Â
*
|
464 |
Â
* @since 4.0.0
|
465 |
Â
*
|
466 |
-
* @param boolean $resetKeys Whether or not to reset keys after init.
|
467 |
Â
* @return void
|
468 |
Â
*/
|
469 |
-
protected function init(
|
470 |
-
|
471 |
-
$originalGroupKey = $this->groupKey;
|
472 |
-
$originalSubGroups = $this->subGroups;
|
473 |
-
}
|
474 |
-
|
475 |
-
$this->addDynamicDefaults();
|
476 |
Â
$this->translateDefaults();
|
477 |
Â
|
478 |
-
$
|
479 |
-
|
480 |
-
$this->options = apply_filters( 'aioseo_get_options', $options );
|
481 |
-
|
482 |
-
// Get the localized options.
|
483 |
-
$dbOptionsLocalized = get_option( $this->optionsName . '_localized' );
|
484 |
-
if ( empty( $dbOptionsLocalized ) ) {
|
485 |
-
$dbOptionsLocalized = [];
|
486 |
-
}
|
487 |
-
$this->localized = $dbOptionsLocalized;
|
488 |
-
|
489 |
-
if ( $resetKeys ) {
|
490 |
-
$this->groupKey = $originalGroupKey;
|
491 |
-
$this->subGroups = $originalSubGroups;
|
492 |
-
}
|
493 |
Â
|
494 |
Â
add_action( 'wp_loaded', [ $this, 'maybeFlushRewriteRules' ] );
|
495 |
Â
}
|
496 |
Â
|
497 |
Â
/**
|
498 |
-
*
|
499 |
Â
*
|
500 |
-
* @since 4.0.
|
501 |
Â
*
|
502 |
-
* @return
|
503 |
Â
*/
|
504 |
-
public function
|
505 |
-
// Options from the DB.
|
506 |
-
$dbOptions = json_decode( get_option( $this->optionsName ), true );
|
507 |
-
if ( empty( $dbOptions ) ) {
|
508 |
-
$dbOptions = [];
|
509 |
-
}
|
510 |
-
|
511 |
Â
// Refactor options.
|
512 |
Â
$this->defaultsMerged = array_replace_recursive( $this->defaults, $this->defaultsMerged );
|
513 |
Â
|
514 |
-
|
Â
|
|
Â
|
|
515 |
Â
$this->defaultsMerged,
|
516 |
Â
$this->addValueToValuesArray( $this->defaultsMerged, $dbOptions )
|
517 |
Â
);
|
518 |
-
}
|
519 |
-
|
520 |
-
/**
|
521 |
-
* Adds some defaults that are dynamically generated.
|
522 |
-
*
|
523 |
-
* @since 4.0.0
|
524 |
-
*
|
525 |
-
* @return void
|
526 |
-
*/
|
527 |
-
public function addDynamicDefaults() {
|
528 |
-
$this->addDynamicPostTypeDefaults();
|
529 |
-
$this->addDynamicTaxonomyDefaults();
|
530 |
-
$this->addDynamicArchiveDefaults();
|
531 |
-
|
532 |
-
$this->defaults['searchAppearance']['global']['schema']['organizationName']['default'] = aioseo()->helpers->decodeHtmlEntities( get_bloginfo( 'name' ) );
|
533 |
-
$this->defaults['deprecated']['tools']['blocker']['custom']['bots']['default'] = implode( "\n", aioseo()->badBotBlocker->getBotList() );
|
534 |
-
$this->defaults['deprecated']['tools']['blocker']['custom']['referer']['default'] = implode( "\n", aioseo()->badBotBlocker->getRefererList() );
|
535 |
-
|
536 |
-
if ( $this->needsUpdate ) {
|
537 |
-
$this->needsUpdate = false;
|
538 |
-
$this->update( $this->getDbOptions() );
|
539 |
-
}
|
540 |
-
}
|
541 |
-
|
542 |
-
/**
|
543 |
-
* Adds the dynamic defaults for the public post types.
|
544 |
-
*
|
545 |
-
* @since 4.1.1
|
546 |
-
*
|
547 |
-
* @return void
|
548 |
-
*/
|
549 |
-
protected function addDynamicPostTypeDefaults() {
|
550 |
-
$postTypes = aioseo()->helpers->getPublicPostTypes();
|
551 |
-
foreach ( $postTypes as $postType ) {
|
552 |
-
if ( 'type' === $postType['name'] ) {
|
553 |
-
$postType['name'] = '_aioseo_type';
|
554 |
-
}
|
555 |
-
|
556 |
-
$defaultTitle = '#post_title #separator_sa #site_title';
|
557 |
-
$defaultDescription = $postType['hasExcerpt'] ? '#post_excerpt' : '#post_content';
|
558 |
-
$defaultSchemaType = 'WebPage';
|
559 |
-
$defaultWebPageType = 'WebPage';
|
560 |
-
$defaultArticleType = 'BlogPosting';
|
561 |
-
|
562 |
-
switch ( $postType['name'] ) {
|
563 |
-
case 'post':
|
564 |
-
$defaultSchemaType = 'Article';
|
565 |
-
break;
|
566 |
-
case 'attachment':
|
567 |
-
$defaultDescription = '#attachment_caption';
|
568 |
-
$defaultSchemaType = 'ItemPage';
|
569 |
-
$defaultWebPageType = 'ItemPage';
|
570 |
-
break;
|
571 |
-
case 'product':
|
572 |
-
$defaultSchemaType = 'WebPage';
|
573 |
-
$defaultWebPageType = 'ItemPage';
|
574 |
-
break;
|
575 |
-
case 'news':
|
576 |
-
$defaultArticleType = 'NewsArticle';
|
577 |
-
break;
|
578 |
-
default:
|
579 |
-
break;
|
580 |
-
}
|
581 |
-
|
582 |
-
$defaultOptions = array_replace_recursive(
|
583 |
-
$this->getDefaultSearchAppearanceOptions(),
|
584 |
-
[
|
585 |
-
'title' => [
|
586 |
-
'type' => 'string',
|
587 |
-
'localized' => true,
|
588 |
-
'default' => $defaultTitle
|
589 |
-
],
|
590 |
-
'metaDescription' => [
|
591 |
-
'type' => 'string',
|
592 |
-
'localized' => true,
|
593 |
-
'default' => $defaultDescription
|
594 |
-
],
|
595 |
-
'schemaType' => [
|
596 |
-
'type' => 'string',
|
597 |
-
'default' => $defaultSchemaType
|
598 |
-
],
|
599 |
-
'webPageType' => [
|
600 |
-
'type' => 'string',
|
601 |
-
'default' => $defaultWebPageType
|
602 |
-
],
|
603 |
-
'articleType' => [
|
604 |
-
'type' => 'string',
|
605 |
-
'default' => $defaultArticleType
|
606 |
-
],
|
607 |
-
'customFields' => [ 'type' => 'html' ],
|
608 |
-
'advanced' => [
|
609 |
-
'bulkEditing' => [
|
610 |
-
'type' => 'string',
|
611 |
-
'default' => 'enabled'
|
612 |
-
]
|
613 |
-
]
|
614 |
-
]
|
615 |
-
);
|
616 |
-
|
617 |
-
if ( 'attachment' === $postType['name'] ) {
|
618 |
-
$defaultOptions['redirectAttachmentUrls'] = [
|
619 |
-
'type' => 'string',
|
620 |
-
'default' => 'attachment'
|
621 |
-
];
|
622 |
-
}
|
623 |
-
|
624 |
-
$this->defaults['searchAppearance']['dynamic']['postTypes'][ $postType['name'] ] = $defaultOptions;
|
625 |
-
$this->setDynamicSocialOptions( 'postTypes', $postType['name'] );
|
626 |
-
$this->setDynamicSitemapOptions( 'postTypes', $postType['name'] );
|
627 |
-
}
|
628 |
-
}
|
629 |
Â
|
630 |
-
|
631 |
-
* Adds the dynamic defaults for the public taxonomies.
|
632 |
-
*
|
633 |
-
* @since 4.1.1
|
634 |
-
*
|
635 |
-
* @return void
|
636 |
-
*/
|
637 |
-
protected function addDynamicTaxonomyDefaults() {
|
638 |
-
$taxonomies = aioseo()->helpers->getPublicTaxonomies();
|
639 |
-
foreach ( $taxonomies as $taxonomy ) {
|
640 |
-
if ( 'type' === $taxonomy['name'] ) {
|
641 |
-
$taxonomy['name'] = '_aioseo_type';
|
642 |
-
}
|
643 |
Â
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
'type' => 'string',
|
649 |
-
'localized' => true,
|
650 |
-
'default' => '#taxonomy_title #separator_sa #site_title'
|
651 |
-
],
|
652 |
-
'metaDescription' => [
|
653 |
-
'type' => 'string',
|
654 |
-
'localized' => true,
|
655 |
-
'default' => '#taxonomy_description'
|
656 |
-
],
|
657 |
-
]
|
658 |
-
);
|
659 |
-
|
660 |
-
$this->defaults['searchAppearance']['dynamic']['taxonomies'][ $taxonomy['name'] ] = $defaultOptions;
|
661 |
-
$this->setDynamicSocialOptions( 'taxonomies', $taxonomy['name'] );
|
662 |
-
$this->setDynamicSitemapOptions( 'taxonomies', $taxonomy['name'] );
|
663 |
Â
}
|
664 |
-
|
665 |
Â
}
|
666 |
Â
|
667 |
Â
/**
|
668 |
-
*
|
669 |
Â
*
|
670 |
-
* @since 4.1.
|
671 |
Â
*
|
672 |
Â
* @return void
|
673 |
Â
*/
|
674 |
-
protected function
|
675 |
-
$
|
676 |
-
|
677 |
-
|
678 |
-
$postType['name'] = '_aioseo_type';
|
679 |
-
}
|
680 |
-
|
681 |
-
$defaultOptions = array_replace_recursive(
|
682 |
-
$this->getDefaultSearchAppearanceOptions(),
|
683 |
-
[
|
684 |
-
'title' => [
|
685 |
-
'type' => 'string',
|
686 |
-
'localized' => true,
|
687 |
-
'default' => '#archive_title #separator_sa #site_title'
|
688 |
-
],
|
689 |
-
'metaDescription' => [
|
690 |
-
'type' => 'string',
|
691 |
-
'localized' => true,
|
692 |
-
'default' => ''
|
693 |
-
],
|
694 |
-
'customFields' => [ 'type' => 'html' ],
|
695 |
-
'advanced' => [
|
696 |
-
'keywords' => [
|
697 |
-
'type' => 'string',
|
698 |
-
'localized' => true
|
699 |
-
]
|
700 |
-
]
|
701 |
-
]
|
702 |
-
);
|
703 |
-
|
704 |
-
$this->defaults['searchAppearance']['dynamic']['archives'][ $postType['name'] ] = $defaultOptions;
|
705 |
-
$this->setDynamicSocialOptions( 'archives', $postType['name'] );
|
706 |
Â
}
|
707 |
-
}
|
708 |
-
|
709 |
-
/**
|
710 |
-
* Returns the search appearance options for dynamic objects.
|
711 |
-
*
|
712 |
-
* @since 4.1.1
|
713 |
-
*
|
714 |
-
* @return array The default options.
|
715 |
-
*/
|
716 |
-
protected function getDefaultSearchAppearanceOptions() {
|
717 |
-
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
718 |
-
return [
|
719 |
-
'show' => [ 'type' => 'boolean', 'default' => true ],
|
720 |
-
'advanced' => [
|
721 |
-
'robotsMeta' => [
|
722 |
-
'default' => [ 'type' => 'boolean', 'default' => true ],
|
723 |
-
'noindex' => [ 'type' => 'boolean', 'default' => false ],
|
724 |
-
'nofollow' => [ 'type' => 'boolean', 'default' => false ],
|
725 |
-
'noarchive' => [ 'type' => 'boolean', 'default' => false ],
|
726 |
-
'noimageindex' => [ 'type' => 'boolean', 'default' => false ],
|
727 |
-
'notranslate' => [ 'type' => 'boolean', 'default' => false ],
|
728 |
-
'nosnippet' => [ 'type' => 'boolean', 'default' => false ],
|
729 |
-
'noodp' => [ 'type' => 'boolean', 'default' => false ],
|
730 |
-
'maxSnippet' => [ 'type' => 'number', 'default' => -1 ],
|
731 |
-
'maxVideoPreview' => [ 'type' => 'number', 'default' => -1 ],
|
732 |
-
'maxImagePreview' => [ 'type' => 'string', 'default' => 'large' ]
|
733 |
-
],
|
734 |
-
'showDateInGooglePreview' => [ 'type' => 'boolean', 'default' => true ],
|
735 |
-
'showPostThumbnailInSearch' => [ 'type' => 'boolean', 'default' => true ],
|
736 |
-
'showMetaBox' => [ 'type' => 'boolean', 'default' => true ]
|
737 |
-
]
|
738 |
-
];
|
739 |
-
// phpcs:enable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
740 |
-
}
|
741 |
Â
|
742 |
-
|
743 |
-
* Sets the dynamic social settings for a given post type or taxonomy.
|
744 |
-
*
|
745 |
-
* @since 4.1.1
|
746 |
-
*
|
747 |
-
* @param string $objectType Whether the object belongs to the dynamic "postTypes" or "taxonomies".
|
748 |
-
* @param string $objectName The object name.
|
749 |
-
* @return void
|
750 |
-
*/
|
751 |
-
protected function setDynamicSocialOptions( $objectType, $objectName ) {
|
752 |
-
$defaultOptions = [
|
753 |
-
'objectType' => [
|
754 |
-
'type' => 'string',
|
755 |
-
'default' => 'article'
|
756 |
-
]
|
757 |
-
];
|
758 |
Â
|
759 |
-
$this->defaults['
|
760 |
-
|
761 |
-
|
762 |
-
/**
|
763 |
-
* Sets the dynamic sitemap settings for a given post type or taxonomy.
|
764 |
-
*
|
765 |
-
* @since 4.1.1
|
766 |
-
*
|
767 |
-
* @param string $objectType Whether the object belongs to the dynamic "postTypes" or "taxonomies".
|
768 |
-
* @param string $objectName The object name.
|
769 |
-
* @return void
|
770 |
-
*/
|
771 |
-
protected function setDynamicSitemapOptions( $objectType, $objectName ) {
|
772 |
-
$this->defaults['sitemap']['dynamic']['priority'][ $objectType ][ $objectName ] = [
|
773 |
-
'priority' => [
|
774 |
-
'type' => 'string',
|
775 |
-
'default' => '{"label":"default","value":"default"}'
|
776 |
-
],
|
777 |
-
'frequency' => [
|
778 |
-
'type' => 'string',
|
779 |
-
'default' => '{"label":"default","value":"default"}'
|
780 |
-
]
|
781 |
-
];
|
782 |
Â
}
|
783 |
Â
|
784 |
Â
/**
|
@@ -789,6 +507,13 @@ TEMPLATE
|
|
789 |
Â
* @return void
|
790 |
Â
*/
|
791 |
Â
public function translateDefaults() {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
792 |
Â
$default = sprintf( '{"label":"%1$s","value":"default"}', __( 'default', 'all-in-one-seo-pack' ) );
|
793 |
Â
$this->defaults['sitemap']['general']['advancedSettings']['priority']['homePage']['priority']['default'] = $default;
|
794 |
Â
$this->defaults['sitemap']['general']['advancedSettings']['priority']['homePage']['frequency']['default'] = $default;
|
@@ -836,42 +561,42 @@ TEMPLATE
|
|
836 |
Â
}
|
837 |
Â
|
838 |
Â
// Refactor options.
|
839 |
-
$
|
840 |
-
|
841 |
-
$
|
Â
|
|
842 |
Â
);
|
843 |
Â
|
844 |
-
|
845 |
-
|
846 |
Â
// The above works for most options, but there are a few that need to be forcibly updated.
|
847 |
Â
if ( $sitemapOptions ) {
|
848 |
-
$
|
849 |
-
$
|
850 |
-
$
|
851 |
-
$
|
852 |
-
$
|
853 |
-
$
|
854 |
-
$
|
855 |
-
$
|
856 |
-
$
|
857 |
-
$
|
858 |
Â
}
|
859 |
Â
|
860 |
Â
// Advanced options.
|
861 |
Â
if ( ! empty( $options['advanced'] ) ) {
|
862 |
Â
if ( isset( $options['advanced']['postTypes']['included'] ) ) {
|
863 |
-
$
|
864 |
Â
}
|
865 |
Â
|
866 |
Â
if ( isset( $options['advanced']['taxonomies']['included'] ) ) {
|
867 |
-
$
|
868 |
Â
}
|
869 |
Â
}
|
870 |
Â
|
871 |
Â
// Tools.
|
872 |
Â
if ( ! empty( $options['tools'] ) ) {
|
873 |
Â
if ( isset( $options['tools']['robots']['rules'] ) ) {
|
874 |
-
$
|
875 |
Â
}
|
876 |
Â
}
|
877 |
Â
|
@@ -879,23 +604,24 @@ TEMPLATE
|
|
879 |
Â
if ( ! empty( $options['deprecated'] ) ) {
|
880 |
Â
|
881 |
Â
if ( isset( $options['deprecated']['webmasterTools']['googleAnalytics']['excludeUsers'] ) ) {
|
882 |
-
$
|
883 |
Â
}
|
884 |
Â
if ( isset( $options['deprecated']['searchAppearance']['advanced']['excludePosts'] ) ) {
|
885 |
-
$
|
886 |
Â
}
|
887 |
Â
|
888 |
Â
if ( isset( $options['deprecated']['searchAppearance']['advanced']['excludeTerms'] ) ) {
|
889 |
-
$
|
890 |
Â
}
|
891 |
Â
}
|
892 |
Â
|
893 |
Â
// Social networks.
|
894 |
Â
if ( isset( $options['social']['profiles']['sameUsername']['included'] ) ) {
|
895 |
-
$
|
896 |
Â
}
|
897 |
Â
|
898 |
-
|
Â
|
|
899 |
Â
$newOptions = ! empty( $options['sitemap']['html'] ) ? $options['sitemap']['html'] : null;
|
900 |
Â
|
901 |
Â
$pageUrl = wp_parse_url( $newOptions['pageUrl'] );
|
@@ -909,11 +635,13 @@ TEMPLATE
|
|
909 |
Â
}
|
910 |
Â
}
|
911 |
Â
|
Â
|
|
Â
|
|
912 |
Â
// Update localized options.
|
913 |
Â
update_option( $this->optionsName . '_localized', $this->localized );
|
914 |
Â
|
915 |
Â
// Update values.
|
916 |
-
$this->
|
917 |
Â
|
918 |
Â
// If phone settings have changed, let's see if we need to dump the phone number notice.
|
919 |
Â
if (
|
@@ -942,6 +670,9 @@ TEMPLATE
|
|
942 |
Â
aioseo()->sitemap->scheduleRegeneration();
|
943 |
Â
}
|
944 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
945 |
Â
}
|
946 |
Â
|
947 |
Â
/**
|
1 |
Â
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Options;
|
3 |
Â
|
4 |
Â
// Exit if accessed directly.
|
5 |
Â
if ( ! defined( 'ABSPATH' ) ) {
|
17 |
Â
class Options {
|
18 |
Â
use Traits\Options;
|
19 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
20 |
Â
/**
|
21 |
Â
* All the default options.
|
22 |
Â
*
|
160 |
Â
'excludeTerms' => [ 'type' => 'array', 'default' => [] ]
|
161 |
Â
]
|
162 |
Â
],
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
163 |
Â
],
|
164 |
Â
'social' => [
|
165 |
Â
'profiles' => [
|
193 |
Â
'defaultImagePostsWidth' => [ 'type' => 'number', 'default' => '' ],
|
194 |
Â
'defaultImagePostsHeight' => [ 'type' => 'number', 'default' => '' ],
|
195 |
Â
'showAuthor' => [ 'type' => 'boolean', 'default' => true ],
|
196 |
+
'siteName' => [ 'type' => 'string', 'localized' => true, 'default' => '#site_title #separator_sa #tagline' ]
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
197 |
Â
],
|
198 |
Â
'homePage' => [
|
199 |
Â
'image' => [ 'type' => 'string', 'default' => '' ],
|
351 |
Â
'keywords' => [ 'type' => 'string', 'localized' => true ]
|
352 |
Â
]
|
353 |
Â
]
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
354 |
Â
]
|
355 |
Â
],
|
356 |
Â
'tools' => [
|
431 |
Â
$this->optionsName = is_network_admin() ? $optionsName . '_network' : $optionsName;
|
432 |
Â
|
433 |
Â
$this->init();
|
434 |
+
|
435 |
+
add_action( 'shutdown', [ $this, 'save' ] );
|
436 |
Â
}
|
437 |
Â
|
438 |
Â
/**
|
440 |
Â
*
|
441 |
Â
* @since 4.0.0
|
442 |
Â
*
|
Â
|
|
443 |
Â
* @return void
|
444 |
Â
*/
|
445 |
+
protected function init() {
|
446 |
+
$this->setInitialDefaults();
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
447 |
Â
$this->translateDefaults();
|
448 |
Â
|
449 |
+
$this->setDbOptions();
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
450 |
Â
|
451 |
Â
add_action( 'wp_loaded', [ $this, 'maybeFlushRewriteRules' ] );
|
452 |
Â
}
|
453 |
Â
|
454 |
Â
/**
|
455 |
+
* Sets the DB options to the class after merging in new defaults and dropping unknown values.
|
456 |
Â
*
|
457 |
+
* @since 4.0.14
|
458 |
Â
*
|
459 |
+
* @return void
|
460 |
Â
*/
|
461 |
+
public function setDbOptions() {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
462 |
Â
// Refactor options.
|
463 |
Â
$this->defaultsMerged = array_replace_recursive( $this->defaults, $this->defaultsMerged );
|
464 |
Â
|
465 |
+
$dbOptions = $this->getDbOptions( $this->optionsName );
|
466 |
+
|
467 |
+
$options = array_replace_recursive(
|
468 |
Â
$this->defaultsMerged,
|
469 |
Â
$this->addValueToValuesArray( $this->defaultsMerged, $dbOptions )
|
470 |
Â
);
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
471 |
Â
|
472 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, apply_filters( 'aioseo_get_options', $options ) );
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
473 |
Â
|
474 |
+
// Get the localized options.
|
475 |
+
$dbOptionsLocalized = get_option( $this->optionsName . '_localized' );
|
476 |
+
if ( empty( $dbOptionsLocalized ) ) {
|
477 |
+
$dbOptionsLocalized = [];
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
478 |
Â
}
|
479 |
+
$this->localized = $dbOptionsLocalized;
|
480 |
Â
}
|
481 |
Â
|
482 |
Â
/**
|
483 |
+
* Sets the initial defaults that can't be defined in the property because of PHP 5.4.
|
484 |
Â
*
|
485 |
+
* @since 4.1.4
|
486 |
Â
*
|
487 |
Â
* @return void
|
488 |
Â
*/
|
489 |
+
protected function setInitialDefaults() {
|
490 |
+
static $hasInitialized = false;
|
491 |
+
if ( $hasInitialized ) {
|
492 |
+
return;
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
493 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
494 |
Â
|
495 |
+
$hasInitialized = true;
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
496 |
Â
|
497 |
+
$this->defaults['searchAppearance']['global']['schema']['organizationName']['default'] = aioseo()->helpers->decodeHtmlEntities( get_bloginfo( 'name' ) );
|
498 |
+
$this->defaults['deprecated']['tools']['blocker']['custom']['bots']['default'] = implode( "\n", aioseo()->badBotBlocker->getBotList() );
|
499 |
+
$this->defaults['deprecated']['tools']['blocker']['custom']['referer']['default'] = implode( "\n", aioseo()->badBotBlocker->getRefererList() );
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
500 |
Â
}
|
501 |
Â
|
502 |
Â
/**
|
507 |
Â
* @return void
|
508 |
Â
*/
|
509 |
Â
public function translateDefaults() {
|
510 |
+
static $hasInitialized = false;
|
511 |
+
if ( $hasInitialized ) {
|
512 |
+
return;
|
513 |
+
}
|
514 |
+
|
515 |
+
$hasInitialized = true;
|
516 |
+
|
517 |
Â
$default = sprintf( '{"label":"%1$s","value":"default"}', __( 'default', 'all-in-one-seo-pack' ) );
|
518 |
Â
$this->defaults['sitemap']['general']['advancedSettings']['priority']['homePage']['priority']['default'] = $default;
|
519 |
Â
$this->defaults['sitemap']['general']['advancedSettings']['priority']['homePage']['frequency']['default'] = $default;
|
561 |
Â
}
|
562 |
Â
|
563 |
Â
// Refactor options.
|
564 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
565 |
+
$dbOptions = array_replace_recursive(
|
566 |
+
$cachedOptions,
|
567 |
+
$this->addValueToValuesArray( $cachedOptions, $options, [], true )
|
568 |
Â
);
|
569 |
Â
|
570 |
+
// TODO: Refactor this into an array since importing old settings imports fail because new settings might not exist in the $options being passed in here. (i.e. 'html' below).
|
Â
|
|
571 |
Â
// The above works for most options, but there are a few that need to be forcibly updated.
|
572 |
Â
if ( $sitemapOptions ) {
|
573 |
+
$dbOptions['sitemap']['general']['postTypes']['included']['value'] = $this->sanitizeField( $options['sitemap']['general']['postTypes']['included'], 'array' );
|
574 |
+
$dbOptions['sitemap']['general']['taxonomies']['included']['value'] = $this->sanitizeField( $options['sitemap']['general']['taxonomies']['included'], 'array' );
|
575 |
+
$dbOptions['sitemap']['general']['additionalPages']['pages']['value'] = $this->sanitizeField( $options['sitemap']['general']['additionalPages']['pages'], 'array' );
|
576 |
+
$dbOptions['sitemap']['general']['advancedSettings']['excludePosts']['value'] = $this->sanitizeField( $options['sitemap']['general']['advancedSettings']['excludePosts'], 'array' );
|
577 |
+
$dbOptions['sitemap']['general']['advancedSettings']['excludeTerms']['value'] = $this->sanitizeField( $options['sitemap']['general']['advancedSettings']['excludeTerms'], 'array' );
|
578 |
+
$dbOptions['sitemap']['rss']['postTypes']['included']['value'] = $this->sanitizeField( $options['sitemap']['rss']['postTypes']['included'], 'array' );
|
579 |
+
$dbOptions['sitemap']['html']['postTypes']['included']['value'] = $this->sanitizeField( $options['sitemap']['html']['postTypes']['included'], 'array' );
|
580 |
+
$dbOptions['sitemap']['html']['taxonomies']['included']['value'] = $this->sanitizeField( $options['sitemap']['html']['taxonomies']['included'], 'array' );
|
581 |
+
$dbOptions['sitemap']['html']['advancedSettings']['excludePosts']['value'] = $this->sanitizeField( $options['sitemap']['html']['advancedSettings']['excludePosts'], 'array' );
|
582 |
+
$dbOptions['sitemap']['html']['advancedSettings']['excludeTerms']['value'] = $this->sanitizeField( $options['sitemap']['html']['advancedSettings']['excludeTerms'], 'array' );
|
583 |
Â
}
|
584 |
Â
|
585 |
Â
// Advanced options.
|
586 |
Â
if ( ! empty( $options['advanced'] ) ) {
|
587 |
Â
if ( isset( $options['advanced']['postTypes']['included'] ) ) {
|
588 |
+
$dbOptions['advanced']['postTypes']['included']['value'] = $this->sanitizeField( $options['advanced']['postTypes']['included'], 'array' );
|
589 |
Â
}
|
590 |
Â
|
591 |
Â
if ( isset( $options['advanced']['taxonomies']['included'] ) ) {
|
592 |
+
$dbOptions['advanced']['taxonomies']['included']['value'] = $this->sanitizeField( $options['advanced']['taxonomies']['included'], 'array' );
|
593 |
Â
}
|
594 |
Â
}
|
595 |
Â
|
596 |
Â
// Tools.
|
597 |
Â
if ( ! empty( $options['tools'] ) ) {
|
598 |
Â
if ( isset( $options['tools']['robots']['rules'] ) ) {
|
599 |
+
$dbOptions['tools']['robots']['rules']['value'] = $this->sanitizeField( $options['tools']['robots']['rules'], 'array' );
|
600 |
Â
}
|
601 |
Â
}
|
602 |
Â
|
604 |
Â
if ( ! empty( $options['deprecated'] ) ) {
|
605 |
Â
|
606 |
Â
if ( isset( $options['deprecated']['webmasterTools']['googleAnalytics']['excludeUsers'] ) ) {
|
607 |
+
$dbOptions['deprecated']['webmasterTools']['googleAnalytics']['excludeUsers']['value'] = $this->sanitizeField( $options['deprecated']['webmasterTools']['googleAnalytics']['excludeUsers'], 'array' ); // phpcs:ignore Generic.Files.LineLength.MaxExceeded
|
608 |
Â
}
|
609 |
Â
if ( isset( $options['deprecated']['searchAppearance']['advanced']['excludePosts'] ) ) {
|
610 |
+
$dbOptions['deprecated']['searchAppearance']['advanced']['excludePosts']['value'] = $this->sanitizeField( $options['deprecated']['searchAppearance']['advanced']['excludePosts'], 'array' ); // phpcs:ignore Generic.Files.LineLength.MaxExceeded
|
611 |
Â
}
|
612 |
Â
|
613 |
Â
if ( isset( $options['deprecated']['searchAppearance']['advanced']['excludeTerms'] ) ) {
|
614 |
+
$dbOptions['deprecated']['searchAppearance']['advanced']['excludeTerms']['value'] = $this->sanitizeField( $options['deprecated']['searchAppearance']['advanced']['excludeTerms'], 'array' ); // phpcs:ignore Generic.Files.LineLength.MaxExceeded
|
615 |
Â
}
|
616 |
Â
}
|
617 |
Â
|
618 |
Â
// Social networks.
|
619 |
Â
if ( isset( $options['social']['profiles']['sameUsername']['included'] ) ) {
|
620 |
+
$dbOptions['social']['profiles']['sameUsername']['included']['value'] = $this->sanitizeField( $options['social']['profiles']['sameUsername']['included'], 'array' );
|
621 |
Â
}
|
622 |
Â
|
623 |
+
$newOptions = ! empty( $options['sitemap']['html'] ) ? $options['sitemap']['html'] : null;
|
624 |
+
if ( ! empty( $newOptions ) && $this->sitemap->html->enable ) {
|
625 |
Â
$newOptions = ! empty( $options['sitemap']['html'] ) ? $options['sitemap']['html'] : null;
|
626 |
Â
|
627 |
Â
$pageUrl = wp_parse_url( $newOptions['pageUrl'] );
|
635 |
Â
}
|
636 |
Â
}
|
637 |
Â
|
638 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, $dbOptions );
|
639 |
+
|
640 |
Â
// Update localized options.
|
641 |
Â
update_option( $this->optionsName . '_localized', $this->localized );
|
642 |
Â
|
643 |
Â
// Update values.
|
644 |
+
$this->save( true );
|
645 |
Â
|
646 |
Â
// If phone settings have changed, let's see if we need to dump the phone number notice.
|
647 |
Â
if (
|
670 |
Â
aioseo()->sitemap->scheduleRegeneration();
|
671 |
Â
}
|
672 |
Â
}
|
673 |
+
|
674 |
+
// This is required in order for the Pro options to be refreshed before they save data again.
|
675 |
+
$this->refresh();
|
676 |
Â
}
|
677 |
Â
|
678 |
Â
/**
|
app/Common/Schema/Graphs/Article.php
CHANGED
@@ -40,6 +40,7 @@ class Article extends Graph {
|
|
40 |
Â
'@id' => aioseo()->schema->context['url'] . '#article',
|
41 |
Â
'name' => aioseo()->schema->context['name'],
|
42 |
Â
'description' => aioseo()->schema->context['description'],
|
Â
|
|
43 |
Â
'headline' => $post->post_title,
|
44 |
Â
'author' => [ '@id' => get_author_posts_url( $post->post_author ) . '#author' ],
|
45 |
Â
'publisher' => [ '@id' => trailingslashit( home_url() ) . '#' . aioseo()->options->searchAppearance->global->schema->siteRepresents ],
|
40 |
Â
'@id' => aioseo()->schema->context['url'] . '#article',
|
41 |
Â
'name' => aioseo()->schema->context['name'],
|
42 |
Â
'description' => aioseo()->schema->context['description'],
|
43 |
+
'inLanguage' => aioseo()->helpers->currentLanguageCodeBCP47(),
|
44 |
Â
'headline' => $post->post_title,
|
45 |
Â
'author' => [ '@id' => get_author_posts_url( $post->post_author ) . '#author' ],
|
46 |
Â
'publisher' => [ '@id' => trailingslashit( home_url() ) . '#' . aioseo()->options->searchAppearance->global->schema->siteRepresents ],
|
app/Common/Schema/Graphs/BreadcrumbList.php
CHANGED
@@ -20,8 +20,8 @@ class BreadcrumbList extends Graph {
|
|
20 |
Â
* @return array $data The graph data.
|
21 |
Â
*/
|
22 |
Â
public function get() {
|
23 |
-
$breadcrumbs = aioseo()->schema->context['breadcrumb'];
|
24 |
-
if ( !
|
25 |
Â
return [];
|
26 |
Â
}
|
27 |
Â
|
20 |
Â
* @return array $data The graph data.
|
21 |
Â
*/
|
22 |
Â
public function get() {
|
23 |
+
$breadcrumbs = isset( aioseo()->schema->context['breadcrumb'] ) ? aioseo()->schema->context['breadcrumb'] : '';
|
24 |
+
if ( ! $breadcrumbs || ! count( $breadcrumbs ) ) {
|
25 |
Â
return [];
|
26 |
Â
}
|
27 |
Â
|
app/Common/Schema/Graphs/Graph.php
CHANGED
@@ -44,17 +44,34 @@ abstract class Graph {
|
|
44 |
Â
|
45 |
Â
$metaData = wp_get_attachment_metadata( $attachmentId );
|
46 |
Â
if ( $metaData ) {
|
47 |
-
$data['width'] = $metaData['width'];
|
48 |
-
$data['height'] = $metaData['height'];
|
49 |
Â
}
|
50 |
Â
|
51 |
-
$caption =
|
52 |
-
if (
|
53 |
Â
$data['caption'] = $caption;
|
54 |
Â
}
|
55 |
Â
return $data;
|
56 |
Â
}
|
57 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
58 |
Â
/**
|
59 |
Â
* Returns the graph data for the avatar of a given user.
|
60 |
Â
*
|
44 |
Â
|
45 |
Â
$metaData = wp_get_attachment_metadata( $attachmentId );
|
46 |
Â
if ( $metaData ) {
|
47 |
+
$data['width'] = (int) $metaData['width'];
|
48 |
+
$data['height'] = (int) $metaData['height'];
|
49 |
Â
}
|
50 |
Â
|
51 |
+
$caption = $this->getImageCaption( $attachmentId );
|
52 |
+
if ( ! empty( $caption ) ) {
|
53 |
Â
$data['caption'] = $caption;
|
54 |
Â
}
|
55 |
Â
return $data;
|
56 |
Â
}
|
57 |
Â
|
58 |
+
/**
|
59 |
+
* Get the image caption.
|
60 |
+
*
|
61 |
+
* @since 4.1.4
|
62 |
+
*
|
63 |
+
* @param int $attachmentId The attachment ID.
|
64 |
+
* @return string The caption.
|
65 |
+
*/
|
66 |
+
private function getImageCaption( $attachmentId ) {
|
67 |
+
$caption = wp_get_attachment_caption( $attachmentId );
|
68 |
+
if ( ! empty( $caption ) ) {
|
69 |
+
return $caption;
|
70 |
+
}
|
71 |
+
|
72 |
+
return get_post_meta( $attachmentId, '_wp_attachment_image_alt', true );
|
73 |
+
}
|
74 |
+
|
75 |
Â
/**
|
76 |
Â
* Returns the graph data for the avatar of a given user.
|
77 |
Â
*
|
app/Common/Schema/Graphs/WebPage.php
CHANGED
@@ -38,7 +38,7 @@ class WebPage extends Graph {
|
|
38 |
Â
'url' => aioseo()->schema->context['url'],
|
39 |
Â
'name' => aioseo()->meta->title->getTitle(),
|
40 |
Â
'description' => aioseo()->schema->context['description'],
|
41 |
-
'inLanguage' =>
|
42 |
Â
'isPartOf' => [ '@id' => $homeUrl . '#website' ],
|
43 |
Â
'breadcrumb' => [ '@id' => aioseo()->schema->context['url'] . '#breadcrumblist' ]
|
44 |
Â
];
|
38 |
Â
'url' => aioseo()->schema->context['url'],
|
39 |
Â
'name' => aioseo()->meta->title->getTitle(),
|
40 |
Â
'description' => aioseo()->schema->context['description'],
|
41 |
+
'inLanguage' => aioseo()->helpers->currentLanguageCodeBCP47(),
|
42 |
Â
'isPartOf' => [ '@id' => $homeUrl . '#website' ],
|
43 |
Â
'breadcrumb' => [ '@id' => aioseo()->schema->context['url'] . '#breadcrumblist' ]
|
44 |
Â
];
|
app/Common/Schema/Graphs/WebSite.php
CHANGED
@@ -27,13 +27,17 @@ class WebSite extends Graph {
|
|
27 |
Â
'url' => $homeUrl,
|
28 |
Â
'name' => aioseo()->helpers->decodeHtmlEntities( get_bloginfo( 'name' ) ),
|
29 |
Â
'description' => aioseo()->helpers->decodeHtmlEntities( get_bloginfo( 'description' ) ),
|
Â
|
|
30 |
Â
'publisher' => [ '@id' => $homeUrl . '#' . aioseo()->options->searchAppearance->global->schema->siteRepresents ]
|
31 |
Â
];
|
32 |
Â
|
33 |
Â
if ( is_front_page() && aioseo()->options->searchAppearance->advanced->sitelinks ) {
|
34 |
Â
$data['potentialAction'] = [
|
35 |
Â
'@type' => 'SearchAction',
|
36 |
-
'target' =>
|
Â
|
|
Â
|
|
Â
|
|
37 |
Â
'query-input' => 'required name=search_term_string',
|
38 |
Â
];
|
39 |
Â
}
|
27 |
Â
'url' => $homeUrl,
|
28 |
Â
'name' => aioseo()->helpers->decodeHtmlEntities( get_bloginfo( 'name' ) ),
|
29 |
Â
'description' => aioseo()->helpers->decodeHtmlEntities( get_bloginfo( 'description' ) ),
|
30 |
+
'inLanguage' => aioseo()->helpers->currentLanguageCodeBCP47(),
|
31 |
Â
'publisher' => [ '@id' => $homeUrl . '#' . aioseo()->options->searchAppearance->global->schema->siteRepresents ]
|
32 |
Â
];
|
33 |
Â
|
34 |
Â
if ( is_front_page() && aioseo()->options->searchAppearance->advanced->sitelinks ) {
|
35 |
Â
$data['potentialAction'] = [
|
36 |
Â
'@type' => 'SearchAction',
|
37 |
+
'target' => [
|
38 |
+
'@type' => 'EntryPoint',
|
39 |
+
'urlTemplate' => $homeUrl . '?s={search_term_string}'
|
40 |
+
],
|
41 |
Â
'query-input' => 'required name=search_term_string',
|
42 |
Â
];
|
43 |
Â
}
|
app/Common/Schema/Schema.php
CHANGED
@@ -205,8 +205,8 @@ class Schema {
|
|
205 |
Â
* @return string|array The graph name(s).
|
206 |
Â
*/
|
207 |
Â
public function getPostGraphs( $post = null ) {
|
208 |
-
$post
|
209 |
-
$
|
210 |
Â
|
211 |
Â
$schemaType = 'default';
|
212 |
Â
$schemaTypeOptions = '';
|
@@ -219,18 +219,18 @@ class Schema {
|
|
219 |
Â
}
|
220 |
Â
|
221 |
Â
// Get global settings if set to default.
|
222 |
-
if ( 'default' === $schemaType && $
|
223 |
-
$schemaType = $
|
224 |
Â
}
|
225 |
Â
|
226 |
Â
switch ( $schemaType ) {
|
227 |
Â
case 'WebPage':
|
228 |
Â
$webPageGraph = ! empty( $metaData->schema_type ) && 'default' !== $metaData->schema_type ? $schemaTypeOptions->webPage->webPageType :
|
229 |
-
$
|
230 |
Â
return ucfirst( $webPageGraph );
|
231 |
Â
case 'Article':
|
232 |
Â
$articleGraph = ! empty( $metaData->schema_type ) && 'default' !== $metaData->schema_type ? $schemaTypeOptions->article->articleType :
|
233 |
-
$
|
234 |
Â
return [ 'WebPage', ucfirst( $articleGraph ) ];
|
235 |
Â
case 'none':
|
236 |
Â
return '';
|
@@ -260,7 +260,7 @@ class Schema {
|
|
260 |
Â
if ( is_array( $v ) ) {
|
261 |
Â
$v = $this->cleanData( $v );
|
262 |
Â
} else {
|
263 |
-
$v = trim( wp_strip_all_tags( $v ) );
|
264 |
Â
}
|
265 |
Â
|
266 |
Â
if ( empty( $v ) && ! in_array( $k, $this->nullableFields, true ) ) {
|
205 |
Â
* @return string|array The graph name(s).
|
206 |
Â
*/
|
207 |
Â
public function getPostGraphs( $post = null ) {
|
208 |
+
$post = is_object( $post ) ? $post : aioseo()->helpers->getPost();
|
209 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
210 |
Â
|
211 |
Â
$schemaType = 'default';
|
212 |
Â
$schemaTypeOptions = '';
|
219 |
Â
}
|
220 |
Â
|
221 |
Â
// Get global settings if set to default.
|
222 |
+
if ( 'default' === $schemaType && $dynamicOptions->searchAppearance->postTypes->has( $post->post_type ) ) {
|
223 |
+
$schemaType = $dynamicOptions->searchAppearance->postTypes->{$post->post_type}->schemaType;
|
224 |
Â
}
|
225 |
Â
|
226 |
Â
switch ( $schemaType ) {
|
227 |
Â
case 'WebPage':
|
228 |
Â
$webPageGraph = ! empty( $metaData->schema_type ) && 'default' !== $metaData->schema_type ? $schemaTypeOptions->webPage->webPageType :
|
229 |
+
$dynamicOptions->searchAppearance->postTypes->{$post->post_type}->webPageType;
|
230 |
Â
return ucfirst( $webPageGraph );
|
231 |
Â
case 'Article':
|
232 |
Â
$articleGraph = ! empty( $metaData->schema_type ) && 'default' !== $metaData->schema_type ? $schemaTypeOptions->article->articleType :
|
233 |
+
$dynamicOptions->searchAppearance->postTypes->{$post->post_type}->articleType;
|
234 |
Â
return [ 'WebPage', ucfirst( $articleGraph ) ];
|
235 |
Â
case 'none':
|
236 |
Â
return '';
|
260 |
Â
if ( is_array( $v ) ) {
|
261 |
Â
$v = $this->cleanData( $v );
|
262 |
Â
} else {
|
263 |
+
$v = is_int( $v ) ? $v : trim( wp_strip_all_tags( $v ) );
|
264 |
Â
}
|
265 |
Â
|
266 |
Â
if ( empty( $v ) && ! in_array( $k, $this->nullableFields, true ) ) {
|
app/Common/Sitemap/Content.php
CHANGED
@@ -154,6 +154,7 @@ class Content {
|
|
154 |
Â
|
155 |
Â
// Override priority/frequency for static homepage.
|
156 |
Â
if ( $isStaticHomepage && $homePageId === $post->ID ) {
|
Â
|
|
157 |
Â
$entry['changefreq'] = aioseo()->sitemap->priority->frequency( 'homePage' );
|
158 |
Â
$entry['priority'] = aioseo()->sitemap->priority->priority( 'homePage' );
|
159 |
Â
}
|
@@ -256,9 +257,9 @@ class Content {
|
|
256 |
Â
$entries = [];
|
257 |
Â
foreach ( aioseo()->sitemap->helpers->includedPostTypes( true ) as $postType ) {
|
258 |
Â
if (
|
259 |
-
aioseo()->
|
260 |
-
! aioseo()->
|
261 |
-
aioseo()->
|
262 |
Â
) {
|
263 |
Â
continue;
|
264 |
Â
}
|
@@ -374,10 +375,11 @@ class Content {
|
|
374 |
Â
public function addl() {
|
375 |
Â
$entries = [];
|
376 |
Â
if ( 'posts' === get_option( 'show_on_front' ) || ! in_array( 'page', aioseo()->sitemap->helpers->includedPostTypes(), true ) ) {
|
377 |
-
$frontPageId
|
378 |
-
$
|
Â
|
|
379 |
Â
$entries[] = [
|
380 |
-
'loc' => aioseo()->helpers->
|
381 |
Â
'lastmod' => $post ? aioseo()->helpers->formatDateTime( $post->post_modified_gmt ) : aioseo()->sitemap->helpers->lastModifiedPostTime(),
|
382 |
Â
'changefreq' => aioseo()->sitemap->priority->frequency( 'homePage' ),
|
383 |
Â
'priority' => aioseo()->sitemap->priority->priority( 'homePage' ),
|
154 |
Â
|
155 |
Â
// Override priority/frequency for static homepage.
|
156 |
Â
if ( $isStaticHomepage && $homePageId === $post->ID ) {
|
157 |
+
$entry['loc'] = aioseo()->helpers->maybeRemoveTrailingSlash( $entry['loc'] );
|
158 |
Â
$entry['changefreq'] = aioseo()->sitemap->priority->frequency( 'homePage' );
|
159 |
Â
$entry['priority'] = aioseo()->sitemap->priority->priority( 'homePage' );
|
160 |
Â
}
|
257 |
Â
$entries = [];
|
258 |
Â
foreach ( aioseo()->sitemap->helpers->includedPostTypes( true ) as $postType ) {
|
259 |
Â
if (
|
260 |
+
aioseo()->dynamicOptions->noConflict()->searchAppearance->archives->has( $postType ) &&
|
261 |
+
! aioseo()->dynamicOptions->searchAppearance->archives->$postType->advanced->robotsMeta->default &&
|
262 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->advanced->robotsMeta->noindex
|
263 |
Â
) {
|
264 |
Â
continue;
|
265 |
Â
}
|
375 |
Â
public function addl() {
|
376 |
Â
$entries = [];
|
377 |
Â
if ( 'posts' === get_option( 'show_on_front' ) || ! in_array( 'page', aioseo()->sitemap->helpers->includedPostTypes(), true ) ) {
|
378 |
+
$frontPageId = (int) get_option( 'page_on_front' );
|
379 |
+
$frontPageUrl = aioseo()->helpers->localizedUrl( '/' );
|
380 |
+
$post = aioseo()->helpers->getPost( $frontPageId );
|
381 |
Â
$entries[] = [
|
382 |
+
'loc' => aioseo()->helpers->maybeRemoveTrailingSlash( $frontPageUrl ),
|
383 |
Â
'lastmod' => $post ? aioseo()->helpers->formatDateTime( $post->post_modified_gmt ) : aioseo()->sitemap->helpers->lastModifiedPostTime(),
|
384 |
Â
'changefreq' => aioseo()->sitemap->priority->frequency( 'homePage' ),
|
385 |
Â
'priority' => aioseo()->sitemap->priority->priority( 'homePage' ),
|
app/Common/Sitemap/Helpers.php
CHANGED
@@ -208,10 +208,11 @@ class Helpers {
|
|
208 |
Â
}
|
209 |
Â
|
210 |
Â
$options = aioseo()->options->noConflict();
|
Â
|
|
211 |
Â
$publicPostTypes = aioseo()->helpers->getPublicPostTypes( true, $hasArchivesOnly );
|
212 |
Â
foreach ( $postTypes as $postType ) {
|
213 |
Â
// Check if post type is no longer registered.
|
214 |
-
if ( ! in_array( $postType, $publicPostTypes, true ) || ! $
|
215 |
Â
$postTypes = aioseo()->helpers->unsetValue( $postTypes, $postType );
|
216 |
Â
continue;
|
217 |
Â
}
|
@@ -225,7 +226,7 @@ class Helpers {
|
|
225 |
Â
}
|
226 |
Â
|
227 |
Â
if (
|
228 |
-
$
|
229 |
Â
! $options->searchAppearance->advanced->globalRobotsMeta->default &&
|
230 |
Â
$options->searchAppearance->advanced->globalRobotsMeta->noindex
|
231 |
Â
) {
|
@@ -284,10 +285,11 @@ class Helpers {
|
|
284 |
Â
}
|
285 |
Â
|
286 |
Â
$options = aioseo()->options->noConflict();
|
Â
|
|
287 |
Â
$publicTaxonomies = aioseo()->helpers->getPublicTaxonomies( true );
|
288 |
Â
foreach ( $taxonomies as $taxonomy ) {
|
289 |
Â
// Check if taxonomy is no longer registered.
|
290 |
-
if ( ! in_array( $taxonomy, $publicTaxonomies, true ) || ! $
|
291 |
Â
$taxonomies = aioseo()->helpers->unsetValue( $taxonomies, $taxonomy );
|
292 |
Â
continue;
|
293 |
Â
}
|
@@ -299,7 +301,7 @@ class Helpers {
|
|
299 |
Â
}
|
300 |
Â
|
301 |
Â
if (
|
302 |
-
$
|
303 |
Â
! $options->searchAppearance->advanced->globalRobotsMeta->default &&
|
304 |
Â
$options->searchAppearance->advanced->globalRobotsMeta->noindex
|
305 |
Â
) {
|
@@ -392,26 +394,10 @@ class Helpers {
|
|
392 |
Â
}
|
393 |
Â
|
394 |
Â
if ( 'excludePosts' === $option ) {
|
395 |
-
/**
|
396 |
-
* Filters the posts exclusion before creating the query.
|
397 |
-
*
|
398 |
-
* @since 4.1.3
|
399 |
-
*
|
400 |
-
* @param array $ids The array of excluded posts id.
|
401 |
-
* @param string $type The type of sitemap.
|
402 |
-
*/
|
403 |
Â
$ids = apply_filters( 'aioseo_sitemap_exclude_posts', $ids, $type );
|
404 |
Â
}
|
405 |
Â
|
406 |
Â
if ( 'excludeTerms' === $option ) {
|
407 |
-
/**
|
408 |
-
* Filters the terms exclusion before creating the query.
|
409 |
-
*
|
410 |
-
* @since 4.1.3
|
411 |
-
*
|
412 |
-
* @param array $ids The array of excluded ters id.
|
413 |
-
* @param string $type The type of sitemap.
|
414 |
-
*/
|
415 |
Â
$ids = apply_filters( 'aioseo_sitemap_exclude_terms', $ids, $type );
|
416 |
Â
}
|
417 |
Â
|
208 |
Â
}
|
209 |
Â
|
210 |
Â
$options = aioseo()->options->noConflict();
|
211 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
212 |
Â
$publicPostTypes = aioseo()->helpers->getPublicPostTypes( true, $hasArchivesOnly );
|
213 |
Â
foreach ( $postTypes as $postType ) {
|
214 |
Â
// Check if post type is no longer registered.
|
215 |
+
if ( ! in_array( $postType, $publicPostTypes, true ) || ! $dynamicOptions->searchAppearance->postTypes->has( $postType ) ) {
|
216 |
Â
$postTypes = aioseo()->helpers->unsetValue( $postTypes, $postType );
|
217 |
Â
continue;
|
218 |
Â
}
|
226 |
Â
}
|
227 |
Â
|
228 |
Â
if (
|
229 |
+
$dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default &&
|
230 |
Â
! $options->searchAppearance->advanced->globalRobotsMeta->default &&
|
231 |
Â
$options->searchAppearance->advanced->globalRobotsMeta->noindex
|
232 |
Â
) {
|
285 |
Â
}
|
286 |
Â
|
287 |
Â
$options = aioseo()->options->noConflict();
|
288 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
289 |
Â
$publicTaxonomies = aioseo()->helpers->getPublicTaxonomies( true );
|
290 |
Â
foreach ( $taxonomies as $taxonomy ) {
|
291 |
Â
// Check if taxonomy is no longer registered.
|
292 |
+
if ( ! in_array( $taxonomy, $publicTaxonomies, true ) || ! $dynamicOptions->searchAppearance->taxonomies->has( $taxonomy ) ) {
|
293 |
Â
$taxonomies = aioseo()->helpers->unsetValue( $taxonomies, $taxonomy );
|
294 |
Â
continue;
|
295 |
Â
}
|
301 |
Â
}
|
302 |
Â
|
303 |
Â
if (
|
304 |
+
$dynamicOptions->searchAppearance->taxonomies->$taxonomy->advanced->robotsMeta->default &&
|
305 |
Â
! $options->searchAppearance->advanced->globalRobotsMeta->default &&
|
306 |
Â
$options->searchAppearance->advanced->globalRobotsMeta->noindex
|
307 |
Â
) {
|
394 |
Â
}
|
395 |
Â
|
396 |
Â
if ( 'excludePosts' === $option ) {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
397 |
Â
$ids = apply_filters( 'aioseo_sitemap_exclude_posts', $ids, $type );
|
398 |
Â
}
|
399 |
Â
|
400 |
Â
if ( 'excludeTerms' === $option ) {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
401 |
Â
$ids = apply_filters( 'aioseo_sitemap_exclude_terms', $ids, $type );
|
402 |
Â
}
|
403 |
Â
|
app/Common/Sitemap/Html/Sitemap.php
CHANGED
@@ -99,12 +99,6 @@ namespace AIOSEO\Plugin\Common\Sitemap\Html {
|
|
99 |
Â
}
|
100 |
Â
|
101 |
Â
$sitemapUrl = trim( $sitemapUrl['path'], '/' );
|
102 |
-
|
103 |
-
$page = get_page_by_path( $sitemapUrl, OBJECT, aioseo()->helpers->getPublicPostTypes( true ) );
|
104 |
-
if ( is_object( $page ) ) {
|
105 |
-
return;
|
106 |
-
}
|
107 |
-
|
108 |
Â
if ( trim( $wp->request, '/' ) === $sitemapUrl ) {
|
109 |
Â
$this->isDedicatedPage = true;
|
110 |
Â
$this->generatePage();
|
99 |
Â
}
|
100 |
Â
|
101 |
Â
$sitemapUrl = trim( $sitemapUrl['path'], '/' );
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
102 |
Â
if ( trim( $wp->request, '/' ) === $sitemapUrl ) {
|
103 |
Â
$this->isDedicatedPage = true;
|
104 |
Â
$this->generatePage();
|
app/Common/Sitemap/Image.php
CHANGED
@@ -32,6 +32,11 @@ class Image {
|
|
32 |
Â
return;
|
33 |
Â
}
|
34 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
35 |
Â
add_action( $this->imageScanAction, [ $this, 'scanPosts' ] );
|
36 |
Â
|
37 |
Â
if ( wp_doing_ajax() || wp_doing_cron() ) {
|
32 |
Â
return;
|
33 |
Â
}
|
34 |
Â
|
35 |
+
// Don't schedule a scan if an importer is running.
|
36 |
+
if ( aioseo()->importExport->isImportRunning() ) {
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
Â
add_action( $this->imageScanAction, [ $this, 'scanPosts' ] );
|
41 |
Â
|
42 |
Â
if ( wp_doing_ajax() || wp_doing_cron() ) {
|
app/Common/Sitemap/Priority.php
CHANGED
@@ -85,6 +85,7 @@ class Priority {
|
|
85 |
Â
|
86 |
Â
if ( ! isset( self::$globalPriority[ $pageType . $objectType ] ) ) {
|
87 |
Â
$options = aioseo()->options->noConflict();
|
Â
|
|
88 |
Â
$pageTypeConditional = 'date' === $pageType ? 'archive' : $pageType;
|
89 |
Â
self::$globalPriority[ $pageType . $objectType ] = self::$advanced && $options->sitemap->general->advancedSettings->priority->has( $pageTypeConditional )
|
90 |
Â
? json_decode( $options->sitemap->general->advancedSettings->priority->$pageTypeConditional->priority )
|
@@ -102,8 +103,10 @@ class Priority {
|
|
102 |
Â
|
103 |
Â
if ( empty( self::$grouped[ $pageType . $objectType ] ) && self::$advanced ) {
|
104 |
Â
if ( ! isset( self::$objectTypePriority[ $pageType . $objectType ] ) ) {
|
105 |
-
|
106 |
-
|
Â
|
|
Â
|
|
107 |
Â
: false;
|
108 |
Â
}
|
109 |
Â
}
|
@@ -155,8 +158,10 @@ class Priority {
|
|
155 |
Â
|
156 |
Â
if ( empty( self::$grouped[ $pageType . $objectType ] ) && self::$advanced ) {
|
157 |
Â
if ( ! isset( self::$objectTypeFrequency[ $pageType . $objectType ] ) ) {
|
158 |
-
|
159 |
-
|
Â
|
|
Â
|
|
160 |
Â
: false;
|
161 |
Â
}
|
162 |
Â
}
|
85 |
Â
|
86 |
Â
if ( ! isset( self::$globalPriority[ $pageType . $objectType ] ) ) {
|
87 |
Â
$options = aioseo()->options->noConflict();
|
88 |
+
|
89 |
Â
$pageTypeConditional = 'date' === $pageType ? 'archive' : $pageType;
|
90 |
Â
self::$globalPriority[ $pageType . $objectType ] = self::$advanced && $options->sitemap->general->advancedSettings->priority->has( $pageTypeConditional )
|
91 |
Â
? json_decode( $options->sitemap->general->advancedSettings->priority->$pageTypeConditional->priority )
|
103 |
Â
|
104 |
Â
if ( empty( self::$grouped[ $pageType . $objectType ] ) && self::$advanced ) {
|
105 |
Â
if ( ! isset( self::$objectTypePriority[ $pageType . $objectType ] ) ) {
|
106 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
107 |
+
|
108 |
+
self::$objectTypePriority[ $pageType . $objectType ] = $dynamicOptions->sitemap->priority->has( $pageType ) && $dynamicOptions->sitemap->priority->$pageType->has( $objectType )
|
109 |
+
? json_decode( $dynamicOptions->sitemap->priority->$pageType->$objectType->priority )
|
110 |
Â
: false;
|
111 |
Â
}
|
112 |
Â
}
|
158 |
Â
|
159 |
Â
if ( empty( self::$grouped[ $pageType . $objectType ] ) && self::$advanced ) {
|
160 |
Â
if ( ! isset( self::$objectTypeFrequency[ $pageType . $objectType ] ) ) {
|
161 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
162 |
+
|
163 |
+
self::$objectTypeFrequency[ $pageType . $objectType ] = $dynamicOptions->sitemap->priority->has( $pageType ) && $dynamicOptions->sitemap->priority->$pageType->has( $objectType )
|
164 |
+
? json_decode( $dynamicOptions->sitemap->priority->$pageType->$objectType->frequency )
|
165 |
Â
: false;
|
166 |
Â
}
|
167 |
Â
}
|
app/Common/Sitemap/Query.php
CHANGED
@@ -1,6 +1,8 @@
|
|
1 |
Â
<?php
|
2 |
Â
namespace AIOSEO\Plugin\Common\Sitemap;
|
3 |
Â
|
Â
|
|
Â
|
|
4 |
Â
// Exit if accessed directly.
|
5 |
Â
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
Â
exit;
|
@@ -29,7 +31,7 @@ class Query {
|
|
29 |
Â
|
30 |
Â
if (
|
31 |
Â
empty( $includedPostTypes ) ||
|
32 |
-
( 'attachment' === $includedPostTypes && 'disabled' !== aioseo()->
|
33 |
Â
) {
|
34 |
Â
return [];
|
35 |
Â
}
|
@@ -101,8 +103,10 @@ class Query {
|
|
101 |
Â
$query->limit( aioseo()->sitemap->linksPerIndex, aioseo()->sitemap->offset );
|
102 |
Â
}
|
103 |
Â
|
104 |
-
$
|
105 |
-
|
Â
|
|
Â
|
|
106 |
Â
->result();
|
107 |
Â
|
108 |
Â
// Convert ID from string to int.
|
@@ -114,56 +118,44 @@ class Query {
|
|
114 |
Â
}
|
115 |
Â
|
116 |
Â
/**
|
117 |
-
* Filters the
|
118 |
Â
*
|
119 |
-
* @since 4.
|
120 |
Â
*
|
121 |
-
* @param
|
122 |
-
* @
|
Â
|
|
123 |
Â
*/
|
124 |
-
|
125 |
-
$
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
if ( 'product' !== $post->post_type && is_numeric( $post ) ) {
|
131 |
-
$remainingPosts[] = $post;
|
132 |
-
continue;
|
133 |
-
}
|
134 |
-
|
135 |
-
switch ( $post->post_type ) {
|
136 |
-
case 'product':
|
137 |
-
if ( ! $isWooCommerceActive || ! $excludeHiddenProducts || ! $this->isHiddenProduct( $post ) ) {
|
138 |
-
$remainingPosts[] = $post;
|
139 |
-
}
|
140 |
-
break;
|
141 |
-
case 'attachment':
|
142 |
-
if ( ! $this->isInvalidAttachment( $post ) ) {
|
143 |
-
$remainingPosts[] = $post;
|
144 |
-
}
|
145 |
-
break;
|
146 |
-
default:
|
147 |
-
$remainingPosts[] = $post;
|
148 |
-
break;
|
149 |
-
}
|
150 |
Â
}
|
151 |
-
|
152 |
-
return $remainingPosts;
|
153 |
Â
}
|
154 |
Â
|
155 |
Â
/**
|
156 |
-
*
|
157 |
Â
*
|
158 |
-
* @since 4.
|
159 |
Â
*
|
160 |
-
* @param
|
161 |
-
* @return
|
162 |
Â
*/
|
163 |
-
private function
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
164 |
Â
static $hiddenProductIds = null;
|
165 |
Â
if ( null === $hiddenProductIds ) {
|
166 |
-
$
|
Â
|
|
167 |
Â
->select( 'tr.object_id' )
|
168 |
Â
->join( 'term_taxonomy as tt', 'tr.term_taxonomy_id = tt.term_taxonomy_id' )
|
169 |
Â
->join( 'terms as t', 'tt.term_id = t.term_id' )
|
@@ -172,19 +164,44 @@ class Query {
|
|
172 |
Â
->result();
|
173 |
Â
|
174 |
Â
$hiddenProductIds = [];
|
175 |
-
if (
|
176 |
-
|
177 |
-
$hiddenProductIds[] = (int) $hiddenProduct->object_id;
|
178 |
-
}
|
179 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
180 |
Â
}
|
181 |
Â
|
182 |
-
$
|
183 |
-
|
184 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
185 |
Â
}
|
186 |
Â
|
187 |
-
return
|
188 |
Â
}
|
189 |
Â
|
190 |
Â
/**
|
1 |
Â
<?php
|
2 |
Â
namespace AIOSEO\Plugin\Common\Sitemap;
|
3 |
Â
|
4 |
+
use AIOSEO\Plugin\Common\Utils as CommonUtils;
|
5 |
+
|
6 |
Â
// Exit if accessed directly.
|
7 |
Â
if ( ! defined( 'ABSPATH' ) ) {
|
8 |
Â
exit;
|
31 |
Â
|
32 |
Â
if (
|
33 |
Â
empty( $includedPostTypes ) ||
|
34 |
+
( 'attachment' === $includedPostTypes && 'disabled' !== aioseo()->dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls )
|
35 |
Â
) {
|
36 |
Â
return [];
|
37 |
Â
}
|
103 |
Â
$query->limit( aioseo()->sitemap->linksPerIndex, aioseo()->sitemap->offset );
|
104 |
Â
}
|
105 |
Â
|
106 |
+
$query->orderBy( $orderBy );
|
107 |
+
$query = $this->filterPostQuery( $query, $postTypes );
|
108 |
+
|
109 |
+
$posts = $query->run()
|
110 |
Â
->result();
|
111 |
Â
|
112 |
Â
// Convert ID from string to int.
|
118 |
Â
}
|
119 |
Â
|
120 |
Â
/**
|
121 |
+
* Filters the post query.
|
122 |
Â
*
|
123 |
+
* @since 4.1.4
|
124 |
Â
*
|
125 |
+
* @param \AIOSEO\Plugin\Common\Utils\Database $query The query.
|
126 |
+
* @param string $postType The post type.
|
127 |
+
* @return \AIOSEO\Plugin\Common\Utils\Database The filtered query.
|
128 |
Â
*/
|
129 |
+
private function filterPostQuery( $query, $postType ) {
|
130 |
+
switch ( $postType ) {
|
131 |
+
case 'product':
|
132 |
+
return $this->excludeHiddenProducts( $query );
|
133 |
+
default:
|
134 |
+
break;
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
135 |
Â
}
|
136 |
+
return $query;
|
Â
|
|
137 |
Â
}
|
138 |
Â
|
139 |
Â
/**
|
140 |
+
* Adds a condition to the query to exclude hidden WooCommerce products.
|
141 |
Â
*
|
142 |
+
* @since 4.1.4
|
143 |
Â
*
|
144 |
+
* @param \AIOSEO\Plugin\Common\Utils\Database $query The query.
|
145 |
+
* @return \AIOSEO\Plugin\Common\Utils\Database The filtered query.
|
146 |
Â
*/
|
147 |
+
private function excludeHiddenProducts( $query ) {
|
148 |
+
if (
|
149 |
+
! aioseo()->helpers->isWooCommerceActive() ||
|
150 |
+
! apply_filters( 'aioseo_sitemap_woocommerce_exclude_hidden_products', true )
|
151 |
+
) {
|
152 |
+
return $query;
|
153 |
+
}
|
154 |
+
|
155 |
Â
static $hiddenProductIds = null;
|
156 |
Â
if ( null === $hiddenProductIds ) {
|
157 |
+
$tempDb = new CommonUtils\Database();
|
158 |
+
$hiddenProducts = $tempDb->start( 'term_relationships as tr' )
|
159 |
Â
->select( 'tr.object_id' )
|
160 |
Â
->join( 'term_taxonomy as tt', 'tr.term_taxonomy_id = tt.term_taxonomy_id' )
|
161 |
Â
->join( 'terms as t', 'tt.term_id = t.term_id' )
|
164 |
Â
->result();
|
165 |
Â
|
166 |
Â
$hiddenProductIds = [];
|
167 |
+
if ( empty( $hiddenProducts ) ) {
|
168 |
+
return $query;
|
Â
|
|
Â
|
|
169 |
Â
}
|
170 |
+
|
171 |
+
foreach ( $hiddenProducts as $hiddenProduct ) {
|
172 |
+
$hiddenProductIds[] = (int) $hiddenProduct->object_id;
|
173 |
+
}
|
174 |
+
$hiddenProductIds = esc_sql( implode( ', ', $hiddenProductIds ) );
|
175 |
Â
}
|
176 |
Â
|
177 |
+
$query->whereRaw( "p.ID NOT IN ( $hiddenProductIds )" );
|
178 |
+
return $query;
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Filters the queried posts.
|
183 |
+
*
|
184 |
+
* @since 4.0.0
|
185 |
+
*
|
186 |
+
* @param array $posts The posts.
|
187 |
+
* @return array $remainingPosts The remaining posts.
|
188 |
+
*/
|
189 |
+
public function filterPosts( $posts ) {
|
190 |
+
$remainingPosts = [];
|
191 |
+
foreach ( $posts as $post ) {
|
192 |
+
switch ( $post->post_type ) {
|
193 |
+
case 'attachment':
|
194 |
+
if ( ! $this->isInvalidAttachment( $post ) ) {
|
195 |
+
$remainingPosts[] = $post;
|
196 |
+
}
|
197 |
+
break;
|
198 |
+
default:
|
199 |
+
$remainingPosts[] = $post;
|
200 |
+
break;
|
201 |
+
}
|
202 |
Â
}
|
203 |
Â
|
204 |
+
return $remainingPosts;
|
205 |
Â
}
|
206 |
Â
|
207 |
Â
/**
|
app/Common/Sitemap/Root.php
CHANGED
@@ -70,10 +70,10 @@ class Root {
|
|
70 |
Â
|
71 |
Â
if (
|
72 |
Â
get_post_type_archive_link( $postType ) &&
|
73 |
-
aioseo()->
|
74 |
Â
(
|
75 |
-
aioseo()->
|
76 |
-
! aioseo()->
|
77 |
Â
)
|
78 |
Â
) {
|
79 |
Â
$hasPostArchive = true;
|
70 |
Â
|
71 |
Â
if (
|
72 |
Â
get_post_type_archive_link( $postType ) &&
|
73 |
+
aioseo()->dynamicOptions->noConflict()->searchAppearance->archives->has( $postType ) &&
|
74 |
Â
(
|
75 |
+
aioseo()->dynamicOptions->searchAppearance->archives->$postType->advanced->robotsMeta->default ||
|
76 |
+
! aioseo()->dynamicOptions->searchAppearance->archives->$postType->advanced->robotsMeta->noindex
|
77 |
Â
)
|
78 |
Â
) {
|
79 |
Â
$hasPostArchive = true;
|
app/Common/Social/Facebook.php
CHANGED
@@ -178,9 +178,9 @@ class Facebook {
|
|
178 |
Â
}
|
179 |
Â
|
180 |
Â
$postType = get_post_type();
|
181 |
-
$
|
182 |
-
$defaultObjectType = $
|
183 |
-
? $
|
184 |
Â
: '';
|
185 |
Â
|
186 |
Â
return ! empty( $defaultObjectType ) ? $defaultObjectType : 'article';
|
@@ -273,7 +273,7 @@ class Facebook {
|
|
273 |
Â
*/
|
274 |
Â
public function getPublishedTime() {
|
275 |
Â
$post = aioseo()->helpers->getPost();
|
276 |
-
return $post ?
|
277 |
Â
}
|
278 |
Â
|
279 |
Â
/**
|
@@ -285,7 +285,7 @@ class Facebook {
|
|
285 |
Â
*/
|
286 |
Â
public function getModifiedTime() {
|
287 |
Â
$post = aioseo()->helpers->getPost();
|
288 |
-
return $post ?
|
289 |
Â
}
|
290 |
Â
|
291 |
Â
|
@@ -331,14 +331,216 @@ class Facebook {
|
|
331 |
Â
}
|
332 |
Â
|
333 |
Â
if ( aioseo()->options->social->facebook->advanced->useCategoriesInTags ) {
|
334 |
-
$tags = array_merge( $tags, aioseo()->
|
335 |
Â
}
|
336 |
Â
|
337 |
Â
if ( aioseo()->options->social->facebook->advanced->usePostTagsInTags ) {
|
338 |
-
$tags = array_merge( $tags, aioseo()->
|
339 |
Â
}
|
340 |
Â
}
|
341 |
Â
|
342 |
Â
return aioseo()->meta->keywords->getUniqueKeywords( $tags, false );
|
343 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
344 |
Â
}
|
178 |
Â
}
|
179 |
Â
|
180 |
Â
$postType = get_post_type();
|
181 |
+
$dynamicOptions = aioseo()->dynamicOptions->noConflict();
|
182 |
+
$defaultObjectType = $dynamicOptions->social->facebook->general->postTypes->has( $postType )
|
183 |
+
? $dynamicOptions->social->facebook->general->postTypes->$postType->objectType
|
184 |
Â
: '';
|
185 |
Â
|
186 |
Â
return ! empty( $defaultObjectType ) ? $defaultObjectType : 'article';
|
273 |
Â
*/
|
274 |
Â
public function getPublishedTime() {
|
275 |
Â
$post = aioseo()->helpers->getPost();
|
276 |
+
return $post ? aioseo()->helpers->formatDateTime( $post->post_date_gmt ) : '';
|
277 |
Â
}
|
278 |
Â
|
279 |
Â
/**
|
285 |
Â
*/
|
286 |
Â
public function getModifiedTime() {
|
287 |
Â
$post = aioseo()->helpers->getPost();
|
288 |
+
return $post ? aioseo()->helpers->formatDateTime( $post->post_modified_gmt ) : '';
|
289 |
Â
}
|
290 |
Â
|
291 |
Â
|
331 |
Â
}
|
332 |
Â
|
333 |
Â
if ( aioseo()->options->social->facebook->advanced->useCategoriesInTags ) {
|
334 |
+
$tags = array_merge( $tags, aioseo()->helpers->getAllCategories( $post->ID ) );
|
335 |
Â
}
|
336 |
Â
|
337 |
Â
if ( aioseo()->options->social->facebook->advanced->usePostTagsInTags ) {
|
338 |
+
$tags = array_merge( $tags, aioseo()->helpers->getAllTags( $post->ID ) );
|
339 |
Â
}
|
340 |
Â
}
|
341 |
Â
|
342 |
Â
return aioseo()->meta->keywords->getUniqueKeywords( $tags, false );
|
343 |
Â
}
|
344 |
+
|
345 |
+
/**
|
346 |
+
* Retreive the locale.
|
347 |
+
*
|
348 |
+
* @since 4.1.4
|
349 |
+
*
|
350 |
+
* @return string The locale.
|
351 |
+
*/
|
352 |
+
public function getLocale() {
|
353 |
+
$locale = get_locale();
|
354 |
+
|
355 |
+
// These are the locales FB supports.
|
356 |
+
$validLocales = [
|
357 |
+
'af_ZA', // Afrikaans.
|
358 |
+
'ak_GH', // Akan.
|
359 |
+
'am_ET', // Amharic.
|
360 |
+
'ar_AR', // Arabic.
|
361 |
+
'as_IN', // Assamese.
|
362 |
+
'ay_BO', // Aymara.
|
363 |
+
'az_AZ', // Azerbaijani.
|
364 |
+
'be_BY', // Belarusian.
|
365 |
+
'bg_BG', // Bulgarian.
|
366 |
+
'bp_IN', // Bhojpuri.
|
367 |
+
'bn_IN', // Bengali.
|
368 |
+
'br_FR', // Breton.
|
369 |
+
'bs_BA', // Bosnian.
|
370 |
+
'ca_ES', // Catalan.
|
371 |
+
'cb_IQ', // Sorani Kurdish.
|
372 |
+
'ck_US', // Cherokee.
|
373 |
+
'co_FR', // Corsican.
|
374 |
+
'cs_CZ', // Czech.
|
375 |
+
'cx_PH', // Cebuano.
|
376 |
+
'cy_GB', // Welsh.
|
377 |
+
'da_DK', // Danish.
|
378 |
+
'de_DE', // German.
|
379 |
+
'el_GR', // Greek.
|
380 |
+
'en_GB', // English (UK).
|
381 |
+
'en_PI', // English (Pirate).
|
382 |
+
'en_UD', // English (Upside Down).
|
383 |
+
'en_US', // English (US).
|
384 |
+
'em_ZM',
|
385 |
+
'eo_EO', // Esperanto.
|
386 |
+
'es_ES', // Spanish (Spain).
|
387 |
+
'es_LA', // Spanish.
|
388 |
+
'es_MX', // Spanish (Mexico).
|
389 |
+
'et_EE', // Estonian.
|
390 |
+
'eu_ES', // Basque.
|
391 |
+
'fa_IR', // Persian.
|
392 |
+
'fb_LT', // Leet Speak.
|
393 |
+
'ff_NG', // Fulah.
|
394 |
+
'fi_FI', // Finnish.
|
395 |
+
'fo_FO', // Faroese.
|
396 |
+
'fr_CA', // French (Canada).
|
397 |
+
'fr_FR', // French (France).
|
398 |
+
'fy_NL', // Frisian.
|
399 |
+
'ga_IE', // Irish.
|
400 |
+
'gl_ES', // Galician.
|
401 |
+
'gn_PY', // Guarani.
|
402 |
+
'gu_IN', // Gujarati.
|
403 |
+
'gx_GR', // Classical Greek.
|
404 |
+
'ha_NG', // Hausa.
|
405 |
+
'he_IL', // Hebrew.
|
406 |
+
'hi_IN', // Hindi.
|
407 |
+
'hr_HR', // Croatian.
|
408 |
+
'hu_HU', // Hungarian.
|
409 |
+
'ht_HT', // Haitian Creole.
|
410 |
+
'hy_AM', // Armenian.
|
411 |
+
'id_ID', // Indonesian.
|
412 |
+
'ig_NG', // Igbo.
|
413 |
+
'is_IS', // Icelandic.
|
414 |
+
'it_IT', // Italian.
|
415 |
+
'ik_US',
|
416 |
+
'iu_CA',
|
417 |
+
'ja_JP', // Japanese.
|
418 |
+
'ja_KS', // Japanese (Kansai).
|
419 |
+
'jv_ID', // Javanese.
|
420 |
+
'ka_GE', // Georgian.
|
421 |
+
'kk_KZ', // Kazakh.
|
422 |
+
'km_KH', // Khmer.
|
423 |
+
'kn_IN', // Kannada.
|
424 |
+
'ko_KR', // Korean.
|
425 |
+
'ks_IN', // Kashmiri.
|
426 |
+
'ku_TR', // Kurdish (Kurmanji).
|
427 |
+
'ky_KG', // Kyrgyz.
|
428 |
+
'la_VA', // Latin.
|
429 |
+
'lg_UG', // Ganda.
|
430 |
+
'li_NL', // Limburgish.
|
431 |
+
'ln_CD', // Lingala.
|
432 |
+
'lo_LA', // Lao.
|
433 |
+
'lt_LT', // Lithuanian.
|
434 |
+
'lv_LV', // Latvian.
|
435 |
+
'mg_MG', // Malagasy.
|
436 |
+
'mi_NZ', // Maori.
|
437 |
+
'mk_MK', // Macedonian.
|
438 |
+
'ml_IN', // Malayalam.
|
439 |
+
'mn_MN', // Mongolian.
|
440 |
+
'mr_IN', // Marathi.
|
441 |
+
'ms_MY', // Malay.
|
442 |
+
'mt_MT', // Maltese.
|
443 |
+
'my_MM', // Burmese.
|
444 |
+
'nb_NO', // Norwegian (bokmal).
|
445 |
+
'nd_ZW', // Ndebele.
|
446 |
+
'ne_NP', // Nepali.
|
447 |
+
'nl_BE', // Dutch (Belgie).
|
448 |
+
'nl_NL', // Dutch.
|
449 |
+
'nn_NO', // Norwegian (nynorsk).
|
450 |
+
'nr_ZA', // Southern Ndebele.
|
451 |
+
'ns_ZA', // Northern Sotho.
|
452 |
+
'ny_MW', // Chewa.
|
453 |
+
'om_ET', // Oromo.
|
454 |
+
'or_IN', // Oriya.
|
455 |
+
'pa_IN', // Punjabi.
|
456 |
+
'pl_PL', // Polish.
|
457 |
+
'ps_AF', // Pashto.
|
458 |
+
'pt_BR', // Portuguese (Brazil).
|
459 |
+
'pt_PT', // Portuguese (Portugal).
|
460 |
+
'qc_GT', // Quiché.
|
461 |
+
'qu_PE', // Quechua.
|
462 |
+
'qr_GR',
|
463 |
+
'qz_MM', // Burmese (Zawgyi).
|
464 |
+
'rm_CH', // Romansh.
|
465 |
+
'ro_RO', // Romanian.
|
466 |
+
'ru_RU', // Russian.
|
467 |
+
'rw_RW', // Kinyarwanda.
|
468 |
+
'sa_IN', // Sanskrit.
|
469 |
+
'sc_IT', // Sardinian.
|
470 |
+
'se_NO', // Northern Sami.
|
471 |
+
'si_LK', // Sinhala.
|
472 |
+
'su_ID', // Sundanese.
|
473 |
+
'sk_SK', // Slovak.
|
474 |
+
'sl_SI', // Slovenian.
|
475 |
+
'sn_ZW', // Shona.
|
476 |
+
'so_SO', // Somali.
|
477 |
+
'sq_AL', // Albanian.
|
478 |
+
'sr_RS', // Serbian.
|
479 |
+
'ss_SZ', // Swazi.
|
480 |
+
'st_ZA', // Southern Sotho.
|
481 |
+
'sv_SE', // Swedish.
|
482 |
+
'sw_KE', // Swahili.
|
483 |
+
'sy_SY', // Syriac.
|
484 |
+
'sz_PL', // Silesian.
|
485 |
+
'ta_IN', // Tamil.
|
486 |
+
'te_IN', // Telugu.
|
487 |
+
'tg_TJ', // Tajik.
|
488 |
+
'th_TH', // Thai.
|
489 |
+
'tk_TM', // Turkmen.
|
490 |
+
'tl_PH', // Filipino.
|
491 |
+
'tl_ST', // Klingon.
|
492 |
+
'tn_BW', // Tswana.
|
493 |
+
'tr_TR', // Turkish.
|
494 |
+
'ts_ZA', // Tsonga.
|
495 |
+
'tt_RU', // Tatar.
|
496 |
+
'tz_MA', // Tamazight.
|
497 |
+
'uk_UA', // Ukrainian.
|
498 |
+
'ur_PK', // Urdu.
|
499 |
+
'uz_UZ', // Uzbek.
|
500 |
+
've_ZA', // Venda.
|
501 |
+
'vi_VN', // Vietnamese.
|
502 |
+
'wo_SN', // Wolof.
|
503 |
+
'xh_ZA', // Xhosa.
|
504 |
+
'yi_DE', // Yiddish.
|
505 |
+
'yo_NG', // Yoruba.
|
506 |
+
'zh_CN', // Simplified Chinese (China).
|
507 |
+
'zh_HK', // Traditional Chinese (Hong Kong).
|
508 |
+
'zh_TW', // Traditional Chinese (Taiwan).
|
509 |
+
'zu_ZA', // Zulu.
|
510 |
+
'zz_TR', // Zazaki.
|
511 |
+
];
|
512 |
+
|
513 |
+
// Catch some weird locales served out by WP that are not easily doubled up.
|
514 |
+
$fixLocales = [
|
515 |
+
'ca' => 'ca_ES',
|
516 |
+
'en' => 'en_US',
|
517 |
+
'el' => 'el_GR',
|
518 |
+
'et' => 'et_EE',
|
519 |
+
'ja' => 'ja_JP',
|
520 |
+
'sq' => 'sq_AL',
|
521 |
+
'uk' => 'uk_UA',
|
522 |
+
'vi' => 'vi_VN',
|
523 |
+
'zh' => 'zh_CN',
|
524 |
+
];
|
525 |
+
|
526 |
+
if ( isset( $fixLocales[ $locale ] ) ) {
|
527 |
+
$locale = $fixLocales[ $locale ];
|
528 |
+
}
|
529 |
+
|
530 |
+
// Convert locales like "es" to "es_ES", in case that works for the given locale (sometimes it does).
|
531 |
+
if ( 2 === strlen( $locale ) ) {
|
532 |
+
$locale = strtolower( $locale ) . '_' . strtoupper( $locale );
|
533 |
+
}
|
534 |
+
|
535 |
+
// Check to see if the locale is a valid FB one, if not, use en_US as a fallback.
|
536 |
+
if ( ! in_array( $locale, $validLocales, true ) ) {
|
537 |
+
$locale = strtolower( substr( $locale, 0, 2 ) ) . '_' . strtoupper( substr( $locale, 0, 2 ) );
|
538 |
+
|
539 |
+
if ( ! in_array( $locale, $validLocales, true ) ) {
|
540 |
+
$locale = 'en_US';
|
541 |
+
}
|
542 |
+
}
|
543 |
+
|
544 |
+
return apply_filters( 'aioseo_og_locale', $locale );
|
545 |
+
}
|
546 |
Â
}
|
app/Common/Social/Helpers.php
DELETED
@@ -1,55 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace AIOSEO\Plugin\Common\Social;
|
3 |
-
|
4 |
-
// Exit if accessed directly.
|
5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
-
exit;
|
7 |
-
}
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Contains helper methods specific to the Social Meta.
|
11 |
-
*
|
12 |
-
* @since 4.0.0
|
13 |
-
*/
|
14 |
-
class Helpers {
|
15 |
-
/**
|
16 |
-
* Returns all categories for a post.
|
17 |
-
*
|
18 |
-
* @since 4.0.0
|
19 |
-
*
|
20 |
-
* @param int $postId The post ID.
|
21 |
-
* @return array $names The category names.
|
22 |
-
*/
|
23 |
-
public function getAllCategories( $postId = 0 ) {
|
24 |
-
$names = [];
|
25 |
-
$categories = get_the_category( $postId );
|
26 |
-
if ( $categories && count( $categories ) ) {
|
27 |
-
foreach ( $categories as $category ) {
|
28 |
-
$names[] = aioseo()->helpers->internationalize( $category->cat_name );
|
29 |
-
}
|
30 |
-
}
|
31 |
-
return $names;
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Returns all tags for a post.
|
36 |
-
*
|
37 |
-
* @since 4.0.0
|
38 |
-
*
|
39 |
-
* @param int $postId The post ID.
|
40 |
-
* @return array $names The tag names.
|
41 |
-
*/
|
42 |
-
public function getAllTags( $postId = 0 ) {
|
43 |
-
$names = [];
|
44 |
-
|
45 |
-
$tags = get_the_tags( $postId );
|
46 |
-
if ( ! empty( $tags ) && ! is_wp_error( $tags ) ) {
|
47 |
-
foreach ( $tags as $tag ) {
|
48 |
-
if ( ! empty( $tag->name ) ) {
|
49 |
-
$names[] = aioseo()->helpers->internationalize( $tag->name );
|
50 |
-
}
|
51 |
-
}
|
52 |
-
}
|
53 |
-
return $names;
|
54 |
-
}
|
55 |
-
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
app/Common/Social/Output.php
CHANGED
@@ -46,6 +46,7 @@ class Output {
|
|
46 |
Â
}
|
47 |
Â
|
48 |
Â
$meta = [
|
Â
|
|
49 |
Â
'og:site_name' => aioseo()->helpers->encodeOutputHtml( aioseo()->social->facebook->getSiteName() ),
|
50 |
Â
'og:type' => aioseo()->social->facebook->getObjectType(),
|
51 |
Â
'og:title' => aioseo()->helpers->encodeOutputHtml( aioseo()->social->facebook->getTitle() ),
|
46 |
Â
}
|
47 |
Â
|
48 |
Â
$meta = [
|
49 |
+
'og:locale' => aioseo()->social->facebook->getLocale(),
|
50 |
Â
'og:site_name' => aioseo()->helpers->encodeOutputHtml( aioseo()->social->facebook->getSiteName() ),
|
51 |
Â
'og:type' => aioseo()->social->facebook->getObjectType(),
|
52 |
Â
'og:title' => aioseo()->helpers->encodeOutputHtml( aioseo()->social->facebook->getTitle() ),
|
app/Common/Social/Social.php
CHANGED
@@ -30,7 +30,6 @@ class Social {
|
|
30 |
Â
$this->facebook = new Facebook();
|
31 |
Â
$this->twitter = new Twitter();
|
32 |
Â
$this->output = new Output();
|
33 |
-
$this->helpers = new Helpers();
|
34 |
Â
|
35 |
Â
$this->hooks();
|
36 |
Â
}
|
30 |
Â
$this->facebook = new Facebook();
|
31 |
Â
$this->twitter = new Twitter();
|
32 |
Â
$this->output = new Output();
|
Â
|
|
33 |
Â
|
34 |
Â
$this->hooks();
|
35 |
Â
}
|
app/Common/Social/Twitter.php
CHANGED
@@ -58,7 +58,8 @@ class Twitter {
|
|
58 |
Â
$post = aioseo()->helpers->getPost();
|
59 |
Â
if ( $post && aioseo()->options->social->twitter->general->showAuthor ) {
|
60 |
Â
$twitterUser = get_the_author_meta( 'aioseo_twitter', $post->post_author );
|
61 |
-
$author = aioseo()->social->twitter->
|
Â
|
|
62 |
Â
}
|
63 |
Â
return $author;
|
64 |
Â
}
|
@@ -224,7 +225,7 @@ class Twitter {
|
|
224 |
Â
}
|
225 |
Â
|
226 |
Â
if ( ! empty( $post->post_content ) ) {
|
227 |
-
$minutes =
|
228 |
Â
if ( ! empty( $minutes ) ) {
|
229 |
Â
$data[] = [
|
230 |
Â
'label' => __( 'Est. reading time', 'all-in-one-seo-pack' ),
|
@@ -236,4 +237,18 @@ class Twitter {
|
|
236 |
Â
|
237 |
Â
return $data;
|
238 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
239 |
Â
}
|
58 |
Â
$post = aioseo()->helpers->getPost();
|
59 |
Â
if ( $post && aioseo()->options->social->twitter->general->showAuthor ) {
|
60 |
Â
$twitterUser = get_the_author_meta( 'aioseo_twitter', $post->post_author );
|
61 |
+
$author = $twitterUser ? $twitterUser : aioseo()->social->twitter->getTwitterUrl();
|
62 |
+
$author = aioseo()->social->twitter->prepareUsername( $author );
|
63 |
Â
}
|
64 |
Â
return $author;
|
65 |
Â
}
|
225 |
Â
}
|
226 |
Â
|
227 |
Â
if ( ! empty( $post->post_content ) ) {
|
228 |
+
$minutes = $this->getReadingTime( $post->post_content );
|
229 |
Â
if ( ! empty( $minutes ) ) {
|
230 |
Â
$data[] = [
|
231 |
Â
'label' => __( 'Est. reading time', 'all-in-one-seo-pack' ),
|
237 |
Â
|
238 |
Â
return $data;
|
239 |
Â
}
|
240 |
+
|
241 |
+
/**
|
242 |
+
* Returns the estimated reading time for a string.
|
243 |
+
*
|
244 |
+
* @since 4.0.0
|
245 |
+
*
|
246 |
+
* @param string $string The string to count.
|
247 |
+
* @return integer The estimated reading time as an integer.
|
248 |
+
*/
|
249 |
+
private function getReadingTime( $string ) {
|
250 |
+
$wpm = 200;
|
251 |
+
$word = str_word_count( wp_strip_all_tags( $string ) );
|
252 |
+
return round( $word / $wpm );
|
253 |
+
}
|
254 |
Â
}
|
app/Common/Tools/Htaccess.php
CHANGED
@@ -38,7 +38,8 @@ class Htaccess {
|
|
38 |
Â
return false;
|
39 |
Â
}
|
40 |
Â
|
41 |
-
|
Â
|
|
42 |
Â
}
|
43 |
Â
|
44 |
Â
/**
|
38 |
Â
return false;
|
39 |
Â
}
|
40 |
Â
|
41 |
+
$contents = @$wpfs->get_contents( $this->path );
|
42 |
+
return aioseo()->helpers->encodeOutputHtml( $contents );
|
43 |
Â
}
|
44 |
Â
|
45 |
Â
/**
|
app/Common/Tools/RobotsTxt.php
CHANGED
@@ -240,7 +240,7 @@ class RobotsTxt {
|
|
240 |
Â
* @param array $lines The lines to extract from.
|
241 |
Â
* @return array An array of extracted rules.
|
242 |
Â
*/
|
243 |
-
|
244 |
Â
$rules = [];
|
245 |
Â
$userAgent = null;
|
246 |
Â
foreach ( $lines as $line ) {
|
@@ -388,6 +388,20 @@ class RobotsTxt {
|
|
388 |
Â
$currentRules = $this->parseRules( aioseo()->options->tools->robots->rules );
|
389 |
Â
$allRules = $this->mergeRules( $currentRules, $allRules, false, true );
|
390 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
391 |
Â
$robots = [];
|
392 |
Â
foreach ( $allRules as $userAgent => $rules ) {
|
393 |
Â
if ( empty( $userAgent ) ) {
|
@@ -416,9 +430,7 @@ class RobotsTxt {
|
|
416 |
Â
}
|
417 |
Â
}
|
418 |
Â
|
419 |
-
|
420 |
-
|
421 |
-
return true;
|
422 |
Â
}
|
423 |
Â
|
424 |
Â
/**
|
240 |
Â
* @param array $lines The lines to extract from.
|
241 |
Â
* @return array An array of extracted rules.
|
242 |
Â
*/
|
243 |
+
public function extractRules( $lines ) {
|
244 |
Â
$rules = [];
|
245 |
Â
$userAgent = null;
|
246 |
Â
foreach ( $lines as $line ) {
|
388 |
Â
$currentRules = $this->parseRules( aioseo()->options->tools->robots->rules );
|
389 |
Â
$allRules = $this->mergeRules( $currentRules, $allRules, false, true );
|
390 |
Â
|
391 |
+
aioseo()->options->tools->robots->rules = aioseo()->robotsTxt->prepareRobotsTxt( $allRules );
|
392 |
+
|
393 |
+
return true;
|
394 |
+
}
|
395 |
+
|
396 |
+
/**
|
397 |
+
* Prepare robots.txt rules to save.
|
398 |
+
*
|
399 |
+
* @since 4.1.4
|
400 |
+
*
|
401 |
+
* @param array $allRules Array with the rules.
|
402 |
+
* @return array The prepared rules array.
|
403 |
+
*/
|
404 |
+
public function prepareRobotsTxt( $allRules = [] ) {
|
405 |
Â
$robots = [];
|
406 |
Â
foreach ( $allRules as $userAgent => $rules ) {
|
407 |
Â
if ( empty( $userAgent ) ) {
|
430 |
Â
}
|
431 |
Â
}
|
432 |
Â
|
433 |
+
return $robots;
|
Â
|
|
Â
|
|
434 |
Â
}
|
435 |
Â
|
436 |
Â
/**
|
app/Common/Traits/Helpers/ActionScheduler.php
CHANGED
@@ -49,4 +49,16 @@ trait ActionScheduler {
|
|
49 |
Â
]);
|
50 |
Â
return ! empty( $actions );
|
51 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
52 |
Â
}
|
49 |
Â
]);
|
50 |
Â
return ! empty( $actions );
|
51 |
Â
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Unschedule an action.
|
55 |
+
*
|
56 |
+
* @since 4.1.4
|
57 |
+
*
|
58 |
+
* @param string $actionName The action name to unschedule.
|
59 |
+
* @return void
|
60 |
+
*/
|
61 |
+
public function unscheduleAction( $actionName ) {
|
62 |
+
as_unschedule_action( $actionName, [], 'aioseo' );
|
63 |
+
}
|
64 |
Â
}
|
app/Common/Traits/Helpers/Arrays.php
ADDED
@@ -0,0 +1,85 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Contains array specific helper methods.
|
11 |
+
*
|
12 |
+
* @since 4.1.4
|
13 |
+
*/
|
14 |
+
trait Arrays {
|
15 |
+
/**
|
16 |
+
* Unsets a given value in a given array.
|
17 |
+
* This should only be used if the given value only appears once in the array.
|
18 |
+
*
|
19 |
+
* @since 4.0.0
|
20 |
+
*
|
21 |
+
* @param array $array The array.
|
22 |
+
* @param string $value The value that needs to be removed from the array.
|
23 |
+
* @return array $array The filtered array.
|
24 |
+
*/
|
25 |
+
public function unsetValue( $array, $value ) {
|
26 |
+
if ( in_array( $value, $array, true ) ) {
|
27 |
+
unset( $array[ array_search( $value, $array, true ) ] );
|
28 |
+
};
|
29 |
+
return $array;
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Compares two multidimensional arrays to see if they're different.
|
34 |
+
*
|
35 |
+
* @since 4.0.0
|
36 |
+
*
|
37 |
+
* @param array $array1 The first array.
|
38 |
+
* @param array $array2 The second array.
|
39 |
+
* @return boolean Whether the arrays are different.
|
40 |
+
*/
|
41 |
+
public function arraysDifferent( $array1, $array2 ) {
|
42 |
+
foreach ( $array1 as $key => $value ) {
|
43 |
+
// Check for non-existing values.
|
44 |
+
if ( ! isset( $array2[ $key ] ) ) {
|
45 |
+
return true;
|
46 |
+
}
|
47 |
+
if ( is_array( $value ) ) {
|
48 |
+
if ( $this->arraysDifferent( $value, $array2[ $key ] ) ) {
|
49 |
+
return true;
|
50 |
+
};
|
51 |
+
} else {
|
52 |
+
if ( $value !== $array2[ $key ] ) {
|
53 |
+
return true;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
57 |
+
return false;
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Checks whether the given array is associative.
|
62 |
+
* Arrays that only have consecutive, sequential numeric keys are numeric.
|
63 |
+
* Otherwise they are associative.
|
64 |
+
*
|
65 |
+
* @since 4.1.4
|
66 |
+
*
|
67 |
+
* @param array $array The array.
|
68 |
+
* @return bool Whether the array is associative.
|
69 |
+
*/
|
70 |
+
public function isArrayAssociative( $array ) {
|
71 |
+
return 0 < count( array_filter( array_keys( $array ), 'is_string' ) );
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Checks whether the given array is numeric.
|
76 |
+
*
|
77 |
+
* @since 4.1.4
|
78 |
+
*
|
79 |
+
* @param array $array The array.
|
80 |
+
* @return bool Whether the array is numeric.
|
81 |
+
*/
|
82 |
+
public function isArrayNumeric( $array ) {
|
83 |
+
return ! $this->isArrayAssociative( $array );
|
84 |
+
}
|
85 |
+
}
|
app/Common/Traits/Helpers/Constants.php
CHANGED
@@ -8,6 +8,20 @@ namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
|
8 |
Â
* @since 4.0.17
|
9 |
Â
*/
|
10 |
Â
trait Constants {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
11 |
Â
/**
|
12 |
Â
* Returns the country name by code.
|
13 |
Â
*
|
@@ -21,7 +35,7 @@ trait Constants {
|
|
21 |
Â
}
|
22 |
Â
|
23 |
Â
/**
|
24 |
-
*
|
25 |
Â
*
|
26 |
Â
* @since 4.0.17
|
27 |
Â
*
|
8 |
Â
* @since 4.0.17
|
9 |
Â
*/
|
10 |
Â
trait Constants {
|
11 |
+
/**
|
12 |
+
* Returns the All in One SEO Logo
|
13 |
+
*
|
14 |
+
* @since 4.0.0
|
15 |
+
*
|
16 |
+
* @param string $width The width of the image.
|
17 |
+
* @param string $height The height of the image.
|
18 |
+
* @param string $colorCode The color of the image.
|
19 |
+
* @return string The logo as a string.
|
20 |
+
*/
|
21 |
+
public function logo( $width, $height, $colorCode ) {
|
22 |
+
return '<svg viewBox="0 0 20 20" width="' . $width . '" height="' . $height . '" fill="none" xmlns="http://www.w3.org/2000/svg" class="aioseo-gear"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.98542 19.9708C15.5002 19.9708 19.9708 15.5002 19.9708 9.98542C19.9708 4.47063 15.5002 0 9.98542 0C4.47063 0 0 4.47063 0 9.98542C0 15.5002 4.47063 19.9708 9.98542 19.9708ZM8.39541 3.65464C8.26016 3.4485 8.0096 3.35211 7.77985 3.43327C7.51816 3.52572 7.26218 3.63445 7.01349 3.7588C6.79519 3.86796 6.68566 4.11731 6.73372 4.36049L6.90493 5.22694C6.949 5.44996 6.858 5.6763 6.68522 5.82009C6.41216 6.04734 6.16007 6.30426 5.93421 6.58864C5.79383 6.76539 5.57233 6.85907 5.35361 6.81489L4.50424 6.6433C4.26564 6.5951 4.02157 6.70788 3.91544 6.93121C3.85549 7.05738 3.79889 7.1862 3.74583 7.31758C3.69276 7.44896 3.64397 7.58105 3.59938 7.71369C3.52048 7.94847 3.61579 8.20398 3.81839 8.34133L4.53958 8.83027C4.72529 8.95617 4.81778 9.1819 4.79534 9.40826C4.75925 9.77244 4.76072 10.136 4.79756 10.4936C4.82087 10.7198 4.72915 10.9459 4.54388 11.0724L3.82408 11.5642C3.62205 11.7022 3.52759 11.9579 3.60713 12.1923C3.69774 12.4593 3.8043 12.7205 3.92615 12.9743C4.03313 13.1971 4.27749 13.3088 4.51581 13.2598L5.36495 13.0851C5.5835 13.0401 5.80533 13.133 5.94623 13.3093C6.16893 13.5879 6.42071 13.8451 6.6994 14.0756C6.87261 14.2188 6.96442 14.4448 6.92112 14.668L6.75296 15.5348C6.70572 15.7782 6.81625 16.0273 7.03511 16.1356C7.15876 16.1967 7.285 16.2545 7.41375 16.3086C7.54251 16.3628 7.67196 16.4126 7.80195 16.4581C8.18224 16.5912 8.71449 16.1147 9.108 15.7625C9.30205 15.5888 9.42174 15.343 9.42301 15.0798C9.42301 15.0784 9.42302 15.077 9.42302 15.0756L9.42301 13.6263C9.42301 13.6109 9.4236 13.5957 9.42476 13.5806C8.26248 13.2971 7.39838 12.2301 7.39838 10.9572V9.41823C7.39838 9.30125 7.49131 9.20642 7.60596 9.20642H8.32584V7.6922C8.32584 7.48312 8.49193 7.31364 8.69683 7.31364C8.90171 7.31364 9.06781 7.48312 9.06781 7.6922V9.20642H11.0155V7.6922C11.0155 7.48312 11.1816 7.31364 11.3865 7.31364C11.5914 7.31364 11.7575 7.48312 11.7575 7.6922V9.20642H12.4773C12.592 9.20642 12.6849 9.30125 12.6849 9.41823V10.9572C12.6849 12.2704 11.7653 13.3643 10.5474 13.6051C10.5477 13.6121 10.5478 13.6192 10.5478 13.6263L10.5478 15.0694C10.5478 15.3377 10.6711 15.5879 10.871 15.7622C11.2715 16.1115 11.8129 16.5837 12.191 16.4502C12.4527 16.3577 12.7086 16.249 12.9573 16.1246C13.1756 16.0155 13.2852 15.7661 13.2371 15.5229L13.0659 14.6565C13.0218 14.4334 13.1128 14.2071 13.2856 14.0633C13.5587 13.8361 13.8107 13.5792 14.0366 13.2948C14.177 13.118 14.3985 13.0244 14.6172 13.0685L15.4666 13.2401C15.7052 13.2883 15.9493 13.1756 16.0554 12.9522C16.1153 12.8261 16.1719 12.6972 16.225 12.5659C16.2781 12.4345 16.3269 12.3024 16.3714 12.1698C16.4503 11.935 16.355 11.6795 16.1524 11.5421L15.4312 11.0532C15.2455 10.9273 15.153 10.7015 15.1755 10.4752C15.2116 10.111 15.2101 9.74744 15.1733 9.38986C15.1499 9.16361 15.2417 8.93757 15.4269 8.811L16.1467 8.31927C16.3488 8.18126 16.4432 7.92558 16.3637 7.69115C16.2731 7.42411 16.1665 7.16292 16.0447 6.90915C15.9377 6.68638 15.6933 6.57462 15.455 6.62366L14.6059 6.79837C14.3873 6.84334 14.1655 6.75048 14.0246 6.57418C13.8019 6.29554 13.5501 6.03832 13.2714 5.80784C13.0982 5.6646 13.0064 5.43858 13.0497 5.2154L13.2179 4.34868C13.2651 4.10521 13.1546 3.85616 12.9357 3.74787C12.8121 3.68669 12.6858 3.62895 12.5571 3.5748C12.4283 3.52065 12.2989 3.47086 12.1689 3.42537C11.9388 3.34485 11.6884 3.44211 11.5538 3.64884L11.0746 4.38475C10.9513 4.57425 10.73 4.66862 10.5082 4.64573C10.1513 4.6089 9.79502 4.61039 9.44459 4.64799C9.22286 4.67177 9.00134 4.57818 8.87731 4.38913L8.39541 3.65464Z" fill="' . $colorCode . '" /></svg>'; // phpcs:ignore Generic.Files.LineLength.MaxExceeded
|
23 |
+
}
|
24 |
+
|
25 |
Â
/**
|
26 |
Â
* Returns the country name by code.
|
27 |
Â
*
|
35 |
Â
}
|
36 |
Â
|
37 |
Â
/**
|
38 |
+
* Returns a list of countries.
|
39 |
Â
*
|
40 |
Â
* @since 4.0.17
|
41 |
Â
*
|
app/Common/Traits/Helpers/DateTime.php
CHANGED
@@ -12,6 +12,43 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
12 |
Â
* @since 4.1.2
|
13 |
Â
*/
|
14 |
Â
trait DateTime {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
15 |
Â
/**
|
16 |
Â
* Formats a date in ISO8601 format.
|
17 |
Â
*
|
12 |
Â
* @since 4.1.2
|
13 |
Â
*/
|
14 |
Â
trait DateTime {
|
15 |
+
/**
|
16 |
+
* Formats a timestamp as an ISO 8601 date.
|
17 |
+
*
|
18 |
+
* @since 4.0.0
|
19 |
+
*
|
20 |
+
* @param string $dateTime The raw datetime.
|
21 |
+
* @return string The formatted datetime.
|
22 |
+
*/
|
23 |
+
public function formatDateTime( $dateTime ) {
|
24 |
+
return gmdate( 'c', mysql2date( 'U', $dateTime ) );
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Returns the timezone offset.
|
29 |
+
* We use the code from wp_timezone_string() which became available in WP 5.3+
|
30 |
+
*
|
31 |
+
* @since 4.0.0
|
32 |
+
*
|
33 |
+
* @return string The timezone offset.
|
34 |
+
*/
|
35 |
+
public function getTimeZoneOffset() {
|
36 |
+
$timezoneString = get_option( 'timezone_string' );
|
37 |
+
if ( $timezoneString ) {
|
38 |
+
return $timezoneString;
|
39 |
+
}
|
40 |
+
|
41 |
+
$offset = (float) get_option( 'gmt_offset' );
|
42 |
+
$hours = (int) $offset;
|
43 |
+
$minutes = ( $offset - $hours );
|
44 |
+
$sign = ( $offset < 0 ) ? '-' : '+';
|
45 |
+
$absHour = abs( $hours );
|
46 |
+
$absMins = abs( $minutes * 60 );
|
47 |
+
$tzOffset = sprintf( '%s%02d:%02d', $sign, $absHour, $absMins );
|
48 |
+
|
49 |
+
return $tzOffset;
|
50 |
+
}
|
51 |
+
|
52 |
Â
/**
|
53 |
Â
* Formats a date in ISO8601 format.
|
54 |
Â
*
|
app/Common/Traits/Helpers/ECommerce.php
DELETED
@@ -1,109 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
-
|
4 |
-
// Exit if accessed directly.
|
5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
-
exit;
|
7 |
-
}
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Contains helper functions for eCommerce plugins.
|
11 |
-
*
|
12 |
-
* @since 4.1.3
|
13 |
-
*/
|
14 |
-
trait ECommerce {
|
15 |
-
/**
|
16 |
-
* Checks whether WooCommerce is active.
|
17 |
-
*
|
18 |
-
* @since 4.0.0
|
19 |
-
*
|
20 |
-
* @return boolean Whether WooCommerce is active.
|
21 |
-
*/
|
22 |
-
public function isWooCommerceActive() {
|
23 |
-
return class_exists( 'woocommerce' );
|
24 |
-
}
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Checks whether the queried object is the WooCommerce shop page.
|
28 |
-
*
|
29 |
-
* @since 4.0.0
|
30 |
-
*
|
31 |
-
* @param int $id The post ID to check against (optional).
|
32 |
-
* @return bool Whether the current page is the WooCommerce shop page.
|
33 |
-
*/
|
34 |
-
public function isWooCommerceShopPage( $id = 0 ) {
|
35 |
-
if ( ! $this->isWooCommerceActive() ) {
|
36 |
-
return false;
|
37 |
-
}
|
38 |
-
|
39 |
-
if ( ! is_admin() && ! aioseo()->helpers->isAjaxCronRest() && function_exists( 'is_shop' ) ) {
|
40 |
-
return is_shop();
|
41 |
-
}
|
42 |
-
|
43 |
-
$id = ! $id && ! empty( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : (int) $id; // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
44 |
-
return $id && wc_get_page_id( 'shop' ) === $id;
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Checks whether the queried object is the WooCommerce cart page.
|
49 |
-
*
|
50 |
-
* @since 4.1.3
|
51 |
-
*
|
52 |
-
* @param int $id The post ID to check against (optional).
|
53 |
-
* @return bool Whether the current page is the WooCommerce cart page.
|
54 |
-
*/
|
55 |
-
public function isWooCommerceCartPage( $id = 0 ) {
|
56 |
-
if ( ! $this->isWooCommerceActive() ) {
|
57 |
-
return false;
|
58 |
-
}
|
59 |
-
|
60 |
-
if ( ! is_admin() && ! aioseo()->helpers->isAjaxCronRest() && function_exists( 'is_cart' ) ) {
|
61 |
-
return is_cart();
|
62 |
-
}
|
63 |
-
|
64 |
-
$id = ! $id && ! empty( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : (int) $id; // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
65 |
-
return $id && wc_get_page_id( 'cart' ) === $id;
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Checks whether the queried object is the WooCommerce checkout page.
|
70 |
-
*
|
71 |
-
* @since 4.1.3
|
72 |
-
*
|
73 |
-
* @param int $id The post ID to check against (optional).
|
74 |
-
* @return bool Whether the current page is the WooCommerce checkout page.
|
75 |
-
*/
|
76 |
-
public function isWooCommerceCheckoutPage( $id = 0 ) {
|
77 |
-
if ( ! $this->isWooCommerceActive() ) {
|
78 |
-
return false;
|
79 |
-
}
|
80 |
-
|
81 |
-
if ( ! is_admin() && ! aioseo()->helpers->isAjaxCronRest() && function_exists( 'is_checkout' ) ) {
|
82 |
-
return is_checkout();
|
83 |
-
}
|
84 |
-
|
85 |
-
$id = ! $id && ! empty( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : (int) $id; // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
86 |
-
return $id && wc_get_page_id( 'checkout' ) === $id;
|
87 |
-
}
|
88 |
-
|
89 |
-
/**
|
90 |
-
* Checks whether the queried object is the WooCommerce account page.
|
91 |
-
*
|
92 |
-
* @since 4.1.3
|
93 |
-
*
|
94 |
-
* @param int $id The post ID to check against (optional).
|
95 |
-
* @return bool Whether the current page is the WooCommerce account page.
|
96 |
-
*/
|
97 |
-
public function isWooCommerceAccountPage( $id = 0 ) {
|
98 |
-
if ( ! $this->isWooCommerceActive() ) {
|
99 |
-
return false;
|
100 |
-
}
|
101 |
-
|
102 |
-
if ( ! is_admin() && ! aioseo()->helpers->isAjaxCronRest() && function_exists( 'is_account_page' ) ) {
|
103 |
-
return is_account_page();
|
104 |
-
}
|
105 |
-
|
106 |
-
$id = ! $id && ! empty( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : (int) $id; // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
107 |
-
return $id && wc_get_page_id( 'myaccount' ) === $id;
|
108 |
-
}
|
109 |
-
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
app/Common/Traits/Helpers/Language.php
ADDED
@@ -0,0 +1,40 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Contains i18n and language (code) helper methods.
|
11 |
+
*
|
12 |
+
* @since 4.1.4
|
13 |
+
*/
|
14 |
+
trait Language {
|
15 |
+
/**
|
16 |
+
* Returns the language of the current response.
|
17 |
+
*
|
18 |
+
* @since 4.1.4
|
19 |
+
*
|
20 |
+
* @return string The language code.
|
21 |
+
*/
|
22 |
+
public function currentLanguageCode() {
|
23 |
+
global $wp_version;
|
24 |
+
if ( version_compare( $wp_version, '5.0', '<' ) ) {
|
25 |
+
return get_locale();
|
26 |
+
}
|
27 |
+
return determine_locale();
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Returns the language of the current response in BCP 47 format.
|
32 |
+
*
|
33 |
+
* @since 4.1.4
|
34 |
+
*
|
35 |
+
* @return string The language code in BCP 47 format.
|
36 |
+
*/
|
37 |
+
public function currentLanguageCodeBCP47() {
|
38 |
+
return str_replace( '_', '-', $this->currentLanguageCode() );
|
39 |
+
}
|
40 |
+
}
|
app/Common/Traits/Helpers/Strings.php
CHANGED
@@ -37,6 +37,7 @@ trait Strings {
|
|
37 |
Â
* @return string The converted string.
|
38 |
Â
*/
|
39 |
Â
public function toCamelCase( $string, $capitalize = false ) {
|
Â
|
|
40 |
Â
if ( $capitalize ) {
|
41 |
Â
$string[0] = strtoupper( $string[0] );
|
42 |
Â
}
|
@@ -62,6 +63,71 @@ trait Strings {
|
|
62 |
Â
return $string;
|
63 |
Â
}
|
64 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
65 |
Â
/**
|
66 |
Â
* Returns string after converting it to lowercase.
|
67 |
Â
*
|
@@ -101,10 +167,65 @@ trait Strings {
|
|
101 |
Â
return false;
|
102 |
Â
}
|
103 |
Â
|
104 |
-
// Decode the string.
|
105 |
Â
json_decode( $string );
|
106 |
Â
|
107 |
Â
// Return a boolean whether or not the last error matches.
|
108 |
Â
return json_last_error() === JSON_ERROR_NONE;
|
109 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
110 |
Â
}
|
37 |
Â
* @return string The converted string.
|
38 |
Â
*/
|
39 |
Â
public function toCamelCase( $string, $capitalize = false ) {
|
40 |
+
$string[0] = strtolower( $string[0] );
|
41 |
Â
if ( $capitalize ) {
|
42 |
Â
$string[0] = strtoupper( $string[0] );
|
43 |
Â
}
|
63 |
Â
return $string;
|
64 |
Â
}
|
65 |
Â
|
66 |
+
/**
|
67 |
+
* Truncates a given string.
|
68 |
+
*
|
69 |
+
* @since 4.0.0
|
70 |
+
*
|
71 |
+
* @param string $string The string.
|
72 |
+
* @param int $maxCharacters The max. amount of characters.
|
73 |
+
* @param boolean $shouldHaveEllipsis Whether the string should have a trailing ellipsis (defaults to true).
|
74 |
+
* @return string $string The string.
|
75 |
+
*/
|
76 |
+
public function truncate( $string, $maxCharacters, $shouldHaveEllipsis = true ) {
|
77 |
+
$length = strlen( $string );
|
78 |
+
$excessLength = $length - $maxCharacters;
|
79 |
+
if ( 0 < $excessLength ) {
|
80 |
+
// If the string is longer than 65535 characters, we first need to shorten it due to the character limit of the regex pattern quantifier.
|
81 |
+
if ( 65535 < $length ) {
|
82 |
+
$string = substr( $string, 0, 65534 );
|
83 |
+
}
|
84 |
+
$string = preg_replace( "#[^\pZ\pP]*.{{$excessLength}}$#", '', $string );
|
85 |
+
if ( $shouldHaveEllipsis ) {
|
86 |
+
$string = $string . ' ...';
|
87 |
+
}
|
88 |
+
}
|
89 |
+
return $string;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Escapes special regex characters.
|
94 |
+
*
|
95 |
+
* @since 4.0.5
|
96 |
+
*
|
97 |
+
* @param string $string The string.
|
98 |
+
* @return string The escaped string.
|
99 |
+
*/
|
100 |
+
public function escapeRegex( $string ) {
|
101 |
+
return preg_quote( $string, '/' );
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Escapes special regex characters inside the replacement string.
|
106 |
+
*
|
107 |
+
* @since 4.0.7
|
108 |
+
*
|
109 |
+
* @param string $string The string.
|
110 |
+
* @return string The escaped string.
|
111 |
+
*/
|
112 |
+
public function escapeRegexReplacement( $string ) {
|
113 |
+
return str_replace( '$', '\$', $string );
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* preg_replace but with the replacement escaped.
|
118 |
+
*
|
119 |
+
* @since 4.0.10
|
120 |
+
*
|
121 |
+
* @param string $pattern The pattern to search for.
|
122 |
+
* @param string $replacement The replacement string.
|
123 |
+
* @param string $subject The subject to search in.
|
124 |
+
* @return string The subject with matches replaced.
|
125 |
+
*/
|
126 |
+
public function pregReplace( $pattern, $replacement, $subject ) {
|
127 |
+
$replacement = $this->escapeRegexReplacement( $replacement );
|
128 |
+
return preg_replace( $pattern, $replacement, $subject );
|
129 |
+
}
|
130 |
+
|
131 |
Â
/**
|
132 |
Â
* Returns string after converting it to lowercase.
|
133 |
Â
*
|
167 |
Â
return false;
|
168 |
Â
}
|
169 |
Â
|
Â
|
|
170 |
Â
json_decode( $string );
|
171 |
Â
|
172 |
Â
// Return a boolean whether or not the last error matches.
|
173 |
Â
return json_last_error() === JSON_ERROR_NONE;
|
174 |
Â
}
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Strips punctuation from a given string.
|
178 |
+
*
|
179 |
+
* @since 4.0.0
|
180 |
+
*
|
181 |
+
* @param string $string The string.
|
182 |
+
* @return string The string without punctuation.
|
183 |
+
*/
|
184 |
+
public function stripPunctuation( $string ) {
|
185 |
+
$string = preg_replace( '#\p{P}#u', '', $string );
|
186 |
+
// Trim both internal and external whitespace.
|
187 |
+
return preg_replace( '/\s\s+/u', ' ', trim( $string ) );
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Returns the string after it is encoded with htmlspecialchars().
|
192 |
+
*
|
193 |
+
* @since 4.0.0
|
194 |
+
*
|
195 |
+
* @param string $string The string to encode.
|
196 |
+
* @return string The encoded string.
|
197 |
+
*/
|
198 |
+
public function encodeOutputHtml( $string ) {
|
199 |
+
return htmlspecialchars( $string, ENT_COMPAT | ENT_HTML401, get_option( 'blog_charset' ), false );
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* Returns the string after all HTML entities have been decoded.
|
204 |
+
*
|
205 |
+
* @since 4.0.0
|
206 |
+
*
|
207 |
+
* @param string $string The string to decode.
|
208 |
+
* @return string The decoded string.
|
209 |
+
*/
|
210 |
+
public function decodeHtmlEntities( $string ) {
|
211 |
+
return html_entity_decode( (string) $string, ENT_QUOTES );
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* Returns the given JSON formatted data tags as a comma separated list with their values instead.
|
216 |
+
*
|
217 |
+
* @since 4.1.0
|
218 |
+
*
|
219 |
+
* @param string $tags The JSON formatted data tags.
|
220 |
+
* @return string The comma separated values.
|
221 |
+
*/
|
222 |
+
public function jsonTagsToCommaSeparatedList( $tags ) {
|
223 |
+
$tags = json_decode( $tags );
|
224 |
+
|
225 |
+
$values = [];
|
226 |
+
foreach ( $tags as $k => $tag ) {
|
227 |
+
$values[ $k ] = $tag->value;
|
228 |
+
}
|
229 |
+
return implode( ',', $values );
|
230 |
+
}
|
231 |
Â
}
|
app/Common/Traits/Helpers/Svg.php
ADDED
@@ -0,0 +1,51 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Contains SVG specific helper methods.
|
11 |
+
*
|
12 |
+
* @since 4.1.4
|
13 |
+
*/
|
14 |
+
trait Svg {
|
15 |
+
/**
|
16 |
+
* Sanitizes a SVG string.
|
17 |
+
*
|
18 |
+
* @since 4.1.4
|
19 |
+
*
|
20 |
+
* @param string $svgString The SVG to check.
|
21 |
+
* @return string The sanitized SVG.
|
22 |
+
*/
|
23 |
+
public function escSvg( $svgString ) {
|
24 |
+
if ( ! is_string( $svgString ) ) {
|
25 |
+
return false;
|
26 |
+
}
|
27 |
+
|
28 |
+
$ksesDefaults = wp_kses_allowed_html( 'post' );
|
29 |
+
|
30 |
+
$svgArgs = [
|
31 |
+
'svg' => [
|
32 |
+
'class' => true,
|
33 |
+
'aria-hidden' => true,
|
34 |
+
'aria-labelledby' => true,
|
35 |
+
'role' => true,
|
36 |
+
'xmlns' => true,
|
37 |
+
'width' => true,
|
38 |
+
'height' => true,
|
39 |
+
'viewbox' => true, // <= Must be lower case!
|
40 |
+
],
|
41 |
+
'g' => [ 'fill' => true ],
|
42 |
+
'title' => [ 'title' => true ],
|
43 |
+
'path' => [
|
44 |
+
'd' => true,
|
45 |
+
'fill' => true,
|
46 |
+
]
|
47 |
+
];
|
48 |
+
|
49 |
+
return wp_kses( $svgString, array_merge( $ksesDefaults, $svgArgs ) );
|
50 |
+
}
|
51 |
+
}
|
app/Common/Traits/Helpers/ThirdParty.php
ADDED
@@ -0,0 +1,338 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Contains all third-party related helper methods.
|
11 |
+
*
|
12 |
+
* @since 4.1.4
|
13 |
+
*/
|
14 |
+
trait ThirdParty {
|
15 |
+
/**
|
16 |
+
* Checks whether WooCommerce is active.
|
17 |
+
*
|
18 |
+
* @since 4.0.0
|
19 |
+
*
|
20 |
+
* @return boolean Whether WooCommerce is active.
|
21 |
+
*/
|
22 |
+
public function isWooCommerceActive() {
|
23 |
+
return class_exists( 'woocommerce' );
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Returns if the page is a WooCommerce page (Cart, Checkout, ...).
|
28 |
+
*
|
29 |
+
* @since 4.0.0
|
30 |
+
*
|
31 |
+
* @param int $postId The post ID.
|
32 |
+
* @return boolean Whether the page is a WooCommerce page or not.
|
33 |
+
*/
|
34 |
+
public function isWooCommercePage( $postId = false ) {
|
35 |
+
if ( ! $this->isWooCommerceActive() ) {
|
36 |
+
return false;
|
37 |
+
}
|
38 |
+
|
39 |
+
static $cartPageId;
|
40 |
+
if ( ! $cartPageId ) {
|
41 |
+
$cartPageId = (int) get_option( 'woocommerce_cart_page_id' );
|
42 |
+
}
|
43 |
+
|
44 |
+
static $checkoutPageId;
|
45 |
+
if ( ! $checkoutPageId ) {
|
46 |
+
$checkoutPageId = (int) get_option( 'woocommerce_checkout_page_id' );
|
47 |
+
}
|
48 |
+
|
49 |
+
static $myAccountPageId;
|
50 |
+
if ( ! $myAccountPageId ) {
|
51 |
+
$myAccountPageId = (int) get_option( 'woocommerce_myaccount_page_id' );
|
52 |
+
}
|
53 |
+
|
54 |
+
static $termsPageId;
|
55 |
+
if ( ! $termsPageId ) {
|
56 |
+
$termsPageId = (int) get_option( 'woocommerce_terms_page_id' );
|
57 |
+
}
|
58 |
+
|
59 |
+
if (
|
60 |
+
$cartPageId === (int) $postId ||
|
61 |
+
$checkoutPageId === (int) $postId ||
|
62 |
+
$myAccountPageId === (int) $postId ||
|
63 |
+
$termsPageId === (int) $postId
|
64 |
+
) {
|
65 |
+
return true;
|
66 |
+
}
|
67 |
+
|
68 |
+
return false;
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Checks whether the queried object is the WooCommerce shop page.
|
73 |
+
*
|
74 |
+
* @since 4.0.0
|
75 |
+
*
|
76 |
+
* @param int $id The post ID to check against (optional).
|
77 |
+
* @return bool Whether the current page is the WooCommerce shop page.
|
78 |
+
*/
|
79 |
+
public function isWooCommerceShopPage( $id = 0 ) {
|
80 |
+
if ( ! $this->isWooCommerceActive() ) {
|
81 |
+
return false;
|
82 |
+
}
|
83 |
+
|
84 |
+
if ( ! is_admin() && ! aioseo()->helpers->isAjaxCronRest() && function_exists( 'is_shop' ) ) {
|
85 |
+
return is_shop();
|
86 |
+
}
|
87 |
+
|
88 |
+
$id = ! $id && ! empty( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : (int) $id; // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
89 |
+
return $id && wc_get_page_id( 'shop' ) === $id;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Checks whether the queried object is the WooCommerce cart page.
|
94 |
+
*
|
95 |
+
* @since 4.1.3
|
96 |
+
*
|
97 |
+
* @param int $id The post ID to check against (optional).
|
98 |
+
* @return bool Whether the current page is the WooCommerce cart page.
|
99 |
+
*/
|
100 |
+
public function isWooCommerceCartPage( $id = 0 ) {
|
101 |
+
if ( ! $this->isWooCommerceActive() ) {
|
102 |
+
return false;
|
103 |
+
}
|
104 |
+
|
105 |
+
if ( ! is_admin() && ! aioseo()->helpers->isAjaxCronRest() && function_exists( 'is_cart' ) ) {
|
106 |
+
return is_cart();
|
107 |
+
}
|
108 |
+
|
109 |
+
$id = ! $id && ! empty( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : (int) $id; // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
110 |
+
return $id && wc_get_page_id( 'cart' ) === $id;
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Checks whether the queried object is the WooCommerce checkout page.
|
115 |
+
*
|
116 |
+
* @since 4.1.3
|
117 |
+
*
|
118 |
+
* @param int $id The post ID to check against (optional).
|
119 |
+
* @return bool Whether the current page is the WooCommerce checkout page.
|
120 |
+
*/
|
121 |
+
public function isWooCommerceCheckoutPage( $id = 0 ) {
|
122 |
+
if ( ! $this->isWooCommerceActive() ) {
|
123 |
+
return false;
|
124 |
+
}
|
125 |
+
|
126 |
+
if ( ! is_admin() && ! aioseo()->helpers->isAjaxCronRest() && function_exists( 'is_checkout' ) ) {
|
127 |
+
return is_checkout();
|
128 |
+
}
|
129 |
+
|
130 |
+
$id = ! $id && ! empty( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : (int) $id; // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
131 |
+
return $id && wc_get_page_id( 'checkout' ) === $id;
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Checks whether the queried object is the WooCommerce account page.
|
136 |
+
*
|
137 |
+
* @since 4.1.3
|
138 |
+
*
|
139 |
+
* @param int $id The post ID to check against (optional).
|
140 |
+
* @return bool Whether the current page is the WooCommerce account page.
|
141 |
+
*/
|
142 |
+
public function isWooCommerceAccountPage( $id = 0 ) {
|
143 |
+
if ( ! $this->isWooCommerceActive() ) {
|
144 |
+
return false;
|
145 |
+
}
|
146 |
+
|
147 |
+
if ( ! is_admin() && ! aioseo()->helpers->isAjaxCronRest() && function_exists( 'is_account_page' ) ) {
|
148 |
+
return is_account_page();
|
149 |
+
}
|
150 |
+
|
151 |
+
$id = ! $id && ! empty( $_GET['post'] ) ? (int) wp_unslash( $_GET['post'] ) : (int) $id; // phpcs:ignore HM.Security.ValidatedSanitizedInput
|
152 |
+
return $id && wc_get_page_id( 'myaccount' ) === $id;
|
153 |
+
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Internationalize.
|
157 |
+
*
|
158 |
+
* @since 4.0.0
|
159 |
+
*
|
160 |
+
* @param $in
|
161 |
+
* @return mixed|void
|
162 |
+
*/
|
163 |
+
public function internationalize( $in ) {
|
164 |
+
if ( function_exists( 'langswitch_filter_langs_with_message' ) ) {
|
165 |
+
$in = langswitch_filter_langs_with_message( $in );
|
166 |
+
}
|
167 |
+
|
168 |
+
if ( function_exists( 'polyglot_filter' ) ) {
|
169 |
+
$in = polyglot_filter( $in );
|
170 |
+
}
|
171 |
+
|
172 |
+
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
173 |
+
$in = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $in );
|
174 |
+
} elseif ( function_exists( 'ppqtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
175 |
+
$in = ppqtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $in );
|
176 |
+
} elseif ( function_exists( 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
177 |
+
$in = qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage( $in );
|
178 |
+
}
|
179 |
+
|
180 |
+
return apply_filters( 'localization', $in );
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Checks if WPML is active.
|
185 |
+
*
|
186 |
+
* @since 4.0.0
|
187 |
+
*
|
188 |
+
* @return bool True if it is, false if not.
|
189 |
+
*/
|
190 |
+
public function isWpmlActive() {
|
191 |
+
return class_exists( 'SitePress' );
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Localizes a given URL.
|
196 |
+
*
|
197 |
+
* This is required for compatibility with WPML.
|
198 |
+
*
|
199 |
+
* @since 4.0.0
|
200 |
+
*
|
201 |
+
* @param string $path The relative path of the URL.
|
202 |
+
* @return string $url The filtered URL.
|
203 |
+
*/
|
204 |
+
public function localizedUrl( $path ) {
|
205 |
+
$url = apply_filters( 'wpml_home_url', home_url( '/' ) );
|
206 |
+
|
207 |
+
// Remove URL parameters.
|
208 |
+
preg_match_all( '/\?[\s\S]+/', $url, $matches );
|
209 |
+
|
210 |
+
// Get the base URL.
|
211 |
+
$url = preg_replace( '/\?[\s\S]+/', '', $url );
|
212 |
+
$url = trailingslashit( $url );
|
213 |
+
$url .= preg_replace( '/\//', '', $path, 1 );
|
214 |
+
|
215 |
+
// Readd URL parameters.
|
216 |
+
if ( $matches && $matches[0] ) {
|
217 |
+
$url .= $matches[0][0];
|
218 |
+
}
|
219 |
+
|
220 |
+
return $url;
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Checks whether BuddyPress is active.
|
225 |
+
*
|
226 |
+
* @since 4.0.0
|
227 |
+
*
|
228 |
+
* @return boolean
|
229 |
+
*/
|
230 |
+
public function isBuddyPressActive() {
|
231 |
+
return class_exists( 'BuddyPress' );
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* Checks whether the queried object is a buddy press user page.
|
236 |
+
*
|
237 |
+
* @since 4.0.0
|
238 |
+
*
|
239 |
+
* @return boolean
|
240 |
+
*/
|
241 |
+
public function isBuddyPressUser() {
|
242 |
+
return $this->isBuddyPressActive() && function_exists( 'bp_is_user' ) && bp_is_user();
|
243 |
+
}
|
244 |
+
|
245 |
+
/**
|
246 |
+
* Returns if the page is a BuddyPress page (Activity, Members, Groups).
|
247 |
+
*
|
248 |
+
* @since 4.0.0
|
249 |
+
*
|
250 |
+
* @param int $postId The post ID.
|
251 |
+
* @return boolean If the page is a BuddyPress page or not.
|
252 |
+
*/
|
253 |
+
public function isBuddyPressPage( $postId = false ) {
|
254 |
+
$bpPages = get_option( 'bp-pages' );
|
255 |
+
|
256 |
+
if ( empty( $bpPages ) ) {
|
257 |
+
return false;
|
258 |
+
}
|
259 |
+
|
260 |
+
foreach ( $bpPages as $page ) {
|
261 |
+
if ( (int) $page === (int) $postId ) {
|
262 |
+
return true;
|
263 |
+
}
|
264 |
+
}
|
265 |
+
|
266 |
+
return false;
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* Returns ACF fields as an array of meta keys and values.
|
271 |
+
*
|
272 |
+
* @since 4.0.6
|
273 |
+
*
|
274 |
+
* @param WP_Post|int $post The post.
|
275 |
+
* @param array $allowedTypes A whitelist of ACF field types.
|
276 |
+
* @return array An array of meta keys and values.
|
277 |
+
*/
|
278 |
+
public function getAcfContent( $post = null, $types = [] ) {
|
279 |
+
$post = ( $post && is_object( $post ) ) ? $post : $this->getPost( $post );
|
280 |
+
|
281 |
+
if ( ! class_exists( 'ACF' ) || ! function_exists( 'get_field_objects' ) ) {
|
282 |
+
return [];
|
283 |
+
}
|
284 |
+
|
285 |
+
if ( defined( 'ACF_VERSION' ) && version_compare( ACF_VERSION, '5.7.0', '<' ) ) {
|
286 |
+
return [];
|
287 |
+
}
|
288 |
+
|
289 |
+
// Set defaults.
|
290 |
+
$allowedTypes = [
|
291 |
+
'text',
|
292 |
+
'textarea',
|
293 |
+
'email',
|
294 |
+
'url',
|
295 |
+
'wysiwyg',
|
296 |
+
'image',
|
297 |
+
'gallery',
|
298 |
+
// 'link',
|
299 |
+
// 'taxonomy',
|
300 |
+
];
|
301 |
+
|
302 |
+
$types = wp_parse_args( $types, $allowedTypes );
|
303 |
+
$acfFields = [];
|
304 |
+
|
305 |
+
$fieldObjects = get_field_objects( $post->ID );
|
306 |
+
if ( ! empty( $fieldObjects ) ) {
|
307 |
+
foreach ( $fieldObjects as $field ) {
|
308 |
+
if ( empty( $field['value'] ) ) {
|
309 |
+
continue;
|
310 |
+
}
|
311 |
+
|
312 |
+
if ( ! in_array( $field['type'], $types, true ) ) {
|
313 |
+
continue;
|
314 |
+
}
|
315 |
+
|
316 |
+
if ( 'url' === $field['type'] ) {
|
317 |
+
// Url field
|
318 |
+
$value = "<a href='{$field['value']}'>{$field['value']}</a>";
|
319 |
+
} elseif ( 'image' === $field['type'] ) {
|
320 |
+
// Image field
|
321 |
+
$value = "<img src='{$field['value']['url']}'>";
|
322 |
+
} elseif ( 'gallery' === $field['type'] ) {
|
323 |
+
// Image field
|
324 |
+
$value = "<img src='{$field['value'][0]['url']}'>";
|
325 |
+
} else {
|
326 |
+
// Other fields
|
327 |
+
$value = $field['value'];
|
328 |
+
}
|
329 |
+
|
330 |
+
if ( $value ) {
|
331 |
+
$acfFields[ $field['name'] ] = $value;
|
332 |
+
}
|
333 |
+
}
|
334 |
+
}
|
335 |
+
|
336 |
+
return $acfFields;
|
337 |
+
}
|
338 |
+
}
|
app/Common/Traits/Helpers/Vue.php
ADDED
@@ -0,0 +1,367 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
+
|
4 |
+
use AIOSEO\Plugin\Common\Models;
|
5 |
+
use AIOSEO\Plugin\Common\Tools;
|
6 |
+
|
7 |
+
// Exit if accessed directly.
|
8 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
+
exit;
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Contains all Vue related helper methods.
|
14 |
+
*
|
15 |
+
* @since 4.1.4
|
16 |
+
*/
|
17 |
+
trait Vue {
|
18 |
+
/**
|
19 |
+
* Returns the data for Vue.
|
20 |
+
*
|
21 |
+
* @since 4.0.0
|
22 |
+
*
|
23 |
+
* @param string $page The current page.
|
24 |
+
* @return array The data.
|
25 |
+
*/
|
26 |
+
public function getVueData( $page = null ) {
|
27 |
+
$postTypeObj = get_post_type_object( get_post_type( get_the_ID() ) );
|
28 |
+
$screen = get_current_screen();
|
29 |
+
|
30 |
+
// Check if user has a custom filename from the V3 migration.
|
31 |
+
$sitemapFilename = aioseo()->sitemap->helpers->filename( 'general' );
|
32 |
+
$sitemapFilename = $sitemapFilename ? $sitemapFilename : 'sitemap';
|
33 |
+
|
34 |
+
$isStaticHomePage = 'page' === get_option( 'show_on_front' );
|
35 |
+
$staticHomePage = intval( get_option( 'page_on_front' ) );
|
36 |
+
$data = [
|
37 |
+
'page' => $page,
|
38 |
+
'screen' => [
|
39 |
+
'base' => $screen->base,
|
40 |
+
'postType' => $screen->post_type,
|
41 |
+
'blockEditor' => isset( $screen->is_block_editor ) ? $screen->is_block_editor : false
|
42 |
+
],
|
43 |
+
'internalOptions' => aioseo()->internalOptions->all(),
|
44 |
+
'options' => aioseo()->options->all(),
|
45 |
+
'dynamicOptions' => aioseo()->dynamicOptions->all(),
|
46 |
+
'settings' => aioseo()->settings->all(),
|
47 |
+
'tags' => aioseo()->tags->all( true ),
|
48 |
+
'nonce' => wp_create_nonce( 'wp_rest' ),
|
49 |
+
'urls' => [
|
50 |
+
'domain' => $this->getSiteDomain(),
|
51 |
+
'mainSiteUrl' => $this->getSiteUrl(),
|
52 |
+
'home' => home_url(),
|
53 |
+
'restUrl' => rest_url(),
|
54 |
+
'publicPath' => plugin_dir_url( AIOSEO_FILE ),
|
55 |
+
'rssFeedUrl' => get_bloginfo( 'rss2_url' ),
|
56 |
+
'generalSitemapUrl' => home_url( "/$sitemapFilename.xml" ),
|
57 |
+
'rssSitemapUrl' => home_url( '/sitemap.rss' ),
|
58 |
+
'robotsTxtUrl' => $this->getSiteUrl() . '/robots.txt',
|
59 |
+
'blockedBotsLogUrl' => wp_upload_dir()['baseurl'] . '/aioseo/logs/aioseo-bad-bot-blocker.log',
|
60 |
+
'upgradeUrl' => apply_filters( 'aioseo_upgrade_link', AIOSEO_MARKETING_URL ),
|
61 |
+
'staticHomePage' => 'page' === get_option( 'show_on_front' ) ? get_edit_post_link( get_option( 'page_on_front' ), 'url' ) : null,
|
62 |
+
'connect' => add_query_arg( [
|
63 |
+
'siteurl' => site_url(),
|
64 |
+
'homeurl' => home_url(),
|
65 |
+
'redirect' => rawurldecode( base64_encode( admin_url( 'index.php?page=aioseo-connect' ) ) )
|
66 |
+
], defined( 'AIOSEO_CONNECT_URL' ) ? AIOSEO_CONNECT_URL : 'https://connect.aioseo.com' ),
|
67 |
+
'aio' => [
|
68 |
+
'wizard' => admin_url( 'index.php?page=aioseo-setup-wizard' ),
|
69 |
+
'dashboard' => admin_url( 'admin.php?page=aioseo' ),
|
70 |
+
'settings' => admin_url( 'admin.php?page=aioseo-settings' ),
|
71 |
+
'localSeo' => admin_url( 'admin.php?page=aioseo-local-seo' ),
|
72 |
+
'featureManager' => admin_url( 'admin.php?page=aioseo-feature-manager' ),
|
73 |
+
'sitemaps' => admin_url( 'admin.php?page=aioseo-sitemaps' ),
|
74 |
+
'seoAnalysis' => admin_url( 'admin.php?page=aioseo-seo-analysis' ),
|
75 |
+
'searchAppearance' => admin_url( 'admin.php?page=aioseo-search-appearance' ),
|
76 |
+
'socialNetworks' => admin_url( 'admin.php?page=aioseo-social-networks' ),
|
77 |
+
'tools' => admin_url( 'admin.php?page=aioseo-tools' ),
|
78 |
+
'monsterinsights' => admin_url( 'admin.php?page=aioseo-monsterinsights' )
|
79 |
+
],
|
80 |
+
'admin' => [
|
81 |
+
'widgets' => admin_url( 'widgets.php' ),
|
82 |
+
'optionsReading' => admin_url( 'options-reading.php' ),
|
83 |
+
'scheduledActions' => admin_url( '/tools.php?page=action-scheduler&status=pending&s=aioseo' ),
|
84 |
+
'generalSettings' => admin_url( 'options-general.php' )
|
85 |
+
]
|
86 |
+
],
|
87 |
+
'backups' => [],
|
88 |
+
'importers' => [],
|
89 |
+
'data' => [
|
90 |
+
'server' => [
|
91 |
+
'apache' => null,
|
92 |
+
'nginx' => null
|
93 |
+
],
|
94 |
+
'robots' => [
|
95 |
+
'defaultRules' => [],
|
96 |
+
'hasPhysicalRobots' => null,
|
97 |
+
'rewriteExists' => null,
|
98 |
+
'sitemapUrls' => []
|
99 |
+
],
|
100 |
+
'logSizes' => [
|
101 |
+
'badBotBlockerLog' => null
|
102 |
+
],
|
103 |
+
'status' => [],
|
104 |
+
'htaccess' => '',
|
105 |
+
'multisite' => is_multisite(),
|
106 |
+
'network' => is_network_admin(),
|
107 |
+
'mainSite' => is_main_site(),
|
108 |
+
'subdomain' => defined( 'SUBDOMAIN_INSTALL' ) && SUBDOMAIN_INSTALL,
|
109 |
+
'isWooCommerceActive' => $this->isWooCommerceActive(),
|
110 |
+
'isBBPressActive' => class_exists( 'bbPress' ),
|
111 |
+
'staticHomePage' => $isStaticHomePage ? $staticHomePage : false,
|
112 |
+
'staticBlogPage' => $this->getBlogPageId(),
|
113 |
+
'staticBlogPageTitle' => get_the_title( $this->getBlogPageId() ),
|
114 |
+
'isDev' => $this->isDev(),
|
115 |
+
'isSsl' => is_ssl()
|
116 |
+
],
|
117 |
+
'user' => [
|
118 |
+
'email' => wp_get_current_user()->user_email,
|
119 |
+
'roles' => $this->getUserRoles(),
|
120 |
+
'customRoles' => $this->getCustomRoles(),
|
121 |
+
'canManage' => aioseo()->access->canManage(),
|
122 |
+
'capabilities' => aioseo()->access->getAllCapabilities(),
|
123 |
+
'unfilteredHtml' => current_user_can( 'unfiltered_html' ),
|
124 |
+
'locale' => function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale()
|
125 |
+
],
|
126 |
+
'plugins' => $this->getPluginData(),
|
127 |
+
'postData' => [
|
128 |
+
'postTypes' => $this->getPublicPostTypes( false, false, true ),
|
129 |
+
'taxonomies' => $this->getPublicTaxonomies( false, true ),
|
130 |
+
'archives' => $this->getPublicPostTypes( false, true, true )
|
131 |
+
],
|
132 |
+
'notifications' => Models\Notification::getNotifications( false ),
|
133 |
+
'addons' => aioseo()->addons->getAddons(),
|
134 |
+
'version' => AIOSEO_VERSION,
|
135 |
+
'helpPanel' => json_decode( aioseo()->help->getDocs() ),
|
136 |
+
'scheduledActions' => [
|
137 |
+
'sitemaps' => []
|
138 |
+
]
|
139 |
+
];
|
140 |
+
|
141 |
+
if ( is_multisite() && ! is_network_admin() ) {
|
142 |
+
switch_to_blog( $this->getNetworkId() );
|
143 |
+
$options = aioseo()->options->noConflict();
|
144 |
+
$options->initNetwork();
|
145 |
+
$data['networkOptions'] = $options->all();
|
146 |
+
restore_current_blog();
|
147 |
+
}
|
148 |
+
|
149 |
+
if ( 'post' === $page ) {
|
150 |
+
$postId = get_the_ID();
|
151 |
+
$post = Models\Post::getPost( $postId );
|
152 |
+
|
153 |
+
$data['currentPost'] = [
|
154 |
+
'context' => 'post',
|
155 |
+
'tags' => aioseo()->tags->getDefaultPostTags( $postId ),
|
156 |
+
'id' => $postId,
|
157 |
+
'priority' => ! empty( $post->priority ) ? $post->priority : 'default',
|
158 |
+
'frequency' => ! empty( $post->frequency ) ? $post->frequency : 'default',
|
159 |
+
'permalink' => get_the_permalink(),
|
160 |
+
'title' => ! empty( $post->title ) ? $post->title : aioseo()->meta->title->getPostTypeTitle( $postTypeObj->name ),
|
161 |
+
'description' => ! empty( $post->description ) ? $post->description : aioseo()->meta->description->getPostTypeDescription( $postTypeObj->name ),
|
162 |
+
'keywords' => ! empty( $post->keywords ) ? $post->keywords : wp_json_encode( [] ),
|
163 |
+
'keyphrases' => ! empty( $post->keyphrases )
|
164 |
+
? json_decode( $post->keyphrases )
|
165 |
+
: json_decode( '{"focus":{},"additional":[]}' ),
|
166 |
+
'page_analysis' => ! empty( $post->page_analysis )
|
167 |
+
? json_decode( $post->page_analysis )
|
168 |
+
: Models\Post::getPageAnalysisDefaults(),
|
169 |
+
'loading' => [
|
170 |
+
'focus' => false,
|
171 |
+
'additional' => [],
|
172 |
+
],
|
173 |
+
'type' => $postTypeObj->labels->singular_name,
|
174 |
+
'postType' => 'type' === $postTypeObj->name ? '_aioseo_type' : $postTypeObj->name,
|
175 |
+
'isSpecialPage' => $this->isSpecialPage( $postId ),
|
176 |
+
'isWooCommercePage' => $this->isWooCommercePage( $postId ),
|
177 |
+
'seo_score' => (int) $post->seo_score,
|
178 |
+
'pillar_content' => ( (int) $post->pillar_content ) === 0 ? false : true,
|
179 |
+
'canonicalUrl' => $post->canonical_url,
|
180 |
+
'default' => ( (int) $post->robots_default ) === 0 ? false : true,
|
181 |
+
'noindex' => ( (int) $post->robots_noindex ) === 0 ? false : true,
|
182 |
+
'noarchive' => ( (int) $post->robots_noarchive ) === 0 ? false : true,
|
183 |
+
'nosnippet' => ( (int) $post->robots_nosnippet ) === 0 ? false : true,
|
184 |
+
'nofollow' => ( (int) $post->robots_nofollow ) === 0 ? false : true,
|
185 |
+
'noimageindex' => ( (int) $post->robots_noimageindex ) === 0 ? false : true,
|
186 |
+
'noodp' => ( (int) $post->robots_noodp ) === 0 ? false : true,
|
187 |
+
'notranslate' => ( (int) $post->robots_notranslate ) === 0 ? false : true,
|
188 |
+
'maxSnippet' => null === $post->robots_max_snippet ? -1 : (int) $post->robots_max_snippet,
|
189 |
+
'maxVideoPreview' => null === $post->robots_max_videopreview ? -1 : (int) $post->robots_max_videopreview,
|
190 |
+
'maxImagePreview' => $post->robots_max_imagepreview,
|
191 |
+
'modalOpen' => false,
|
192 |
+
'tabs' => ( ! empty( $post->tabs ) )
|
193 |
+
? json_decode( $post->tabs )
|
194 |
+
: json_decode( Models\Post::getDefaultTabsOptions() ),
|
195 |
+
'generalMobilePrev' => false,
|
196 |
+
'socialMobilePreview' => false,
|
197 |
+
'og_object_type' => ! empty( $post->og_object_type ) ? $post->og_object_type : 'default',
|
198 |
+
'og_title' => $post->og_title,
|
199 |
+
'og_description' => $post->og_description,
|
200 |
+
'og_image_custom_url' => $post->og_image_custom_url,
|
201 |
+
'og_image_custom_fields' => $post->og_image_custom_fields,
|
202 |
+
'og_image_type' => ! empty( $post->og_image_type ) ? $post->og_image_type : 'default',
|
203 |
+
'og_video' => ! empty( $post->og_video ) ? $post->og_video : '',
|
204 |
+
'og_article_section' => ! empty( $post->og_article_section ) ? $post->og_article_section : '',
|
205 |
+
'og_article_tags' => ! empty( $post->og_article_tags ) ? $post->og_article_tags : wp_json_encode( [] ),
|
206 |
+
'twitter_use_og' => ( (int) $post->twitter_use_og ) === 0 ? false : true,
|
207 |
+
'twitter_card' => $post->twitter_card,
|
208 |
+
'twitter_image_custom_url' => $post->twitter_image_custom_url,
|
209 |
+
'twitter_image_custom_fields' => $post->twitter_image_custom_fields,
|
210 |
+
'twitter_image_type' => $post->twitter_image_type,
|
211 |
+
'twitter_title' => $post->twitter_title,
|
212 |
+
'twitter_description' => $post->twitter_description,
|
213 |
+
'schema_type' => ( ! empty( $post->schema_type ) ) ? $post->schema_type : 'default',
|
214 |
+
'schema_type_options' => ( ! empty( $post->schema_type_options ) )
|
215 |
+
? json_decode( Models\Post::getDefaultSchemaOptions( $post->schema_type_options ) )
|
216 |
+
: json_decode( Models\Post::getDefaultSchemaOptions() ),
|
217 |
+
'metaDefaults' => [
|
218 |
+
'title' => aioseo()->meta->title->getPostTypeTitle( $postTypeObj->name ),
|
219 |
+
'description' => aioseo()->meta->description->getPostTypeDescription( $postTypeObj->name )
|
220 |
+
]
|
221 |
+
];
|
222 |
+
|
223 |
+
if ( ! $post->exists() ) {
|
224 |
+
$oldPostMeta = aioseo()->migration->meta->getMigratedPostMeta( $postId );
|
225 |
+
foreach ( $oldPostMeta as $k => $v ) {
|
226 |
+
if ( preg_match( '#robots_.*#', $k ) ) {
|
227 |
+
$oldPostMeta[ preg_replace( '#robots_#', '', $k ) ] = $v;
|
228 |
+
continue;
|
229 |
+
}
|
230 |
+
if ( 'canonical_url' === $k ) {
|
231 |
+
$oldPostMeta['canonicalUrl'] = $v;
|
232 |
+
}
|
233 |
+
}
|
234 |
+
$data['currentPost'] = array_merge( $data['currentPost'], $oldPostMeta );
|
235 |
+
}
|
236 |
+
}
|
237 |
+
|
238 |
+
if ( 'sitemaps' === $page ) {
|
239 |
+
try {
|
240 |
+
if ( as_next_scheduled_action( 'aioseo_static_sitemap_regeneration' ) ) {
|
241 |
+
$data['scheduledActions']['sitemap'][] = 'staticSitemapRegeneration';
|
242 |
+
}
|
243 |
+
} catch ( \Exception $e ) {
|
244 |
+
// Do nothing.
|
245 |
+
}
|
246 |
+
}
|
247 |
+
|
248 |
+
if ( 'setup-wizard' === $page ) {
|
249 |
+
$data['users'] = $this->getSiteUsers( [ 'administrator', 'editor', 'author' ] );
|
250 |
+
$data['importers'] = aioseo()->importExport->plugins();
|
251 |
+
}
|
252 |
+
|
253 |
+
if ( 'search-appearance' === $page ) {
|
254 |
+
$data['users'] = $this->getSiteUsers( [ 'administrator', 'editor', 'author' ] );
|
255 |
+
$data['data'] += [
|
256 |
+
'staticHomePageTitle' => $isStaticHomePage ? aioseo()->meta->title->getTitle( $staticHomePage ) : '',
|
257 |
+
'staticHomePageDescription' => $isStaticHomePage ? aioseo()->meta->description->getDescription( $staticHomePage ) : '',
|
258 |
+
];
|
259 |
+
}
|
260 |
+
|
261 |
+
if ( 'social-networks' === $page ) {
|
262 |
+
$data['data'] += [
|
263 |
+
'staticHomePageOgTitle' => $isStaticHomePage ? aioseo()->social->facebook->getTitle( $staticHomePage ) : '',
|
264 |
+
'staticHomePageOgDescription' => $isStaticHomePage ? aioseo()->social->facebook->getDescription( $staticHomePage ) : '',
|
265 |
+
'staticHomePageTwitterTitle' => $isStaticHomePage ? aioseo()->social->twitter->getTitle( $staticHomePage ) : '',
|
266 |
+
'staticHomePageTwitterDescription' => $isStaticHomePage ? aioseo()->social->twitter->getDescription( $staticHomePage ) : '',
|
267 |
+
];
|
268 |
+
}
|
269 |
+
|
270 |
+
if ( 'tools' === $page ) {
|
271 |
+
$data['backups'] = array_reverse( aioseo()->backup->all() );
|
272 |
+
$data['importers'] = aioseo()->importExport->plugins();
|
273 |
+
$data['data']['server'] = [
|
274 |
+
'apache' => $this->isApache(),
|
275 |
+
'nginx' => $this->isNginx()
|
276 |
+
];
|
277 |
+
$data['data']['robots'] = [
|
278 |
+
'defaultRules' => $page ? aioseo()->robotsTxt->getDefaultRules() : [],
|
279 |
+
'hasPhysicalRobots' => aioseo()->robotsTxt->hasPhysicalRobotsTxt(),
|
280 |
+
'rewriteExists' => aioseo()->robotsTxt->rewriteRulesExist(),
|
281 |
+
'sitemapUrls' => array_merge( aioseo()->sitemap->helpers->getSitemapUrls(), $this->extractSitemapUrlsFromRobotsTxt() )
|
282 |
+
];
|
283 |
+
$data['data']['logSizes'] = [
|
284 |
+
'badBotBlockerLog' => $this->convertFileSize( aioseo()->badBotBlocker->getLogSize() )
|
285 |
+
];
|
286 |
+
$data['data']['status'] = Tools\SystemStatus::getSystemStatusInfo();
|
287 |
+
$data['data']['htaccess'] = aioseo()->htaccess->getContents();
|
288 |
+
}
|
289 |
+
|
290 |
+
if ( 'settings' === $page ) {
|
291 |
+
$data['breadcrumbs']['defaultTemplate'] = aioseo()->helpers->encodeOutputHtml( aioseo()->breadcrumbs->frontend->getDefaultTemplate() );
|
292 |
+
}
|
293 |
+
|
294 |
+
$loadedAddons = aioseo()->addons->getLoadedAddons();
|
295 |
+
if ( ! empty( $loadedAddons ) ) {
|
296 |
+
foreach ( $loadedAddons as $addon ) {
|
297 |
+
if ( isset( $addon->helpers ) && method_exists( $addon->helpers, 'getVueData' ) ) {
|
298 |
+
$data = $addon->helpers->getVueData( $data, $page, isset( $post ) ? $post : null );
|
299 |
+
}
|
300 |
+
}
|
301 |
+
}
|
302 |
+
|
303 |
+
return $data;
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* Returns Jed-formatted localization data. Added for backwards-compatibility.
|
308 |
+
*
|
309 |
+
* @since 4.0.0
|
310 |
+
*
|
311 |
+
* @param string $domain Translation domain.
|
312 |
+
* @return array The information of the locale.
|
313 |
+
*/
|
314 |
+
public function getJedLocaleData( $domain ) {
|
315 |
+
$translations = get_translations_for_domain( $domain );
|
316 |
+
|
317 |
+
$locale = [
|
318 |
+
'' => [
|
319 |
+
'domain' => $domain,
|
320 |
+
'lang' => is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale(),
|
321 |
+
],
|
322 |
+
];
|
323 |
+
|
324 |
+
if ( ! empty( $translations->headers['Plural-Forms'] ) ) {
|
325 |
+
$locale['']['plural_forms'] = $translations->headers['Plural-Forms'];
|
326 |
+
}
|
327 |
+
|
328 |
+
foreach ( $translations->entries as $msgid => $entry ) {
|
329 |
+
$locale[ $msgid ] = $entry->translations;
|
330 |
+
}
|
331 |
+
|
332 |
+
// If any of the translated strings incorrectly contains HTML line breaks, we need to return or else the admin is no longer accessible - #2074.
|
333 |
+
$json = wp_json_encode( $locale );
|
334 |
+
if ( preg_match( '/<br[\s\/]*>/', $json ) ) {
|
335 |
+
return [];
|
336 |
+
}
|
337 |
+
|
338 |
+
return $locale;
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
* Extracts existing sitemap URLs from the robots.txt file.
|
343 |
+
*
|
344 |
+
* We need this in case users have existing sitemap directives added to their robots.txt file.
|
345 |
+
*
|
346 |
+
* @since 4.0.10
|
347 |
+
*
|
348 |
+
* @return array An array with robots.txt sitemap directives.
|
349 |
+
*/
|
350 |
+
private function extractSitemapUrlsFromRobotsTxt() {
|
351 |
+
// First, we need to remove our filter, so that it doesn't run unintentionally.
|
352 |
+
remove_filter( 'robots_txt', [ aioseo()->robotsTxt, 'buildRules' ], 10000 );
|
353 |
+
$robotsTxt = apply_filters( 'robots_txt', '', true );
|
354 |
+
add_filter( 'robots_txt', [ aioseo()->robotsTxt, 'buildRules' ], 10000, 2 );
|
355 |
+
|
356 |
+
if ( ! $robotsTxt ) {
|
357 |
+
return [];
|
358 |
+
}
|
359 |
+
|
360 |
+
$lines = explode( "\n", $robotsTxt );
|
361 |
+
if ( ! is_array( $lines ) || ! count( $lines ) ) {
|
362 |
+
return [];
|
363 |
+
}
|
364 |
+
|
365 |
+
return aioseo()->robotsTxt->extractSitemapUrls( explode( "\n", $robotsTxt ) );
|
366 |
+
}
|
367 |
+
}
|
app/Common/Traits/Helpers/Wp.php
ADDED
@@ -0,0 +1,549 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
+
|
4 |
+
use AIOSEO\Plugin\Common\Utils;
|
5 |
+
|
6 |
+
// Exit if accessed directly.
|
7 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
8 |
+
exit;
|
9 |
+
}
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Contains all WP related helper methods.
|
13 |
+
*
|
14 |
+
* @since 4.1.4
|
15 |
+
*/
|
16 |
+
trait Wp {
|
17 |
+
/**
|
18 |
+
* Whether or not we have a local connection.
|
19 |
+
*
|
20 |
+
* @since 4.0.0
|
21 |
+
*
|
22 |
+
* @var bool
|
23 |
+
*/
|
24 |
+
private static $connection = false;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Helper method to enqueue scripts.
|
28 |
+
*
|
29 |
+
* @since 4.0.0
|
30 |
+
*
|
31 |
+
* @param string $script The script to enqueue.
|
32 |
+
* @param string $url The URL of the script.
|
33 |
+
* @param bool $vue Whether or not this is a vue script.
|
34 |
+
* @return void
|
35 |
+
*/
|
36 |
+
public function enqueueScript( $script, $url, $vue = true ) {
|
37 |
+
if ( ! wp_script_is( $script, 'enqueued' ) ) {
|
38 |
+
wp_enqueue_script(
|
39 |
+
$script,
|
40 |
+
$this->getScriptUrl( $url, $vue ),
|
41 |
+
[],
|
42 |
+
aioseo()->version,
|
43 |
+
true
|
44 |
+
);
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Helper method to enqueue stylesheets.
|
50 |
+
*
|
51 |
+
* @since 4.0.0
|
52 |
+
*
|
53 |
+
* @param string $style The stylesheet to enqueue.
|
54 |
+
* @param string $url The URL of the stylesheet.
|
55 |
+
* @param bool $vue Whether or not this is a vue stylesheet.
|
56 |
+
* @return void
|
57 |
+
*/
|
58 |
+
public function enqueueStyle( $style, $url, $vue = true ) {
|
59 |
+
if ( ! wp_style_is( $style, 'enqueued' ) && $this->shouldEnqueue( $url ) ) {
|
60 |
+
wp_enqueue_style(
|
61 |
+
$style,
|
62 |
+
$this->getScriptUrl( $url, $vue ),
|
63 |
+
[],
|
64 |
+
aioseo()->version
|
65 |
+
);
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
/** Whether or not we should enqueue a file.
|
70 |
+
*
|
71 |
+
* @since 4.0.0
|
72 |
+
*
|
73 |
+
* @param string $url The url to check against.
|
74 |
+
* @return bool Whether or not we should enqueue.
|
75 |
+
*/
|
76 |
+
private function shouldEnqueue( $url ) {
|
77 |
+
$version = strtoupper( aioseo()->versionPath );
|
78 |
+
$host = defined( 'AIOSEO_DEV_' . $version ) ? constant( 'AIOSEO_DEV_' . $version ) : false;
|
79 |
+
|
80 |
+
if ( ! $host ) {
|
81 |
+
return true;
|
82 |
+
}
|
83 |
+
|
84 |
+
if ( false !== strpos( $url, 'chunk-common.css' ) ) {
|
85 |
+
// return false;
|
86 |
+
}
|
87 |
+
|
88 |
+
return true;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Retrieve the proper URL for this script or style.
|
93 |
+
*
|
94 |
+
* @since 4.0.0
|
95 |
+
*
|
96 |
+
* @param string $url The url.
|
97 |
+
* @param bool $vue Whether or not this is a vue script.
|
98 |
+
* @return string The modified url.
|
99 |
+
*/
|
100 |
+
public function getScriptUrl( $url, $vue = true ) {
|
101 |
+
$version = strtoupper( aioseo()->versionPath );
|
102 |
+
$host = $vue && defined( 'AIOSEO_DEV_' . $version ) ? constant( 'AIOSEO_DEV_' . $version ) : false;
|
103 |
+
$localUrl = $url;
|
104 |
+
$url = plugins_url( 'dist/' . aioseo()->versionPath . '/assets/' . $url, AIOSEO_FILE );
|
105 |
+
|
106 |
+
if ( ! $host ) {
|
107 |
+
return $url;
|
108 |
+
}
|
109 |
+
|
110 |
+
if ( $host && ! self::$connection ) {
|
111 |
+
$splitHost = explode( ':', str_replace( '/', '', str_replace( 'http://', '', str_replace( 'https://', '', $host ) ) ) );
|
112 |
+
self::$connection = @fsockopen( $splitHost[0], $splitHost[1] ); // phpcs:ignore WordPress
|
113 |
+
}
|
114 |
+
|
115 |
+
if ( ! self::$connection ) {
|
116 |
+
return $url;
|
117 |
+
}
|
118 |
+
|
119 |
+
return $host . $localUrl;
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Returns user roles in the current WP install.
|
124 |
+
*
|
125 |
+
* @since 4.0.0
|
126 |
+
*
|
127 |
+
* @return array An array of user roles.
|
128 |
+
*/
|
129 |
+
public function getUserRoles() {
|
130 |
+
global $wp_roles;
|
131 |
+
if ( ! isset( $wp_roles ) ) {
|
132 |
+
$wp_roles = new \WP_Roles();
|
133 |
+
}
|
134 |
+
$roleNames = $wp_roles->get_names();
|
135 |
+
asort( $roleNames );
|
136 |
+
|
137 |
+
return $roleNames;
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Returns the custom roles in the current WP install.
|
142 |
+
*
|
143 |
+
* @since 4.1.3
|
144 |
+
*
|
145 |
+
* @return array An array of custom roles.
|
146 |
+
*/
|
147 |
+
public function getCustomRoles() {
|
148 |
+
$allRoles = $this->getUserRoles();
|
149 |
+
|
150 |
+
$toSkip = array_merge(
|
151 |
+
// Default WordPress roles.
|
152 |
+
[ 'superadmin', 'administrator', 'editor', 'author', 'contributor' ],
|
153 |
+
// Default AIOSEO roles.
|
154 |
+
[ 'aioseo_manager', 'aioseo_editor' ],
|
155 |
+
// Filterable roles.
|
156 |
+
apply_filters( 'aioseo_access_control_excluded_roles', array_merge( [
|
157 |
+
'subscriber'
|
158 |
+
], aioseo()->helpers->isWooCommerceActive() ? [ 'customer' ] : [] ) )
|
159 |
+
);
|
160 |
+
|
161 |
+
// Remove empty entries.
|
162 |
+
$toSkip = array_filter( $toSkip );
|
163 |
+
|
164 |
+
$customRoles = [];
|
165 |
+
foreach ( $allRoles as $roleName => $role ) {
|
166 |
+
// Skip specific roles.
|
167 |
+
if ( in_array( $roleName, $toSkip, true ) ) {
|
168 |
+
continue;
|
169 |
+
}
|
170 |
+
|
171 |
+
$customRoles[ $roleName ] = $role;
|
172 |
+
}
|
173 |
+
|
174 |
+
return $customRoles;
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Returns an array of plugins with the active status.
|
179 |
+
*
|
180 |
+
* @since 4.0.0
|
181 |
+
*
|
182 |
+
* @return array An array of plugins with active status.
|
183 |
+
*/
|
184 |
+
public function getPluginData() {
|
185 |
+
$pluginUpgrader = new Utils\PluginUpgraderSilentAjax();
|
186 |
+
$installedPlugins = array_keys( get_plugins() );
|
187 |
+
|
188 |
+
$plugins = [];
|
189 |
+
foreach ( $pluginUpgrader->pluginSlugs as $key => $slug ) {
|
190 |
+
$plugins[ $key ] = [
|
191 |
+
'basename' => $slug,
|
192 |
+
'installed' => in_array( $slug, $installedPlugins, true ),
|
193 |
+
'activated' => is_plugin_active( $slug ),
|
194 |
+
'adminUrl' => admin_url( $pluginUpgrader->pluginAdminUrls[ $key ] ),
|
195 |
+
'canInstall' => aioseo()->addons->canInstall(),
|
196 |
+
'canActivate' => aioseo()->addons->canActivate(),
|
197 |
+
'wpLink' => ! empty( $pluginUpgrader->wpPluginLinks[ $key ] ) ? $pluginUpgrader->wpPluginLinks[ $key ] : null
|
198 |
+
];
|
199 |
+
}
|
200 |
+
|
201 |
+
return $plugins;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Retrieve a list of public post types with slugs/icons.
|
206 |
+
*
|
207 |
+
* @since 4.0.0
|
208 |
+
*
|
209 |
+
* @param boolean $namesOnly Whether only the names should be returned.
|
210 |
+
* @param boolean $hasArchivesOnly Whether or not to only include post types which have archives.
|
211 |
+
* @param boolean $rewriteType Whether or not to rewrite the type slugs.
|
212 |
+
* @return array An array of public post types.
|
213 |
+
*/
|
214 |
+
public function getPublicPostTypes( $namesOnly = false, $hasArchivesOnly = false, $rewriteType = false ) {
|
215 |
+
$postTypes = [];
|
216 |
+
$postObjects = get_post_types( [ 'public' => true ], 'objects' );
|
217 |
+
$woocommerce = class_exists( 'woocommerce' );
|
218 |
+
foreach ( $postObjects as $postObject ) {
|
219 |
+
if ( empty( $postObject->label ) ) {
|
220 |
+
continue;
|
221 |
+
}
|
222 |
+
|
223 |
+
// We don't want to include archives for the WooCommerce shop page.
|
224 |
+
if (
|
225 |
+
$hasArchivesOnly &&
|
226 |
+
(
|
227 |
+
! $postObject->has_archive ||
|
228 |
+
( 'product' === $postObject->name && $woocommerce )
|
229 |
+
)
|
230 |
+
) {
|
231 |
+
continue;
|
232 |
+
}
|
233 |
+
|
234 |
+
if ( $namesOnly ) {
|
235 |
+
$postTypes[] = $postObject->name;
|
236 |
+
continue;
|
237 |
+
}
|
238 |
+
|
239 |
+
if ( 'attachment' === $postObject->name ) {
|
240 |
+
$postObject->label = __( 'Attachments', 'all-in-one-seo-pack' );
|
241 |
+
}
|
242 |
+
|
243 |
+
if ( 'product' === $postObject->name && $woocommerce ) {
|
244 |
+
$postObject->menu_icon = 'dashicons-products';
|
245 |
+
}
|
246 |
+
|
247 |
+
$name = $postObject->name;
|
248 |
+
if ( 'type' === $postObject->name && $rewriteType ) {
|
249 |
+
$name = '_aioseo_type';
|
250 |
+
}
|
251 |
+
|
252 |
+
$postTypes[] = [
|
253 |
+
'name' => $name,
|
254 |
+
'label' => ucwords( $postObject->label ),
|
255 |
+
'singular' => ucwords( $postObject->labels->singular_name ),
|
256 |
+
'icon' => $postObject->menu_icon,
|
257 |
+
'hasExcerpt' => post_type_supports( $postObject->name, 'excerpt' ),
|
258 |
+
'hasArchive' => $postObject->has_archive,
|
259 |
+
'hierarchical' => $postObject->hierarchical,
|
260 |
+
'taxonomies' => get_object_taxonomies( $name ),
|
261 |
+
'slug' => isset( $postObject->rewrite['slug'] ) ? $postObject->rewrite['slug'] : $name
|
262 |
+
];
|
263 |
+
}
|
264 |
+
|
265 |
+
return $postTypes;
|
266 |
+
}
|
267 |
+
|
268 |
+
/**
|
269 |
+
* Retrieve a list of public taxonomies with slugs/icons.
|
270 |
+
*
|
271 |
+
* @since 4.0.0
|
272 |
+
*
|
273 |
+
* @param boolean $namesOnly Whether only the names should be returned.
|
274 |
+
* @param boolean $rewriteType Whether or not to rewrite the type slugs.
|
275 |
+
* @return array An array of public taxonomies.
|
276 |
+
*/
|
277 |
+
public function getPublicTaxonomies( $namesOnly = false, $rewriteType = false ) {
|
278 |
+
$taxonomies = [];
|
279 |
+
if ( count( $taxonomies ) ) {
|
280 |
+
return $taxonomies;
|
281 |
+
}
|
282 |
+
|
283 |
+
$taxObjects = get_taxonomies( [ 'public' => true ], 'objects' );
|
284 |
+
foreach ( $taxObjects as $taxObject ) {
|
285 |
+
if ( empty( $taxObject->label ) ) {
|
286 |
+
continue;
|
287 |
+
}
|
288 |
+
|
289 |
+
if ( in_array( $taxObject->name, [
|
290 |
+
'product_shipping_class',
|
291 |
+
'post_format'
|
292 |
+
], true ) ) {
|
293 |
+
continue;
|
294 |
+
}
|
295 |
+
|
296 |
+
// We need to exclude product attributes from this list as well.
|
297 |
+
if (
|
298 |
+
'pa_' === substr( $taxObject->name, 0, 3 ) &&
|
299 |
+
'manage_product_terms' === $taxObject->cap->manage_terms &&
|
300 |
+
! apply_filters( 'aioseo_woocommerce_product_attributes', false )
|
301 |
+
) {
|
302 |
+
continue;
|
303 |
+
}
|
304 |
+
|
305 |
+
if ( $namesOnly ) {
|
306 |
+
$taxonomies[] = $taxObject->name;
|
307 |
+
continue;
|
308 |
+
}
|
309 |
+
|
310 |
+
$name = $taxObject->name;
|
311 |
+
if ( 'type' === $taxObject->name && $rewriteType ) {
|
312 |
+
$name = '_aioseo_type';
|
313 |
+
}
|
314 |
+
|
315 |
+
$taxonomies[] = [
|
316 |
+
'name' => $name,
|
317 |
+
'label' => ucwords( $taxObject->label ),
|
318 |
+
'singular' => ucwords( $taxObject->labels->singular_name ),
|
319 |
+
'icon' => strpos( $taxObject->label, 'categor' ) !== false ? 'dashicons-category' : 'dashicons-tag',
|
320 |
+
'hierarchical' => $taxObject->hierarchical,
|
321 |
+
'slug' => isset( $taxObject->rewrite['slug'] ) ? $taxObject->rewrite['slug'] : ''
|
322 |
+
];
|
323 |
+
}
|
324 |
+
|
325 |
+
return $taxonomies;
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Retrieve a list of users that match passed in roles.
|
330 |
+
*
|
331 |
+
* @since 4.0.0
|
332 |
+
*
|
333 |
+
* @return array An array of user data.
|
334 |
+
*/
|
335 |
+
public function getSiteUsers( $roles ) {
|
336 |
+
static $users = [];
|
337 |
+
|
338 |
+
if ( ! empty( $users ) ) {
|
339 |
+
return $users;
|
340 |
+
}
|
341 |
+
|
342 |
+
$rolesWhere = [];
|
343 |
+
foreach ( $roles as $role ) {
|
344 |
+
$rolesWhere[] = '(um.meta_key = \'' . aioseo()->db->db->prefix . 'capabilities\' AND um.meta_value LIKE \'%\"' . $role . '\"%\')';
|
345 |
+
}
|
346 |
+
$dbUsers = aioseo()->db->start( 'users as u' )
|
347 |
+
->select( 'u.ID, u.display_name, u.user_nicename, u.user_email' )
|
348 |
+
->join( 'usermeta as um', 'u.ID = um.user_id' )
|
349 |
+
->whereRaw( '(' . implode( ' OR ', $rolesWhere ) . ')' )
|
350 |
+
->orderBy( 'u.user_nicename' )
|
351 |
+
->run()
|
352 |
+
->result();
|
353 |
+
|
354 |
+
foreach ( $dbUsers as $dbUser ) {
|
355 |
+
$users[] = [
|
356 |
+
'id' => intval( $dbUser->ID ),
|
357 |
+
'displayName' => $dbUser->display_name,
|
358 |
+
'niceName' => $dbUser->user_nicename,
|
359 |
+
'email' => $dbUser->user_email,
|
360 |
+
'gravatar' => get_avatar_url( $dbUser->user_email )
|
361 |
+
];
|
362 |
+
}
|
363 |
+
|
364 |
+
return $users;
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Returns the ID of the site logo if it exists.
|
369 |
+
*
|
370 |
+
* @since 4.0.0
|
371 |
+
*
|
372 |
+
* @return int
|
373 |
+
*/
|
374 |
+
public function getSiteLogoId() {
|
375 |
+
if ( ! get_theme_support( 'custom-logo' ) ) {
|
376 |
+
return false;
|
377 |
+
}
|
378 |
+
return get_theme_mod( 'custom_logo' );
|
379 |
+
}
|
380 |
+
|
381 |
+
/**
|
382 |
+
* Returns the URL of the site logo if it exists.
|
383 |
+
*
|
384 |
+
* @since 4.0.0
|
385 |
+
*
|
386 |
+
* @return string
|
387 |
+
*/
|
388 |
+
public function getSiteLogoUrl() {
|
389 |
+
$id = $this->getSiteLogoId();
|
390 |
+
if ( ! $id ) {
|
391 |
+
return false;
|
392 |
+
}
|
393 |
+
|
394 |
+
$image = wp_get_attachment_image_src( $id, 'full' );
|
395 |
+
if ( empty( $image ) ) {
|
396 |
+
return false;
|
397 |
+
}
|
398 |
+
return $image[0];
|
399 |
+
}
|
400 |
+
|
401 |
+
/**
|
402 |
+
* Returns the filesystem object if we have access to it.
|
403 |
+
*
|
404 |
+
* @since 4.0.0
|
405 |
+
*
|
406 |
+
* @param array $args The connection args.
|
407 |
+
* @return WP_Filesystem The filesystem object.
|
408 |
+
*/
|
409 |
+
public function wpfs( $args = [] ) {
|
410 |
+
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
411 |
+
WP_Filesystem( $args );
|
412 |
+
|
413 |
+
global $wp_filesystem;
|
414 |
+
if ( is_object( $wp_filesystem ) ) {
|
415 |
+
return $wp_filesystem;
|
416 |
+
}
|
417 |
+
return false;
|
418 |
+
}
|
419 |
+
|
420 |
+
/**
|
421 |
+
* Returns noindexed post types.
|
422 |
+
*
|
423 |
+
* @since 4.0.0
|
424 |
+
*
|
425 |
+
* @return array A list of noindexed post types.
|
426 |
+
*/
|
427 |
+
public function getNoindexedPostTypes() {
|
428 |
+
return $this->getNoindexedObjects( 'postTypes' );
|
429 |
+
}
|
430 |
+
|
431 |
+
/**
|
432 |
+
* Checks whether a given post type is noindexed.
|
433 |
+
*
|
434 |
+
* @since 4.0.0
|
435 |
+
*
|
436 |
+
* @param string $postType The post type.
|
437 |
+
* @return bool Whether the post type is noindexed.
|
438 |
+
*/
|
439 |
+
public function isPostTypeNoindexed( $postType ) {
|
440 |
+
$noindexedPostTypes = $this->getNoindexedPostTypes();
|
441 |
+
return in_array( $postType, $noindexedPostTypes, true );
|
442 |
+
}
|
443 |
+
|
444 |
+
/**
|
445 |
+
* Returns noindexed taxonomies.
|
446 |
+
*
|
447 |
+
* @since 4.0.0
|
448 |
+
*
|
449 |
+
* @return array A list of noindexed taxonomies.
|
450 |
+
*/
|
451 |
+
public function getNoindexedTaxonomies() {
|
452 |
+
return $this->getNoindexedObjects( 'taxonomies' );
|
453 |
+
}
|
454 |
+
|
455 |
+
/**
|
456 |
+
* Checks whether a given post type is noindexed.
|
457 |
+
*
|
458 |
+
* @since 4.0.0
|
459 |
+
*
|
460 |
+
* @param string $taxonomy The taxonomy.
|
461 |
+
* @return bool Whether the taxonomy is noindexed.
|
462 |
+
*/
|
463 |
+
public function isTaxonomyNoindexed( $taxonomy ) {
|
464 |
+
$noindexedTaxonomies = $this->getNoindexedTaxonomies();
|
465 |
+
return in_array( $taxonomy, $noindexedTaxonomies, true );
|
466 |
+
}
|
467 |
+
|
468 |
+
/**
|
469 |
+
* Returns noindexed object types of a given parent type.
|
470 |
+
*
|
471 |
+
* @since 4.0.0
|
472 |
+
*
|
473 |
+
* @param string $type The parent object type ("postTypes" or "taxonomies").
|
474 |
+
* @return array A list of noindexed objects types.
|
475 |
+
*/
|
476 |
+
private function getNoindexedObjects( $type ) {
|
477 |
+
$noindexed = [];
|
478 |
+
foreach ( aioseo()->dynamicOptions->searchAppearance->$type->all() as $name => $object ) {
|
479 |
+
if (
|
480 |
+
! $object['show'] ||
|
481 |
+
( $object['advanced']['robotsMeta'] && ! $object['advanced']['robotsMeta']['default'] && $object['advanced']['robotsMeta']['noindex'] )
|
482 |
+
) {
|
483 |
+
$noindexed[] = $name;
|
484 |
+
}
|
485 |
+
}
|
486 |
+
return $noindexed;
|
487 |
+
}
|
488 |
+
|
489 |
+
/**
|
490 |
+
* Returns all categories for a post.
|
491 |
+
*
|
492 |
+
* @since 4.1.4
|
493 |
+
*
|
494 |
+
* @param int $postId The post ID.
|
495 |
+
* @return array $names The category names.
|
496 |
+
*/
|
497 |
+
public function getAllCategories( $postId = 0 ) {
|
498 |
+
$names = [];
|
499 |
+
$categories = get_the_category( $postId );
|
500 |
+
if ( $categories && count( $categories ) ) {
|
501 |
+
foreach ( $categories as $category ) {
|
502 |
+
$names[] = aioseo()->helpers->internationalize( $category->cat_name );
|
503 |
+
}
|
504 |
+
}
|
505 |
+
return $names;
|
506 |
+
}
|
507 |
+
|
508 |
+
/**
|
509 |
+
* Returns all tags for a post.
|
510 |
+
*
|
511 |
+
* @since 4.1.4
|
512 |
+
*
|
513 |
+
* @param int $postId The post ID.
|
514 |
+
* @return array $names The tag names.
|
515 |
+
*/
|
516 |
+
public function getAllTags( $postId = 0 ) {
|
517 |
+
$names = [];
|
518 |
+
|
519 |
+
$tags = get_the_tags( $postId );
|
520 |
+
if ( ! empty( $tags ) && ! is_wp_error( $tags ) ) {
|
521 |
+
foreach ( $tags as $tag ) {
|
522 |
+
if ( ! empty( $tag->name ) ) {
|
523 |
+
$names[] = aioseo()->helpers->internationalize( $tag->name );
|
524 |
+
}
|
525 |
+
}
|
526 |
+
}
|
527 |
+
return $names;
|
528 |
+
}
|
529 |
+
|
530 |
+
/**
|
531 |
+
* Loads the translations for a given domain.
|
532 |
+
*
|
533 |
+
* @since 4.1.4
|
534 |
+
*
|
535 |
+
* @return void
|
536 |
+
*/
|
537 |
+
public function loadTextDomain( $domain ) {
|
538 |
+
if ( ! is_user_logged_in() ) {
|
539 |
+
return;
|
540 |
+
}
|
541 |
+
|
542 |
+
// Unload the domain in case WordPress has enqueued the translations for the site language instead of profile language.
|
543 |
+
// Reloading the text domain will otherwise not override the existing loaded translations.
|
544 |
+
unload_textdomain( $domain );
|
545 |
+
|
546 |
+
$mofile = $domain . '-' . get_user_locale() . '.mo';
|
547 |
+
load_textdomain( $domain, WP_LANG_DIR . '/plugins/' . $mofile );
|
548 |
+
}
|
549 |
+
}
|
app/Common/Traits/Helpers/WpContext.php
ADDED
@@ -0,0 +1,489 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Contains all context related helper methods.
|
11 |
+
* This includes methods to check the context of the current request, but also get WP objects.
|
12 |
+
*
|
13 |
+
* @since 4.1.4
|
14 |
+
*/
|
15 |
+
trait WpContext {
|
16 |
+
/**
|
17 |
+
* Get the home page object.
|
18 |
+
*
|
19 |
+
* @since 4.1.1
|
20 |
+
*
|
21 |
+
* @return WP_Post|null The home page.
|
22 |
+
*/
|
23 |
+
public function getHomePage() {
|
24 |
+
$homePageId = $this->getHomePageId();
|
25 |
+
|
26 |
+
return $homePageId ? get_post( $homePageId ) : null;
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Get the ID of the home page.
|
31 |
+
*
|
32 |
+
* @since 4.0.0
|
33 |
+
*
|
34 |
+
* @return integer|null The home page ID.
|
35 |
+
*/
|
36 |
+
public function getHomePageId() {
|
37 |
+
$pageShowOnFront = ( 'page' === get_option( 'show_on_front' ) );
|
38 |
+
$pageOnFrontId = get_option( 'page_on_front' );
|
39 |
+
|
40 |
+
return $pageShowOnFront && $pageOnFrontId ? (int) $pageOnFrontId : null;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Returns the blog page.
|
45 |
+
*
|
46 |
+
* @since 4.0.0
|
47 |
+
*
|
48 |
+
* @return WP_Post|null The blog page.
|
49 |
+
*/
|
50 |
+
public function getBlogPage() {
|
51 |
+
$blogPageId = $this->getBlogPageId();
|
52 |
+
|
53 |
+
return $blogPageId ? get_post( $blogPageId ) : null;
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Gets the current blog page id if it's configured.
|
58 |
+
*
|
59 |
+
* @since 4.1.1
|
60 |
+
*
|
61 |
+
* @return int|null
|
62 |
+
*/
|
63 |
+
public function getBlogPageId() {
|
64 |
+
$pageShowOnFront = ( 'page' === get_option( 'show_on_front' ) );
|
65 |
+
$blogPageId = (int) get_option( 'page_for_posts' );
|
66 |
+
|
67 |
+
return $pageShowOnFront && $blogPageId ? $blogPageId : null;
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Checks whether the current page is a taxonomy term archive.
|
72 |
+
*
|
73 |
+
* @since 4.0.0
|
74 |
+
*
|
75 |
+
* @return boolean Whether the current page is a taxonomy term archive.
|
76 |
+
*/
|
77 |
+
public function isTaxTerm() {
|
78 |
+
$object = get_queried_object();
|
79 |
+
return $object instanceof \WP_Term;
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Checks whether the current page is a static one.
|
84 |
+
*
|
85 |
+
* @since 4.0.0
|
86 |
+
*
|
87 |
+
* @return boolean Whether the current page is a static one.
|
88 |
+
*/
|
89 |
+
public function isStaticPage() {
|
90 |
+
return $this->isStaticHomePage() || $this->isStaticPostsPage() || $this->isWooCommerceShopPage();
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Checks whether the current page is the static homepage.
|
95 |
+
*
|
96 |
+
* @since 4.0.0
|
97 |
+
*
|
98 |
+
* @param mixed $post Pass in an optional post to check if its the static home page.
|
99 |
+
* @return boolean Whether the current page is the static homepage.
|
100 |
+
*/
|
101 |
+
public function isStaticHomePage( $post = null ) {
|
102 |
+
static $isHomePage = null;
|
103 |
+
if ( null !== $isHomePage ) {
|
104 |
+
return $isHomePage;
|
105 |
+
}
|
106 |
+
|
107 |
+
$post = aioseo()->helpers->getPost( $post );
|
108 |
+
return ( 'page' === get_option( 'show_on_front' ) && ! empty( $post->ID ) && (int) get_option( 'page_on_front' ) === $post->ID );
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Checks whether the current page is the static posts page.
|
113 |
+
*
|
114 |
+
* @since 4.0.0
|
115 |
+
*
|
116 |
+
* @return boolean Whether the current page is the static posts page.
|
117 |
+
*/
|
118 |
+
public function isStaticPostsPage() {
|
119 |
+
return is_home() && ( 0 !== (int) get_option( 'page_for_posts' ) );
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Checks whether current page supports meta.
|
124 |
+
*
|
125 |
+
* @since 4.0.0
|
126 |
+
*
|
127 |
+
* @return boolean Whether the current page supports meta.
|
128 |
+
*/
|
129 |
+
public function supportsMeta() {
|
130 |
+
return ! is_date() && ! is_author() && ! is_search() && ! is_404();
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Returns the network ID.
|
135 |
+
*
|
136 |
+
* @since 4.0.0
|
137 |
+
*
|
138 |
+
* @return int The integer of the blog/site id.
|
139 |
+
*/
|
140 |
+
public function getNetworkId() {
|
141 |
+
if ( is_multisite() ) {
|
142 |
+
return get_network()->site_id;
|
143 |
+
}
|
144 |
+
return get_current_blog_id();
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* Returns the current post object.
|
149 |
+
*
|
150 |
+
* @since 4.0.0
|
151 |
+
*
|
152 |
+
* @param int $postId The post ID.
|
153 |
+
* @return WP_Post The post object.
|
154 |
+
*/
|
155 |
+
public function getPost( $postId = false ) {
|
156 |
+
static $showOnFront = null;
|
157 |
+
static $pageOnFront = null;
|
158 |
+
static $pageForPosts = null;
|
159 |
+
|
160 |
+
$postId = is_a( $postId, 'WP_Post' ) ? $postId->ID : $postId;
|
161 |
+
|
162 |
+
if ( aioseo()->helpers->isWooCommerceShopPage( $postId ) ) {
|
163 |
+
return get_post( wc_get_page_id( 'shop' ) );
|
164 |
+
}
|
165 |
+
|
166 |
+
if ( is_front_page() || is_home() ) {
|
167 |
+
$showOnFront = $showOnFront ? $showOnFront : 'page' === get_option( 'show_on_front' );
|
168 |
+
if ( $showOnFront ) {
|
169 |
+
if ( is_front_page() ) {
|
170 |
+
$pageOnFront = $pageOnFront ? $pageOnFront : (int) get_option( 'page_on_front' );
|
171 |
+
return get_post( $pageOnFront );
|
172 |
+
} elseif ( is_home() ) {
|
173 |
+
$pageForPosts = $pageForPosts ? $pageForPosts : (int) get_option( 'page_for_posts' );
|
174 |
+
return get_post( $pageForPosts );
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
return get_post();
|
179 |
+
}
|
180 |
+
|
181 |
+
if (
|
182 |
+
$this->isScreenBase( 'post' ) ||
|
183 |
+
$postId ||
|
184 |
+
is_singular()
|
185 |
+
) {
|
186 |
+
return get_post( $postId );
|
187 |
+
}
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Returns the page content.
|
192 |
+
*
|
193 |
+
* @since 4.0.0
|
194 |
+
*
|
195 |
+
* @param WP_Post|int $post The post.
|
196 |
+
* @return string The content.
|
197 |
+
*/
|
198 |
+
public function getContent( $post = null ) {
|
199 |
+
$post = ( $post && is_object( $post ) ) ? $post : $post = $this->getPost( $post );
|
200 |
+
|
201 |
+
static $content = [];
|
202 |
+
if ( isset( $content[ $post->ID ] ) ) {
|
203 |
+
return $content[ $post->ID ];
|
204 |
+
}
|
205 |
+
|
206 |
+
if ( empty( $post->post_content ) ) {
|
207 |
+
return $post->post_content;
|
208 |
+
}
|
209 |
+
|
210 |
+
$postContent = $post->post_content;
|
211 |
+
if (
|
212 |
+
! in_array( 'runShortcodesInDescription', aioseo()->internalOptions->deprecatedOptions, true ) ||
|
213 |
+
aioseo()->options->deprecated->searchAppearance->advanced->runShortcodesInDescription
|
214 |
+
) {
|
215 |
+
$postContent = $this->doShortcodes( $postContent );
|
216 |
+
}
|
217 |
+
|
218 |
+
$postContent = wp_trim_words( $postContent, 55, apply_filters( 'excerpt_more', ' ' . '[…]' ) );
|
219 |
+
$postContent = str_replace( ']]>', ']]>', $postContent );
|
220 |
+
$postContent = preg_replace( '#(<figure.*\/figure>|<img.*\/>)#', '', $postContent );
|
221 |
+
$content[ $post->ID ] = trim( wp_strip_all_tags( strip_shortcodes( $postContent ) ) );
|
222 |
+
return $content[ $post->ID ];
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Returns custom fields as a string.
|
227 |
+
*
|
228 |
+
* @since 4.0.6
|
229 |
+
*
|
230 |
+
* @param WP_Post|int $post The post.
|
231 |
+
* @param array $keys The post meta_keys to check for values.
|
232 |
+
* @return string The custom field content.
|
233 |
+
*/
|
234 |
+
public function getCustomFieldsContent( $post = null, $keys = [] ) {
|
235 |
+
$post = ( $post && is_object( $post ) ) ? $post : $this->getPost( $post );
|
236 |
+
|
237 |
+
$customFieldContent = '';
|
238 |
+
|
239 |
+
$acfFields = $this->getAcfContent( $post );
|
240 |
+
$acfFieldsKeys = [];
|
241 |
+
|
242 |
+
if ( ! empty( $acfFields ) ) {
|
243 |
+
foreach ( $acfFields as $acfField => $acfValue ) {
|
244 |
+
if ( in_array( $acfField, $keys, true ) ) {
|
245 |
+
$customFieldContent .= "{$acfValue} ";
|
246 |
+
$acfFieldsKeys[] = $acfField;
|
247 |
+
}
|
248 |
+
}
|
249 |
+
}
|
250 |
+
|
251 |
+
foreach ( $keys as $key ) {
|
252 |
+
if ( in_array( $key, $acfFieldsKeys, true ) ) {
|
253 |
+
continue;
|
254 |
+
}
|
255 |
+
|
256 |
+
$value = get_post_meta( $post->ID, $key, true );
|
257 |
+
|
258 |
+
if ( $value ) {
|
259 |
+
$customFieldContent .= "{$value} ";
|
260 |
+
}
|
261 |
+
}
|
262 |
+
|
263 |
+
return $customFieldContent;
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Returns if the page is a special type (WooCommerce pages, Privacy page).
|
268 |
+
*
|
269 |
+
* @since 4.0.0
|
270 |
+
*
|
271 |
+
* @param int $postId The post ID.
|
272 |
+
* @return boolean If the page is special or not.
|
273 |
+
*/
|
274 |
+
public function isSpecialPage( $postId = false ) {
|
275 |
+
if (
|
276 |
+
(int) get_option( 'page_for_posts' ) === (int) $postId ||
|
277 |
+
(int) get_option( 'wp_page_for_privacy_policy' ) === (int) $postId ||
|
278 |
+
$this->isBuddyPressPage( $postId ) ||
|
279 |
+
$this->isWooCommercePage( $postId )
|
280 |
+
) {
|
281 |
+
return true;
|
282 |
+
}
|
283 |
+
|
284 |
+
return false;
|
285 |
+
}
|
286 |
+
|
287 |
+
/**
|
288 |
+
* Returns the page number of the current page.
|
289 |
+
*
|
290 |
+
* @since 4.0.0
|
291 |
+
*
|
292 |
+
* @return int The page number.
|
293 |
+
*/
|
294 |
+
public function getPageNumber() {
|
295 |
+
$page = get_query_var( 'page' );
|
296 |
+
$paged = get_query_var( 'paged' );
|
297 |
+
return ! empty( $page )
|
298 |
+
? $page
|
299 |
+
: (
|
300 |
+
! empty( $paged )
|
301 |
+
? $paged
|
302 |
+
: 1
|
303 |
+
);
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* Check if the post passed in is a valid post, not a revision or autosave.
|
308 |
+
*
|
309 |
+
* @since 4.0.5
|
310 |
+
*
|
311 |
+
* @param WP_Post $post The Post object to check.
|
312 |
+
* @return bool True if valid, false if not.
|
313 |
+
*/
|
314 |
+
public function isValidPost( $post ) {
|
315 |
+
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
316 |
+
return false;
|
317 |
+
}
|
318 |
+
|
319 |
+
if ( ! is_object( $post ) ) {
|
320 |
+
$post = get_post( $post );
|
321 |
+
}
|
322 |
+
|
323 |
+
// In order to prevent recursion, we are skipping scheduled-action posts.
|
324 |
+
if (
|
325 |
+
empty( $post ) ||
|
326 |
+
'scheduled-action' === $post->post_type ||
|
327 |
+
'revision' === $post->post_type ||
|
328 |
+
'publish' !== $post->post_status
|
329 |
+
) {
|
330 |
+
return false;
|
331 |
+
}
|
332 |
+
|
333 |
+
return true;
|
334 |
+
}
|
335 |
+
|
336 |
+
/**
|
337 |
+
* Checks whether the given URL is a valid attachment.
|
338 |
+
*
|
339 |
+
* @since 4.0.13
|
340 |
+
*
|
341 |
+
* @param string $url The URL.
|
342 |
+
* @return boolean Whether the URL is a valid attachment.
|
343 |
+
*/
|
344 |
+
public function isValidAttachment( $url ) {
|
345 |
+
$uploadDirUrl = aioseo()->helpers->escapeRegex( $this->getWpContentUrl() );
|
346 |
+
return preg_match( "/$uploadDirUrl.*/", $url );
|
347 |
+
}
|
348 |
+
|
349 |
+
/**
|
350 |
+
* Tries to convert an attachment URL into a post ID.
|
351 |
+
*
|
352 |
+
* This our own optimized version of attachment_url_to_postid().
|
353 |
+
*
|
354 |
+
* @since 4.0.13
|
355 |
+
*
|
356 |
+
* @param string $url The attachment URL.
|
357 |
+
* @return int|boolean The attachment ID or false if no attachment could be found.
|
358 |
+
*/
|
359 |
+
public function attachmentUrlToPostId( $url ) {
|
360 |
+
$cacheName = "aioseo_attachment_url_to_post_id_$url";
|
361 |
+
|
362 |
+
$cachedId = wp_cache_get( $cacheName, 'aioseo' );
|
363 |
+
if ( $cachedId ) {
|
364 |
+
return 'none' !== $cachedId && is_numeric( $cachedId ) ? (int) $cachedId : false;
|
365 |
+
}
|
366 |
+
|
367 |
+
$path = $url;
|
368 |
+
$uploadDirInfo = wp_get_upload_dir();
|
369 |
+
|
370 |
+
$siteUrl = wp_parse_url( $uploadDirInfo['url'] );
|
371 |
+
$imagePath = wp_parse_url( $path );
|
372 |
+
|
373 |
+
// Force the protocols to match if needed.
|
374 |
+
if ( isset( $imagePath['scheme'] ) && ( $imagePath['scheme'] !== $siteUrl['scheme'] ) ) {
|
375 |
+
$path = str_replace( $imagePath['scheme'], $siteUrl['scheme'], $path );
|
376 |
+
}
|
377 |
+
|
378 |
+
if ( ! $this->isValidAttachment( $path ) ) {
|
379 |
+
wp_cache_set( $cacheName, 'none', 'aioseo', DAY_IN_SECONDS );
|
380 |
+
return false;
|
381 |
+
}
|
382 |
+
|
383 |
+
if ( 0 === strpos( $path, $uploadDirInfo['baseurl'] . '/' ) ) {
|
384 |
+
$path = substr( $path, strlen( $uploadDirInfo['baseurl'] . '/' ) );
|
385 |
+
}
|
386 |
+
|
387 |
+
$results = aioseo()->db->start( 'postmeta' )
|
388 |
+
->select( 'post_id' )
|
389 |
+
->where( 'meta_key', '_wp_attached_file' )
|
390 |
+
->where( 'meta_value', $path )
|
391 |
+
->limit( 1 )
|
392 |
+
->run()
|
393 |
+
->result();
|
394 |
+
|
395 |
+
if ( empty( $results[0]->post_id ) ) {
|
396 |
+
wp_cache_set( $cacheName, 'none', 'aioseo', DAY_IN_SECONDS );
|
397 |
+
return false;
|
398 |
+
}
|
399 |
+
|
400 |
+
wp_cache_set( $cacheName, $results[0]->post_id, 'aioseo', DAY_IN_SECONDS );
|
401 |
+
return $results[0]->post_id;
|
402 |
+
}
|
403 |
+
|
404 |
+
/**
|
405 |
+
* Returns true if the request is a non-legacy REST API request.
|
406 |
+
* This function was copied from WooCommerce and improved.
|
407 |
+
*
|
408 |
+
* @since 4.1.2
|
409 |
+
*
|
410 |
+
* @return bool True if this is a REST API request.
|
411 |
+
*/
|
412 |
+
public function isRestApiRequest() {
|
413 |
+
global $wp_rewrite;
|
414 |
+
|
415 |
+
if ( empty( $wp_rewrite ) ) {
|
416 |
+
return false;
|
417 |
+
}
|
418 |
+
|
419 |
+
if ( empty( $_SERVER['REQUEST_URI'] ) ) {
|
420 |
+
return false;
|
421 |
+
}
|
422 |
+
|
423 |
+
$restUrl = wp_parse_url( get_rest_url() );
|
424 |
+
$restUrl = $restUrl['path'] . ( ! empty( $restUrl['query'] ) ? '?' . $restUrl['query'] : '' );
|
425 |
+
|
426 |
+
$isRestApiRequest = ( 0 === strpos( $_SERVER['REQUEST_URI'], $restUrl ) );
|
427 |
+
|
428 |
+
return apply_filters( 'aioseo_is_rest_api_request', $isRestApiRequest );
|
429 |
+
}
|
430 |
+
|
431 |
+
/**
|
432 |
+
* Checks whether the current request is an AJAX, CRON or REST request.
|
433 |
+
*
|
434 |
+
* @since 4.1.3
|
435 |
+
*
|
436 |
+
* @return bool Wether the request is an AJAX, CRON or REST request.
|
437 |
+
*/
|
438 |
+
public function isAjaxCronRest() {
|
439 |
+
return wp_doing_ajax() || wp_doing_cron() || $this->isRestApiRequest();
|
440 |
+
}
|
441 |
+
|
442 |
+
/**
|
443 |
+
* Checks whether we're on the given screen.
|
444 |
+
*
|
445 |
+
* @since 4.0.7
|
446 |
+
*
|
447 |
+
* @param string $screenName The screen name.
|
448 |
+
* @return boolean Whether we're on the given screen.
|
449 |
+
*/
|
450 |
+
public function isScreenBase( $screenName ) {
|
451 |
+
$screen = $this->getCurrentScreen();
|
452 |
+
if ( ! $screen || ! isset( $screen->base ) ) {
|
453 |
+
return false;
|
454 |
+
}
|
455 |
+
return $screen->base === $screenName;
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
* Returns if current screen is of a post type
|
460 |
+
*
|
461 |
+
* @since 4.0.17
|
462 |
+
*
|
463 |
+
* @param string $postType Post type slug
|
464 |
+
*
|
465 |
+
* @return bool
|
466 |
+
*/
|
467 |
+
public function isScreenPostType( $postType ) {
|
468 |
+
$screen = $this->getCurrentScreen();
|
469 |
+
if ( ! $screen || ! isset( $screen->post_type ) ) {
|
470 |
+
return false;
|
471 |
+
}
|
472 |
+
return $screen->post_type === $postType;
|
473 |
+
}
|
474 |
+
|
475 |
+
/**
|
476 |
+
* Gets current admin screen
|
477 |
+
*
|
478 |
+
* @since 4.0.17
|
479 |
+
*
|
480 |
+
* @return false|\WP_Screen|null
|
481 |
+
*/
|
482 |
+
public function getCurrentScreen() {
|
483 |
+
if ( ! is_admin() || ! function_exists( 'get_current_screen' ) ) {
|
484 |
+
return false;
|
485 |
+
}
|
486 |
+
|
487 |
+
return get_current_screen();
|
488 |
+
}
|
489 |
+
}
|
app/Common/Traits/Helpers/WpUri.php
ADDED
@@ -0,0 +1,306 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Common\Traits\Helpers;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Contains all WordPress related URL, URI, path, slug, etc. related helper methods.
|
11 |
+
*
|
12 |
+
* @since 4.1.4
|
13 |
+
*/
|
14 |
+
trait WpUri {
|
15 |
+
/**
|
16 |
+
* Returns the site domain.
|
17 |
+
*
|
18 |
+
* @since 4.0.0
|
19 |
+
*
|
20 |
+
* @return string The site's domain.
|
21 |
+
*/
|
22 |
+
public function getSiteDomain() {
|
23 |
+
return wp_parse_url( home_url(), PHP_URL_HOST );
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Returns the site URL.
|
28 |
+
* NOTE: For multisites inside a sub-directory, this returns the URL for the main site.
|
29 |
+
* This is intentional.
|
30 |
+
*
|
31 |
+
* @since 4.0.0
|
32 |
+
*
|
33 |
+
* @return string The site's domain.
|
34 |
+
*/
|
35 |
+
public function getSiteUrl() {
|
36 |
+
return wp_parse_url( home_url(), PHP_URL_SCHEME ) . '://' . wp_parse_url( home_url(), PHP_URL_HOST );
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Returns the current URL.
|
41 |
+
*
|
42 |
+
* @since 4.0.0
|
43 |
+
*
|
44 |
+
* @param boolean $canonical Whether or not to get the canonical URL.
|
45 |
+
* @return string The URL.
|
46 |
+
*/
|
47 |
+
public function getUrl( $canonical = false ) {
|
48 |
+
if ( is_singular() ) {
|
49 |
+
$object = get_queried_object_id();
|
50 |
+
return $canonical ? wp_get_canonical_url( $object ) : get_permalink( $object );
|
51 |
+
}
|
52 |
+
|
53 |
+
global $wp;
|
54 |
+
return trailingslashit( home_url( $wp->request ) );
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Gets the canonical URL for the current page/post.
|
59 |
+
*
|
60 |
+
* @since 4.0.0
|
61 |
+
*
|
62 |
+
* @return string $url The canonical URL.
|
63 |
+
*/
|
64 |
+
public function canonicalUrl() {
|
65 |
+
static $canonicalUrl = '';
|
66 |
+
if ( $canonicalUrl ) {
|
67 |
+
return $canonicalUrl;
|
68 |
+
}
|
69 |
+
|
70 |
+
$metaData = [];
|
71 |
+
$post = $this->getPost();
|
72 |
+
if ( $post ) {
|
73 |
+
$metaData = aioseo()->meta->metaData->getMetaData( $post );
|
74 |
+
}
|
75 |
+
|
76 |
+
if ( is_category() || is_tag() || is_tax() ) {
|
77 |
+
$metaData = aioseo()->meta->metaData->getMetaData( get_queried_object() );
|
78 |
+
}
|
79 |
+
|
80 |
+
if ( $metaData && ! empty( $metaData->canonical_url ) ) {
|
81 |
+
return $metaData->canonical_url;
|
82 |
+
}
|
83 |
+
|
84 |
+
$url = $this->getUrl( true );
|
85 |
+
if ( aioseo()->options->searchAppearance->advanced->noPaginationForCanonical && 1 < $this->getPageNumber() ) {
|
86 |
+
$url = preg_replace( '#(\d+\/|(?<=\/)page\/\d+\/)$#', '', $url );
|
87 |
+
}
|
88 |
+
|
89 |
+
$url = $this->maybeRemoveTrailingSlash( $url );
|
90 |
+
|
91 |
+
// Get rid of /amp at the end of the URL.
|
92 |
+
if ( ! apply_filters( 'aioseo_disable_canonical_url_amp', false ) ) {
|
93 |
+
$url = preg_replace( '/\/amp$/', '', $url );
|
94 |
+
$url = preg_replace( '/\/amp\/$/', '/', $url );
|
95 |
+
}
|
96 |
+
|
97 |
+
$searchTerm = get_query_var( 's' );
|
98 |
+
if ( is_search() && ! empty( $searchTerm ) ) {
|
99 |
+
$url = add_query_arg( 's', $searchTerm, $url );
|
100 |
+
}
|
101 |
+
|
102 |
+
return apply_filters( 'aioseo_canonical_url', $url );
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Formats a given URl as an absolute URL if it is relative.
|
107 |
+
*
|
108 |
+
* @since 4.0.0
|
109 |
+
*
|
110 |
+
* @param string $url The URL.
|
111 |
+
* @return string $url The absolute URL.
|
112 |
+
*/
|
113 |
+
public function makeUrlAbsolute( $url ) {
|
114 |
+
if ( 0 !== strpos( $url, 'http' ) && '/' !== $url ) {
|
115 |
+
if ( 0 === strpos( $url, '//' ) ) {
|
116 |
+
$scheme = wp_parse_url( home_url(), PHP_URL_SCHEME );
|
117 |
+
$url = $scheme . ':' . $url;
|
118 |
+
} else {
|
119 |
+
$url = home_url( $url );
|
120 |
+
}
|
121 |
+
}
|
122 |
+
return $url;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Sanitizes a given domain.
|
127 |
+
*
|
128 |
+
* @since 4.0.0
|
129 |
+
*
|
130 |
+
* @param string $domain The domain to sanitize.
|
131 |
+
* @return mixed|string The sanitized domain.
|
132 |
+
*/
|
133 |
+
public function sanitizeDomain( $domain ) {
|
134 |
+
$domain = trim( $domain );
|
135 |
+
$domain = strtolower( $domain );
|
136 |
+
if ( 0 === strpos( $domain, 'http://' ) ) {
|
137 |
+
$domain = substr( $domain, 7 );
|
138 |
+
} elseif ( 0 === strpos( $domain, 'https://' ) ) {
|
139 |
+
$domain = substr( $domain, 8 );
|
140 |
+
}
|
141 |
+
$domain = untrailingslashit( $domain );
|
142 |
+
|
143 |
+
return $domain;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Remove trailing slashes if not set in the permalink structure.
|
148 |
+
*
|
149 |
+
* @since 4.0.0
|
150 |
+
*
|
151 |
+
* @param string $url The original URL.
|
152 |
+
* @return string The adjusted URL.
|
153 |
+
*/
|
154 |
+
public function maybeRemoveTrailingSlash( $url ) {
|
155 |
+
$permalinks = get_option( 'permalink_structure' );
|
156 |
+
if ( $permalinks && ( ! is_home() || ! is_front_page() ) ) {
|
157 |
+
$trailing = substr( $permalinks, -1 );
|
158 |
+
if ( '/' !== $trailing ) {
|
159 |
+
$url = untrailingslashit( $url );
|
160 |
+
}
|
161 |
+
}
|
162 |
+
|
163 |
+
// Don't slash urls with query args.
|
164 |
+
if ( false !== strpos( $url, '?' ) ) {
|
165 |
+
$url = untrailingslashit( $url );
|
166 |
+
}
|
167 |
+
|
168 |
+
return $url;
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Removes image dimensions from the slug of a URL.
|
173 |
+
*
|
174 |
+
* @since 4.0.0
|
175 |
+
*
|
176 |
+
* @param string $url The image URL.
|
177 |
+
* @return string The formatted image URL.
|
178 |
+
*/
|
179 |
+
public function removeImageDimensions( $url ) {
|
180 |
+
return $this->isValidAttachment( $url ) ? preg_replace( '#(-[0-9]*x[0-9]*)#', '', $url ) : $url;
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* Returns the URL for the WP content folder.
|
185 |
+
*
|
186 |
+
* @since 4.0.5
|
187 |
+
*
|
188 |
+
* @return string The URL.
|
189 |
+
*/
|
190 |
+
public function getWpContentUrl() {
|
191 |
+
$info = wp_get_upload_dir();
|
192 |
+
return isset( $info['baseurl'] ) ? $info['baseurl'] : '';
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Checks whether the given path is unique or not.
|
197 |
+
*
|
198 |
+
* @since 4.1.4
|
199 |
+
*
|
200 |
+
* @param string $path The path.
|
201 |
+
* @return boolean Whether the path exists.
|
202 |
+
*/
|
203 |
+
public function pathExists( $path ) {
|
204 |
+
$url = $this->isUrl( $path )
|
205 |
+
? $path
|
206 |
+
: trailingslashit( home_url() ) . trim( $path, '/' );
|
207 |
+
|
208 |
+
$status = wp_remote_retrieve_response_code( wp_remote_get( $url ) );
|
209 |
+
if ( ! $status ) {
|
210 |
+
// If there is no status code, we might be in a local environment with CURL misconfigured.
|
211 |
+
// In that case we can still check if a post exists for the path by quering the DB.
|
212 |
+
// TODO: Add support for terms here.
|
213 |
+
$post = $this->getPostbyPath( $path, OBJECT, $this->getPublicPostTypes( true ) );
|
214 |
+
return is_object( $post );
|
215 |
+
}
|
216 |
+
return 200 === $status;
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Retrieves a post by its given path.
|
221 |
+
* Based on the built-in get_page_by_path() function, but only checks ancestry if the post type is actually hierarchical.
|
222 |
+
*
|
223 |
+
* @since 4.1.4
|
224 |
+
*
|
225 |
+
* @param string $path The path.
|
226 |
+
* @param string $output The output type. OBJECT, ARRAY_A, or ARRAY_N.
|
227 |
+
* @param string|array $postType The post type(s) to check against.
|
228 |
+
* @return Object|false The post or false on failure.
|
229 |
+
*/
|
230 |
+
public function getPostByPath( $path, $output = OBJECT, $postType = 'page' ) {
|
231 |
+
$lastChanged = wp_cache_get_last_changed( 'aioseo_posts_by_path' );
|
232 |
+
$hash = md5( $path . serialize( $postType ) );
|
233 |
+
$cacheKey = "get_page_by_path:$hash:$lastChanged";
|
234 |
+
$cached = wp_cache_get( $cacheKey, 'aioseo_posts_by_path' );
|
235 |
+
|
236 |
+
if ( false !== $cached ) {
|
237 |
+
// Special case: '0' is a bad `$path`.
|
238 |
+
if ( '0' === $cached || 0 === $cached ) {
|
239 |
+
return false;
|
240 |
+
}
|
241 |
+
return get_post( $cached, $output );
|
242 |
+
}
|
243 |
+
|
244 |
+
$path = rawurlencode( urldecode( $path ) );
|
245 |
+
$path = str_replace( '%2F', '/', $path );
|
246 |
+
$path = str_replace( '%20', ' ', $path );
|
247 |
+
$parts = explode( '/', trim( $path, '/' ) );
|
248 |
+
$reversedParts = array_reverse( $parts );
|
249 |
+
$postNames = "'" . implode( "','", $parts ) . "'";
|
250 |
+
|
251 |
+
$postTypes = is_array( $postType ) ? $postType : [ $postType, 'attachment' ];
|
252 |
+
$postTypes = "'" . implode( "','", $postTypes ) . "'";
|
253 |
+
|
254 |
+
$posts = aioseo()->db->start( 'posts' )
|
255 |
+
->select( 'ID, post_name, post_parent, post_type' )
|
256 |
+
->whereRaw( "post_name in ( $postNames )" )
|
257 |
+
->whereRaw( "post_type in ( $postTypes )" )
|
258 |
+
->run()
|
259 |
+
->result();
|
260 |
+
|
261 |
+
$foundId = 0;
|
262 |
+
foreach ( $posts as $post ) {
|
263 |
+
if ( $post->post_name === $reversedParts[0] ) {
|
264 |
+
$count = 0;
|
265 |
+
$p = $post;
|
266 |
+
|
267 |
+
// Loop through the given path parts from right to left, ensuring each matches the post ancestry.
|
268 |
+
while ( 0 !== (int) $p->post_parent && isset( $posts[ $p->post_parent ] ) ) {
|
269 |
+
$count++;
|
270 |
+
$parent = $posts[ $p->post_parent ];
|
271 |
+
if ( ! isset( $reversedParts[ $count ] ) || $parent->post_name !== $reversedParts[ $count ] ) {
|
272 |
+
break;
|
273 |
+
}
|
274 |
+
$p = $parent;
|
275 |
+
}
|
276 |
+
|
277 |
+
if (
|
278 |
+
0 === (int) $p->post_parent &&
|
279 |
+
( ! is_post_type_hierarchical( $p->post_type ) || count( $reversedParts ) === $count + 1 ) &&
|
280 |
+
$p->post_name === $reversedParts[ $count ]
|
281 |
+
) {
|
282 |
+
$foundId = $post->ID;
|
283 |
+
if ( $post->post_type === $postType ) {
|
284 |
+
break;
|
285 |
+
}
|
286 |
+
}
|
287 |
+
}
|
288 |
+
}
|
289 |
+
|
290 |
+
// We cache misses as well as hits.
|
291 |
+
wp_cache_set( $cacheKey, $foundId, 'aioseo_posts_by_path' );
|
292 |
+
return $foundId ? get_post( $foundId, $output ) : false;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Validates a URL.
|
297 |
+
*
|
298 |
+
* @since 4.1.2
|
299 |
+
*
|
300 |
+
* @param string $url The url.
|
301 |
+
* @return bool Is it a valid/safe url.
|
302 |
+
*/
|
303 |
+
public function isUrl( $url ) {
|
304 |
+
return esc_url_raw( $url ) === $url;
|
305 |
+
}
|
306 |
+
}
|
app/Common/Traits/Options.php
CHANGED
@@ -13,22 +13,31 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
13 |
Â
*/
|
14 |
Â
trait Options {
|
15 |
Â
/**
|
16 |
-
*
|
17 |
Â
*
|
18 |
-
* @since 4.
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
19 |
Â
*
|
20 |
Â
* @var string
|
21 |
Â
*/
|
22 |
-
public $
|
23 |
Â
|
24 |
Â
/**
|
25 |
-
* The options
|
26 |
Â
*
|
27 |
Â
* @since 4.0.0
|
28 |
Â
*
|
29 |
-
* @var
|
30 |
Â
*/
|
31 |
-
|
32 |
Â
|
33 |
Â
/**
|
34 |
Â
* Holds the localized options.
|
@@ -121,7 +130,8 @@ trait Options {
|
|
121 |
Â
}
|
122 |
Â
|
123 |
Â
// If we need to set a sub-group, do that now.
|
124 |
-
$
|
Â
|
|
125 |
Â
if ( ! empty( $this->subGroups ) ) {
|
126 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
127 |
Â
$defaults = $defaults[ $subGroup ];
|
@@ -139,8 +149,8 @@ trait Options {
|
|
139 |
Â
return $this->setSubGroup( $name );
|
140 |
Â
}
|
141 |
Â
|
142 |
-
$value = isset( $
|
143 |
-
? $
|
144 |
Â
: (
|
145 |
Â
! empty( $this->arguments[0] )
|
146 |
Â
? $this->arguments[0]
|
@@ -170,7 +180,8 @@ trait Options {
|
|
170 |
Â
}
|
171 |
Â
|
172 |
Â
// If we need to set a sub-group, do that now.
|
173 |
-
$
|
Â
|
|
174 |
Â
if ( ! empty( $this->subGroups ) ) {
|
175 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
176 |
Â
$defaults = $defaults[ $subGroup ];
|
@@ -252,7 +263,8 @@ trait Options {
|
|
252 |
Â
}
|
253 |
Â
|
254 |
Â
// If we need to set a sub-group, do that now.
|
255 |
-
$
|
Â
|
|
256 |
Â
if ( ! empty( $this->subGroups ) ) {
|
257 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
258 |
Â
$defaults = &$defaults[ $subGroup ];
|
@@ -298,14 +310,15 @@ trait Options {
|
|
298 |
Â
update_option( $this->optionsName . '_localized', $this->localized );
|
299 |
Â
}
|
300 |
Â
|
301 |
-
$originalDefaults = $
|
302 |
Â
$pointer = &$originalDefaults;
|
303 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
304 |
Â
$pointer = &$pointer[ $subGroup ];
|
305 |
Â
}
|
306 |
Â
$pointer = $defaults;
|
307 |
Â
|
308 |
-
$
|
Â
|
|
309 |
Â
|
310 |
Â
$this->resetGroups();
|
311 |
Â
|
@@ -326,7 +339,8 @@ trait Options {
|
|
326 |
Â
}
|
327 |
Â
|
328 |
Â
// If we need to set a sub-group, do that now.
|
329 |
-
$
|
Â
|
|
330 |
Â
if ( ! empty( $this->subGroups ) ) {
|
331 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
332 |
Â
$defaults = &$defaults[ $subGroup ];
|
@@ -365,7 +379,8 @@ trait Options {
|
|
365 |
Â
}
|
366 |
Â
|
367 |
Â
// If we need to set a sub-group, do that now.
|
368 |
-
$
|
Â
|
|
369 |
Â
if ( ! empty( $this->subGroups ) ) {
|
370 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
371 |
Â
$defaults = &$defaults[ $subGroup ];
|
@@ -388,11 +403,12 @@ trait Options {
|
|
388 |
Â
|
389 |
Â
unset( $defaults[ $name ]['value'] );
|
390 |
Â
|
391 |
-
$
|
392 |
-
|
393 |
-
$this->update();
|
394 |
Â
|
395 |
Â
$this->resetGroups();
|
Â
|
|
Â
|
|
396 |
Â
}
|
397 |
Â
|
398 |
Â
/**
|
@@ -405,13 +421,15 @@ trait Options {
|
|
405 |
Â
* @return array An array of options.
|
406 |
Â
*/
|
407 |
Â
public function all( $include = [], $exclude = [] ) {
|
408 |
-
|
409 |
-
$this->
|
410 |
Â
|
411 |
-
|
Â
|
|
412 |
Â
|
413 |
Â
// Refactor options.
|
414 |
-
$
|
Â
|
|
415 |
Â
|
416 |
Â
$this->groupKey = null;
|
417 |
Â
|
@@ -419,13 +437,13 @@ trait Options {
|
|
419 |
Â
return $this->allFiltered( $refactored, $include, $exclude );
|
420 |
Â
}
|
421 |
Â
|
422 |
-
if ( empty( $
|
423 |
Â
$all = $refactored[ $originalGroupKey ];
|
424 |
Â
return $this->allFiltered( $all, $include, $exclude );
|
425 |
Â
}
|
426 |
Â
|
427 |
Â
$returnable = &$refactored[ $originalGroupKey ];
|
428 |
-
foreach ( $
|
429 |
Â
$returnable = &$returnable[ $subGroup ];
|
430 |
Â
}
|
431 |
Â
|
@@ -443,12 +461,17 @@ trait Options {
|
|
443 |
Â
* @return void
|
444 |
Â
*/
|
445 |
Â
public function reset( $include = [], $exclude = [] ) {
|
Â
|
|
Â
|
|
Â
|
|
446 |
Â
// Make sure our dynamic options have loaded.
|
447 |
-
$this->init(
|
Â
|
|
Â
|
|
448 |
Â
|
449 |
Â
// If we don't have a group key set, it means we want to reset everything.
|
450 |
-
if ( empty( $
|
451 |
-
$groupKeys = array_keys( $
|
452 |
Â
foreach ( $groupKeys as $groupKey ) {
|
453 |
Â
$this->groupKey = $groupKey;
|
454 |
Â
$this->reset();
|
@@ -459,25 +482,27 @@ trait Options {
|
|
459 |
Â
}
|
460 |
Â
|
461 |
Â
// If we need to set a sub-group, do that now.
|
462 |
-
$keys = array_merge( [ $
|
463 |
-
$defaults = $
|
464 |
-
if ( ! empty( $
|
465 |
-
foreach ( $
|
466 |
Â
$defaults = $defaults[ $subGroup ];
|
467 |
Â
}
|
468 |
Â
}
|
469 |
Â
|
470 |
Â
// Refactor options.
|
471 |
-
$
|
Â
|
|
472 |
Â
|
473 |
-
$originalDefaults = $
|
474 |
Â
$pointer = &$originalDefaults;
|
475 |
-
foreach ( $
|
476 |
Â
$pointer = &$pointer[ $subGroup ];
|
477 |
Â
}
|
478 |
Â
$pointer = $defaults;
|
479 |
Â
|
480 |
-
$
|
Â
|
|
481 |
Â
|
482 |
Â
$this->resetGroups();
|
483 |
Â
|
@@ -527,22 +552,20 @@ trait Options {
|
|
527 |
Â
$optionOrGroup = '_aioseo_type';
|
528 |
Â
}
|
529 |
Â
|
530 |
-
|
Â
|
|
531 |
Â
|
532 |
-
|
533 |
Â
if ( ! $hasInitialized ) {
|
534 |
-
|
535 |
-
|
536 |
-
$hasInitialized = true;
|
537 |
-
$this->init( true );
|
538 |
-
}
|
539 |
-
}
|
540 |
Â
}
|
541 |
Â
|
542 |
Â
// If we need to set a sub-group, do that now.
|
543 |
-
$
|
544 |
-
|
545 |
-
|
Â
|
|
546 |
Â
$defaults = $defaults[ $subGroup ];
|
547 |
Â
}
|
548 |
Â
}
|
@@ -558,17 +581,6 @@ trait Options {
|
|
558 |
Â
return false;
|
559 |
Â
}
|
560 |
Â
|
561 |
-
/**
|
562 |
-
* In order to not have a conflict, we need to return a clone.
|
563 |
-
*
|
564 |
-
* @since 4.0.0
|
565 |
-
*
|
566 |
-
* @return Options The cloned Options object.
|
567 |
-
*/
|
568 |
-
public function noConflict() {
|
569 |
-
return clone $this;
|
570 |
-
}
|
571 |
-
|
572 |
Â
/**
|
573 |
Â
* Filters the results based on passed in array.
|
574 |
Â
*
|
@@ -655,19 +667,63 @@ trait Options {
|
|
655 |
Â
*
|
656 |
Â
* @since 4.0.0
|
657 |
Â
*
|
658 |
-
* @param
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
659 |
Â
* @return void
|
660 |
Â
*/
|
661 |
-
public function
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
662 |
Â
// First, we need to filter our options.
|
663 |
-
$options = $this->filterOptions( $
|
664 |
Â
|
665 |
Â
// Refactor options.
|
666 |
Â
$refactored = $this->convertOptionsToValues( $options );
|
667 |
Â
|
668 |
Â
$this->resetGroups();
|
669 |
Â
|
670 |
-
update_option( $
|
671 |
Â
}
|
672 |
Â
|
673 |
Â
/**
|
@@ -680,7 +736,8 @@ trait Options {
|
|
680 |
Â
* @return array An array of filtered options.
|
681 |
Â
*/
|
682 |
Â
public function filterOptions( $defaults, $options = null ) {
|
683 |
-
$
|
Â
|
|
684 |
Â
return $this->filterRecursively( $options, $defaults );
|
685 |
Â
}
|
686 |
Â
|
@@ -694,6 +751,10 @@ trait Options {
|
|
694 |
Â
* @return array A filtered array of options.
|
695 |
Â
*/
|
696 |
Â
public function filterRecursively( $options, $defaults ) {
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
697 |
Â
foreach ( $options as $key => $value ) {
|
698 |
Â
if ( ! isset( $defaults[ $key ] ) ) {
|
699 |
Â
unset( $options[ $key ] );
|
@@ -734,6 +795,8 @@ trait Options {
|
|
734 |
Â
$array[ $k ] = sanitize_text_field( $preserveHtml ? htmlspecialchars( $v, ENT_NOQUOTES, 'UTF-8' ) : $v );
|
735 |
Â
}
|
736 |
Â
return $array;
|
Â
|
|
Â
|
|
737 |
Â
}
|
738 |
Â
}
|
739 |
Â
|
@@ -856,9 +919,6 @@ trait Options {
|
|
856 |
Â
|
857 |
Â
// @TODO: See if we need this? could just eliminate.
|
858 |
Â
if ( ! is_array( $value ) ) {
|
859 |
-
$values[ $key ] = [
|
860 |
-
'value' => $value
|
861 |
-
];
|
862 |
Â
continue;
|
863 |
Â
}
|
864 |
Â
|
@@ -880,14 +940,14 @@ trait Options {
|
|
880 |
Â
* @param array $options The options array.
|
881 |
Â
* @return array The converted options array.
|
882 |
Â
*/
|
883 |
-
|
884 |
Â
foreach ( $options as $key => $value ) {
|
885 |
Â
if ( ! is_array( $value ) ) {
|
886 |
Â
continue;
|
887 |
Â
}
|
888 |
Â
|
889 |
-
if ( ! isset( $value[
|
890 |
-
$options[ $key ] = $this->convertOptionsToValues( $value );
|
891 |
Â
continue;
|
892 |
Â
}
|
893 |
Â
|
@@ -951,6 +1011,62 @@ trait Options {
|
|
951 |
Â
* @return void
|
952 |
Â
*/
|
953 |
Â
public function refresh() {
|
Â
|
|
Â
|
|
954 |
Â
$this->init();
|
955 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
956 |
Â
}
|
13 |
Â
*/
|
14 |
Â
trait Options {
|
15 |
Â
/**
|
16 |
+
* Whether or not this instance is a clone.
|
17 |
Â
*
|
18 |
+
* @since 4.1.4
|
19 |
+
*
|
20 |
+
* @var boolean
|
21 |
+
*/
|
22 |
+
public $isClone = false;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Whether or not the options need to be saved to the DB.
|
26 |
+
*
|
27 |
+
* @since 4.1.4
|
28 |
Â
*
|
29 |
Â
* @var string
|
30 |
Â
*/
|
31 |
+
public $shouldSave = false;
|
32 |
Â
|
33 |
Â
/**
|
34 |
+
* The name to lookup the options with.
|
35 |
Â
*
|
36 |
Â
* @since 4.0.0
|
37 |
Â
*
|
38 |
+
* @var string
|
39 |
Â
*/
|
40 |
+
public $optionsName = '';
|
41 |
Â
|
42 |
Â
/**
|
43 |
Â
* Holds the localized options.
|
130 |
Â
}
|
131 |
Â
|
132 |
Â
// If we need to set a sub-group, do that now.
|
133 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
134 |
+
$defaults = $cachedOptions[ $this->groupKey ];
|
135 |
Â
if ( ! empty( $this->subGroups ) ) {
|
136 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
137 |
Â
$defaults = $defaults[ $subGroup ];
|
149 |
Â
return $this->setSubGroup( $name );
|
150 |
Â
}
|
151 |
Â
|
152 |
+
$value = isset( $cachedOptions[ $this->groupKey ][ $name ]['value'] )
|
153 |
+
? $cachedOptions[ $this->groupKey ][ $name ]['value']
|
154 |
Â
: (
|
155 |
Â
! empty( $this->arguments[0] )
|
156 |
Â
? $this->arguments[0]
|
180 |
Â
}
|
181 |
Â
|
182 |
Â
// If we need to set a sub-group, do that now.
|
183 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
184 |
+
$defaults = $cachedOptions[ $this->groupKey ];
|
185 |
Â
if ( ! empty( $this->subGroups ) ) {
|
186 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
187 |
Â
$defaults = $defaults[ $subGroup ];
|
263 |
Â
}
|
264 |
Â
|
265 |
Â
// If we need to set a sub-group, do that now.
|
266 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
267 |
+
$defaults = json_decode( wp_json_encode( $cachedOptions[ $this->groupKey ] ), true );
|
268 |
Â
if ( ! empty( $this->subGroups ) ) {
|
269 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
270 |
Â
$defaults = &$defaults[ $subGroup ];
|
310 |
Â
update_option( $this->optionsName . '_localized', $this->localized );
|
311 |
Â
}
|
312 |
Â
|
313 |
+
$originalDefaults = json_decode( wp_json_encode( $cachedOptions[ $this->groupKey ] ), true );
|
314 |
Â
$pointer = &$originalDefaults;
|
315 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
316 |
Â
$pointer = &$pointer[ $subGroup ];
|
317 |
Â
}
|
318 |
Â
$pointer = $defaults;
|
319 |
Â
|
320 |
+
$cachedOptions[ $this->groupKey ] = $originalDefaults;
|
321 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, $cachedOptions );
|
322 |
Â
|
323 |
Â
$this->resetGroups();
|
324 |
Â
|
339 |
Â
}
|
340 |
Â
|
341 |
Â
// If we need to set a sub-group, do that now.
|
342 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
343 |
+
$defaults = $cachedOptions[ $this->groupKey ];
|
344 |
Â
if ( ! empty( $this->subGroups ) ) {
|
345 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
346 |
Â
$defaults = &$defaults[ $subGroup ];
|
379 |
Â
}
|
380 |
Â
|
381 |
Â
// If we need to set a sub-group, do that now.
|
382 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
383 |
+
$defaults = json_decode( wp_json_encode( $cachedOptions[ $this->groupKey ] ), true );
|
384 |
Â
if ( ! empty( $this->subGroups ) ) {
|
385 |
Â
foreach ( $this->subGroups as $subGroup ) {
|
386 |
Â
$defaults = &$defaults[ $subGroup ];
|
403 |
Â
|
404 |
Â
unset( $defaults[ $name ]['value'] );
|
405 |
Â
|
406 |
+
$cachedOptions[ $this->groupKey ] = $defaults;
|
407 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, $cachedOptions );
|
Â
|
|
408 |
Â
|
409 |
Â
$this->resetGroups();
|
410 |
+
|
411 |
+
$this->update();
|
412 |
Â
}
|
413 |
Â
|
414 |
Â
/**
|
421 |
Â
* @return array An array of options.
|
422 |
Â
*/
|
423 |
Â
public function all( $include = [], $exclude = [] ) {
|
424 |
+
$originalGroupKey = $this->groupKey;
|
425 |
+
$originalSubGroups = $this->subGroups;
|
426 |
Â
|
427 |
+
// Make sure our dynamic options have loaded.
|
428 |
+
$this->init();
|
429 |
Â
|
430 |
Â
// Refactor options.
|
431 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
432 |
+
$refactored = $this->convertOptionsToValues( $cachedOptions );
|
433 |
Â
|
434 |
Â
$this->groupKey = null;
|
435 |
Â
|
437 |
Â
return $this->allFiltered( $refactored, $include, $exclude );
|
438 |
Â
}
|
439 |
Â
|
440 |
+
if ( empty( $originalSubGroups ) ) {
|
441 |
Â
$all = $refactored[ $originalGroupKey ];
|
442 |
Â
return $this->allFiltered( $all, $include, $exclude );
|
443 |
Â
}
|
444 |
Â
|
445 |
Â
$returnable = &$refactored[ $originalGroupKey ];
|
446 |
+
foreach ( $originalSubGroups as $subGroup ) {
|
447 |
Â
$returnable = &$returnable[ $subGroup ];
|
448 |
Â
}
|
449 |
Â
|
461 |
Â
* @return void
|
462 |
Â
*/
|
463 |
Â
public function reset( $include = [], $exclude = [] ) {
|
464 |
+
$originalGroupKey = $this->groupKey;
|
465 |
+
$originalSubGroups = $this->subGroups;
|
466 |
+
|
467 |
Â
// Make sure our dynamic options have loaded.
|
468 |
+
$this->init();
|
469 |
+
|
470 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
471 |
Â
|
472 |
Â
// If we don't have a group key set, it means we want to reset everything.
|
473 |
+
if ( empty( $originalGroupKey ) ) {
|
474 |
+
$groupKeys = array_keys( $cachedOptions );
|
475 |
Â
foreach ( $groupKeys as $groupKey ) {
|
476 |
Â
$this->groupKey = $groupKey;
|
477 |
Â
$this->reset();
|
482 |
Â
}
|
483 |
Â
|
484 |
Â
// If we need to set a sub-group, do that now.
|
485 |
+
$keys = array_merge( [ $originalGroupKey ], $originalSubGroups );
|
486 |
+
$defaults = json_decode( wp_json_encode( $cachedOptions[ $originalGroupKey ] ), true );
|
487 |
+
if ( ! empty( $originalSubGroups ) ) {
|
488 |
+
foreach ( $originalSubGroups as $subGroup ) {
|
489 |
Â
$defaults = $defaults[ $subGroup ];
|
490 |
Â
}
|
491 |
Â
}
|
492 |
Â
|
493 |
Â
// Refactor options.
|
494 |
+
$resetValues = $this->resetValues( $defaults, $this->defaultsMerged, $keys, $include, $exclude );
|
495 |
+
$defaults = array_replace_recursive( $defaults, $resetValues );
|
496 |
Â
|
497 |
+
$originalDefaults = json_decode( wp_json_encode( $cachedOptions[ $originalGroupKey ] ), true );
|
498 |
Â
$pointer = &$originalDefaults;
|
499 |
+
foreach ( $originalSubGroups as $subGroup ) {
|
500 |
Â
$pointer = &$pointer[ $subGroup ];
|
501 |
Â
}
|
502 |
Â
$pointer = $defaults;
|
503 |
Â
|
504 |
+
$cachedOptions[ $originalGroupKey ] = $originalDefaults;
|
505 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, $cachedOptions );
|
506 |
Â
|
507 |
Â
$this->resetGroups();
|
508 |
Â
|
552 |
Â
$optionOrGroup = '_aioseo_type';
|
553 |
Â
}
|
554 |
Â
|
555 |
+
$originalGroupKey = $this->groupKey;
|
556 |
+
$originalSubGroups = $this->subGroups;
|
557 |
Â
|
558 |
+
static $hasInitialized = false;
|
559 |
Â
if ( ! $hasInitialized ) {
|
560 |
+
$hasInitialized = true;
|
561 |
+
$this->init();
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
562 |
Â
}
|
563 |
Â
|
564 |
Â
// If we need to set a sub-group, do that now.
|
565 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
566 |
+
$defaults = $originalGroupKey ? $cachedOptions[ $originalGroupKey ] : $cachedOptions;
|
567 |
+
if ( ! empty( $originalSubGroups ) ) {
|
568 |
+
foreach ( $originalSubGroups as $subGroup ) {
|
569 |
Â
$defaults = $defaults[ $subGroup ];
|
570 |
Â
}
|
571 |
Â
}
|
581 |
Â
return false;
|
582 |
Â
}
|
583 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
584 |
Â
/**
|
585 |
Â
* Filters the results based on passed in array.
|
586 |
Â
*
|
667 |
Â
*
|
668 |
Â
* @since 4.0.0
|
669 |
Â
*
|
670 |
+
* @param string $optionsName An optional option name to update.
|
671 |
+
* @param string $defaults The defaults to filter the options by.
|
672 |
+
* @param array|null $options An optional options array.
|
673 |
+
* @return void
|
674 |
+
*/
|
675 |
+
public function update( $optionsName = null, $defaults = null, $options = null ) {
|
676 |
+
$optionsName = empty( $optionsName ) ? $this->optionsName : $optionsName;
|
677 |
+
$defaults = empty( $defaults ) ? $this->defaults : $defaults;
|
678 |
+
|
679 |
+
// First, we need to filter our options.
|
680 |
+
$options = $this->filterOptions( $defaults, $options );
|
681 |
+
|
682 |
+
// Refactor options.
|
683 |
+
$refactored = $this->convertOptionsToValues( $options );
|
684 |
+
|
685 |
+
$this->resetGroups();
|
686 |
+
|
687 |
+
// The following needs to happen here (possibly a clone) as well as in the main instance.
|
688 |
+
$originalInstance = $this->getOriginalInstance();
|
689 |
+
|
690 |
+
// Update the DB options.
|
691 |
+
aioseo()->optionsCache->setDb( $optionsName, $refactored );
|
692 |
+
|
693 |
+
// Force a save here and in the main class.
|
694 |
+
$this->shouldSave = true;
|
695 |
+
$originalInstance->shouldSave = true;
|
696 |
+
}
|
697 |
+
|
698 |
+
/**
|
699 |
+
* Updates the options in the database.
|
700 |
+
*
|
701 |
+
* @since 4.1.4
|
702 |
+
*
|
703 |
+
* @param boolean $force Whether or not to force an immediate save.
|
704 |
+
* @param string $optionsName An optional option name to update.
|
705 |
+
* @param string $defaults The defaults to filter the options by.
|
706 |
Â
* @return void
|
707 |
Â
*/
|
708 |
+
public function save( $force = false, $optionsName = null, $defaults = null ) {
|
709 |
+
if ( ! $this->shouldSave && ! $force ) {
|
710 |
+
return;
|
711 |
+
}
|
712 |
+
|
713 |
+
$optionsName = empty( $optionsName ) ? $this->optionsName : $optionsName;
|
714 |
+
$defaults = empty( $defaults ) ? $this->defaults : $defaults;
|
715 |
+
|
716 |
+
$this->update( $optionsName );
|
717 |
+
|
718 |
Â
// First, we need to filter our options.
|
719 |
+
$options = $this->filterOptions( $defaults, null, $optionsName );
|
720 |
Â
|
721 |
Â
// Refactor options.
|
722 |
Â
$refactored = $this->convertOptionsToValues( $options );
|
723 |
Â
|
724 |
Â
$this->resetGroups();
|
725 |
Â
|
726 |
+
update_option( $optionsName, wp_json_encode( $refactored ) );
|
727 |
Â
}
|
728 |
Â
|
729 |
Â
/**
|
736 |
Â
* @return array An array of filtered options.
|
737 |
Â
*/
|
738 |
Â
public function filterOptions( $defaults, $options = null ) {
|
739 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
740 |
+
$options = ! empty( $options ) ? $options : json_decode( wp_json_encode( $cachedOptions ), true );
|
741 |
Â
return $this->filterRecursively( $options, $defaults );
|
742 |
Â
}
|
743 |
Â
|
751 |
Â
* @return array A filtered array of options.
|
752 |
Â
*/
|
753 |
Â
public function filterRecursively( $options, $defaults ) {
|
754 |
+
if ( ! is_array( $options ) ) {
|
755 |
+
return $options;
|
756 |
+
}
|
757 |
+
|
758 |
Â
foreach ( $options as $key => $value ) {
|
759 |
Â
if ( ! isset( $defaults[ $key ] ) ) {
|
760 |
Â
unset( $options[ $key ] );
|
795 |
Â
$array[ $k ] = sanitize_text_field( $preserveHtml ? htmlspecialchars( $v, ENT_NOQUOTES, 'UTF-8' ) : $v );
|
796 |
Â
}
|
797 |
Â
return $array;
|
798 |
+
case 'float':
|
799 |
+
return floatval( $value );
|
800 |
Â
}
|
801 |
Â
}
|
802 |
Â
|
919 |
Â
|
920 |
Â
// @TODO: See if we need this? could just eliminate.
|
921 |
Â
if ( ! is_array( $value ) ) {
|
Â
|
|
Â
|
|
Â
|
|
922 |
Â
continue;
|
923 |
Â
}
|
924 |
Â
|
940 |
Â
* @param array $options The options array.
|
941 |
Â
* @return array The converted options array.
|
942 |
Â
*/
|
943 |
+
public function convertOptionsToValues( $options, $optionKey = 'type' ) {
|
944 |
Â
foreach ( $options as $key => $value ) {
|
945 |
Â
if ( ! is_array( $value ) ) {
|
946 |
Â
continue;
|
947 |
Â
}
|
948 |
Â
|
949 |
+
if ( ! isset( $value[ $optionKey ] ) ) {
|
950 |
+
$options[ $key ] = $this->convertOptionsToValues( $value, $optionKey );
|
951 |
Â
continue;
|
952 |
Â
}
|
953 |
Â
|
1011 |
Â
* @return void
|
1012 |
Â
*/
|
1013 |
Â
public function refresh() {
|
1014 |
+
// Reset DB options to clear the cache.
|
1015 |
+
aioseo()->optionsCache->resetDb();
|
1016 |
Â
$this->init();
|
1017 |
Â
}
|
1018 |
+
|
1019 |
+
/**
|
1020 |
+
* Returns the DB options.
|
1021 |
+
*
|
1022 |
+
* @since 4.1.4
|
1023 |
+
*
|
1024 |
+
* @param string $optionsName The options name.
|
1025 |
+
* @return array The options.
|
1026 |
+
*/
|
1027 |
+
public function getDbOptions( $optionsName ) {
|
1028 |
+
$cache = aioseo()->optionsCache->getDb( $optionsName );
|
1029 |
+
if ( empty( $cache ) ) {
|
1030 |
+
$options = json_decode( get_option( $optionsName ), true );
|
1031 |
+
$options = ! empty( $options ) ? $options : [];
|
1032 |
+
|
1033 |
+
// Set the cache.
|
1034 |
+
aioseo()->optionsCache->setDb( $optionsName, $options );
|
1035 |
+
}
|
1036 |
+
|
1037 |
+
return aioseo()->optionsCache->getDb( $optionsName );
|
1038 |
+
}
|
1039 |
+
|
1040 |
+
/**
|
1041 |
+
* In order to not have a conflict, we need to return a clone.
|
1042 |
+
*
|
1043 |
+
* @since 4.0.0
|
1044 |
+
*
|
1045 |
+
* @return Options The cloned Options object.
|
1046 |
+
*/
|
1047 |
+
public function noConflict() {
|
1048 |
+
$class = clone $this;
|
1049 |
+
$class->isClone = true;
|
1050 |
+
return $class;
|
1051 |
+
}
|
1052 |
+
|
1053 |
+
/**
|
1054 |
+
* Get original instance. Since this could be a cloned object, let's get the original instance.
|
1055 |
+
*
|
1056 |
+
* @since 4.1.4
|
1057 |
+
*
|
1058 |
+
* @return self
|
1059 |
+
*/
|
1060 |
+
public function getOriginalInstance() {
|
1061 |
+
if ( ! $this->isClone ) {
|
1062 |
+
return $this;
|
1063 |
+
}
|
1064 |
+
|
1065 |
+
$class = new \ReflectionClass( get_called_class() );
|
1066 |
+
$optionName = aioseo()->helpers->toCamelCase( $class->getShortName() );
|
1067 |
+
|
1068 |
+
if ( isset( aioseo()->{ $optionName } ) ) {
|
1069 |
+
return aioseo()->{ $optionName };
|
1070 |
+
}
|
1071 |
+
}
|
1072 |
Â
}
|
app/Common/Utils/Database.php
CHANGED
@@ -273,7 +273,7 @@ class Database {
|
|
273 |
Â
* @return boolean Whether or not the table exists.
|
274 |
Â
*/
|
275 |
Â
public function tableExists( $table ) {
|
276 |
-
$results = $this->db->get_results(
|
277 |
Â
return ! ( empty( $results ) );
|
278 |
Â
}
|
279 |
Â
|
@@ -696,7 +696,8 @@ class Database {
|
|
696 |
Â
}
|
697 |
Â
|
698 |
Â
foreach ( $values as &$value ) {
|
699 |
-
|
Â
|
|
700 |
Â
// No change.
|
701 |
Â
} elseif ( is_null( $value ) || false !== stristr( $value, 'NULL' ) ) {
|
702 |
Â
// Change to a true NULL value.
|
273 |
Â
* @return boolean Whether or not the table exists.
|
274 |
Â
*/
|
275 |
Â
public function tableExists( $table ) {
|
276 |
+
$results = $this->db->get_results( "SHOW TABLES LIKE '" . $this->prefix . $table . "'" );
|
277 |
Â
return ! ( empty( $results ) );
|
278 |
Â
}
|
279 |
Â
|
696 |
Â
}
|
697 |
Â
|
698 |
Â
foreach ( $values as &$value ) {
|
699 |
+
// Note: We can no longer check for `is_numeric` because a value like `61021e6242255` returns true and breaks the query.
|
700 |
+
if ( is_integer( $value ) || is_float( $value ) ) {
|
701 |
Â
// No change.
|
702 |
Â
} elseif ( is_null( $value ) || false !== stristr( $value, 'NULL' ) ) {
|
703 |
Â
// Change to a true NULL value.
|
app/Common/Utils/Helpers.php
CHANGED
@@ -6,8 +6,6 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
6 |
Â
exit;
|
7 |
Â
}
|
8 |
Â
|
9 |
-
use AIOSEO\Plugin\Common\Models;
|
10 |
-
use AIOSEO\Plugin\Common\Tools;
|
11 |
Â
use AIOSEO\Plugin\Common\Traits\Helpers as TraitHelpers;
|
12 |
Â
|
13 |
Â
/**
|
@@ -17,20 +15,18 @@ use AIOSEO\Plugin\Common\Traits\Helpers as TraitHelpers;
|
|
17 |
Â
*/
|
18 |
Â
class Helpers {
|
19 |
Â
use TraitHelpers\ActionScheduler;
|
Â
|
|
20 |
Â
use TraitHelpers\Constants;
|
21 |
Â
use TraitHelpers\DateTime;
|
22 |
-
use TraitHelpers\
|
23 |
Â
use TraitHelpers\Shortcodes;
|
24 |
Â
use TraitHelpers\Strings;
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
* @var bool
|
32 |
-
*/
|
33 |
-
private static $connection = false;
|
34 |
Â
|
35 |
Â
/**
|
36 |
Â
* Generate a UTM URL from the url and medium/content passed in.
|
@@ -66,1816 +62,94 @@ class Helpers {
|
|
66 |
Â
|
67 |
Â
// Return the new URL.
|
68 |
Â
$url = add_query_arg( $args, $url );
|
69 |
-
return $esc ? esc_url( $url ) : $url;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Get the home page object.
|
74 |
-
*
|
75 |
-
* @since 4.1.1
|
76 |
-
*
|
77 |
-
* @return WP_Post|null The home page.
|
78 |
-
*/
|
79 |
-
public function getHomePage() {
|
80 |
-
$homePageId = $this->getHomePageId();
|
81 |
-
|
82 |
-
return $homePageId ? get_post( $homePageId ) : null;
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Get the ID of the home page.
|
87 |
-
*
|
88 |
-
* @since 4.0.0
|
89 |
-
*
|
90 |
-
* @return integer|null The home page ID.
|
91 |
-
*/
|
92 |
-
public function getHomePageId() {
|
93 |
-
$pageShowOnFront = ( 'page' === get_option( 'show_on_front' ) );
|
94 |
-
$pageOnFrontId = get_option( 'page_on_front' );
|
95 |
-
|
96 |
-
return $pageShowOnFront && $pageOnFrontId ? (int) $pageOnFrontId : null;
|
97 |
-
}
|
98 |
-
|
99 |
-
/**
|
100 |
-
* Returns the blog page.
|
101 |
-
*
|
102 |
-
* @since 4.0.0
|
103 |
-
*
|
104 |
-
* @return WP_Post|null The blog page.
|
105 |
-
*/
|
106 |
-
public function getBlogPage() {
|
107 |
-
$blogPageId = $this->getBlogPageId();
|
108 |
-
|
109 |
-
return $blogPageId ? get_post( $blogPageId ) : null;
|
110 |
-
}
|
111 |
-
|
112 |
-
/**
|
113 |
-
* Gets the current blog page id if it's configured.
|
114 |
-
*
|
115 |
-
* @since 4.1.1
|
116 |
-
*
|
117 |
-
* @return int|null
|
118 |
-
*/
|
119 |
-
public function getBlogPageId() {
|
120 |
-
$pageShowOnFront = ( 'page' === get_option( 'show_on_front' ) );
|
121 |
-
$blogPageId = (int) get_option( 'page_for_posts' );
|
122 |
-
|
123 |
-
return $pageShowOnFront && $blogPageId ? $blogPageId : null;
|
124 |
-
}
|
125 |
-
|
126 |
-
/**
|
127 |
-
* Returns the All in One SEO Logo
|
128 |
-
*
|
129 |
-
* @since 4.0.0
|
130 |
-
*
|
131 |
-
* @param string $width The width of the image.
|
132 |
-
* @param string $height The height of the image.
|
133 |
-
* @param string $colorCode The color of the image.
|
134 |
-
* @return string The logo as a string.
|
135 |
-
*/
|
136 |
-
public function logo( $width, $height, $colorCode ) {
|
137 |
-
return '<svg viewBox="0 0 20 20" width="' . $width . '" height="' . $height . '" fill="none" xmlns="http://www.w3.org/2000/svg" class="aioseo-gear"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.98542 19.9708C15.5002 19.9708 19.9708 15.5002 19.9708 9.98542C19.9708 4.47063 15.5002 0 9.98542 0C4.47063 0 0 4.47063 0 9.98542C0 15.5002 4.47063 19.9708 9.98542 19.9708ZM8.39541 3.65464C8.26016 3.4485 8.0096 3.35211 7.77985 3.43327C7.51816 3.52572 7.26218 3.63445 7.01349 3.7588C6.79519 3.86796 6.68566 4.11731 6.73372 4.36049L6.90493 5.22694C6.949 5.44996 6.858 5.6763 6.68522 5.82009C6.41216 6.04734 6.16007 6.30426 5.93421 6.58864C5.79383 6.76539 5.57233 6.85907 5.35361 6.81489L4.50424 6.6433C4.26564 6.5951 4.02157 6.70788 3.91544 6.93121C3.85549 7.05738 3.79889 7.1862 3.74583 7.31758C3.69276 7.44896 3.64397 7.58105 3.59938 7.71369C3.52048 7.94847 3.61579 8.20398 3.81839 8.34133L4.53958 8.83027C4.72529 8.95617 4.81778 9.1819 4.79534 9.40826C4.75925 9.77244 4.76072 10.136 4.79756 10.4936C4.82087 10.7198 4.72915 10.9459 4.54388 11.0724L3.82408 11.5642C3.62205 11.7022 3.52759 11.9579 3.60713 12.1923C3.69774 12.4593 3.8043 12.7205 3.92615 12.9743C4.03313 13.1971 4.27749 13.3088 4.51581 13.2598L5.36495 13.0851C5.5835 13.0401 5.80533 13.133 5.94623 13.3093C6.16893 13.5879 6.42071 13.8451 6.6994 14.0756C6.87261 14.2188 6.96442 14.4448 6.92112 14.668L6.75296 15.5348C6.70572 15.7782 6.81625 16.0273 7.03511 16.1356C7.15876 16.1967 7.285 16.2545 7.41375 16.3086C7.54251 16.3628 7.67196 16.4126 7.80195 16.4581C8.18224 16.5912 8.71449 16.1147 9.108 15.7625C9.30205 15.5888 9.42174 15.343 9.42301 15.0798C9.42301 15.0784 9.42302 15.077 9.42302 15.0756L9.42301 13.6263C9.42301 13.6109 9.4236 13.5957 9.42476 13.5806C8.26248 13.2971 7.39838 12.2301 7.39838 10.9572V9.41823C7.39838 9.30125 7.49131 9.20642 7.60596 9.20642H8.32584V7.6922C8.32584 7.48312 8.49193 7.31364 8.69683 7.31364C8.90171 7.31364 9.06781 7.48312 9.06781 7.6922V9.20642H11.0155V7.6922C11.0155 7.48312 11.1816 7.31364 11.3865 7.31364C11.5914 7.31364 11.7575 7.48312 11.7575 7.6922V9.20642H12.4773C12.592 9.20642 12.6849 9.30125 12.6849 9.41823V10.9572C12.6849 12.2704 11.7653 13.3643 10.5474 13.6051C10.5477 13.6121 10.5478 13.6192 10.5478 13.6263L10.5478 15.0694C10.5478 15.3377 10.6711 15.5879 10.871 15.7622C11.2715 16.1115 11.8129 16.5837 12.191 16.4502C12.4527 16.3577 12.7086 16.249 12.9573 16.1246C13.1756 16.0155 13.2852 15.7661 13.2371 15.5229L13.0659 14.6565C13.0218 14.4334 13.1128 14.2071 13.2856 14.0633C13.5587 13.8361 13.8107 13.5792 14.0366 13.2948C14.177 13.118 14.3985 13.0244 14.6172 13.0685L15.4666 13.2401C15.7052 13.2883 15.9493 13.1756 16.0554 12.9522C16.1153 12.8261 16.1719 12.6972 16.225 12.5659C16.2781 12.4345 16.3269 12.3024 16.3714 12.1698C16.4503 11.935 16.355 11.6795 16.1524 11.5421L15.4312 11.0532C15.2455 10.9273 15.153 10.7015 15.1755 10.4752C15.2116 10.111 15.2101 9.74744 15.1733 9.38986C15.1499 9.16361 15.2417 8.93757 15.4269 8.811L16.1467 8.31927C16.3488 8.18126 16.4432 7.92558 16.3637 7.69115C16.2731 7.42411 16.1665 7.16292 16.0447 6.90915C15.9377 6.68638 15.6933 6.57462 15.455 6.62366L14.6059 6.79837C14.3873 6.84334 14.1655 6.75048 14.0246 6.57418C13.8019 6.29554 13.5501 6.03832 13.2714 5.80784C13.0982 5.6646 13.0064 5.43858 13.0497 5.2154L13.2179 4.34868C13.2651 4.10521 13.1546 3.85616 12.9357 3.74787C12.8121 3.68669 12.6858 3.62895 12.5571 3.5748C12.4283 3.52065 12.2989 3.47086 12.1689 3.42537C11.9388 3.34485 11.6884 3.44211 11.5538 3.64884L11.0746 4.38475C10.9513 4.57425 10.73 4.66862 10.5082 4.64573C10.1513 4.6089 9.79502 4.61039 9.44459 4.64799C9.22286 4.67177 9.00134 4.57818 8.87731 4.38913L8.39541 3.65464Z" fill="' . $colorCode . '" /></svg>'; // phpcs:ignore Generic.Files.LineLength.MaxExceeded
|
138 |
-
}
|
139 |
-
|
140 |
-
/**
|
141 |
-
* Returns Jed-formatted localization data. Added for backwards-compatibility.
|
142 |
-
*
|
143 |
-
* @since 4.0.0
|
144 |
-
*
|
145 |
-
* @param string $domain Translation domain.
|
146 |
-
* @return array An array of information for the locale.
|
147 |
-
*/
|
148 |
-
public function getJedLocaleData( $domain ) {
|
149 |
-
$translations = get_translations_for_domain( $domain );
|
150 |
-
|
151 |
-
$locale = [
|
152 |
-
'' => [
|
153 |
-
'domain' => $domain,
|
154 |
-
'lang' => is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale(),
|
155 |
-
],
|
156 |
-
];
|
157 |
-
|
158 |
-
if ( ! empty( $translations->headers['Plural-Forms'] ) ) {
|
159 |
-
$locale['']['plural_forms'] = $translations->headers['Plural-Forms'];
|
160 |
-
}
|
161 |
-
|
162 |
-
foreach ( $translations->entries as $msgid => $entry ) {
|
163 |
-
$locale[ $msgid ] = $entry->translations;
|
164 |
-
}
|
165 |
-
|
166 |
-
return $locale;
|
167 |
-
}
|
168 |
-
|
169 |
-
/**
|
170 |
-
* Checks whether current page supports meta.
|
171 |
-
*
|
172 |
-
* @since 4.0.0
|
173 |
-
*
|
174 |
-
* @return boolean Whether the current page supports meta.
|
175 |
-
*/
|
176 |
-
public function supportsMeta() {
|
177 |
-
return ! is_date() && ! is_author() && ! is_search() && ! is_404();
|
178 |
-
}
|
179 |
-
|
180 |
-
/**
|
181 |
-
* Checks whether the current page is a taxonomy term archive.
|
182 |
-
*
|
183 |
-
* @since 4.0.0
|
184 |
-
*
|
185 |
-
* @return boolean Whether the current page is a taxonomy term archive.
|
186 |
-
*/
|
187 |
-
public function isTaxTerm() {
|
188 |
-
$object = get_queried_object();
|
189 |
-
return $object instanceof \WP_Term;
|
190 |
-
}
|
191 |
-
|
192 |
-
/**
|
193 |
-
* Checks whether the current page is a static one.
|
194 |
-
*
|
195 |
-
* @since 4.0.0
|
196 |
-
*
|
197 |
-
* @return boolean Whether the current page is a static one.
|
198 |
-
*/
|
199 |
-
public function isStaticPage() {
|
200 |
-
return $this->isStaticHomePage() || $this->isStaticPostsPage() || $this->isWooCommerceShopPage();
|
201 |
-
}
|
202 |
-
|
203 |
-
/**
|
204 |
-
* Checks whether the current page is the static homepage.
|
205 |
-
*
|
206 |
-
* @since 4.0.0
|
207 |
-
*
|
208 |
-
* @param mixed $post Pass in an optional post to check if its the static home page.
|
209 |
-
* @return boolean Whether the current page is the static homepage.
|
210 |
-
*/
|
211 |
-
public function isStaticHomePage( $post = null ) {
|
212 |
-
static $isHomePage = null;
|
213 |
-
if ( null !== $isHomePage ) {
|
214 |
-
return $isHomePage;
|
215 |
-
}
|
216 |
-
|
217 |
-
$post = aioseo()->helpers->getPost( $post );
|
218 |
-
return ( 'page' === get_option( 'show_on_front' ) && ! empty( $post->ID ) && (int) get_option( 'page_on_front' ) === $post->ID );
|
219 |
-
}
|
220 |
-
|
221 |
-
/**
|
222 |
-
* Checks whether the current page is the static posts page.
|
223 |
-
*
|
224 |
-
* @since 4.0.0
|
225 |
-
*
|
226 |
-
* @return boolean Whether the current page is the static posts page.
|
227 |
-
*/
|
228 |
-
public function isStaticPostsPage() {
|
229 |
-
return is_home() && ( 0 !== (int) get_option( 'page_for_posts' ) );
|
230 |
-
}
|
231 |
-
|
232 |
-
/**
|
233 |
-
* Checks whether BuddyPress is active.
|
234 |
-
*
|
235 |
-
* @since 4.0.0
|
236 |
-
*
|
237 |
-
* @return boolean
|
238 |
-
*/
|
239 |
-
public function isBuddyPressActive() {
|
240 |
-
return class_exists( 'BuddyPress' );
|
241 |
-
}
|
242 |
-
|
243 |
-
/**
|
244 |
-
* Checks whether the queried object is a buddy press user page.
|
245 |
-
*
|
246 |
-
* @since 4.0.0
|
247 |
-
*
|
248 |
-
* @return boolean
|
249 |
-
*/
|
250 |
-
public function isBuddyPressUser() {
|
251 |
-
return $this->isBuddyPressActive() && function_exists( 'bp_is_user' ) && bp_is_user();
|
252 |
-
}
|
253 |
-
|
254 |
-
/**
|
255 |
-
* Helper method to enqueue scripts.
|
256 |
-
*
|
257 |
-
* @since 4.0.0
|
258 |
-
*
|
259 |
-
* @param string $script The script to enqueue.
|
260 |
-
* @param string $url The URL of the script.
|
261 |
-
* @param bool $vue Whether or not this is a vue script.
|
262 |
-
* @return void
|
263 |
-
*/
|
264 |
-
public function enqueueScript( $script, $url, $vue = true ) {
|
265 |
-
if ( ! wp_script_is( $script, 'enqueued' ) ) {
|
266 |
-
wp_enqueue_script(
|
267 |
-
$script,
|
268 |
-
$this->getScriptUrl( $url, $vue ),
|
269 |
-
[],
|
270 |
-
aioseo()->version,
|
271 |
-
true
|
272 |
-
);
|
273 |
-
}
|
274 |
-
}
|
275 |
-
|
276 |
-
/**
|
277 |
-
* Helper method to enqueue stylesheets.
|
278 |
-
*
|
279 |
-
* @since 4.0.0
|
280 |
-
*
|
281 |
-
* @param string $style The stylesheet to enqueue.
|
282 |
-
* @param string $url The URL of the stylesheet.
|
283 |
-
* @param bool $vue Whether or not this is a vue stylesheet.
|
284 |
-
* @return void
|
285 |
-
*/
|
286 |
-
public function enqueueStyle( $style, $url, $vue = true ) {
|
287 |
-
if ( ! wp_style_is( $style, 'enqueued' ) && $this->shouldEnqueue( $url ) ) {
|
288 |
-
wp_enqueue_style(
|
289 |
-
$style,
|
290 |
-
$this->getScriptUrl( $url, $vue ),
|
291 |
-
[],
|
292 |
-
aioseo()->version
|
293 |
-
);
|
294 |
-
}
|
295 |
-
}
|
296 |
-
|
297 |
-
/**
|
298 |
-
* Localizes a given URL.
|
299 |
-
*
|
300 |
-
* This is required for compatibility with WPML.
|
301 |
-
*
|
302 |
-
* @since 4.0.0
|
303 |
-
*
|
304 |
-
* @param string $path The relative path of the URL.
|
305 |
-
* @return string $url The filtered URL.
|
306 |
-
*/
|
307 |
-
public function localizedUrl( $path ) {
|
308 |
-
$url = apply_filters( 'wpml_home_url', home_url( '/' ) );
|
309 |
-
|
310 |
-
// Remove URL parameters.
|
311 |
-
preg_match_all( '/\?[\s\S]+/', $url, $matches );
|
312 |
-
|
313 |
-
// Get the base URL.
|
314 |
-
$url = preg_replace( '/\?[\s\S]+/', '', $url );
|
315 |
-
$url = trailingslashit( $url );
|
316 |
-
$url .= preg_replace( '/\//', '', $path, 1 );
|
317 |
-
|
318 |
-
// Readd URL parameters.
|
319 |
-
if ( $matches && $matches[0] ) {
|
320 |
-
$url .= $matches[0][0];
|
321 |
-
}
|
322 |
-
|
323 |
-
return $url;
|
324 |
-
}
|
325 |
-
|
326 |
-
/**
|
327 |
-
* Unsets a given value in a given array.
|
328 |
-
*
|
329 |
-
* This function should only be used if the given value only appears once in the array.
|
330 |
-
*
|
331 |
-
* @since 4.0.0
|
332 |
-
*
|
333 |
-
* @param array $array The array.
|
334 |
-
* @param string $value The value that needs to be removed from the array.
|
335 |
-
* @return array $array The filtered array.
|
336 |
-
*/
|
337 |
-
public function unsetValue( $array, $value ) {
|
338 |
-
if ( in_array( $value, $array, true ) ) {
|
339 |
-
unset( $array[ array_search( $value, $array, true ) ] );
|
340 |
-
};
|
341 |
-
return $array;
|
342 |
-
}
|
343 |
-
|
344 |
-
/**
|
345 |
-
* Formats a timestamp as an ISO 8601 date.
|
346 |
-
*
|
347 |
-
* @since 4.0.0
|
348 |
-
*
|
349 |
-
* @param string $dateTime The raw datetime.
|
350 |
-
* @return string The formatted datetime.
|
351 |
-
*/
|
352 |
-
public function formatDateTime( $dateTime ) {
|
353 |
-
return gmdate( 'c', mysql2date( 'U', $dateTime ) );
|
354 |
-
}
|
355 |
-
|
356 |
-
/**
|
357 |
-
* Formats a given URl as an absolute URL if it is relative.
|
358 |
-
*
|
359 |
-
* @since 4.0.0
|
360 |
-
*
|
361 |
-
* @param string $url The URL.
|
362 |
-
* @return string $url The absolute URL.
|
363 |
-
*/
|
364 |
-
public function makeUrlAbsolute( $url ) {
|
365 |
-
if ( 0 !== strpos( $url, 'http' ) && '/' !== $url ) {
|
366 |
-
if ( 0 === strpos( $url, '//' ) ) {
|
367 |
-
$scheme = wp_parse_url( home_url(), PHP_URL_SCHEME );
|
368 |
-
$url = $scheme . ':' . $url;
|
369 |
-
} else {
|
370 |
-
$url = home_url( $url );
|
371 |
-
}
|
372 |
-
}
|
373 |
-
return $url;
|
374 |
-
}
|
375 |
-
|
376 |
-
/** Whether or not we should enqueue a file.
|
377 |
-
*
|
378 |
-
* @since 4.0.0
|
379 |
-
*
|
380 |
-
* @param string $url The url to check against.
|
381 |
-
* @return bool Whether or not we should enqueue.
|
382 |
-
*/
|
383 |
-
private function shouldEnqueue( $url ) {
|
384 |
-
$version = strtoupper( aioseo()->versionPath );
|
385 |
-
$host = defined( 'AIOSEO_DEV_' . $version ) ? constant( 'AIOSEO_DEV_' . $version ) : false;
|
386 |
-
|
387 |
-
if ( ! $host ) {
|
388 |
-
return true;
|
389 |
-
}
|
390 |
-
|
391 |
-
if ( false !== strpos( $url, 'chunk-common.css' ) ) {
|
392 |
-
// return false;
|
393 |
-
}
|
394 |
-
|
395 |
-
return true;
|
396 |
-
}
|
397 |
-
|
398 |
-
/**
|
399 |
-
* Retrieve the proper URL for this script or style.
|
400 |
-
*
|
401 |
-
* @since 4.0.0
|
402 |
-
*
|
403 |
-
* @param string $url The url.
|
404 |
-
* @param bool $vue Whether or not this is a vue script.
|
405 |
-
* @return string The modified url.
|
406 |
-
*/
|
407 |
-
public function getScriptUrl( $url, $vue = true ) {
|
408 |
-
$version = strtoupper( aioseo()->versionPath );
|
409 |
-
$host = $vue && defined( 'AIOSEO_DEV_' . $version ) ? constant( 'AIOSEO_DEV_' . $version ) : false;
|
410 |
-
$localUrl = $url;
|
411 |
-
$url = plugins_url( 'dist/' . aioseo()->versionPath . '/assets/' . $url, AIOSEO_FILE );
|
412 |
-
|
413 |
-
if ( ! $host ) {
|
414 |
-
return $url;
|
415 |
-
}
|
416 |
-
|
417 |
-
if ( $host && ! self::$connection ) {
|
418 |
-
$splitHost = explode( ':', str_replace( '/', '', str_replace( 'http://', '', $host ) ) );
|
419 |
-
self::$connection = @fsockopen( $splitHost[0], $splitHost[1] ); // phpcs:ignore WordPress
|
420 |
-
}
|
421 |
-
|
422 |
-
if ( ! self::$connection ) {
|
423 |
-
return $url;
|
424 |
-
}
|
425 |
-
|
426 |
-
return $host . $localUrl;
|
427 |
-
}
|
428 |
-
|
429 |
-
/**
|
430 |
-
* Gets the data for vue.
|
431 |
-
*
|
432 |
-
* @since 4.0.0
|
433 |
-
*
|
434 |
-
* @param string $page The current page.
|
435 |
-
* @return array An array of data.
|
436 |
-
*/
|
437 |
-
public function getVueData( $page = null ) {
|
438 |
-
$postTypeObj = get_post_type_object( get_post_type( get_the_ID() ) );
|
439 |
-
$screen = get_current_screen();
|
440 |
-
|
441 |
-
// Check if user has a custom filename from the V3 migration.
|
442 |
-
$sitemapFilename = aioseo()->sitemap->helpers->filename( 'general' );
|
443 |
-
$sitemapFilename = $sitemapFilename ? $sitemapFilename : 'sitemap';
|
444 |
-
|
445 |
-
$isStaticHomePage = 'page' === get_option( 'show_on_front' );
|
446 |
-
$staticHomePage = intval( get_option( 'page_on_front' ) );
|
447 |
-
$data = [
|
448 |
-
'page' => $page,
|
449 |
-
'screen' => [
|
450 |
-
'base' => $screen->base,
|
451 |
-
'postType' => $screen->post_type,
|
452 |
-
'blockEditor' => isset( $screen->is_block_editor ) ? $screen->is_block_editor : false
|
453 |
-
],
|
454 |
-
'internalOptions' => aioseo()->internalOptions->all(),
|
455 |
-
'options' => aioseo()->options->all(),
|
456 |
-
'settings' => aioseo()->settings->all(),
|
457 |
-
'tags' => aioseo()->tags->all( true ),
|
458 |
-
'nonce' => wp_create_nonce( 'wp_rest' ),
|
459 |
-
'urls' => [
|
460 |
-
'domain' => $this->getSiteDomain(),
|
461 |
-
'mainSiteUrl' => $this->getSiteUrl(),
|
462 |
-
'home' => home_url(),
|
463 |
-
'restUrl' => rest_url(),
|
464 |
-
'publicPath' => plugin_dir_url( AIOSEO_FILE ),
|
465 |
-
'rssFeedUrl' => get_bloginfo( 'rss2_url' ),
|
466 |
-
'generalSitemapUrl' => home_url( "/$sitemapFilename.xml" ),
|
467 |
-
'rssSitemapUrl' => home_url( '/sitemap.rss' ),
|
468 |
-
'robotsTxtUrl' => $this->getSiteUrl() . '/robots.txt',
|
469 |
-
'blockedBotsLogUrl' => wp_upload_dir()['baseurl'] . '/aioseo/logs/aioseo-bad-bot-blocker.log',
|
470 |
-
'upgradeUrl' => apply_filters( 'aioseo_upgrade_link', AIOSEO_MARKETING_URL ),
|
471 |
-
'staticHomePage' => 'page' === get_option( 'show_on_front' ) ? get_edit_post_link( get_option( 'page_on_front' ), 'url' ) : null,
|
472 |
-
'connect' => add_query_arg( [
|
473 |
-
'siteurl' => site_url(),
|
474 |
-
'homeurl' => home_url(),
|
475 |
-
'redirect' => rawurldecode( base64_encode( admin_url( 'index.php?page=aioseo-connect' ) ) )
|
476 |
-
], defined( 'AIOSEO_CONNECT_URL' ) ? AIOSEO_CONNECT_URL : 'https://connect.aioseo.com' ),
|
477 |
-
'aio' => [
|
478 |
-
'wizard' => admin_url( 'index.php?page=aioseo-setup-wizard' ),
|
479 |
-
'dashboard' => admin_url( 'admin.php?page=aioseo' ),
|
480 |
-
'settings' => admin_url( 'admin.php?page=aioseo-settings' ),
|
481 |
-
'localSeo' => admin_url( 'admin.php?page=aioseo-local-seo' ),
|
482 |
-
'featureManager' => admin_url( 'admin.php?page=aioseo-feature-manager' ),
|
483 |
-
'sitemaps' => admin_url( 'admin.php?page=aioseo-sitemaps' ),
|
484 |
-
'seoAnalysis' => admin_url( 'admin.php?page=aioseo-seo-analysis' ),
|
485 |
-
'searchAppearance' => admin_url( 'admin.php?page=aioseo-search-appearance' ),
|
486 |
-
'socialNetworks' => admin_url( 'admin.php?page=aioseo-social-networks' ),
|
487 |
-
'tools' => admin_url( 'admin.php?page=aioseo-tools' ),
|
488 |
-
'monsterinsights' => admin_url( 'admin.php?page=aioseo-monsterinsights' )
|
489 |
-
],
|
490 |
-
'admin' => [
|
491 |
-
'widgets' => admin_url( 'widgets.php' ),
|
492 |
-
'optionsReading' => admin_url( 'options-reading.php' ),
|
493 |
-
'scheduledActions' => admin_url( '/tools.php?page=action-scheduler&status=pending&s=aioseo' ),
|
494 |
-
'generalSettings' => admin_url( 'options-general.php' )
|
495 |
-
]
|
496 |
-
],
|
497 |
-
'backups' => [],
|
498 |
-
'importers' => [],
|
499 |
-
'data' => [
|
500 |
-
'server' => [
|
501 |
-
'apache' => null,
|
502 |
-
'nginx' => null
|
503 |
-
],
|
504 |
-
'robots' => [
|
505 |
-
'defaultRules' => [],
|
506 |
-
'hasPhysicalRobots' => null,
|
507 |
-
'rewriteExists' => null,
|
508 |
-
'sitemapUrls' => []
|
509 |
-
],
|
510 |
-
'logSizes' => [
|
511 |
-
'badBotBlockerLog' => null
|
512 |
-
],
|
513 |
-
'status' => [],
|
514 |
-
'htaccess' => '',
|
515 |
-
'multisite' => is_multisite(),
|
516 |
-
'network' => is_network_admin(),
|
517 |
-
'mainSite' => is_main_site(),
|
518 |
-
'subdomain' => defined( 'SUBDOMAIN_INSTALL' ) && SUBDOMAIN_INSTALL,
|
519 |
-
'isWooCommerceActive' => $this->isWooCommerceActive(),
|
520 |
-
'isBBPressActive' => class_exists( 'bbPress' ),
|
521 |
-
'staticHomePage' => $isStaticHomePage ? $staticHomePage : false,
|
522 |
-
'staticBlogPage' => $this->getBlogPageId(),
|
523 |
-
'staticBlogPageTitle' => get_the_title( $this->getBlogPageId() ),
|
524 |
-
'isDev' => $this->isDev(),
|
525 |
-
'isSsl' => is_ssl()
|
526 |
-
],
|
527 |
-
'user' => [
|
528 |
-
'email' => wp_get_current_user()->user_email,
|
529 |
-
'roles' => $this->getUserRoles(),
|
530 |
-
'customRoles' => $this->getCustomRoles(),
|
531 |
-
'canManage' => current_user_can( apply_filters( 'aioseo_manage_seo', 'aioseo_manage_seo' ) ),
|
532 |
-
'capabilities' => aioseo()->access->getAllCapabilities(),
|
533 |
-
'unfilteredHtml' => current_user_can( 'unfiltered_html' ),
|
534 |
-
'locale' => function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale()
|
535 |
-
],
|
536 |
-
'plugins' => $this->getPluginData(),
|
537 |
-
'postData' => [
|
538 |
-
'postTypes' => $this->getPublicPostTypes( false, false, true ),
|
539 |
-
'taxonomies' => $this->getPublicTaxonomies( false, true ),
|
540 |
-
'archives' => $this->getPublicPostTypes( false, true, true )
|
541 |
-
],
|
542 |
-
'notifications' => Models\Notification::getNotifications( false ),
|
543 |
-
'addons' => aioseo()->addons->getAddons(),
|
544 |
-
'version' => AIOSEO_VERSION,
|
545 |
-
'helpPanel' => json_decode( aioseo()->help->getDocs() ),
|
546 |
-
'scheduledActions' => [
|
547 |
-
'sitemaps' => []
|
548 |
-
]
|
549 |
-
];
|
550 |
-
|
551 |
-
if ( is_multisite() && ! is_network_admin() ) {
|
552 |
-
switch_to_blog( $this->getNetworkId() );
|
553 |
-
$options = aioseo()->options->noConflict();
|
554 |
-
$options->initNetwork();
|
555 |
-
$data['networkOptions'] = $options->all();
|
556 |
-
restore_current_blog();
|
557 |
-
}
|
558 |
-
|
559 |
-
if ( 'post' === $page ) {
|
560 |
-
$postId = get_the_ID();
|
561 |
-
$post = Models\Post::getPost( $postId );
|
562 |
-
|
563 |
-
$data['currentPost'] = [
|
564 |
-
'context' => 'post',
|
565 |
-
'tags' => aioseo()->tags->getDefaultPostTags( $postId ),
|
566 |
-
'id' => $postId,
|
567 |
-
'priority' => ! empty( $post->priority ) ? $post->priority : 'default',
|
568 |
-
'frequency' => ! empty( $post->frequency ) ? $post->frequency : 'default',
|
569 |
-
'permalink' => get_the_permalink(),
|
570 |
-
'title' => ! empty( $post->title ) ? $post->title : aioseo()->meta->title->getPostTypeTitle( $postTypeObj->name ),
|
571 |
-
'description' => ! empty( $post->description ) ? $post->description : aioseo()->meta->description->getPostTypeDescription( $postTypeObj->name ),
|
572 |
-
'keywords' => ! empty( $post->keywords ) ? $post->keywords : wp_json_encode( [] ),
|
573 |
-
'keyphrases' => ! empty( $post->keyphrases )
|
574 |
-
? json_decode( $post->keyphrases )
|
575 |
-
: json_decode( '{"focus":{},"additional":[]}' ),
|
576 |
-
'page_analysis' => ! empty( $post->page_analysis )
|
577 |
-
? json_decode( $post->page_analysis )
|
578 |
-
: Models\Post::getPageAnalysisDefaults(),
|
579 |
-
'loading' => [
|
580 |
-
'focus' => false,
|
581 |
-
'additional' => [],
|
582 |
-
],
|
583 |
-
'type' => $postTypeObj->labels->singular_name,
|
584 |
-
'postType' => 'type' === $postTypeObj->name ? '_aioseo_type' : $postTypeObj->name,
|
585 |
-
'isSpecialPage' => $this->isSpecialPage( $postId ),
|
586 |
-
'isWooCommercePage' => $this->isWooCommercePage( $postId ),
|
587 |
-
'seo_score' => (int) $post->seo_score,
|
588 |
-
'pillar_content' => ( (int) $post->pillar_content ) === 0 ? false : true,
|
589 |
-
'canonicalUrl' => $post->canonical_url,
|
590 |
-
'default' => ( (int) $post->robots_default ) === 0 ? false : true,
|
591 |
-
'noindex' => ( (int) $post->robots_noindex ) === 0 ? false : true,
|
592 |
-
'noarchive' => ( (int) $post->robots_noarchive ) === 0 ? false : true,
|
593 |
-
'nosnippet' => ( (int) $post->robots_nosnippet ) === 0 ? false : true,
|
594 |
-
'nofollow' => ( (int) $post->robots_nofollow ) === 0 ? false : true,
|
595 |
-
'noimageindex' => ( (int) $post->robots_noimageindex ) === 0 ? false : true,
|
596 |
-
'noodp' => ( (int) $post->robots_noodp ) === 0 ? false : true,
|
597 |
-
'notranslate' => ( (int) $post->robots_notranslate ) === 0 ? false : true,
|
598 |
-
'maxSnippet' => null === $post->robots_max_snippet ? -1 : (int) $post->robots_max_snippet,
|
599 |
-
'maxVideoPreview' => null === $post->robots_max_videopreview ? -1 : (int) $post->robots_max_videopreview,
|
600 |
-
'maxImagePreview' => $post->robots_max_imagepreview,
|
601 |
-
'modalOpen' => false,
|
602 |
-
'tabs' => ( ! empty( $post->tabs ) )
|
603 |
-
? json_decode( $post->tabs )
|
604 |
-
: json_decode( Models\Post::getDefaultTabsOptions() ),
|
605 |
-
'generalMobilePrev' => false,
|
606 |
-
'socialMobilePreview' => false,
|
607 |
-
'og_object_type' => ! empty( $post->og_object_type ) ? $post->og_object_type : 'default',
|
608 |
-
'og_title' => $post->og_title,
|
609 |
-
'og_description' => $post->og_description,
|
610 |
-
'og_image_custom_url' => $post->og_image_custom_url,
|
611 |
-
'og_image_custom_fields' => $post->og_image_custom_fields,
|
612 |
-
'og_image_type' => ! empty( $post->og_image_type ) ? $post->og_image_type : 'default',
|
613 |
-
'og_video' => ! empty( $post->og_video ) ? $post->og_video : '',
|
614 |
-
'og_article_section' => ! empty( $post->og_article_section ) ? $post->og_article_section : '',
|
615 |
-
'og_article_tags' => ! empty( $post->og_article_tags ) ? $post->og_article_tags : wp_json_encode( [] ),
|
616 |
-
'twitter_use_og' => ( (int) $post->twitter_use_og ) === 0 ? false : true,
|
617 |
-
'twitter_card' => $post->twitter_card,
|
618 |
-
'twitter_image_custom_url' => $post->twitter_image_custom_url,
|
619 |
-
'twitter_image_custom_fields' => $post->twitter_image_custom_fields,
|
620 |
-
'twitter_image_type' => $post->twitter_image_type,
|
621 |
-
'twitter_title' => $post->twitter_title,
|
622 |
-
'twitter_description' => $post->twitter_description,
|
623 |
-
'schema_type' => ( ! empty( $post->schema_type ) ) ? $post->schema_type : 'default',
|
624 |
-
'schema_type_options' => ( ! empty( $post->schema_type_options ) )
|
625 |
-
? json_decode( Models\Post::getDefaultSchemaOptions( $post->schema_type_options ) )
|
626 |
-
: json_decode( Models\Post::getDefaultSchemaOptions() ),
|
627 |
-
'local_seo' => ( ! empty( $post->local_seo ) )
|
628 |
-
? Models\Post::getDefaultLocalSeoOptions( $post->local_seo )
|
629 |
-
: json_decode( Models\Post::getDefaultLocalSeoOptions() ),
|
630 |
-
'metaDefaults' => [
|
631 |
-
'title' => aioseo()->meta->title->getPostTypeTitle( $postTypeObj->name ),
|
632 |
-
'description' => aioseo()->meta->description->getPostTypeDescription( $postTypeObj->name )
|
633 |
-
]
|
634 |
-
];
|
635 |
-
|
636 |
-
if ( ! $post->exists() ) {
|
637 |
-
$oldPostMeta = aioseo()->migration->meta->getMigratedPostMeta( $postId );
|
638 |
-
foreach ( $oldPostMeta as $k => $v ) {
|
639 |
-
if ( preg_match( '#robots_.*#', $k ) ) {
|
640 |
-
$oldPostMeta[ preg_replace( '#robots_#', '', $k ) ] = $v;
|
641 |
-
continue;
|
642 |
-
}
|
643 |
-
if ( 'canonical_url' === $k ) {
|
644 |
-
$oldPostMeta['canonicalUrl'] = $v;
|
645 |
-
}
|
646 |
-
}
|
647 |
-
$data['currentPost'] = array_merge( $data['currentPost'], $oldPostMeta );
|
648 |
-
}
|
649 |
-
}
|
650 |
-
|
651 |
-
if ( 'sitemaps' === $page ) {
|
652 |
-
try {
|
653 |
-
if ( as_next_scheduled_action( 'aioseo_static_sitemap_regeneration' ) ) {
|
654 |
-
$data['scheduledActions']['sitemap'][] = 'staticSitemapRegeneration';
|
655 |
-
}
|
656 |
-
} catch ( \Exception $e ) {
|
657 |
-
// Do nothing.
|
658 |
-
}
|
659 |
-
}
|
660 |
-
|
661 |
-
if ( 'setup-wizard' === $page ) {
|
662 |
-
$data['users'] = $this->getSiteUsers( [ 'administrator', 'editor', 'author' ] );
|
663 |
-
$data['importers'] = aioseo()->importExport->plugins();
|
664 |
-
}
|
665 |
-
|
666 |
-
if ( 'search-appearance' === $page ) {
|
667 |
-
$data['users'] = $this->getSiteUsers( [ 'administrator', 'editor', 'author' ] );
|
668 |
-
$data['data'] += [
|
669 |
-
'staticHomePageTitle' => $isStaticHomePage ? aioseo()->meta->title->getTitle( $staticHomePage ) : '',
|
670 |
-
'staticHomePageDescription' => $isStaticHomePage ? aioseo()->meta->description->getDescription( $staticHomePage ) : '',
|
671 |
-
];
|
672 |
-
}
|
673 |
-
|
674 |
-
if ( 'social-networks' === $page ) {
|
675 |
-
$data['data'] += [
|
676 |
-
'staticHomePageOgTitle' => $isStaticHomePage ? aioseo()->social->facebook->getTitle( $staticHomePage ) : '',
|
677 |
-
'staticHomePageOgDescription' => $isStaticHomePage ? aioseo()->social->facebook->getDescription( $staticHomePage ) : '',
|
678 |
-
'staticHomePageTwitterTitle' => $isStaticHomePage ? aioseo()->social->twitter->getTitle( $staticHomePage ) : '',
|
679 |
-
'staticHomePageTwitterDescription' => $isStaticHomePage ? aioseo()->social->twitter->getDescription( $staticHomePage ) : '',
|
680 |
-
];
|
681 |
-
}
|
682 |
-
|
683 |
-
if ( 'tools' === $page ) {
|
684 |
-
$data['backups'] = array_reverse( aioseo()->backup->all() );
|
685 |
-
$data['importers'] = aioseo()->importExport->plugins();
|
686 |
-
$data['data']['server'] = [
|
687 |
-
'apache' => $this->isApache(),
|
688 |
-
'nginx' => $this->isNginx()
|
689 |
-
];
|
690 |
-
$data['data']['robots'] = [
|
691 |
-
'defaultRules' => $page ? aioseo()->robotsTxt->getDefaultRules() : [],
|
692 |
-
'hasPhysicalRobots' => aioseo()->robotsTxt->hasPhysicalRobotsTxt(),
|
693 |
-
'rewriteExists' => aioseo()->robotsTxt->rewriteRulesExist(),
|
694 |
-
'sitemapUrls' => array_merge( aioseo()->sitemap->helpers->getSitemapUrls(), $this->extractSitemapUrlsFromRobotsTxt() )
|
695 |
-
];
|
696 |
-
$data['data']['logSizes'] = [
|
697 |
-
'badBotBlockerLog' => $this->convertFileSize( aioseo()->badBotBlocker->getLogSize() )
|
698 |
-
];
|
699 |
-
$data['data']['status'] = Tools\SystemStatus::getSystemStatusInfo();
|
700 |
-
$data['data']['htaccess'] = aioseo()->htaccess->getContents();
|
701 |
-
}
|
702 |
-
|
703 |
-
if ( 'settings' === $page ) {
|
704 |
-
$data['breadcrumbs']['defaultTemplate'] = aioseo()->helpers->encodeOutputHtml( aioseo()->breadcrumbs->frontend->getDefaultTemplate() );
|
705 |
-
}
|
706 |
-
|
707 |
-
$loadedAddons = aioseo()->addons->getLoadedAddons();
|
708 |
-
if ( ! empty( $loadedAddons ) ) {
|
709 |
-
foreach ( $loadedAddons as $addon ) {
|
710 |
-
if ( isset( $addon->helpers ) && method_exists( $addon->helpers, 'getVueData' ) ) {
|
711 |
-
$data = $addon->helpers->getVueData( $data, $page );
|
712 |
-
}
|
713 |
-
}
|
714 |
-
}
|
715 |
-
|
716 |
-
return $data;
|
717 |
-
}
|
718 |
-
|
719 |
-
/**
|
720 |
-
* Returns user roles in the current WP install.
|
721 |
-
*
|
722 |
-
* @since 4.0.0
|
723 |
-
*
|
724 |
-
* @return array An array of user roles.
|
725 |
-
*/
|
726 |
-
public function getUserRoles() {
|
727 |
-
global $wp_roles;
|
728 |
-
if ( ! isset( $wp_roles ) ) {
|
729 |
-
$wp_roles = new \WP_Roles();
|
730 |
-
}
|
731 |
-
$roleNames = $wp_roles->get_names();
|
732 |
-
asort( $roleNames );
|
733 |
-
|
734 |
-
return $roleNames;
|
735 |
-
}
|
736 |
-
|
737 |
-
/**
|
738 |
-
* Returns the custom roles in the current WP install.
|
739 |
-
*
|
740 |
-
* @since 4.1.3
|
741 |
-
*
|
742 |
-
* @return array An array of custom roles.
|
743 |
-
*/
|
744 |
-
public function getCustomRoles() {
|
745 |
-
$allRoles = $this->getUserRoles();
|
746 |
-
$customRoles = [];
|
747 |
-
|
748 |
-
$toSkip = array_merge(
|
749 |
-
// Default WordPress roles.
|
750 |
-
[ 'superadmin', 'administrator', 'editor', 'author', 'contributor', 'subscriber' ],
|
751 |
-
// Default AIOSEO roles.
|
752 |
-
[ 'aioseo_manager', 'aioseo_editor' ]
|
753 |
-
);
|
754 |
-
|
755 |
-
foreach ( $allRoles as $roleName => $role ) {
|
756 |
-
// Skip default roles.
|
757 |
-
if ( in_array( $roleName, $toSkip, true ) ) {
|
758 |
-
continue;
|
759 |
-
}
|
760 |
-
|
761 |
-
$customRoles[ $roleName ] = $role;
|
762 |
-
}
|
763 |
-
|
764 |
-
return $customRoles;
|
765 |
-
}
|
766 |
-
|
767 |
-
/**
|
768 |
-
* Returns an array of plugins with the active status.
|
769 |
-
*
|
770 |
-
* @since 4.0.0
|
771 |
-
*
|
772 |
-
* @return array An array of plugins with active status.
|
773 |
-
*/
|
774 |
-
public function getPluginData() {
|
775 |
-
$pluginUpgrader = new PluginUpgraderSilentAjax();
|
776 |
-
$installedPlugins = array_keys( get_plugins() );
|
777 |
-
|
778 |
-
$plugins = [];
|
779 |
-
foreach ( $pluginUpgrader->pluginSlugs as $key => $slug ) {
|
780 |
-
$plugins[ $key ] = [
|
781 |
-
'basename' => $slug,
|
782 |
-
'installed' => in_array( $slug, $installedPlugins, true ),
|
783 |
-
'activated' => is_plugin_active( $slug ),
|
784 |
-
'adminUrl' => admin_url( $pluginUpgrader->pluginAdminUrls[ $key ] ),
|
785 |
-
'canInstall' => aioseo()->addons->canInstall(),
|
786 |
-
'canActivate' => aioseo()->addons->canActivate(),
|
787 |
-
'wpLink' => ! empty( $pluginUpgrader->wpPluginLinks[ $key ] ) ? $pluginUpgrader->wpPluginLinks[ $key ] : null
|
788 |
-
];
|
789 |
-
}
|
790 |
-
|
791 |
-
return $plugins;
|
792 |
-
}
|
793 |
-
|
794 |
-
/**
|
795 |
-
* Retrieve a list of public post types with slugs/icons.
|
796 |
-
*
|
797 |
-
* @since 4.0.0
|
798 |
-
*
|
799 |
-
* @param boolean $namesOnly Whether only the names should be returned.
|
800 |
-
* @param boolean $hasArchivesOnly Whether or not to only include post types which have archives.
|
801 |
-
* @param boolean $rewriteType Whether or not to rewrite the type slugs.
|
802 |
-
* @return array An array of public post types.
|
803 |
-
*/
|
804 |
-
public function getPublicPostTypes( $namesOnly = false, $hasArchivesOnly = false, $rewriteType = false ) {
|
805 |
-
$postTypes = [];
|
806 |
-
$postObjects = get_post_types( [ 'public' => true ], 'objects' );
|
807 |
-
$woocommerce = class_exists( 'woocommerce' );
|
808 |
-
foreach ( $postObjects as $postObject ) {
|
809 |
-
if ( empty( $postObject->label ) ) {
|
810 |
-
continue;
|
811 |
-
}
|
812 |
-
|
813 |
-
// We don't want to include archives for the WooCommerce shop page.
|
814 |
-
if (
|
815 |
-
$hasArchivesOnly &&
|
816 |
-
(
|
817 |
-
! $postObject->has_archive ||
|
818 |
-
( 'product' === $postObject->name && $woocommerce )
|
819 |
-
)
|
820 |
-
) {
|
821 |
-
continue;
|
822 |
-
}
|
823 |
-
|
824 |
-
if ( $namesOnly ) {
|
825 |
-
$postTypes[] = $postObject->name;
|
826 |
-
continue;
|
827 |
-
}
|
828 |
-
|
829 |
-
if ( 'attachment' === $postObject->name ) {
|
830 |
-
$postObject->label = __( 'Attachments', 'all-in-one-seo-pack' );
|
831 |
-
}
|
832 |
-
|
833 |
-
if ( 'product' === $postObject->name && $woocommerce ) {
|
834 |
-
$postObject->menu_icon = 'dashicons-products';
|
835 |
-
}
|
836 |
-
|
837 |
-
$name = $postObject->name;
|
838 |
-
if ( 'type' === $postObject->name && $rewriteType ) {
|
839 |
-
$name = '_aioseo_type';
|
840 |
-
}
|
841 |
-
|
842 |
-
$postTypes[] = [
|
843 |
-
'name' => $name,
|
844 |
-
'label' => ucwords( $postObject->label ),
|
845 |
-
'singular' => ucwords( $postObject->labels->singular_name ),
|
846 |
-
'icon' => $postObject->menu_icon,
|
847 |
-
'hasExcerpt' => post_type_supports( $postObject->name, 'excerpt' ),
|
848 |
-
'hasArchive' => $postObject->has_archive,
|
849 |
-
'hierarchical' => $postObject->hierarchical,
|
850 |
-
'taxonomies' => get_object_taxonomies( $name ),
|
851 |
-
'slug' => isset( $postObject->rewrite['slug'] ) ? $postObject->rewrite['slug'] : $name
|
852 |
-
];
|
853 |
-
}
|
854 |
-
|
855 |
-
return $postTypes;
|
856 |
-
}
|
857 |
-
|
858 |
-
/**
|
859 |
-
* Retrieve a list of public taxonomies with slugs/icons.
|
860 |
-
*
|
861 |
-
* @since 4.0.0
|
862 |
-
*
|
863 |
-
* @param boolean $namesOnly Whether only the names should be returned.
|
864 |
-
* @param boolean $rewriteType Whether or not to rewrite the type slugs.
|
865 |
-
* @return array An array of public taxonomies.
|
866 |
-
*/
|
867 |
-
public function getPublicTaxonomies( $namesOnly = false, $rewriteType = false ) {
|
868 |
-
$taxonomies = [];
|
869 |
-
if ( count( $taxonomies ) ) {
|
870 |
-
return $taxonomies;
|
871 |
-
}
|
872 |
-
|
873 |
-
$taxObjects = get_taxonomies( [ 'public' => true ], 'objects' );
|
874 |
-
foreach ( $taxObjects as $taxObject ) {
|
875 |
-
if ( empty( $taxObject->label ) ) {
|
876 |
-
continue;
|
877 |
-
}
|
878 |
-
|
879 |
-
if ( in_array( $taxObject->name, [
|
880 |
-
'product_shipping_class',
|
881 |
-
'post_format'
|
882 |
-
], true ) ) {
|
883 |
-
continue;
|
884 |
-
}
|
885 |
-
|
886 |
-
// We need to exclude product attributes from this list as well.
|
887 |
-
if (
|
888 |
-
'pa_' === substr( $taxObject->name, 0, 3 ) &&
|
889 |
-
'manage_product_terms' === $taxObject->cap->manage_terms &&
|
890 |
-
! apply_filters( 'aioseo_woocommerce_product_attributes', false )
|
891 |
-
) {
|
892 |
-
continue;
|
893 |
-
}
|
894 |
-
|
895 |
-
if ( $namesOnly ) {
|
896 |
-
$taxonomies[] = $taxObject->name;
|
897 |
-
continue;
|
898 |
-
}
|
899 |
-
|
900 |
-
$name = $taxObject->name;
|
901 |
-
if ( 'type' === $taxObject->name && $rewriteType ) {
|
902 |
-
$name = '_aioseo_type';
|
903 |
-
}
|
904 |
-
|
905 |
-
$taxonomies[] = [
|
906 |
-
'name' => $name,
|
907 |
-
'label' => ucwords( $taxObject->label ),
|
908 |
-
'singular' => ucwords( $taxObject->labels->singular_name ),
|
909 |
-
'icon' => strpos( $taxObject->label, 'categor' ) !== false ? 'dashicons-category' : 'dashicons-tag',
|
910 |
-
'hierarchical' => $taxObject->hierarchical,
|
911 |
-
'slug' => isset( $taxObject->rewrite['slug'] ) ? $taxObject->rewrite['slug'] : ''
|
912 |
-
];
|
913 |
-
}
|
914 |
-
|
915 |
-
return $taxonomies;
|
916 |
-
}
|
917 |
-
|
918 |
-
/**
|
919 |
-
* Returns noindexed post types.
|
920 |
-
*
|
921 |
-
* @since 4.0.0
|
922 |
-
*
|
923 |
-
* @return array A list of noindexed post types.
|
924 |
-
*/
|
925 |
-
public function getNoindexedPostTypes() {
|
926 |
-
return $this->getNoindexedObjects( 'postTypes' );
|
927 |
-
}
|
928 |
-
|
929 |
-
/**
|
930 |
-
* Checks whether a given post type is noindexed.
|
931 |
-
*
|
932 |
-
* @since 4.0.0
|
933 |
-
*
|
934 |
-
* @param string $postType The post type.
|
935 |
-
* @return bool Whether the post type is noindexed.
|
936 |
-
*/
|
937 |
-
public function isPostTypeNoindexed( $postType ) {
|
938 |
-
$noindexedPostTypes = $this->getNoindexedPostTypes();
|
939 |
-
return in_array( $postType, $noindexedPostTypes, true );
|
940 |
-
}
|
941 |
-
|
942 |
-
/**
|
943 |
-
* Normalize Post Type or Taxonomy names to work properly with AIOSEO.
|
944 |
-
*
|
945 |
-
* @since 4.1.3
|
946 |
-
*
|
947 |
-
* @param array $items Array of items to normalize.
|
948 |
-
* @return array Array of items normalized.
|
949 |
-
*/
|
950 |
-
public function normalizePostTypeTaxonomyNames( $items ) {
|
951 |
-
foreach ( $items as &$item ) {
|
952 |
-
if ( 'type' === $item['name'] ) {
|
953 |
-
$item['name'] = '_aioseo_type';
|
954 |
-
}
|
955 |
-
}
|
956 |
-
|
957 |
-
return $items;
|
958 |
-
}
|
959 |
-
|
960 |
-
/**
|
961 |
-
* Returns noindexed taxonomies.
|
962 |
-
*
|
963 |
-
* @since 4.0.0
|
964 |
-
*
|
965 |
-
* @return array A list of noindexed taxonomies.
|
966 |
-
*/
|
967 |
-
public function getNoindexedTaxonomies() {
|
968 |
-
return $this->getNoindexedObjects( 'taxonomies' );
|
969 |
-
}
|
970 |
-
|
971 |
-
/**
|
972 |
-
* Checks whether a given post type is noindexed.
|
973 |
-
*
|
974 |
-
* @since 4.0.0
|
975 |
-
*
|
976 |
-
* @param string $taxonomy The taxonomy.
|
977 |
-
* @return bool Whether the taxonomy is noindexed.
|
978 |
-
*/
|
979 |
-
public function isTaxonomyNoindexed( $taxonomy ) {
|
980 |
-
$noindexedTaxonomies = $this->getNoindexedTaxonomies();
|
981 |
-
return in_array( $taxonomy, $noindexedTaxonomies, true );
|
982 |
-
}
|
983 |
-
|
984 |
-
/**
|
985 |
-
* Returns noindexed object types of a given parent type.
|
986 |
-
*
|
987 |
-
* @since 4.0.0
|
988 |
-
*
|
989 |
-
* @param string $type The parent object type ("postTypes" or "taxonomies").
|
990 |
-
* @return array A list of noindexed objects types.
|
991 |
-
*/
|
992 |
-
private function getNoindexedObjects( $type ) {
|
993 |
-
$noindexed = [];
|
994 |
-
foreach ( aioseo()->options->searchAppearance->dynamic->$type->all() as $name => $object ) {
|
995 |
-
if (
|
996 |
-
! $object['show'] ||
|
997 |
-
( $object['advanced']['robotsMeta'] && ! $object['advanced']['robotsMeta']['default'] && $object['advanced']['robotsMeta']['noindex'] )
|
998 |
-
) {
|
999 |
-
$noindexed[] = $name;
|
1000 |
-
}
|
1001 |
-
}
|
1002 |
-
return $noindexed;
|
1003 |
-
}
|
1004 |
-
|
1005 |
-
/**
|
1006 |
-
* Retrieve a list of users that match passed in roles.
|
1007 |
-
*
|
1008 |
-
* @since 4.0.0
|
1009 |
-
*
|
1010 |
-
* @return array An array of user data.
|
1011 |
-
*/
|
1012 |
-
public function getSiteUsers( $roles ) {
|
1013 |
-
static $users = [];
|
1014 |
-
|
1015 |
-
if ( ! empty( $users ) ) {
|
1016 |
-
return $users;
|
1017 |
-
}
|
1018 |
-
|
1019 |
-
$rolesWhere = [];
|
1020 |
-
foreach ( $roles as $role ) {
|
1021 |
-
$rolesWhere[] = '(um.meta_key = \'' . aioseo()->db->db->prefix . 'capabilities\' AND um.meta_value LIKE \'%\"' . $role . '\"%\')';
|
1022 |
-
}
|
1023 |
-
$dbUsers = aioseo()->db->start( 'users as u' )
|
1024 |
-
->select( 'u.ID, u.display_name, u.user_nicename, u.user_email' )
|
1025 |
-
->join( 'usermeta as um', 'u.ID = um.user_id' )
|
1026 |
-
->whereRaw( '(' . implode( ' OR ', $rolesWhere ) . ')' )
|
1027 |
-
->orderBy( 'u.user_nicename' )
|
1028 |
-
->run()
|
1029 |
-
->result();
|
1030 |
-
|
1031 |
-
foreach ( $dbUsers as $dbUser ) {
|
1032 |
-
$users[] = [
|
1033 |
-
'id' => intval( $dbUser->ID ),
|
1034 |
-
'displayName' => $dbUser->display_name,
|
1035 |
-
'niceName' => $dbUser->user_nicename,
|
1036 |
-
'email' => $dbUser->user_email,
|
1037 |
-
'gravatar' => get_avatar_url( $dbUser->user_email )
|
1038 |
-
];
|
1039 |
-
}
|
1040 |
-
|
1041 |
-
return $users;
|
1042 |
-
}
|
1043 |
-
|
1044 |
-
/**
|
1045 |
-
* Strips punctuation from a given string.
|
1046 |
-
*
|
1047 |
-
* @since 4.0.0
|
1048 |
-
*
|
1049 |
-
* @param string $string The string.
|
1050 |
-
* @return string The string without punctuation.
|
1051 |
-
*/
|
1052 |
-
public function stripPunctuation( $string ) {
|
1053 |
-
$string = preg_replace( '#\p{P}#u', '', $string );
|
1054 |
-
// Trim both internal and external whitespace.
|
1055 |
-
return preg_replace( '/\s\s+/u', ' ', trim( $string ) );
|
1056 |
-
}
|
1057 |
-
|
1058 |
-
/*
|
1059 |
-
* Sanitize Domain
|
1060 |
-
*
|
1061 |
-
* @since 4.0.0
|
1062 |
-
*
|
1063 |
-
* @param string $domain The domain to sanitize.
|
1064 |
-
* @return mixed|string The sanitized domain.
|
1065 |
-
*/
|
1066 |
-
public function sanitizeDomain( $domain ) {
|
1067 |
-
$domain = trim( $domain );
|
1068 |
-
$domain = strtolower( $domain );
|
1069 |
-
if ( 0 === strpos( $domain, 'http://' ) ) {
|
1070 |
-
$domain = substr( $domain, 7 );
|
1071 |
-
} elseif ( 0 === strpos( $domain, 'https://' ) ) {
|
1072 |
-
$domain = substr( $domain, 8 );
|
1073 |
-
}
|
1074 |
-
$domain = untrailingslashit( $domain );
|
1075 |
-
|
1076 |
-
return $domain;
|
1077 |
-
}
|
1078 |
-
|
1079 |
-
/**
|
1080 |
-
* Get's the site domain.
|
1081 |
-
*
|
1082 |
-
* @since 4.0.0
|
1083 |
-
*
|
1084 |
-
* @return string The site's domain.
|
1085 |
-
*/
|
1086 |
-
public function getSiteDomain() {
|
1087 |
-
return wp_parse_url( home_url(), PHP_URL_HOST );
|
1088 |
-
}
|
1089 |
-
|
1090 |
-
/**
|
1091 |
-
* Get's the site URL.
|
1092 |
-
* NOTE: For multisites inside a sub-directory, this returns the URL for the main site.
|
1093 |
-
* This is intentional.
|
1094 |
-
*
|
1095 |
-
* @since 4.0.0
|
1096 |
-
*
|
1097 |
-
* @return string The site's domain.
|
1098 |
-
*/
|
1099 |
-
public function getSiteUrl() {
|
1100 |
-
return wp_parse_url( home_url(), PHP_URL_SCHEME ) . '://' . wp_parse_url( home_url(), PHP_URL_HOST );
|
1101 |
-
}
|
1102 |
-
|
1103 |
-
/**
|
1104 |
-
* Returns the current URL.
|
1105 |
-
*
|
1106 |
-
* @since 4.0.0
|
1107 |
-
*
|
1108 |
-
* @param boolean $canonical Whether or not to get the canonical URL.
|
1109 |
-
* @return string The URL.
|
1110 |
-
*/
|
1111 |
-
public function getUrl( $canonical = false ) {
|
1112 |
-
if ( is_singular() ) {
|
1113 |
-
$object = get_queried_object_id();
|
1114 |
-
return $canonical ? wp_get_canonical_url( $object ) : get_permalink( $object );
|
1115 |
-
}
|
1116 |
-
|
1117 |
-
global $wp;
|
1118 |
-
return trailingslashit( home_url( $wp->request ) );
|
1119 |
-
}
|
1120 |
-
|
1121 |
-
/**
|
1122 |
-
* Gets the canonical URL for the current page/post.
|
1123 |
-
*
|
1124 |
-
* @since 4.0.0
|
1125 |
-
*
|
1126 |
-
* @return string $url The canonical URL.
|
1127 |
-
*/
|
1128 |
-
public function canonicalUrl() {
|
1129 |
-
static $canonicalUrl = '';
|
1130 |
-
if ( $canonicalUrl ) {
|
1131 |
-
return $canonicalUrl;
|
1132 |
-
}
|
1133 |
-
|
1134 |
-
$metaData = [];
|
1135 |
-
$post = $this->getPost();
|
1136 |
-
if ( $post ) {
|
1137 |
-
$metaData = aioseo()->meta->metaData->getMetaData( $post );
|
1138 |
-
}
|
1139 |
-
|
1140 |
-
if ( is_category() || is_tag() || is_tax() ) {
|
1141 |
-
$metaData = aioseo()->meta->metaData->getMetaData( get_queried_object() );
|
1142 |
-
}
|
1143 |
-
|
1144 |
-
if ( $metaData && ! empty( $metaData->canonical_url ) ) {
|
1145 |
-
return $metaData->canonical_url;
|
1146 |
-
}
|
1147 |
-
|
1148 |
-
$url = $this->getUrl( true );
|
1149 |
-
if ( aioseo()->options->searchAppearance->advanced->noPaginationForCanonical && 1 < $this->getPageNumber() ) {
|
1150 |
-
$url = preg_replace( '#(\d+\/|(?<=\/)page\/\d+\/)$#', '', $url );
|
1151 |
-
}
|
1152 |
-
|
1153 |
-
$url = $this->maybeRemoveTrailingSlash( $url );
|
1154 |
-
|
1155 |
-
// Get rid of /amp at the end of the URL.
|
1156 |
-
if ( ! apply_filters( 'aioseo_disable_canonical_url_amp', false ) ) {
|
1157 |
-
$url = preg_replace( '/\/amp$/', '', $url );
|
1158 |
-
$url = preg_replace( '/\/amp\/$/', '/', $url );
|
1159 |
-
}
|
1160 |
-
|
1161 |
-
$searchTerm = get_query_var( 's' );
|
1162 |
-
if ( is_search() && ! empty( $searchTerm ) ) {
|
1163 |
-
$url = add_query_arg( 's', $searchTerm, $url );
|
1164 |
-
}
|
1165 |
-
|
1166 |
-
return apply_filters( 'aioseo_canonical_url', $url );
|
1167 |
-
}
|
1168 |
-
|
1169 |
-
/**
|
1170 |
-
* Remove trailing slashes if not set in the permalink structure.
|
1171 |
-
*
|
1172 |
-
* @since 4.0.0
|
1173 |
-
*
|
1174 |
-
* @param string $url The original URL.
|
1175 |
-
* @return string The adjusted URL.
|
1176 |
-
*/
|
1177 |
-
public function maybeRemoveTrailingSlash( $url ) {
|
1178 |
-
$permalinks = get_option( 'permalink_structure' );
|
1179 |
-
if ( $permalinks && ( ! is_home() || ! is_front_page() ) ) {
|
1180 |
-
$trailing = substr( $permalinks, -1 );
|
1181 |
-
if ( '/' !== $trailing ) {
|
1182 |
-
$url = untrailingslashit( $url );
|
1183 |
-
}
|
1184 |
-
}
|
1185 |
-
|
1186 |
-
// Don't slash urls with query args.
|
1187 |
-
if ( false !== strpos( $url, '?' ) ) {
|
1188 |
-
$url = untrailingslashit( $url );
|
1189 |
-
}
|
1190 |
-
|
1191 |
-
return $url;
|
1192 |
-
}
|
1193 |
-
|
1194 |
-
/**
|
1195 |
-
* Returns the page number of the current page.
|
1196 |
-
*
|
1197 |
-
* @since 4.0.0
|
1198 |
-
*
|
1199 |
-
* @return int The page number.
|
1200 |
-
*/
|
1201 |
-
public function getPageNumber() {
|
1202 |
-
$page = get_query_var( 'page' );
|
1203 |
-
$paged = get_query_var( 'paged' );
|
1204 |
-
return ! empty( $page )
|
1205 |
-
? $page
|
1206 |
-
: (
|
1207 |
-
! empty( $paged )
|
1208 |
-
? $paged
|
1209 |
-
: 1
|
1210 |
-
);
|
1211 |
-
}
|
1212 |
-
|
1213 |
-
/**
|
1214 |
-
* Request the remote URL via wp_remote_post and return a json decoded response.
|
1215 |
-
*
|
1216 |
-
* @since 4.0.0
|
1217 |
-
*
|
1218 |
-
* @param array $body The content to retrieve from the remote URL.
|
1219 |
-
* @param array $headers The headers to send to the remote URL.
|
1220 |
-
*
|
1221 |
-
* @return string|bool Json decoded response on success, false on failure.
|
1222 |
-
*/
|
1223 |
-
public function sendRequest( $url, $body = [], $headers = [] ) {
|
1224 |
-
$body = wp_json_encode( $body );
|
1225 |
-
|
1226 |
-
// Build the headers of the request.
|
1227 |
-
$headers = wp_parse_args(
|
1228 |
-
$headers,
|
1229 |
-
[
|
1230 |
-
'Content-Type' => 'application/json'
|
1231 |
-
]
|
1232 |
-
);
|
1233 |
-
|
1234 |
-
// Setup variable for wp_remote_post.
|
1235 |
-
$post = [
|
1236 |
-
'headers' => $headers,
|
1237 |
-
'body' => $body,
|
1238 |
-
'sslverify' => $this->isDev() ? false : true,
|
1239 |
-
'timeout' => 20
|
1240 |
-
];
|
1241 |
-
|
1242 |
-
// Perform the query and retrieve the response.
|
1243 |
-
$response = wp_remote_post( $url, $post );
|
1244 |
-
$responseBody = wp_remote_retrieve_body( $response );
|
1245 |
-
|
1246 |
-
// Bail out early if there are any errors.
|
1247 |
-
if ( is_wp_error( $responseBody ) ) {
|
1248 |
-
return false;
|
1249 |
-
}
|
1250 |
-
|
1251 |
-
// Return the json decoded content.
|
1252 |
-
return json_decode( $responseBody );
|
1253 |
-
}
|
1254 |
-
|
1255 |
-
/**
|
1256 |
-
* Get the class name for the Score button.
|
1257 |
-
* Depending on the score the button should have different color.
|
1258 |
-
*
|
1259 |
-
* @since 4.0.0
|
1260 |
-
*
|
1261 |
-
* @param int $score The content to retrieve from the remote URL.
|
1262 |
-
*
|
1263 |
-
* @return string The class name for Score button.
|
1264 |
-
*/
|
1265 |
-
public function getScoreClass( $score ) {
|
1266 |
-
$scoreClass = 50 < $score ? 'score-orange' : 'score-red';
|
1267 |
-
if ( 0 === $score ) {
|
1268 |
-
$scoreClass = 'score-none';
|
1269 |
-
}
|
1270 |
-
if ( $score >= 80 ) {
|
1271 |
-
$scoreClass = 'score-green';
|
1272 |
-
}
|
1273 |
-
return $scoreClass;
|
1274 |
-
}
|
1275 |
-
|
1276 |
-
/**
|
1277 |
-
* Returns the ID of the site logo if it exists.
|
1278 |
-
*
|
1279 |
-
* @since 4.0.0
|
1280 |
-
*
|
1281 |
-
* @return int
|
1282 |
-
*/
|
1283 |
-
public function getSiteLogoId() {
|
1284 |
-
if ( ! get_theme_support( 'custom-logo' ) ) {
|
1285 |
-
return false;
|
1286 |
-
}
|
1287 |
-
return get_theme_mod( 'custom_logo' );
|
1288 |
-
}
|
1289 |
-
|
1290 |
-
/**
|
1291 |
-
* Returns the URL of the site logo if it exists.
|
1292 |
-
*
|
1293 |
-
* @since 4.0.0
|
1294 |
-
*
|
1295 |
-
* @return string
|
1296 |
-
*/
|
1297 |
-
public function getSiteLogoUrl() {
|
1298 |
-
$id = $this->getSiteLogoId();
|
1299 |
-
if ( ! $id ) {
|
1300 |
-
return false;
|
1301 |
-
}
|
1302 |
-
|
1303 |
-
$image = wp_get_attachment_image_src( $id, 'full' );
|
1304 |
-
if ( empty( $image ) ) {
|
1305 |
-
return false;
|
1306 |
-
}
|
1307 |
-
return $image[0];
|
1308 |
-
}
|
1309 |
-
|
1310 |
-
/**
|
1311 |
-
* Compares two (multidimensional) arrays to see if they're different.
|
1312 |
-
*
|
1313 |
-
* @since 4.0.0
|
1314 |
-
*
|
1315 |
-
* @param array $array1 The first array.
|
1316 |
-
* @param array $array2 The second array.
|
1317 |
-
* @return boolean Whether the arrays are different.
|
1318 |
-
*/
|
1319 |
-
public function arraysDifferent( $array1, $array2 ) {
|
1320 |
-
foreach ( $array1 as $key => $value ) {
|
1321 |
-
// Check for non-existing values.
|
1322 |
-
if ( ! isset( $array2[ $key ] ) ) {
|
1323 |
-
return true;
|
1324 |
-
}
|
1325 |
-
if ( is_array( $value ) ) {
|
1326 |
-
if ( $this->arraysDifferent( $value, $array2[ $key ] ) ) {
|
1327 |
-
return true;
|
1328 |
-
};
|
1329 |
-
} else {
|
1330 |
-
if ( $value !== $array2[ $key ] ) {
|
1331 |
-
return true;
|
1332 |
-
}
|
1333 |
-
}
|
1334 |
-
}
|
1335 |
-
return false;
|
1336 |
-
}
|
1337 |
-
|
1338 |
-
/**
|
1339 |
-
* Returns the filesystem object if we have access to it.
|
1340 |
-
*
|
1341 |
-
* @since 4.0.0
|
1342 |
-
*
|
1343 |
-
* @param array $args The connection args.
|
1344 |
-
* @return WP_Filesystem The filesystem object.
|
1345 |
-
*/
|
1346 |
-
public function wpfs( $args = [] ) {
|
1347 |
-
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
1348 |
-
WP_Filesystem( $args );
|
1349 |
-
|
1350 |
-
global $wp_filesystem;
|
1351 |
-
if ( is_object( $wp_filesystem ) ) {
|
1352 |
-
return $wp_filesystem;
|
1353 |
-
}
|
1354 |
-
return false;
|
1355 |
-
}
|
1356 |
-
|
1357 |
-
/**
|
1358 |
-
* Internationalize.
|
1359 |
-
*
|
1360 |
-
* @since 4.0.0
|
1361 |
-
*
|
1362 |
-
* @param $in
|
1363 |
-
* @return mixed|void
|
1364 |
-
*/
|
1365 |
-
public function internationalize( $in ) {
|
1366 |
-
if ( function_exists( 'langswitch_filter_langs_with_message' ) ) {
|
1367 |
-
$in = langswitch_filter_langs_with_message( $in );
|
1368 |
-
}
|
1369 |
-
|
1370 |
-
if ( function_exists( 'polyglot_filter' ) ) {
|
1371 |
-
$in = polyglot_filter( $in );
|
1372 |
-
}
|
1373 |
-
|
1374 |
-
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
1375 |
-
$in = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $in );
|
1376 |
-
} elseif ( function_exists( 'ppqtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
1377 |
-
$in = ppqtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $in );
|
1378 |
-
} elseif ( function_exists( 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
1379 |
-
$in = qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage( $in );
|
1380 |
-
}
|
1381 |
-
|
1382 |
-
return apply_filters( 'localization', $in );
|
1383 |
-
}
|
1384 |
-
|
1385 |
-
/**
|
1386 |
-
* Truncates a given string.
|
1387 |
-
*
|
1388 |
-
* @since 4.0.0
|
1389 |
-
*
|
1390 |
-
* @param string $string The string.
|
1391 |
-
* @param int $maxCharacters The max. amount of characters.
|
1392 |
-
* @param boolean $shouldHaveEllipsis Whether the string should have a trailing ellipsis (defaults to true).
|
1393 |
-
* @return string $string The string.
|
1394 |
-
*/
|
1395 |
-
public function truncate( $string, $maxCharacters, $shouldHaveEllipsis = true ) {
|
1396 |
-
$length = strlen( $string );
|
1397 |
-
$excessLength = $length - $maxCharacters;
|
1398 |
-
if ( 0 < $excessLength ) {
|
1399 |
-
// If the string is longer than 65535 characters, we first need to shorten it due to the character limit of the regex pattern quantifier.
|
1400 |
-
if ( 65535 < $length ) {
|
1401 |
-
$string = substr( $string, 0, 65534 );
|
1402 |
-
}
|
1403 |
-
$string = preg_replace( "#[^\pZ\pP]*.{{$excessLength}}$#", '', $string );
|
1404 |
-
if ( $shouldHaveEllipsis ) {
|
1405 |
-
$string = $string . ' ...';
|
1406 |
-
}
|
1407 |
-
}
|
1408 |
-
return $string;
|
1409 |
-
}
|
1410 |
-
|
1411 |
-
/**
|
1412 |
-
* Removes image dimensions from the slug of a URL.
|
1413 |
-
*
|
1414 |
-
* @since 4.0.0
|
1415 |
-
*
|
1416 |
-
* @param string $url The image URL.
|
1417 |
-
* @return string The formatted image URL.
|
1418 |
-
*/
|
1419 |
-
public function removeImageDimensions( $url ) {
|
1420 |
-
return $this->isValidAttachment( $url ) ? preg_replace( '#(-[0-9]*x[0-9]*)#', '', $url ) : $url;
|
1421 |
-
}
|
1422 |
-
|
1423 |
-
/**
|
1424 |
-
* Returns the URLs of the pages that WooCommerce noindexes on its own.
|
1425 |
-
*
|
1426 |
-
* @since 4.0.0
|
1427 |
-
*
|
1428 |
-
* @return array The URLs of the noindexed pages.
|
1429 |
-
*/
|
1430 |
-
public function getNoindexedWooCommercePages() {
|
1431 |
-
if ( ! $this->isWooCommerceActive() ) {
|
1432 |
-
return [];
|
1433 |
-
}
|
1434 |
-
return [
|
1435 |
-
wc_get_cart_url(),
|
1436 |
-
wc_get_checkout_url(),
|
1437 |
-
wc_get_page_permalink( 'myaccount' )
|
1438 |
-
];
|
1439 |
-
}
|
1440 |
-
|
1441 |
-
/**
|
1442 |
-
* Checks if the server is running on Apache.
|
1443 |
-
*
|
1444 |
-
* @since 4.0.0
|
1445 |
-
*
|
1446 |
-
* @return boolean Whether or not it is on apache.
|
1447 |
-
*/
|
1448 |
-
public function isApache() {
|
1449 |
-
if ( ! isset( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
1450 |
-
return false;
|
1451 |
-
}
|
1452 |
-
|
1453 |
-
return stripos( sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ), 'apache' ) !== false;
|
1454 |
-
}
|
1455 |
-
|
1456 |
-
/**
|
1457 |
-
* Checks if the server is running on nginx.
|
1458 |
-
*
|
1459 |
-
* @since 4.0.0
|
1460 |
-
*
|
1461 |
-
* @return boolean Whether or not it is on apache.
|
1462 |
-
*/
|
1463 |
-
public function isNginx() {
|
1464 |
-
if ( ! isset( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
1465 |
-
return false;
|
1466 |
-
}
|
1467 |
-
|
1468 |
-
$server = sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) );
|
1469 |
-
|
1470 |
-
if (
|
1471 |
-
stripos( $server, 'Flywheel' ) !== false ||
|
1472 |
-
stripos( $server, 'nginx' ) !== false
|
1473 |
-
) {
|
1474 |
-
return true;
|
1475 |
-
}
|
1476 |
-
|
1477 |
-
return false;
|
1478 |
-
}
|
1479 |
-
|
1480 |
-
/**
|
1481 |
-
* Get Network ID
|
1482 |
-
*
|
1483 |
-
* @since 4.0.0
|
1484 |
-
*
|
1485 |
-
* @return int The integer of the blog/site id.
|
1486 |
-
*/
|
1487 |
-
public function getNetworkId() {
|
1488 |
-
if ( is_multisite() ) {
|
1489 |
-
return get_network()->site_id;
|
1490 |
-
}
|
1491 |
-
return get_current_blog_id();
|
1492 |
-
}
|
1493 |
-
|
1494 |
-
/**
|
1495 |
-
* Validate IP addresses.
|
1496 |
-
*
|
1497 |
-
* @since 4.0.0
|
1498 |
-
*
|
1499 |
-
* @param string $ip The IP address to validate.
|
1500 |
-
* @return boolean If the IP address is valid or not.
|
1501 |
-
*/
|
1502 |
-
public function validateIp( $ip ) {
|
1503 |
-
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
|
1504 |
-
// Valid IPV4.
|
1505 |
-
return true;
|
1506 |
-
}
|
1507 |
-
|
1508 |
-
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
|
1509 |
-
// Valid IPV6.
|
1510 |
-
return true;
|
1511 |
-
}
|
1512 |
-
|
1513 |
-
// Doesn't seem to be a valid IP.
|
1514 |
-
return false;
|
1515 |
-
}
|
1516 |
-
|
1517 |
-
/**
|
1518 |
-
* Convert bytes to readable format.
|
1519 |
-
*
|
1520 |
-
* @since 4.0.0
|
1521 |
-
*
|
1522 |
-
* @param integer $bytes The size of the file.
|
1523 |
-
* @return string The size as a string.
|
1524 |
-
*/
|
1525 |
-
public function convertFileSize( $bytes ) {
|
1526 |
-
if ( empty( $bytes ) ) {
|
1527 |
-
return [
|
1528 |
-
'original' => 0,
|
1529 |
-
'readable' => '0 B'
|
1530 |
-
];
|
1531 |
-
}
|
1532 |
-
$i = floor( log( $bytes ) / log( 1024 ) );
|
1533 |
-
$sizes = [ 'B', 'KB', 'MB', 'GB', 'TB' ];
|
1534 |
-
return [
|
1535 |
-
'original' => $bytes,
|
1536 |
-
'readable' => sprintf( '%.02F', $bytes / pow( 1024, $i ) ) * 1 . ' ' . $sizes[ $i ]
|
1537 |
-
];
|
1538 |
-
}
|
1539 |
-
|
1540 |
-
/**
|
1541 |
-
* Get timezone offset.
|
1542 |
-
* We use the code from `wp_timezone_string()`
|
1543 |
-
* which became available in WP 5.3+
|
1544 |
-
*
|
1545 |
-
* @since 4.0.0
|
1546 |
-
*
|
1547 |
-
* @return string
|
1548 |
-
*/
|
1549 |
-
public function getTimeZoneOffset() {
|
1550 |
-
// The code below is basically a copy-paste from that function.
|
1551 |
-
$timezoneString = get_option( 'timezone_string' );
|
1552 |
-
|
1553 |
-
if ( $timezoneString ) {
|
1554 |
-
return $timezoneString;
|
1555 |
-
}
|
1556 |
-
|
1557 |
-
$offset = (float) get_option( 'gmt_offset' );
|
1558 |
-
$hours = (int) $offset;
|
1559 |
-
$minutes = ( $offset - $hours );
|
1560 |
-
$sign = ( $offset < 0 ) ? '-' : '+';
|
1561 |
-
$absHour = abs( $hours );
|
1562 |
-
$absMins = abs( $minutes * 60 );
|
1563 |
-
$tzOffset = sprintf( '%s%02d:%02d', $sign, $absHour, $absMins );
|
1564 |
-
|
1565 |
-
return $tzOffset;
|
1566 |
-
}
|
1567 |
-
|
1568 |
-
/**
|
1569 |
-
* Returns the current post object.
|
1570 |
-
*
|
1571 |
-
* @since 4.0.0
|
1572 |
-
*
|
1573 |
-
* @param int $postId The post ID.
|
1574 |
-
* @return WP_Post The post object.
|
1575 |
-
*/
|
1576 |
-
public function getPost( $postId = false ) {
|
1577 |
-
static $showOnFront = null;
|
1578 |
-
static $pageOnFront = null;
|
1579 |
-
static $pageForPosts = null;
|
1580 |
-
|
1581 |
-
$postId = is_a( $postId, 'WP_Post' ) ? $postId->ID : $postId;
|
1582 |
-
|
1583 |
-
if ( aioseo()->helpers->isWooCommerceShopPage( $postId ) ) {
|
1584 |
-
return get_post( wc_get_page_id( 'shop' ) );
|
1585 |
-
}
|
1586 |
-
|
1587 |
-
if ( is_front_page() || is_home() ) {
|
1588 |
-
$showOnFront = $showOnFront ? $showOnFront : 'page' === get_option( 'show_on_front' );
|
1589 |
-
if ( $showOnFront ) {
|
1590 |
-
if ( is_front_page() ) {
|
1591 |
-
$pageOnFront = $pageOnFront ? $pageOnFront : (int) get_option( 'page_on_front' );
|
1592 |
-
return get_post( $pageOnFront );
|
1593 |
-
} elseif ( is_home() ) {
|
1594 |
-
$pageForPosts = $pageForPosts ? $pageForPosts : (int) get_option( 'page_for_posts' );
|
1595 |
-
return get_post( $pageForPosts );
|
1596 |
-
}
|
1597 |
-
}
|
1598 |
-
|
1599 |
-
return get_post();
|
1600 |
-
}
|
1601 |
-
|
1602 |
-
if (
|
1603 |
-
$this->isScreenBase( 'post' ) ||
|
1604 |
-
$postId ||
|
1605 |
-
is_singular()
|
1606 |
-
) {
|
1607 |
-
return get_post( $postId );
|
1608 |
-
}
|
1609 |
-
}
|
1610 |
-
|
1611 |
-
/**
|
1612 |
-
* Get Queried Object.
|
1613 |
-
*
|
1614 |
-
* @since 4.0.0
|
1615 |
-
*
|
1616 |
-
* @return null|\WP_Post Current WP object queried.
|
1617 |
-
*/
|
1618 |
-
public function getQueriedObject() {
|
1619 |
-
global $wp_query, $post;
|
1620 |
-
|
1621 |
-
if ( is_object( $post ) ) {
|
1622 |
-
return $post;
|
1623 |
-
} else {
|
1624 |
-
if ( ! $wp_query ) {
|
1625 |
-
return null;
|
1626 |
-
}
|
1627 |
-
return $wp_query->get_queried_object();
|
1628 |
-
}
|
1629 |
-
}
|
1630 |
-
|
1631 |
-
/**
|
1632 |
-
* Returns the page content.
|
1633 |
-
*
|
1634 |
-
* @since 4.0.0
|
1635 |
-
*
|
1636 |
-
* @param WP_Post|int $post The post.
|
1637 |
-
* @return string The content.
|
1638 |
-
*/
|
1639 |
-
public function getContent( $post = null ) {
|
1640 |
-
$post = ( $post && is_object( $post ) ) ? $post : $post = $this->getPost( $post );
|
1641 |
-
|
1642 |
-
static $content = [];
|
1643 |
-
if ( isset( $content[ $post->ID ] ) ) {
|
1644 |
-
return $content[ $post->ID ];
|
1645 |
-
}
|
1646 |
-
|
1647 |
-
if ( empty( $post->post_content ) ) {
|
1648 |
-
return $post->post_content;
|
1649 |
-
}
|
1650 |
-
|
1651 |
-
$postContent = $post->post_content;
|
1652 |
-
if (
|
1653 |
-
! in_array( 'runShortcodesInDescription', aioseo()->internalOptions->deprecatedOptions, true ) ||
|
1654 |
-
aioseo()->options->deprecated->searchAppearance->advanced->runShortcodesInDescription
|
1655 |
-
) {
|
1656 |
-
$postContent = $this->doShortcodes( $postContent );
|
1657 |
-
}
|
1658 |
-
|
1659 |
-
$postContent = wp_trim_words( $postContent, 55, apply_filters( 'excerpt_more', ' ' . '[…]' ) );
|
1660 |
-
$postContent = str_replace( ']]>', ']]>', $postContent );
|
1661 |
-
$postContent = preg_replace( '#(<figure.*\/figure>|<img.*\/>)#', '', $postContent );
|
1662 |
-
$content[ $post->ID ] = trim( wp_strip_all_tags( strip_shortcodes( $postContent ) ) );
|
1663 |
-
return $content[ $post->ID ];
|
1664 |
-
}
|
1665 |
-
|
1666 |
-
/**
|
1667 |
-
* Returns custom fields as a string.
|
1668 |
-
*
|
1669 |
-
* @since 4.0.6
|
1670 |
-
*
|
1671 |
-
* @param WP_Post|int $post The post.
|
1672 |
-
* @param array $keys The post meta_keys to check for values.
|
1673 |
-
* @return string The custom field content.
|
1674 |
-
*/
|
1675 |
-
public function getCustomFieldsContent( $post = null, $keys = [] ) {
|
1676 |
-
$post = ( $post && is_object( $post ) ) ? $post : $this->getPost( $post );
|
1677 |
-
|
1678 |
-
$customFieldContent = '';
|
1679 |
-
|
1680 |
-
$acfFields = $this->getAcfContent( $post );
|
1681 |
-
$acfFieldsKeys = [];
|
1682 |
-
|
1683 |
-
if ( ! empty( $acfFields ) ) {
|
1684 |
-
foreach ( $acfFields as $acfField => $acfValue ) {
|
1685 |
-
if ( in_array( $acfField, $keys, true ) ) {
|
1686 |
-
$customFieldContent .= "{$acfValue} ";
|
1687 |
-
$acfFieldsKeys[] = $acfField;
|
1688 |
-
}
|
1689 |
-
}
|
1690 |
-
}
|
1691 |
-
|
1692 |
-
foreach ( $keys as $key ) {
|
1693 |
-
if ( in_array( $key, $acfFieldsKeys, true ) ) {
|
1694 |
-
continue;
|
1695 |
-
}
|
1696 |
-
|
1697 |
-
$value = get_post_meta( $post->ID, $key, true );
|
1698 |
-
|
1699 |
-
if ( $value ) {
|
1700 |
-
$customFieldContent .= "{$value} ";
|
1701 |
-
}
|
1702 |
-
}
|
1703 |
-
|
1704 |
-
return $customFieldContent;
|
1705 |
-
}
|
1706 |
-
|
1707 |
-
/**
|
1708 |
-
* Returns acf fields as an array of meta keys and values.
|
1709 |
-
*
|
1710 |
-
* @since 4.0.6
|
1711 |
-
*
|
1712 |
-
* @param WP_Post|int $post The post.
|
1713 |
-
* @param array $allowedTypes A whitelist of ACF field types.
|
1714 |
-
* @return array An array of meta keys and values.
|
1715 |
-
*/
|
1716 |
-
public function getAcfContent( $post = null, $types = [] ) {
|
1717 |
-
$post = ( $post && is_object( $post ) ) ? $post : $this->getPost( $post );
|
1718 |
-
|
1719 |
-
if ( ! class_exists( 'ACF' ) || ! function_exists( 'get_field_objects' ) ) {
|
1720 |
-
return [];
|
1721 |
-
}
|
1722 |
-
|
1723 |
-
if ( defined( 'ACF_VERSION' ) && version_compare( ACF_VERSION, '5.7.0', '<' ) ) {
|
1724 |
-
return [];
|
1725 |
-
}
|
1726 |
-
|
1727 |
-
// Set defaults.
|
1728 |
-
$allowedTypes = [
|
1729 |
-
'text',
|
1730 |
-
'textarea',
|
1731 |
-
'email',
|
1732 |
-
'url',
|
1733 |
-
'wysiwyg',
|
1734 |
-
'image',
|
1735 |
-
'gallery',
|
1736 |
-
// 'link',
|
1737 |
-
// 'taxonomy',
|
1738 |
-
];
|
1739 |
-
|
1740 |
-
$types = wp_parse_args( $types, $allowedTypes );
|
1741 |
-
$acfFields = [];
|
1742 |
-
|
1743 |
-
$fieldObjects = get_field_objects( $post->ID );
|
1744 |
-
if ( ! empty( $fieldObjects ) ) {
|
1745 |
-
foreach ( $fieldObjects as $field ) {
|
1746 |
-
if ( empty( $field['value'] ) ) {
|
1747 |
-
continue;
|
1748 |
-
}
|
1749 |
-
|
1750 |
-
if ( ! in_array( $field['type'], $types, true ) ) {
|
1751 |
-
continue;
|
1752 |
-
}
|
1753 |
-
|
1754 |
-
if ( 'url' === $field['type'] ) {
|
1755 |
-
// Url field
|
1756 |
-
$value = "<a href='{$field['value']}'>{$field['value']}</a>";
|
1757 |
-
} elseif ( 'image' === $field['type'] ) {
|
1758 |
-
// Image field
|
1759 |
-
$value = "<img src='{$field['value']['url']}'>";
|
1760 |
-
} elseif ( 'gallery' === $field['type'] ) {
|
1761 |
-
// Image field
|
1762 |
-
$value = "<img src='{$field['value'][0]['url']}'>";
|
1763 |
-
} else {
|
1764 |
-
// Other fields
|
1765 |
-
$value = $field['value'];
|
1766 |
-
}
|
1767 |
-
|
1768 |
-
if ( $value ) {
|
1769 |
-
$acfFields[ $field['name'] ] = $value;
|
1770 |
-
}
|
1771 |
-
}
|
1772 |
-
}
|
1773 |
-
|
1774 |
-
return $acfFields;
|
1775 |
-
}
|
1776 |
-
|
1777 |
-
/**
|
1778 |
-
* Returns the posts custom fields.
|
1779 |
-
*
|
1780 |
-
* @since 4.0.6
|
1781 |
-
*
|
1782 |
-
* @param WP_Post|int $post The post.
|
1783 |
-
* @return string The custom field content.
|
1784 |
-
*/
|
1785 |
-
public function getAnalysisContent( $post = null ) {
|
1786 |
-
$post = ( $post && is_object( $post ) ) ? $post : $this->getPost( $post );
|
1787 |
-
$customFieldKeys = aioseo()->options->searchAppearance->dynamic->postTypes->{$post->post_type}->customFields;
|
1788 |
-
|
1789 |
-
if ( empty( $customFieldKeys ) ) {
|
1790 |
-
return get_post_field( 'post_content', $post->ID );
|
1791 |
-
}
|
1792 |
-
|
1793 |
-
$customFieldKeys = explode( ' ', sanitize_text_field( $customFieldKeys ) );
|
1794 |
-
$customFieldContent = $this->getCustomFieldsContent( $post->ID, $customFieldKeys );
|
1795 |
-
$analysisContent = $post->post_content . apply_filters( 'aioseo_analysis_content', $customFieldContent );
|
1796 |
-
|
1797 |
-
return sanitize_post_field( 'post_content', $analysisContent, $post->ID, 'display' );
|
1798 |
Â
}
|
1799 |
Â
|
1800 |
Â
/**
|
1801 |
-
*
|
1802 |
Â
*
|
1803 |
-
* @since 4.
|
1804 |
Â
*
|
1805 |
-
* @
|
1806 |
-
* @return string The encoded string.
|
1807 |
Â
*/
|
1808 |
-
public function
|
1809 |
-
return
|
1810 |
Â
}
|
1811 |
Â
|
1812 |
Â
/**
|
1813 |
-
*
|
1814 |
Â
*
|
1815 |
Â
* @since 4.0.0
|
1816 |
Â
*
|
1817 |
-
* @param
|
1818 |
-
* @
|
Â
|
|
Â
|
|
1819 |
Â
*/
|
1820 |
-
public function
|
1821 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
1822 |
Â
}
|
1823 |
Â
|
1824 |
Â
/**
|
1825 |
-
*
|
1826 |
Â
*
|
1827 |
Â
* @since 4.0.0
|
1828 |
Â
*
|
1829 |
-
* @
|
1830 |
-
* @return boolean If the page is special or not.
|
1831 |
Â
*/
|
1832 |
-
public function
|
1833 |
-
if (
|
1834 |
-
|
1835 |
-
(int) get_option( 'wp_page_for_privacy_policy' ) === (int) $postId ||
|
1836 |
-
$this->isBuddyPressPage( $postId ) ||
|
1837 |
-
$this->isWooCommercePage( $postId )
|
1838 |
-
) {
|
1839 |
-
return true;
|
1840 |
Â
}
|
1841 |
Â
|
1842 |
-
return false;
|
1843 |
Â
}
|
1844 |
Â
|
1845 |
Â
/**
|
1846 |
-
*
|
1847 |
Â
*
|
1848 |
Â
* @since 4.0.0
|
1849 |
Â
*
|
1850 |
-
* @
|
1851 |
-
* @return boolean If the page is a WooCommerce page or not.
|
1852 |
Â
*/
|
1853 |
-
public function
|
1854 |
-
if ( ! $
|
1855 |
Â
return false;
|
1856 |
Â
}
|
1857 |
Â
|
1858 |
-
|
1859 |
-
|
1860 |
-
$cartPageId = (int) get_option( 'woocommerce_cart_page_id' );
|
1861 |
-
}
|
1862 |
-
static $checkoutPageId;
|
1863 |
-
if ( ! $checkoutPageId ) {
|
1864 |
-
$checkoutPageId = (int) get_option( 'woocommerce_checkout_page_id' );
|
1865 |
-
}
|
1866 |
-
static $myAccountPageId;
|
1867 |
-
if ( ! $myAccountPageId ) {
|
1868 |
-
$myAccountPageId = (int) get_option( 'woocommerce_myaccount_page_id' );
|
1869 |
-
}
|
1870 |
-
static $termsPageId;
|
1871 |
-
if ( ! $termsPageId ) {
|
1872 |
-
$termsPageId = (int) get_option( 'woocommerce_terms_page_id' );
|
1873 |
-
}
|
1874 |
Â
if (
|
1875 |
-
$
|
1876 |
-
$
|
1877 |
-
$myAccountPageId === (int) $postId ||
|
1878 |
-
$termsPageId === (int) $postId
|
1879 |
Â
) {
|
1880 |
Â
return true;
|
1881 |
Â
}
|
@@ -1884,41 +158,47 @@ class Helpers {
|
|
1884 |
Â
}
|
1885 |
Â
|
1886 |
Â
/**
|
1887 |
-
*
|
1888 |
Â
*
|
1889 |
Â
* @since 4.0.0
|
1890 |
Â
*
|
1891 |
-
* @param
|
1892 |
-
* @return boolean
|
1893 |
Â
*/
|
1894 |
-
public function
|
1895 |
-
|
1896 |
-
|
1897 |
-
if ( empty( $bpPages ) ) {
|
1898 |
-
return false;
|
1899 |
Â
}
|
1900 |
Â
|
1901 |
-
|
1902 |
-
|
1903 |
-
return true;
|
1904 |
-
}
|
1905 |
Â
}
|
1906 |
Â
|
Â
|
|
1907 |
Â
return false;
|
1908 |
Â
}
|
1909 |
Â
|
1910 |
Â
/**
|
1911 |
-
*
|
1912 |
Â
*
|
1913 |
Â
* @since 4.0.0
|
1914 |
Â
*
|
1915 |
-
* @param
|
1916 |
-
* @return
|
1917 |
Â
*/
|
1918 |
-
public function
|
1919 |
-
$
|
1920 |
-
|
1921 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
1922 |
Â
}
|
1923 |
Â
|
1924 |
Â
/**
|
@@ -1953,287 +233,6 @@ class Helpers {
|
|
1953 |
Â
}
|
1954 |
Â
}
|
1955 |
Â
|
1956 |
-
/**
|
1957 |
-
* Checks if WPML is active.
|
1958 |
-
*
|
1959 |
-
* @since 4.0.0
|
1960 |
-
*
|
1961 |
-
* @return bool True if it is, false if not.
|
1962 |
-
*/
|
1963 |
-
public function isWpmlActive() {
|
1964 |
-
return class_exists( 'SitePress' );
|
1965 |
-
}
|
1966 |
-
|
1967 |
-
/**
|
1968 |
-
* Check if the post passed in is a valid post, not a revision or autosave.
|
1969 |
-
*
|
1970 |
-
* @since 4.0.5
|
1971 |
-
*
|
1972 |
-
* @param WP_Post $post The Post object to check.
|
1973 |
-
* @return bool True if valid, false if not.
|
1974 |
-
*/
|
1975 |
-
public function isValidPost( $post ) {
|
1976 |
-
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
1977 |
-
return false;
|
1978 |
-
}
|
1979 |
-
|
1980 |
-
if ( ! is_object( $post ) ) {
|
1981 |
-
$post = get_post( $post );
|
1982 |
-
}
|
1983 |
-
|
1984 |
-
// In order to prevent recursion, we are skipping scheduled-action posts.
|
1985 |
-
if (
|
1986 |
-
empty( $post ) ||
|
1987 |
-
'scheduled-action' === $post->post_type ||
|
1988 |
-
'revision' === $post->post_type ||
|
1989 |
-
'publish' !== $post->post_status
|
1990 |
-
) {
|
1991 |
-
return false;
|
1992 |
-
}
|
1993 |
-
|
1994 |
-
return true;
|
1995 |
-
}
|
1996 |
-
|
1997 |
-
/**
|
1998 |
-
* Returns the URL for the WP content folder.
|
1999 |
-
*
|
2000 |
-
* @since 4.0.5
|
2001 |
-
*
|
2002 |
-
* @return string The URL.
|
2003 |
-
*/
|
2004 |
-
public function getWpContentUrl() {
|
2005 |
-
$info = wp_get_upload_dir();
|
2006 |
-
return isset( $info['baseurl'] ) ? $info['baseurl'] : '';
|
2007 |
-
}
|
2008 |
-
|
2009 |
-
/**
|
2010 |
-
* Checks whether the given URL is a valid attachment.
|
2011 |
-
*
|
2012 |
-
* @since 4.0.13
|
2013 |
-
*
|
2014 |
-
* @param string $url The URL.
|
2015 |
-
* @return boolean Whether the URL is a valid attachment.
|
2016 |
-
*/
|
2017 |
-
public function isValidAttachment( $url ) {
|
2018 |
-
$uploadDirUrl = aioseo()->helpers->escapeRegex( $this->getWpContentUrl() );
|
2019 |
-
return preg_match( "/$uploadDirUrl.*/", $url );
|
2020 |
-
}
|
2021 |
-
|
2022 |
-
/**
|
2023 |
-
* Escapes special regex characters.
|
2024 |
-
*
|
2025 |
-
* @since 4.0.5
|
2026 |
-
*
|
2027 |
-
* @param string $string The string.
|
2028 |
-
* @return string The escaped string.
|
2029 |
-
*/
|
2030 |
-
public function escapeRegex( $string ) {
|
2031 |
-
return preg_quote( $string, '/' );
|
2032 |
-
}
|
2033 |
-
|
2034 |
-
/**
|
2035 |
-
* Escapes special regex characters inside the replacement string.
|
2036 |
-
*
|
2037 |
-
* @since 4.0.7
|
2038 |
-
*
|
2039 |
-
* @param string $string The string.
|
2040 |
-
* @return string The escaped string.
|
2041 |
-
*/
|
2042 |
-
public function escapeRegexReplacement( $string ) {
|
2043 |
-
return str_replace( '$', '\$', $string );
|
2044 |
-
}
|
2045 |
-
|
2046 |
-
/**
|
2047 |
-
* preg_replace but with the replacement escaped.
|
2048 |
-
*
|
2049 |
-
* @since 4.0.10
|
2050 |
-
*
|
2051 |
-
* @param string $pattern The pattern to search for.
|
2052 |
-
* @param string $replacement The replacement string.
|
2053 |
-
* @param string $subject The subject to search in.
|
2054 |
-
* @return string The subject with matches replaced.
|
2055 |
-
*/
|
2056 |
-
public function pregReplace( $pattern, $replacement, $subject ) {
|
2057 |
-
$replacement = $this->escapeRegexReplacement( $replacement );
|
2058 |
-
return preg_replace( $pattern, $replacement, $subject );
|
2059 |
-
}
|
2060 |
-
|
2061 |
-
/**
|
2062 |
-
* Checks whether we're on the given screen.
|
2063 |
-
*
|
2064 |
-
* @since 4.0.7
|
2065 |
-
*
|
2066 |
-
* @param string $screenName The screen name.
|
2067 |
-
* @return boolean Whether we're on the given screen.
|
2068 |
-
*/
|
2069 |
-
public function isScreenBase( $screenName ) {
|
2070 |
-
$screen = $this->getCurrentScreen();
|
2071 |
-
if ( ! $screen || ! isset( $screen->base ) ) {
|
2072 |
-
return false;
|
2073 |
-
}
|
2074 |
-
return $screen->base === $screenName;
|
2075 |
-
}
|
2076 |
-
|
2077 |
-
/**
|
2078 |
-
* Returns if current screen is of a post type
|
2079 |
-
*
|
2080 |
-
* @since 4.0.17
|
2081 |
-
*
|
2082 |
-
* @param string $postType Post type slug
|
2083 |
-
*
|
2084 |
-
* @return bool
|
2085 |
-
*/
|
2086 |
-
public function isScreenPostType( $postType ) {
|
2087 |
-
$screen = $this->getCurrentScreen();
|
2088 |
-
if ( ! $screen || ! isset( $screen->post_type ) ) {
|
2089 |
-
return false;
|
2090 |
-
}
|
2091 |
-
return $screen->post_type === $postType;
|
2092 |
-
}
|
2093 |
-
|
2094 |
-
/**
|
2095 |
-
* Gets current admin screen
|
2096 |
-
*
|
2097 |
-
* @since 4.0.17
|
2098 |
-
*
|
2099 |
-
* @return false|\WP_Screen|null
|
2100 |
-
*/
|
2101 |
-
public function getCurrentScreen() {
|
2102 |
-
if ( ! is_admin() || ! function_exists( 'get_current_screen' ) ) {
|
2103 |
-
return false;
|
2104 |
-
}
|
2105 |
-
|
2106 |
-
return get_current_screen();
|
2107 |
-
}
|
2108 |
-
|
2109 |
-
/**
|
2110 |
-
* Extracts existing sitemap URLs from the robots.txt file.
|
2111 |
-
*
|
2112 |
-
* We need this in case users have existing sitemap directives added to their robots.txt file.
|
2113 |
-
*
|
2114 |
-
* @since 4.0.10
|
2115 |
-
*
|
2116 |
-
* @return array An array with robots.txt sitemap directives.
|
2117 |
-
*/
|
2118 |
-
private function extractSitemapUrlsFromRobotsTxt() {
|
2119 |
-
// First, we need to remove our filter, so that it doesn't run unintentionally.
|
2120 |
-
remove_filter( 'robots_txt', [ aioseo()->robotsTxt, 'buildRules' ], 10000 );
|
2121 |
-
$robotsTxt = apply_filters( 'robots_txt', '', true );
|
2122 |
-
add_filter( 'robots_txt', [ aioseo()->robotsTxt, 'buildRules' ], 10000, 2 );
|
2123 |
-
|
2124 |
-
if ( ! $robotsTxt ) {
|
2125 |
-
return [];
|
2126 |
-
}
|
2127 |
-
|
2128 |
-
$lines = explode( "\n", $robotsTxt );
|
2129 |
-
if ( ! is_array( $lines ) || ! count( $lines ) ) {
|
2130 |
-
return [];
|
2131 |
-
}
|
2132 |
-
|
2133 |
-
return aioseo()->robotsTxt->extractSitemapUrls( explode( "\n", $robotsTxt ) );
|
2134 |
-
}
|
2135 |
-
|
2136 |
-
/**
|
2137 |
-
* Tries to convert an attachment URL into a post ID.
|
2138 |
-
*
|
2139 |
-
* This our own optimized version of attachment_url_to_postid().
|
2140 |
-
*
|
2141 |
-
* @since 4.0.13
|
2142 |
-
*
|
2143 |
-
* @param string $url The attachment URL.
|
2144 |
-
* @return int|boolean The attachment ID or false if no attachment could be found.
|
2145 |
-
*/
|
2146 |
-
public function attachmentUrlToPostId( $url ) {
|
2147 |
-
$cacheName = "aioseo_attachment_url_to_post_id_$url";
|
2148 |
-
|
2149 |
-
$cachedId = wp_cache_get( $cacheName, 'aioseo' );
|
2150 |
-
if ( $cachedId ) {
|
2151 |
-
return 'none' !== $cachedId && is_numeric( $cachedId ) ? (int) $cachedId : false;
|
2152 |
-
}
|
2153 |
-
|
2154 |
-
$path = $url;
|
2155 |
-
$uploadDirInfo = wp_get_upload_dir();
|
2156 |
-
|
2157 |
-
$siteUrl = wp_parse_url( $uploadDirInfo['url'] );
|
2158 |
-
$imagePath = wp_parse_url( $path );
|
2159 |
-
|
2160 |
-
// Force the protocols to match if needed.
|
2161 |
-
if ( isset( $imagePath['scheme'] ) && ( $imagePath['scheme'] !== $siteUrl['scheme'] ) ) {
|
2162 |
-
$path = str_replace( $imagePath['scheme'], $siteUrl['scheme'], $path );
|
2163 |
-
}
|
2164 |
-
|
2165 |
-
if ( ! $this->isValidAttachment( $path ) ) {
|
2166 |
-
wp_cache_set( $cacheName, 'none', 'aioseo', DAY_IN_SECONDS );
|
2167 |
-
return false;
|
2168 |
-
}
|
2169 |
-
|
2170 |
-
if ( 0 === strpos( $path, $uploadDirInfo['baseurl'] . '/' ) ) {
|
2171 |
-
$path = substr( $path, strlen( $uploadDirInfo['baseurl'] . '/' ) );
|
2172 |
-
}
|
2173 |
-
|
2174 |
-
$results = aioseo()->db->start( 'postmeta' )
|
2175 |
-
->select( 'post_id' )
|
2176 |
-
->where( 'meta_key', '_wp_attached_file' )
|
2177 |
-
->where( 'meta_value', $path )
|
2178 |
-
->limit( 1 )
|
2179 |
-
->run()
|
2180 |
-
->result();
|
2181 |
-
|
2182 |
-
if ( empty( $results[0]->post_id ) ) {
|
2183 |
-
wp_cache_set( $cacheName, 'none', 'aioseo', DAY_IN_SECONDS );
|
2184 |
-
return false;
|
2185 |
-
}
|
2186 |
-
|
2187 |
-
wp_cache_set( $cacheName, $results[0]->post_id, 'aioseo', DAY_IN_SECONDS );
|
2188 |
-
return $results[0]->post_id;
|
2189 |
-
}
|
2190 |
-
|
2191 |
-
/**
|
2192 |
-
* Checks if we are in a dev environment or not.
|
2193 |
-
*
|
2194 |
-
* @since 4.1.0
|
2195 |
-
*
|
2196 |
-
* @return boolean True if we are, false if not.
|
2197 |
-
*/
|
2198 |
-
public function isDev() {
|
2199 |
-
return defined( 'AIOSEO_DEV_VERSION' ) || isset( $_REQUEST['aioseo-dev'] ); // phpcs:ignore HM.Security.NonceVerification.Recommended
|
2200 |
-
}
|
2201 |
-
|
2202 |
-
/**
|
2203 |
-
* Returns the given JSON formatted data tags as a comma separated list with their values instead.
|
2204 |
-
*
|
2205 |
-
* @since 4.1.0
|
2206 |
-
*
|
2207 |
-
* @param string $tags The JSON formatted data tags.
|
2208 |
-
* @return string The comma separated values.
|
2209 |
-
*/
|
2210 |
-
public function jsonTagsToCommaSeparatedList( $tags ) {
|
2211 |
-
$tags = json_decode( $tags );
|
2212 |
-
|
2213 |
-
$values = [];
|
2214 |
-
foreach ( $tags as $k => $tag ) {
|
2215 |
-
$values[ $k ] = $tag->value;
|
2216 |
-
}
|
2217 |
-
return implode( ',', $values );
|
2218 |
-
}
|
2219 |
-
|
2220 |
-
/**
|
2221 |
-
* Encodes a number of exceptions before we strip tags.
|
2222 |
-
* We need this function to allow certain character (combinations) in the title/description.
|
2223 |
-
*
|
2224 |
-
* @since 4.1.1
|
2225 |
-
*
|
2226 |
-
* @param string $string The string.
|
2227 |
-
* @return string $string The string with exceptions encoded.
|
2228 |
-
*/
|
2229 |
-
public function encodeExceptions( $string ) {
|
2230 |
-
$exceptions = [ '<3' ];
|
2231 |
-
foreach ( $exceptions as $exception ) {
|
2232 |
-
$string = preg_replace( "/$exception/", $this->encodeOutputHtml( $exception ), $string );
|
2233 |
-
}
|
2234 |
-
return $string;
|
2235 |
-
}
|
2236 |
-
|
2237 |
Â
/**
|
2238 |
Â
* Checks if the given string is serialized, and if so, unserializes it.
|
2239 |
Â
* If the serialized string contains an object, we abort to prevent PHP object injection.
|
@@ -2257,48 +256,4 @@ class Helpers {
|
|
2257 |
Â
}
|
2258 |
Â
return $string;
|
2259 |
Â
}
|
2260 |
-
|
2261 |
-
/**
|
2262 |
-
* Validates a URL.
|
2263 |
-
*
|
2264 |
-
* @since 4.1.2
|
2265 |
-
*
|
2266 |
-
* @param string $url The url.
|
2267 |
-
* @return bool Is it a valid/safe url.
|
2268 |
-
*/
|
2269 |
-
public function isUrl( $url ) {
|
2270 |
-
return esc_url_raw( $url ) === $url;
|
2271 |
-
}
|
2272 |
-
|
2273 |
-
/**
|
2274 |
-
* Returns true if the request is a non-legacy REST API request.
|
2275 |
-
* This function was copied from WooCommerce and improved.
|
2276 |
-
*
|
2277 |
-
* @since 4.1.2
|
2278 |
-
*
|
2279 |
-
* @return bool True if this is a REST API request.
|
2280 |
-
*/
|
2281 |
-
public function isRestApiRequest() {
|
2282 |
-
if ( empty( $_SERVER['REQUEST_URI'] ) ) {
|
2283 |
-
return false;
|
2284 |
-
}
|
2285 |
-
|
2286 |
-
$restUrl = wp_parse_url( get_rest_url() );
|
2287 |
-
$restUrl = $restUrl['path'] . ( ! empty( $restUrl['query'] ) ? '?' . $restUrl['query'] : '' );
|
2288 |
-
|
2289 |
-
$isRestApiRequest = ( 0 === strpos( $_SERVER['REQUEST_URI'], $restUrl ) );
|
2290 |
-
|
2291 |
-
return apply_filters( 'aioseo_is_rest_api_request', $isRestApiRequest );
|
2292 |
-
}
|
2293 |
-
|
2294 |
-
/**
|
2295 |
-
* Checks whether the current request is an AJAX, CRON or REST request.
|
2296 |
-
*
|
2297 |
-
* @since 4.1.3
|
2298 |
-
*
|
2299 |
-
* @return bool Wether the request is an AJAX, CRON or REST request.
|
2300 |
-
*/
|
2301 |
-
public function isAjaxCronRest() {
|
2302 |
-
return wp_doing_ajax() || wp_doing_cron() || $this->isRestApiRequest();
|
2303 |
-
}
|
2304 |
Â
}
|
6 |
Â
exit;
|
7 |
Â
}
|
8 |
Â
|
Â
|
|
Â
|
|
9 |
Â
use AIOSEO\Plugin\Common\Traits\Helpers as TraitHelpers;
|
10 |
Â
|
11 |
Â
/**
|
15 |
Â
*/
|
16 |
Â
class Helpers {
|
17 |
Â
use TraitHelpers\ActionScheduler;
|
18 |
+
use TraitHelpers\Arrays;
|
19 |
Â
use TraitHelpers\Constants;
|
20 |
Â
use TraitHelpers\DateTime;
|
21 |
+
use TraitHelpers\Language;
|
22 |
Â
use TraitHelpers\Shortcodes;
|
23 |
Â
use TraitHelpers\Strings;
|
24 |
+
use TraitHelpers\Svg;
|
25 |
+
use TraitHelpers\ThirdParty;
|
26 |
+
use TraitHelpers\Vue;
|
27 |
+
use TraitHelpers\Wp;
|
28 |
+
use TraitHelpers\WpContext;
|
29 |
+
use TraitHelpers\WpUri;
|
Â
|
|
Â
|
|
Â
|
|
30 |
Â
|
31 |
Â
/**
|
32 |
Â
* Generate a UTM URL from the url and medium/content passed in.
|
62 |
Â
|
63 |
Â
// Return the new URL.
|
64 |
Â
$url = add_query_arg( $args, $url );
|
65 |
+
return $esc ? esc_url( $url ) : $url;
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
66 |
Â
}
|
67 |
Â
|
68 |
Â
/**
|
69 |
+
* Checks if we are in a dev environment or not.
|
70 |
Â
*
|
71 |
+
* @since 4.1.0
|
72 |
Â
*
|
73 |
+
* @return boolean True if we are, false if not.
|
Â
|
|
74 |
Â
*/
|
75 |
+
public function isDev() {
|
76 |
+
return defined( 'AIOSEO_DEV_VERSION' ) || isset( $_REQUEST['aioseo-dev'] ); // phpcs:ignore HM.Security.NonceVerification.Recommended
|
77 |
Â
}
|
78 |
Â
|
79 |
Â
/**
|
80 |
+
* Request the remote URL via wp_remote_post and return a json decoded response.
|
81 |
Â
*
|
82 |
Â
* @since 4.0.0
|
83 |
Â
*
|
84 |
+
* @param array $body The content to retrieve from the remote URL.
|
85 |
+
* @param array $headers The headers to send to the remote URL.
|
86 |
+
*
|
87 |
+
* @return string|bool Json decoded response on success, false on failure.
|
88 |
Â
*/
|
89 |
+
public function sendRequest( $url, $body = [], $headers = [] ) {
|
90 |
+
$body = wp_json_encode( $body );
|
91 |
+
|
92 |
+
// Build the headers of the request.
|
93 |
+
$headers = wp_parse_args(
|
94 |
+
$headers,
|
95 |
+
[
|
96 |
+
'Content-Type' => 'application/json'
|
97 |
+
]
|
98 |
+
);
|
99 |
+
|
100 |
+
// Setup variable for wp_remote_post.
|
101 |
+
$post = [
|
102 |
+
'headers' => $headers,
|
103 |
+
'body' => $body,
|
104 |
+
'sslverify' => $this->isDev() ? false : true,
|
105 |
+
'timeout' => 20
|
106 |
+
];
|
107 |
+
|
108 |
+
// Perform the query and retrieve the response.
|
109 |
+
$response = wp_remote_post( $url, $post );
|
110 |
+
$responseBody = wp_remote_retrieve_body( $response );
|
111 |
+
|
112 |
+
// Bail out early if there are any errors.
|
113 |
+
if ( is_wp_error( $responseBody ) ) {
|
114 |
+
return false;
|
115 |
+
}
|
116 |
+
|
117 |
+
// Return the json decoded content.
|
118 |
+
return json_decode( $responseBody );
|
119 |
Â
}
|
120 |
Â
|
121 |
Â
/**
|
122 |
+
* Checks if the server is running on Apache.
|
123 |
Â
*
|
124 |
Â
* @since 4.0.0
|
125 |
Â
*
|
126 |
+
* @return boolean Whether or not it is on apache.
|
Â
|
|
127 |
Â
*/
|
128 |
+
public function isApache() {
|
129 |
+
if ( ! isset( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
130 |
+
return false;
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
131 |
Â
}
|
132 |
Â
|
133 |
+
return stripos( sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ), 'apache' ) !== false;
|
134 |
Â
}
|
135 |
Â
|
136 |
Â
/**
|
137 |
+
* Checks if the server is running on nginx.
|
138 |
Â
*
|
139 |
Â
* @since 4.0.0
|
140 |
Â
*
|
141 |
+
* @return boolean Whether or not it is on apache.
|
Â
|
|
142 |
Â
*/
|
143 |
+
public function isNginx() {
|
144 |
+
if ( ! isset( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
145 |
Â
return false;
|
146 |
Â
}
|
147 |
Â
|
148 |
+
$server = sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) );
|
149 |
+
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
150 |
Â
if (
|
151 |
+
stripos( $server, 'Flywheel' ) !== false ||
|
152 |
+
stripos( $server, 'nginx' ) !== false
|
Â
|
|
Â
|
|
153 |
Â
) {
|
154 |
Â
return true;
|
155 |
Â
}
|
158 |
Â
}
|
159 |
Â
|
160 |
Â
/**
|
161 |
+
* Validate IP addresses.
|
162 |
Â
*
|
163 |
Â
* @since 4.0.0
|
164 |
Â
*
|
165 |
+
* @param string $ip The IP address to validate.
|
166 |
+
* @return boolean If the IP address is valid or not.
|
167 |
Â
*/
|
168 |
+
public function validateIp( $ip ) {
|
169 |
+
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
|
170 |
+
return true;
|
Â
|
|
Â
|
|
171 |
Â
}
|
172 |
Â
|
173 |
+
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
|
174 |
+
return true;
|
Â
|
|
Â
|
|
175 |
Â
}
|
176 |
Â
|
177 |
+
// Doesn't seem to be a valid IP.
|
178 |
Â
return false;
|
179 |
Â
}
|
180 |
Â
|
181 |
Â
/**
|
182 |
+
* Convert bytes to readable format.
|
183 |
Â
*
|
184 |
Â
* @since 4.0.0
|
185 |
Â
*
|
186 |
+
* @param integer $bytes The size of the file.
|
187 |
+
* @return string The size as a string.
|
188 |
Â
*/
|
189 |
+
public function convertFileSize( $bytes ) {
|
190 |
+
if ( empty( $bytes ) ) {
|
191 |
+
return [
|
192 |
+
'original' => 0,
|
193 |
+
'readable' => '0 B'
|
194 |
+
];
|
195 |
+
}
|
196 |
+
$i = floor( log( $bytes ) / log( 1024 ) );
|
197 |
+
$sizes = [ 'B', 'KB', 'MB', 'GB', 'TB' ];
|
198 |
+
return [
|
199 |
+
'original' => $bytes,
|
200 |
+
'readable' => sprintf( '%.02F', $bytes / pow( 1024, $i ) ) * 1 . ' ' . $sizes[ $i ]
|
201 |
+
];
|
202 |
Â
}
|
203 |
Â
|
204 |
Â
/**
|
233 |
Â
}
|
234 |
Â
}
|
235 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
236 |
Â
/**
|
237 |
Â
* Checks if the given string is serialized, and if so, unserializes it.
|
238 |
Â
* If the serialized string contains an object, we abort to prevent PHP object injection.
|
256 |
Â
}
|
257 |
Â
return $string;
|
258 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
259 |
Â
}
|
app/Common/Utils/VueSettings.php
CHANGED
@@ -92,6 +92,8 @@ class VueSettings {
|
|
92 |
Â
'localBusinessOpeningHours' => true,
|
93 |
Â
'locationsSettings' => true,
|
94 |
Â
'advancedLocationsSettings' => true,
|
Â
|
|
Â
|
|
95 |
Â
'robotsEditor' => true,
|
96 |
Â
'badBotBlocker' => true,
|
97 |
Â
'databaseTools' => true,
|
92 |
Â
'localBusinessOpeningHours' => true,
|
93 |
Â
'locationsSettings' => true,
|
94 |
Â
'advancedLocationsSettings' => true,
|
95 |
+
'localBusinessMapsApiKey' => true,
|
96 |
+
'localBusinessMapsSettings' => true,
|
97 |
Â
'robotsEditor' => true,
|
98 |
Â
'badBotBlocker' => true,
|
99 |
Â
'databaseTools' => true,
|
app/Common/Views/main/meta.php
CHANGED
@@ -20,10 +20,10 @@ $canonical = aioseo()->helpers->canonicalUrl();
|
|
20 |
Â
$links = $this->links->getLinks();
|
21 |
Â
?>
|
22 |
Â
<?php if ( $description ) : ?>
|
23 |
-
<meta name="description" content="<?php echo esc_attr( $description ); ?>"/>
|
24 |
Â
<?php endif; ?>
|
25 |
Â
<?php if ( $robots ) : ?>
|
26 |
-
<meta name="robots" content="<?php echo esc_html( $robots ); ?>"/>
|
27 |
Â
<?php endif; ?>
|
28 |
Â
<?php
|
29 |
Â
// Adds the site verification meta for webmaster tools.
|
20 |
Â
$links = $this->links->getLinks();
|
21 |
Â
?>
|
22 |
Â
<?php if ( $description ) : ?>
|
23 |
+
<meta name="description" content="<?php echo esc_attr( $description ); ?>" />
|
24 |
Â
<?php endif; ?>
|
25 |
Â
<?php if ( $robots ) : ?>
|
26 |
+
<meta name="robots" content="<?php echo esc_html( $robots ); ?>" />
|
27 |
Â
<?php endif; ?>
|
28 |
Â
<?php
|
29 |
Â
// Adds the site verification meta for webmaster tools.
|
app/Common/Views/sitemap/html/widget-options.php
CHANGED
@@ -76,7 +76,7 @@
|
|
76 |
Â
<input
|
77 |
Â
type="checkbox"
|
78 |
Â
name="<?php echo esc_attr( $this->get_field_name( 'post_types' ) ); ?>[]"
|
79 |
-
id="<?php echo esc_attr( $this->get_field_id( 'post_types' ) ); ?>"
|
80 |
Â
<?php checked( in_array( $postTypeObject['name'], $instance['post_types'], true ) ); ?>
|
81 |
Â
value="<?php echo esc_html( $i ); ?>"
|
82 |
Â
/>
|
@@ -99,7 +99,7 @@
|
|
99 |
Â
<input
|
100 |
Â
type="checkbox"
|
101 |
Â
name="<?php echo esc_attr( $this->get_field_name( 'taxonomies' ) ); ?>[]"
|
102 |
-
id="<?php echo esc_attr( $this->get_field_id( 'taxonomies' ) ); ?>"
|
103 |
Â
<?php checked( in_array( $taxonomyObject['name'], $instance['taxonomies'], true ) ); ?>
|
104 |
Â
value="<?php echo esc_html( $i ); ?>"
|
105 |
Â
/>
|
76 |
Â
<input
|
77 |
Â
type="checkbox"
|
78 |
Â
name="<?php echo esc_attr( $this->get_field_name( 'post_types' ) ); ?>[]"
|
79 |
+
id="<?php echo esc_attr( $this->get_field_id( 'post_types' . $i ) ); ?>"
|
80 |
Â
<?php checked( in_array( $postTypeObject['name'], $instance['post_types'], true ) ); ?>
|
81 |
Â
value="<?php echo esc_html( $i ); ?>"
|
82 |
Â
/>
|
99 |
Â
<input
|
100 |
Â
type="checkbox"
|
101 |
Â
name="<?php echo esc_attr( $this->get_field_name( 'taxonomies' ) ); ?>[]"
|
102 |
+
id="<?php echo esc_attr( $this->get_field_id( 'taxonomies' . $i ) ); ?>"
|
103 |
Â
<?php checked( in_array( $taxonomyObject['name'], $instance['taxonomies'], true ) ); ?>
|
104 |
Â
value="<?php echo esc_html( $i ); ?>"
|
105 |
Â
/>
|
app/Lite/Admin/Connect.php
CHANGED
@@ -331,6 +331,9 @@ class Connect {
|
|
331 |
Â
'v' => 1,
|
332 |
Â
], defined( 'AIOSEO_UPGRADE_URL' ) ? AIOSEO_UPGRADE_URL : 'https://upgrade.aioseo.com' );
|
333 |
Â
|
Â
|
|
Â
|
|
Â
|
|
334 |
Â
return [
|
335 |
Â
'url' => $url,
|
336 |
Â
];
|
@@ -410,6 +413,8 @@ class Connect {
|
|
410 |
Â
if ( ! is_wp_error( $active ) ) {
|
411 |
Â
aioseo()->internalOptions->internal->connect->reset();
|
412 |
Â
|
Â
|
|
Â
|
|
413 |
Â
deactivate_plugins( plugin_basename( AIOSEO_FILE ), false, $network );
|
414 |
Â
|
415 |
Â
wp_send_json_success( $success );
|
@@ -454,8 +459,35 @@ class Connect {
|
|
454 |
Â
|
455 |
Â
aioseo()->internalOptions->internal->connect->reset();
|
456 |
Â
|
Â
|
|
Â
|
|
457 |
Â
deactivate_plugins( plugin_basename( AIOSEO_FILE ), false, $network );
|
458 |
Â
|
459 |
Â
wp_send_json_success( $success );
|
460 |
Â
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
461 |
Â
}
|
331 |
Â
'v' => 1,
|
332 |
Â
], defined( 'AIOSEO_UPGRADE_URL' ) ? AIOSEO_UPGRADE_URL : 'https://upgrade.aioseo.com' );
|
333 |
Â
|
334 |
+
// We're storing the ID of the user who is installing Pro so that we can add capabilties for him after upgrading.
|
335 |
+
aioseo()->transients->update( 'connect_active_user', get_current_user_id(), 15 * MINUTE_IN_SECONDS );
|
336 |
+
|
337 |
Â
return [
|
338 |
Â
'url' => $url,
|
339 |
Â
];
|
413 |
Â
if ( ! is_wp_error( $active ) ) {
|
414 |
Â
aioseo()->internalOptions->internal->connect->reset();
|
415 |
Â
|
416 |
+
$this->addCapabilitiesOnUpgrade();
|
417 |
+
|
418 |
Â
deactivate_plugins( plugin_basename( AIOSEO_FILE ), false, $network );
|
419 |
Â
|
420 |
Â
wp_send_json_success( $success );
|
459 |
Â
|
460 |
Â
aioseo()->internalOptions->internal->connect->reset();
|
461 |
Â
|
462 |
+
$this->addCapabilitiesOnUpgrade();
|
463 |
+
|
464 |
Â
deactivate_plugins( plugin_basename( AIOSEO_FILE ), false, $network );
|
465 |
Â
|
466 |
Â
wp_send_json_success( $success );
|
467 |
Â
}
|
468 |
+
|
469 |
+
/**
|
470 |
+
* Adds our capabilities to all roles on the next request and the installing user on the current request after upgrading to Pro.
|
471 |
+
* See #2267 and #2288 for context.
|
472 |
+
*
|
473 |
+
* @since 4.1.4.4
|
474 |
+
*
|
475 |
+
* @return void
|
476 |
+
*/
|
477 |
+
private function addCapabilitiesOnUpgrade() {
|
478 |
+
// We need to set this transient here because the regular activation hooks won't run and Pro otherwise won't clear the cache and add the required capabilities.
|
479 |
+
aioseo()->transients->update( 'pro_just_deactivated_lite', true );
|
480 |
+
|
481 |
+
// Doing the above isn't sufficient because the logged in user will be lacking the capabilities on the first request and see an error. Therefore, we add them manually just for him.
|
482 |
+
$userId = aioseo()->transients->get( 'connect_active_user' );
|
483 |
+
$user = get_userdata( $userId );
|
484 |
+
if ( is_object( $user ) ) {
|
485 |
+
$capabilities = aioseo()->access->getCapabilityList();
|
486 |
+
foreach ( $capabilities as $capability ) {
|
487 |
+
$user->add_cap( $capability );
|
488 |
+
}
|
489 |
+
}
|
490 |
+
|
491 |
+
aioseo()->transients->delete( 'connect_active_user' );
|
492 |
+
}
|
493 |
Â
}
|
app/Lite/Options/InternalOptions.php
ADDED
@@ -0,0 +1,42 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Lite\Options;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
use AIOSEO\Plugin\Common\Options as CommonOptions;
|
10 |
+
use AIOSEO\Plugin\Lite\Traits;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Class that holds all internal options for AIOSEO.
|
14 |
+
*
|
15 |
+
* @since 4.0.0
|
16 |
+
*/
|
17 |
+
class InternalOptions extends CommonOptions\InternalOptions {
|
18 |
+
use Traits\Options;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Defaults options for Lite.
|
22 |
+
*
|
23 |
+
* @since 4.0.0
|
24 |
+
*
|
25 |
+
* @var array
|
26 |
+
*/
|
27 |
+
private $liteDefaults = [
|
28 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
29 |
+
'internal' => [
|
30 |
+
'activated' => [ 'type' => 'number', 'default' => 0 ],
|
31 |
+
'firstActivated' => [ 'type' => 'number', 'default' => 0 ],
|
32 |
+
'installed' => [ 'type' => 'number', 'default' => 0 ],
|
33 |
+
'connect' => [
|
34 |
+
'key' => [ 'type' => 'string' ],
|
35 |
+
'time' => [ 'type' => 'number', 'default' => 0 ],
|
36 |
+
'network' => [ 'type' => 'boolean', 'default' => false ],
|
37 |
+
'token' => [ 'type' => 'string' ]
|
38 |
+
]
|
39 |
+
]
|
40 |
+
// phpcs:enable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
41 |
+
];
|
42 |
+
}
|
app/Lite/Options/Options.php
ADDED
@@ -0,0 +1,34 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Lite\Options;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
use AIOSEO\Plugin\Common\Options as CommonOptions;
|
10 |
+
use AIOSEO\Plugin\Lite\Traits;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Class that holds all options for AIOSEO.
|
14 |
+
*
|
15 |
+
* @since 4.0.0
|
16 |
+
*/
|
17 |
+
class Options extends CommonOptions\Options {
|
18 |
+
use Traits\Options;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Defaults options for Lite.
|
22 |
+
*
|
23 |
+
* @since 4.0.0
|
24 |
+
*
|
25 |
+
* @var array
|
26 |
+
*/
|
27 |
+
private $liteDefaults = [
|
28 |
+
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
29 |
+
'advanced' => [
|
30 |
+
'usageTracking' => [ 'type' => 'boolean', 'default' => false ]
|
31 |
+
]
|
32 |
+
// phpcs:enable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
33 |
+
];
|
34 |
+
}
|
app/Lite/Traits/Options.php
ADDED
@@ -0,0 +1,98 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
namespace AIOSEO\Plugin\Lite\Traits;
|
3 |
+
|
4 |
+
// Exit if accessed directly.
|
5 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
+
exit;
|
7 |
+
}
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Options trait.
|
11 |
+
*
|
12 |
+
* @since 4.0.0
|
13 |
+
*/
|
14 |
+
trait Options {
|
15 |
+
/**
|
16 |
+
* Initialize the options.
|
17 |
+
*
|
18 |
+
* @since 4.1.4
|
19 |
+
*
|
20 |
+
* @return void
|
21 |
+
*/
|
22 |
+
protected function init() {
|
23 |
+
parent::init();
|
24 |
+
|
25 |
+
$dbOptions = $this->getDbOptions( $this->optionsName . '_lite' );
|
26 |
+
|
27 |
+
// Refactor options.
|
28 |
+
$this->defaultsMerged = array_replace_recursive( $this->defaults, $this->liteDefaults );
|
29 |
+
|
30 |
+
$mergedDefaults = array_replace_recursive(
|
31 |
+
$this->liteDefaults,
|
32 |
+
$this->addValueToValuesArray( $this->liteDefaults, $dbOptions )
|
33 |
+
);
|
34 |
+
|
35 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
36 |
+
$dbOptions = array_replace_recursive(
|
37 |
+
$cachedOptions,
|
38 |
+
$mergedDefaults
|
39 |
+
);
|
40 |
+
|
41 |
+
aioseo()->optionsCache->setOptions( $this->optionsName, $dbOptions );
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Merge defaults with liteDefaults.
|
46 |
+
*
|
47 |
+
* @since 4.1.4
|
48 |
+
*
|
49 |
+
* @return array An array of dafults.
|
50 |
+
*/
|
51 |
+
public function getDefaults() {
|
52 |
+
return array_replace_recursive( parent::getDefaults(), $this->liteDefaults );
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Updates the options in the database.
|
57 |
+
*
|
58 |
+
* @since 4.1.4
|
59 |
+
*
|
60 |
+
* @param string $optionsName An optional option name to update.
|
61 |
+
* @param string $defaults The defaults to filter the options by.
|
62 |
+
* @param array|null $options An optional options array.
|
63 |
+
* @return void
|
64 |
+
*/
|
65 |
+
public function update( $optionsName = null, $defaults = null, $options = null ) {
|
66 |
+
$optionsName = empty( $optionsName ) ? $this->optionsName . '_lite' : $optionsName;
|
67 |
+
$defaults = empty( $defaults ) ? $this->liteDefaults : $defaults;
|
68 |
+
|
69 |
+
// We're creating a new array here because it was setting it by reference.
|
70 |
+
$cachedOptions = aioseo()->optionsCache->getOptions( $this->optionsName );
|
71 |
+
$optionsBefore = json_decode( wp_json_encode( $cachedOptions ), true );
|
72 |
+
|
73 |
+
parent::update( $this->optionsName, $options );
|
74 |
+
parent::update( $optionsName, $defaults, $optionsBefore );
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Updates the options in the database.
|
79 |
+
*
|
80 |
+
* @since 4.1.4
|
81 |
+
*
|
82 |
+
* @param boolean $force Whether or not to force an immediate save.
|
83 |
+
* @param string $optionsName An optional option name to update.
|
84 |
+
* @param string $defaults The defaults to filter the options by.
|
85 |
+
* @return void
|
86 |
+
*/
|
87 |
+
public function save( $force = false, $optionsName = null, $defaults = null ) {
|
88 |
+
if ( ! $this->shouldSave && ! $force ) {
|
89 |
+
return;
|
90 |
+
}
|
91 |
+
|
92 |
+
$optionsName = empty( $optionsName ) ? $this->optionsName . '_lite' : $optionsName;
|
93 |
+
$defaults = empty( $defaults ) ? $this->liteDefaults : $defaults;
|
94 |
+
|
95 |
+
parent::save( $force, $this->optionsName );
|
96 |
+
parent::save( $force, $optionsName, $defaults );
|
97 |
+
}
|
98 |
+
}
|
app/Lite/Utils/InternalOptions.php
DELETED
@@ -1,102 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace AIOSEO\Plugin\Lite\Utils;
|
3 |
-
|
4 |
-
// Exit if accessed directly.
|
5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
-
exit;
|
7 |
-
}
|
8 |
-
|
9 |
-
use AIOSEO\Plugin\Common\Utils as CommonUtils;
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Class that holds all internal options for AIOSEO.
|
13 |
-
*
|
14 |
-
* @since 4.0.0
|
15 |
-
*/
|
16 |
-
class InternalOptions extends CommonUtils\InternalOptions {
|
17 |
-
/**
|
18 |
-
* Defaults options for Lite.
|
19 |
-
*
|
20 |
-
* @since 4.0.0
|
21 |
-
*
|
22 |
-
* @var array
|
23 |
-
*/
|
24 |
-
private $liteDefaults = [
|
25 |
-
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
26 |
-
'internal' => [
|
27 |
-
'activated' => [ 'type' => 'number', 'default' => 0 ],
|
28 |
-
'firstActivated' => [ 'type' => 'number', 'default' => 0 ],
|
29 |
-
'installed' => [ 'type' => 'number', 'default' => 0 ],
|
30 |
-
'connect' => [
|
31 |
-
'key' => [ 'type' => 'string' ],
|
32 |
-
'time' => [ 'type' => 'number', 'default' => 0 ],
|
33 |
-
'network' => [ 'type' => 'boolean', 'default' => false ],
|
34 |
-
'token' => [ 'type' => 'string' ]
|
35 |
-
]
|
36 |
-
]
|
37 |
-
// phpcs:enable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
38 |
-
];
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Class constructor
|
42 |
-
*
|
43 |
-
* @since 4.0.0
|
44 |
-
*/
|
45 |
-
public function __construct( $optionsName = 'aioseo_options_internal' ) {
|
46 |
-
parent::__construct( $optionsName );
|
47 |
-
|
48 |
-
$this->init();
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Initializes the options.
|
53 |
-
*
|
54 |
-
* @since 4.0.0
|
55 |
-
*
|
56 |
-
* @return void
|
57 |
-
*/
|
58 |
-
protected function init() {
|
59 |
-
parent::init();
|
60 |
-
|
61 |
-
$dbOptions = json_decode( get_option( $this->optionsName . '_lite' ), true );
|
62 |
-
if ( empty( $dbOptions ) ) {
|
63 |
-
$dbOptions = [];
|
64 |
-
}
|
65 |
-
|
66 |
-
// Refactor options.
|
67 |
-
$this->defaultsMerged = array_replace_recursive( $this->defaults, $this->liteDefaults );
|
68 |
-
|
69 |
-
$options = array_replace_recursive(
|
70 |
-
$this->options,
|
71 |
-
$this->addValueToValuesArray( $this->options, $dbOptions )
|
72 |
-
);
|
73 |
-
|
74 |
-
$this->options = apply_filters( 'aioseo_get_options_internal_lite', $options );
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Updates the options in the database.
|
79 |
-
*
|
80 |
-
* @since 4.0.0
|
81 |
-
*
|
82 |
-
* @param array|null $options An optional options array.
|
83 |
-
* @return void
|
84 |
-
*/
|
85 |
-
public function update( $options = null ) {
|
86 |
-
$optionsBefore = $this->options;
|
87 |
-
parent::update( $options );
|
88 |
-
$this->options = $optionsBefore;
|
89 |
-
|
90 |
-
// First, we need to filter our options.
|
91 |
-
$options = $this->filterOptions( $this->liteDefaults );
|
92 |
-
|
93 |
-
// Refactor options.
|
94 |
-
$refactored = $this->convertOptionsToValues( $options );
|
95 |
-
|
96 |
-
$this->resetGroups();
|
97 |
-
|
98 |
-
update_option( $this->optionsName . '_lite', wp_json_encode( $refactored ) );
|
99 |
-
|
100 |
-
$this->init();
|
101 |
-
}
|
102 |
-
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
app/Lite/Utils/Options.php
DELETED
@@ -1,107 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
namespace AIOSEO\Plugin\Lite\Utils;
|
3 |
-
|
4 |
-
// Exit if accessed directly.
|
5 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
6 |
-
exit;
|
7 |
-
}
|
8 |
-
|
9 |
-
use AIOSEO\Plugin\Common\Utils as CommonUtils;
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Class that holds all options for AIOSEO.
|
13 |
-
*
|
14 |
-
* @since 4.0.0
|
15 |
-
*/
|
16 |
-
class Options extends CommonUtils\Options {
|
17 |
-
/**
|
18 |
-
* Defaults options for Lite.
|
19 |
-
*
|
20 |
-
* @since 4.0.0
|
21 |
-
*
|
22 |
-
* @var array
|
23 |
-
*/
|
24 |
-
private $liteDefaults = [
|
25 |
-
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
26 |
-
'advanced' => [
|
27 |
-
'usageTracking' => [ 'type' => 'boolean', 'default' => false ]
|
28 |
-
]
|
29 |
-
// phpcs:enable WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
|
30 |
-
];
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Class constructor
|
34 |
-
*
|
35 |
-
* @since 4.0.0
|
36 |
-
*/
|
37 |
-
public function __construct( $optionsName = 'aioseo_options' ) {
|
38 |
-
parent::__construct( $optionsName );
|
39 |
-
|
40 |
-
$this->init();
|
41 |
-
}
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Initializes the options.
|
45 |
-
*
|
46 |
-
* @since 4.0.0
|
47 |
-
*
|
48 |
-
* @param boolean $resetKeys Whether or not to reset keys after init.
|
49 |
-
* @return void
|
50 |
-
*/
|
51 |
-
protected function init( $resetKeys = false ) {
|
52 |
-
if ( $resetKeys ) {
|
53 |
-
$originalGroupKey = $this->groupKey;
|
54 |
-
$originalSubGroups = $this->subGroups;
|
55 |
-
}
|
56 |
-
|
57 |
-
parent::init();
|
58 |
-
|
59 |
-
$dbOptions = json_decode( get_option( $this->optionsName . '_lite' ), true );
|
60 |
-
if ( empty( $dbOptions ) ) {
|
61 |
-
$dbOptions = [];
|
62 |
-
}
|
63 |
-
|
64 |
-
// Refactor options.
|
65 |
-
$this->defaultsMerged = array_replace_recursive( $this->defaults, $this->liteDefaults );
|
66 |
-
|
67 |
-
$options = array_replace_recursive(
|
68 |
-
$this->options,
|
69 |
-
$this->addValueToValuesArray( $this->options, $dbOptions )
|
70 |
-
);
|
71 |
-
|
72 |
-
$this->options = apply_filters( 'aioseo_get_options_lite', $options );
|
73 |
-
|
74 |
-
if ( $resetKeys ) {
|
75 |
-
$this->groupKey = $originalGroupKey;
|
76 |
-
$this->subGroups = $originalSubGroups;
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Updates the options in the database.
|
82 |
-
*
|
83 |
-
* @since 4.0.0
|
84 |
-
*
|
85 |
-
* @param array|null $options An optional options array.
|
86 |
-
* @return void
|
87 |
-
*/
|
88 |
-
public function update( $options = null ) {
|
89 |
-
$optionsBefore = $this->options;
|
90 |
-
parent::update( $options );
|
91 |
-
$this->options = $optionsBefore;
|
92 |
-
|
93 |
-
// First, we need to filter our options.
|
94 |
-
$options = $this->filterOptions( $this->liteDefaults );
|
95 |
-
|
96 |
-
// Refactor options.
|
97 |
-
$refactored = $this->convertOptionsToValues( $options );
|
98 |
-
|
99 |
-
$this->resetGroups();
|
100 |
-
|
101 |
-
update_option( $this->optionsName . '_lite', wp_json_encode( $refactored ) );
|
102 |
-
|
103 |
-
if ( ! $this->needsUpdate ) {
|
104 |
-
$this->init();
|
105 |
-
}
|
106 |
-
}
|
107 |
-
}
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
dist/Lite/assets/css/aioseo-admin-bar.css
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
/*! ! built on
|
2 |
Â
#wpadminbar #wp-admin-bar-aioseo-main .aioseo-logo.svg{float:left;width:26px;height:30px;background-repeat:no-repeat;background-position:0 6px;background-size:20px;background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iI2ZmZiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iYWlvc2VvLWdlYXIiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOS45ODU0MiAxOS45NzA4QzE1LjUwMDIgMTkuOTcwOCAxOS45NzA4IDE1LjUwMDIgMTkuOTcwOCA5Ljk4NTQyQzE5Ljk3MDggNC40NzA2MyAxNS41MDAyIDAgOS45ODU0MiAwQzQuNDcwNjMgMCAwIDQuNDcwNjMgMCA5Ljk4NTQyQzAgMTUuNTAwMiA0LjQ3MDYzIDE5Ljk3MDggOS45ODU0MiAxOS45NzA4Wk04LjM5NTQxIDMuNjU0NjRDOC4yNjAxNiAzLjQ0ODUgOC4wMDk2IDMuMzUyMTEgNy43Nzk4NSAzLjQzMzI3QzcuNTE4MTYgMy41MjU3MiA3LjI2MjE4IDMuNjM0NDUgNy4wMTM0OSAzLjc1ODhDNi43OTUxOSAzLjg2Nzk2IDYuNjg1NjYgNC4xMTczMSA2LjczMzcyIDQuMzYwNDlMNi45MDQ5MyA1LjIyNjk0QzYuOTQ5IDUuNDQ5OTYgNi44NTggNS42NzYzIDYuNjg1MjIgNS44MjAwOUM2LjQxMjE2IDYuMDQ3MzQgNi4xNjAwNyA2LjMwNDI2IDUuOTM0MjEgNi41ODg2NEM1Ljc5MzgzIDYuNzY1MzkgNS41NzIzMyA2Ljg1OTA3IDUuMzUzNjEgNi44MTQ4OUw0LjUwNDI0IDYuNjQzM0M0LjI2NTY0IDYuNTk1MSA0LjAyMTU3IDYuNzA3ODggMy45MTU0NCA2LjkzMTIxQzMuODU1NDkgNy4wNTczOCAzLjc5ODg5IDcuMTg2MiAzLjc0NTgzIDcuMzE3NThDMy42OTI3NiA3LjQ0ODk2IDMuNjQzOTcgNy41ODEwNSAzLjU5OTM4IDcuNzEzNjlDMy41MjA0OCA3Ljk0ODQ3IDMuNjE1NzkgOC4yMDM5OCAzLjgxODM5IDguMzQxMzNMNC41Mzk1OCA4LjgzMDI3QzQuNzI1MjkgOC45NTYxNyA0LjgxNzc4IDkuMTgxOSA0Ljc5NTM0IDkuNDA4MjZDNC43NTkyNSA5Ljc3MjQ0IDQuNzYwNzIgMTAuMTM2IDQuNzk3NTYgMTAuNDkzNkM0LjgyMDg3IDEwLjcxOTggNC43MjkxNSAxMC45NDU5IDQuNTQzODggMTEuMDcyNEwzLjgyNDA4IDExLjU2NDJDMy42MjIwNSAxMS43MDIyIDMuNTI3NTkgMTEuOTU3OSAzLjYwNzEzIDEyLjE5MjNDMy42OTc3NCAxMi40NTkzIDMuODA0MyAxMi43MjA1IDMuOTI2MTUgMTIuOTc0M0M0LjAzMzEzIDEzLjE5NzEgNC4yNzc0OSAxMy4zMDg4IDQuNTE1ODEgMTMuMjU5OEw1LjM2NDk1IDEzLjA4NTFDNS41ODM1IDEzLjA0MDEgNS44MDUzMyAxMy4xMzMgNS45NDYyMyAxMy4zMDkzQzYuMTY4OTMgMTMuNTg3OSA2LjQyMDcxIDEzLjg0NTEgNi42OTk0IDE0LjA3NTZDNi44NzI2MSAxNC4yMTg4IDYuOTY0NDIgMTQuNDQ0OCA2LjkyMTEyIDE0LjY2OEw2Ljc1Mjk2IDE1LjUzNDhDNi43MDU3MiAxNS43NzgyIDYuODE2MjUgMTYuMDI3MyA3LjAzNTExIDE2LjEzNTZDNy4xNTg3NiAxNi4xOTY3IDcuMjg1IDE2LjI1NDUgNy40MTM3NSAxNi4zMDg2QzcuNTQyNTEgMTYuMzYyOCA3LjY3MTk2IDE2LjQxMjYgNy44MDE5NSAxNi40NTgxQzguMTgyMjQgMTYuNTkxMiA4LjcxNDQ5IDE2LjExNDcgOS4xMDggMTUuNzYyNUM5LjMwMjA1IDE1LjU4ODggOS40MjE3NCAxNS4zNDMgOS40MjMwMSAxNS4wNzk4QzkuNDIzMDEgMTUuMDc4NCA5LjQyMzAyIDE1LjA3NyA5LjQyMzAyIDE1LjA3NTZMOS40MjMwMSAxMy42MjYzQzkuNDIzMDEgMTMuNjEwOSA5LjQyMzYgMTMuNTk1NyA5LjQyNDc2IDEzLjU4MDZDOC4yNjI0OCAxMy4yOTcxIDcuMzk4MzggMTIuMjMwMSA3LjM5ODM4IDEwLjk1NzJWOS40MTgyM0M3LjM5ODM4IDkuMzAxMjUgNy40OTEzMSA5LjIwNjQyIDcuNjA1OTYgOS4yMDY0Mkg4LjMyNTg0VjcuNjkyMkM4LjMyNTg0IDcuNDgzMTIgOC40OTE5MyA3LjMxMzY0IDguNjk2ODMgNy4zMTM2NEM4LjkwMTcxIDcuMzEzNjQgOS4wNjc4MSA3LjQ4MzEyIDkuMDY3ODEgNy42OTIyVjkuMjA2NDJIMTEuMDE1NVY3LjY5MjJDMTEuMDE1NSA3LjQ4MzEyIDExLjE4MTYgNy4zMTM2NCAxMS4zODY1IDcuMzEzNjRDMTEuNTkxNCA3LjMxMzY0IDExLjc1NzUgNy40ODMxMiAxMS43NTc1IDcuNjkyMlY5LjIwNjQySDEyLjQ3NzNDMTIuNTkyIDkuMjA2NDIgMTIuNjg0OSA5LjMwMTI1IDEyLjY4NDkgOS40MTgyM1YxMC45NTcyQzEyLjY4NDkgMTIuMjcwNCAxMS43NjUzIDEzLjM2NDMgMTAuNTQ3NCAxMy42MDUxQzEwLjU0NzcgMTMuNjEyMSAxMC41NDc4IDEzLjYxOTIgMTAuNTQ3OCAxMy42MjYzTDEwLjU0NzggMTUuMDY5NEMxMC41NDc4IDE1LjMzNzcgMTAuNjcxMSAxNS41ODc5IDEwLjg3MSAxNS43NjIyQzExLjI3MTUgMTYuMTExNSAxMS44MTI5IDE2LjU4MzcgMTIuMTkxIDE2LjQ1MDJDMTIuNDUyNyAxNi4zNTc3IDEyLjcwODYgMTYuMjQ5IDEyLjk1NzMgMTYuMTI0NkMxMy4xNzU2IDE2LjAxNTUgMTMuMjg1MiAxNS43NjYxIDEzLjIzNzEgMTUuNTIyOUwxMy4wNjU5IDE0LjY1NjVDMTMuMDIxOCAxNC40MzM0IDEzLjExMjggMTQuMjA3MSAxMy4yODU2IDE0LjA2MzNDMTMuNTU4NyAxMy44MzYxIDEzLjgxMDcgMTMuNTc5MiAxNC4wMzY2IDEzLjI5NDhDMTQuMTc3IDEzLjExOCAxNC4zOTg1IDEzLjAyNDQgMTQuNjE3MiAxMy4wNjg1TDE1LjQ2NjYgMTMuMjQwMUMxNS43MDUyIDEzLjI4ODMgMTUuOTQ5MyAxMy4xNzU2IDE2LjA1NTQgMTIuOTUyMkMxNi4xMTUzIDEyLjgyNjEgMTYuMTcxOSAxMi42OTcyIDE2LjIyNSAxMi41NjU5QzE2LjI3ODEgMTIuNDM0NSAxNi4zMjY5IDEyLjMwMjQgMTYuMzcxNCAxMi4xNjk4QzE2LjQ1MDMgMTEuOTM1IDE2LjM1NSAxMS42Nzk1IDE2LjE1MjQgMTEuNTQyMUwxNS40MzEyIDExLjA1MzJDMTUuMjQ1NSAxMC45MjczIDE1LjE1MyAxMC43MDE1IDE1LjE3NTUgMTAuNDc1MkMxNS4yMTE2IDEwLjExMSAxNS4yMTAxIDkuNzQ3NDQgMTUuMTczMyA5LjM4OTg2QzE1LjE0OTkgOS4xNjM2MSAxNS4yNDE3IDguOTM3NTcgMTUuNDI2OSA4LjgxMUwxNi4xNDY3IDguMzE5MjdDMTYuMzQ4OCA4LjE4MTI2IDE2LjQ0MzIgNy45MjU1OCAxNi4zNjM3IDcuNjkxMTVDMTYuMjczMSA3LjQyNDExIDE2LjE2NjUgNy4xNjI5MiAxNi4wNDQ3IDYuOTA5MTVDMTUuOTM3NyA2LjY4NjM4IDE1LjY5MzMgNi41NzQ2MiAxNS40NTUgNi42MjM2NkwxNC42MDU5IDYuNzk4MzdDMTQuMzg3MyA2Ljg0MzM0IDE0LjE2NTUgNi43NTA0OCAxNC4wMjQ2IDYuNTc0MThDMTMuODAxOSA2LjI5NTU0IDEzLjU1MDEgNi4wMzgzMiAxMy4yNzE0IDUuODA3ODRDMTMuMDk4MiA1LjY2NDYgMTMuMDA2NCA1LjQzODU4IDEzLjA0OTcgNS4yMTU0TDEzLjIxNzkgNC4zNDg2OEMxMy4yNjUxIDQuMTA1MjEgMTMuMTU0NiAzLjg1NjE2IDEyLjkzNTcgMy43NDc4N0MxMi44MTIxIDMuNjg2NjkgMTIuNjg1OCAzLjYyODk1IDEyLjU1NzEgMy41NzQ4QzEyLjQyODMgMy41MjA2NSAxMi4yOTg5IDMuNDcwODYgMTIuMTY4OSAzLjQyNTM3QzExLjkzODggMy4zNDQ4NSAxMS42ODg0IDMuNDQyMTEgMTEuNTUzOCAzLjY0ODg0TDExLjA3NDYgNC4zODQ3NUMxMC45NTEzIDQuNTc0MjUgMTAuNzMgNC42Njg2MiAxMC41MDgyIDQuNjQ1NzNDMTAuMTUxMyA0LjYwODkgOS43OTUwMiA0LjYxMDM5IDkuNDQ0NTkgNC42NDc5OUM5LjIyMjg2IDQuNjcxNzcgOS4wMDEzNCA0LjU3ODE4IDguODc3MzEgNC4zODkxM0w4LjM5NTQxIDMuNjU0NjRaIiBmaWxsPSIjZmZmIiAvPjwvc3ZnPg==") !important}#wpadminbar #wp-admin-bar-aioseo-main.new-notifications>.ab-item{background:#2c3338;color:#72aee6}#wpadminbar #wp-admin-bar-aioseo-pro-upgrade a{background-color:#1DA867;padding-bottom:5px}#wpadminbar #wp-admin-bar-aioseo-pro-upgrade a span{font-weight:600}#wpadminbar #wp-admin-bar-aioseo-pro-license a{background-color:#DF2A4A;padding-bottom:5px}#wpadminbar #wp-admin-bar-aioseo-pro-license a span{font-weight:600}#wpadminbar .aioseo-menu-notification-counter{display:inline-flex;vertical-align:top;box-sizing:border-box;margin:7px 0 0 5px;padding:0;min-width:18px;height:18px;border-radius:9px;background-color:#ca4a1f;color:#fff;font-size:11px;line-height:1.6;text-align:center;justify-content:center}#wpadminbar .aioseo-menu-notification-counter span{line-height:1;font-size:11px}#wpadminbar .aioseo-menu-notification-indicator{float:right;margin:10px 0 0;width:8px;height:8px;border-radius:50%;background-color:#ca4a1f;line-height:1.6;animation:aioseo-menu-notification-indicator-pulse 1.5s infinite}#toplevel_page_aioseo .aioseo-menu-notification-indicator{float:right;margin:6px 0 0;width:8px;height:8px;border-radius:50%;background-color:#ca4a1f;line-height:1.6;animation:aioseo-menu-notification-indicator-pulse 1.5s infinite}@keyframes aioseo-menu-notification-indicator-pulse{0%{box-shadow:0 0 0 0px rgba(202,74,31,0.5)}100%{box-shadow:0 0 0 10px rgba(202,74,31,0)}}@media screen and (max-width: 782px){#wpadminbar #wp-admin-bar-aioseo-main{display:block;position:static}#wpadminbar #wp-admin-bar-aioseo-main .ab-item .text{display:none}#wpadminbar #wp-admin-bar-aioseo-main .aioseo-logo.svg{width:52px;height:46px;background-position:50% 8px;background-size:30px}}
|
3 |
Â
|
1 |
+
/*! ! built on Tuesday, September 21st 2021, 9:50:25 pm */
|
2 |
Â
#wpadminbar #wp-admin-bar-aioseo-main .aioseo-logo.svg{float:left;width:26px;height:30px;background-repeat:no-repeat;background-position:0 6px;background-size:20px;background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iI2ZmZiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iYWlvc2VvLWdlYXIiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOS45ODU0MiAxOS45NzA4QzE1LjUwMDIgMTkuOTcwOCAxOS45NzA4IDE1LjUwMDIgMTkuOTcwOCA5Ljk4NTQyQzE5Ljk3MDggNC40NzA2MyAxNS41MDAyIDAgOS45ODU0MiAwQzQuNDcwNjMgMCAwIDQuNDcwNjMgMCA5Ljk4NTQyQzAgMTUuNTAwMiA0LjQ3MDYzIDE5Ljk3MDggOS45ODU0MiAxOS45NzA4Wk04LjM5NTQxIDMuNjU0NjRDOC4yNjAxNiAzLjQ0ODUgOC4wMDk2IDMuMzUyMTEgNy43Nzk4NSAzLjQzMzI3QzcuNTE4MTYgMy41MjU3MiA3LjI2MjE4IDMuNjM0NDUgNy4wMTM0OSAzLjc1ODhDNi43OTUxOSAzLjg2Nzk2IDYuNjg1NjYgNC4xMTczMSA2LjczMzcyIDQuMzYwNDlMNi45MDQ5MyA1LjIyNjk0QzYuOTQ5IDUuNDQ5OTYgNi44NTggNS42NzYzIDYuNjg1MjIgNS44MjAwOUM2LjQxMjE2IDYuMDQ3MzQgNi4xNjAwNyA2LjMwNDI2IDUuOTM0MjEgNi41ODg2NEM1Ljc5MzgzIDYuNzY1MzkgNS41NzIzMyA2Ljg1OTA3IDUuMzUzNjEgNi44MTQ4OUw0LjUwNDI0IDYuNjQzM0M0LjI2NTY0IDYuNTk1MSA0LjAyMTU3IDYuNzA3ODggMy45MTU0NCA2LjkzMTIxQzMuODU1NDkgNy4wNTczOCAzLjc5ODg5IDcuMTg2MiAzLjc0NTgzIDcuMzE3NThDMy42OTI3NiA3LjQ0ODk2IDMuNjQzOTcgNy41ODEwNSAzLjU5OTM4IDcuNzEzNjlDMy41MjA0OCA3Ljk0ODQ3IDMuNjE1NzkgOC4yMDM5OCAzLjgxODM5IDguMzQxMzNMNC41Mzk1OCA4LjgzMDI3QzQuNzI1MjkgOC45NTYxNyA0LjgxNzc4IDkuMTgxOSA0Ljc5NTM0IDkuNDA4MjZDNC43NTkyNSA5Ljc3MjQ0IDQuNzYwNzIgMTAuMTM2IDQuNzk3NTYgMTAuNDkzNkM0LjgyMDg3IDEwLjcxOTggNC43MjkxNSAxMC45NDU5IDQuNTQzODggMTEuMDcyNEwzLjgyNDA4IDExLjU2NDJDMy42MjIwNSAxMS43MDIyIDMuNTI3NTkgMTEuOTU3OSAzLjYwNzEzIDEyLjE5MjNDMy42OTc3NCAxMi40NTkzIDMuODA0MyAxMi43MjA1IDMuOTI2MTUgMTIuOTc0M0M0LjAzMzEzIDEzLjE5NzEgNC4yNzc0OSAxMy4zMDg4IDQuNTE1ODEgMTMuMjU5OEw1LjM2NDk1IDEzLjA4NTFDNS41ODM1IDEzLjA0MDEgNS44MDUzMyAxMy4xMzMgNS45NDYyMyAxMy4zMDkzQzYuMTY4OTMgMTMuNTg3OSA2LjQyMDcxIDEzLjg0NTEgNi42OTk0IDE0LjA3NTZDNi44NzI2MSAxNC4yMTg4IDYuOTY0NDIgMTQuNDQ0OCA2LjkyMTEyIDE0LjY2OEw2Ljc1Mjk2IDE1LjUzNDhDNi43MDU3MiAxNS43NzgyIDYuODE2MjUgMTYuMDI3MyA3LjAzNTExIDE2LjEzNTZDNy4xNTg3NiAxNi4xOTY3IDcuMjg1IDE2LjI1NDUgNy40MTM3NSAxNi4zMDg2QzcuNTQyNTEgMTYuMzYyOCA3LjY3MTk2IDE2LjQxMjYgNy44MDE5NSAxNi40NTgxQzguMTgyMjQgMTYuNTkxMiA4LjcxNDQ5IDE2LjExNDcgOS4xMDggMTUuNzYyNUM5LjMwMjA1IDE1LjU4ODggOS40MjE3NCAxNS4zNDMgOS40MjMwMSAxNS4wNzk4QzkuNDIzMDEgMTUuMDc4NCA5LjQyMzAyIDE1LjA3NyA5LjQyMzAyIDE1LjA3NTZMOS40MjMwMSAxMy42MjYzQzkuNDIzMDEgMTMuNjEwOSA5LjQyMzYgMTMuNTk1NyA5LjQyNDc2IDEzLjU4MDZDOC4yNjI0OCAxMy4yOTcxIDcuMzk4MzggMTIuMjMwMSA3LjM5ODM4IDEwLjk1NzJWOS40MTgyM0M3LjM5ODM4IDkuMzAxMjUgNy40OTEzMSA5LjIwNjQyIDcuNjA1OTYgOS4yMDY0Mkg4LjMyNTg0VjcuNjkyMkM4LjMyNTg0IDcuNDgzMTIgOC40OTE5MyA3LjMxMzY0IDguNjk2ODMgNy4zMTM2NEM4LjkwMTcxIDcuMzEzNjQgOS4wNjc4MSA3LjQ4MzEyIDkuMDY3ODEgNy42OTIyVjkuMjA2NDJIMTEuMDE1NVY3LjY5MjJDMTEuMDE1NSA3LjQ4MzEyIDExLjE4MTYgNy4zMTM2NCAxMS4zODY1IDcuMzEzNjRDMTEuNTkxNCA3LjMxMzY0IDExLjc1NzUgNy40ODMxMiAxMS43NTc1IDcuNjkyMlY5LjIwNjQySDEyLjQ3NzNDMTIuNTkyIDkuMjA2NDIgMTIuNjg0OSA5LjMwMTI1IDEyLjY4NDkgOS40MTgyM1YxMC45NTcyQzEyLjY4NDkgMTIuMjcwNCAxMS43NjUzIDEzLjM2NDMgMTAuNTQ3NCAxMy42MDUxQzEwLjU0NzcgMTMuNjEyMSAxMC41NDc4IDEzLjYxOTIgMTAuNTQ3OCAxMy42MjYzTDEwLjU0NzggMTUuMDY5NEMxMC41NDc4IDE1LjMzNzcgMTAuNjcxMSAxNS41ODc5IDEwLjg3MSAxNS43NjIyQzExLjI3MTUgMTYuMTExNSAxMS44MTI5IDE2LjU4MzcgMTIuMTkxIDE2LjQ1MDJDMTIuNDUyNyAxNi4zNTc3IDEyLjcwODYgMTYuMjQ5IDEyLjk1NzMgMTYuMTI0NkMxMy4xNzU2IDE2LjAxNTUgMTMuMjg1MiAxNS43NjYxIDEzLjIzNzEgMTUuNTIyOUwxMy4wNjU5IDE0LjY1NjVDMTMuMDIxOCAxNC40MzM0IDEzLjExMjggMTQuMjA3MSAxMy4yODU2IDE0LjA2MzNDMTMuNTU4NyAxMy44MzYxIDEzLjgxMDcgMTMuNTc5MiAxNC4wMzY2IDEzLjI5NDhDMTQuMTc3IDEzLjExOCAxNC4zOTg1IDEzLjAyNDQgMTQuNjE3MiAxMy4wNjg1TDE1LjQ2NjYgMTMuMjQwMUMxNS43MDUyIDEzLjI4ODMgMTUuOTQ5MyAxMy4xNzU2IDE2LjA1NTQgMTIuOTUyMkMxNi4xMTUzIDEyLjgyNjEgMTYuMTcxOSAxMi42OTcyIDE2LjIyNSAxMi41NjU5QzE2LjI3ODEgMTIuNDM0NSAxNi4zMjY5IDEyLjMwMjQgMTYuMzcxNCAxMi4xNjk4QzE2LjQ1MDMgMTEuOTM1IDE2LjM1NSAxMS42Nzk1IDE2LjE1MjQgMTEuNTQyMUwxNS40MzEyIDExLjA1MzJDMTUuMjQ1NSAxMC45MjczIDE1LjE1MyAxMC43MDE1IDE1LjE3NTUgMTAuNDc1MkMxNS4yMTE2IDEwLjExMSAxNS4yMTAxIDkuNzQ3NDQgMTUuMTczMyA5LjM4OTg2QzE1LjE0OTkgOS4xNjM2MSAxNS4yNDE3IDguOTM3NTcgMTUuNDI2OSA4LjgxMUwxNi4xNDY3IDguMzE5MjdDMTYuMzQ4OCA4LjE4MTI2IDE2LjQ0MzIgNy45MjU1OCAxNi4zNjM3IDcuNjkxMTVDMTYuMjczMSA3LjQyNDExIDE2LjE2NjUgNy4xNjI5MiAxNi4wNDQ3IDYuOTA5MTVDMTUuOTM3NyA2LjY4NjM4IDE1LjY5MzMgNi41NzQ2MiAxNS40NTUgNi42MjM2NkwxNC42MDU5IDYuNzk4MzdDMTQuMzg3MyA2Ljg0MzM0IDE0LjE2NTUgNi43NTA0OCAxNC4wMjQ2IDYuNTc0MThDMTMuODAxOSA2LjI5NTU0IDEzLjU1MDEgNi4wMzgzMiAxMy4yNzE0IDUuODA3ODRDMTMuMDk4MiA1LjY2NDYgMTMuMDA2NCA1LjQzODU4IDEzLjA0OTcgNS4yMTU0TDEzLjIxNzkgNC4zNDg2OEMxMy4yNjUxIDQuMTA1MjEgMTMuMTU0NiAzLjg1NjE2IDEyLjkzNTcgMy43NDc4N0MxMi44MTIxIDMuNjg2NjkgMTIuNjg1OCAzLjYyODk1IDEyLjU1NzEgMy41NzQ4QzEyLjQyODMgMy41MjA2NSAxMi4yOTg5IDMuNDcwODYgMTIuMTY4OSAzLjQyNTM3QzExLjkzODggMy4zNDQ4NSAxMS42ODg0IDMuNDQyMTEgMTEuNTUzOCAzLjY0ODg0TDExLjA3NDYgNC4zODQ3NUMxMC45NTEzIDQuNTc0MjUgMTAuNzMgNC42Njg2MiAxMC41MDgyIDQuNjQ1NzNDMTAuMTUxMyA0LjYwODkgOS43OTUwMiA0LjYxMDM5IDkuNDQ0NTkgNC42NDc5OUM5LjIyMjg2IDQuNjcxNzcgOS4wMDEzNCA0LjU3ODE4IDguODc3MzEgNC4zODkxM0w4LjM5NTQxIDMuNjU0NjRaIiBmaWxsPSIjZmZmIiAvPjwvc3ZnPg==") !important}#wpadminbar #wp-admin-bar-aioseo-main.new-notifications>.ab-item{background:#2c3338;color:#72aee6}#wpadminbar #wp-admin-bar-aioseo-pro-upgrade a{background-color:#1DA867;padding-bottom:5px}#wpadminbar #wp-admin-bar-aioseo-pro-upgrade a span{font-weight:600}#wpadminbar #wp-admin-bar-aioseo-pro-license a{background-color:#DF2A4A;padding-bottom:5px}#wpadminbar #wp-admin-bar-aioseo-pro-license a span{font-weight:600}#wpadminbar .aioseo-menu-notification-counter{display:inline-flex;vertical-align:top;box-sizing:border-box;margin:7px 0 0 5px;padding:0;min-width:18px;height:18px;border-radius:9px;background-color:#ca4a1f;color:#fff;font-size:11px;line-height:1.6;text-align:center;justify-content:center}#wpadminbar .aioseo-menu-notification-counter span{line-height:1;font-size:11px}#wpadminbar .aioseo-menu-notification-indicator{float:right;margin:10px 0 0;width:8px;height:8px;border-radius:50%;background-color:#ca4a1f;line-height:1.6;animation:aioseo-menu-notification-indicator-pulse 1.5s infinite}#toplevel_page_aioseo .aioseo-menu-notification-indicator{float:right;margin:6px 0 0;width:8px;height:8px;border-radius:50%;background-color:#ca4a1f;line-height:1.6;animation:aioseo-menu-notification-indicator-pulse 1.5s infinite}@keyframes aioseo-menu-notification-indicator-pulse{0%{box-shadow:0 0 0 0px rgba(202,74,31,0.5)}100%{box-shadow:0 0 0 10px rgba(202,74,31,0)}}@media screen and (max-width: 782px){#wpadminbar #wp-admin-bar-aioseo-main{display:block;position:static}#wpadminbar #wp-admin-bar-aioseo-main .ab-item .text{display:none}#wpadminbar #wp-admin-bar-aioseo-main .aioseo-logo.svg{width:52px;height:46px;background-position:50% 8px;background-size:30px}}
|
3 |
Â
|
dist/Lite/assets/css/aioseo-admin-bar.css.gz
CHANGED
Binary file
|
dist/Lite/assets/css/chunk-common.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.aioseo-app .aioseo-cta{margin-top:30px;background:#fff;width:100%;padding:40px;box-shadow:0 2px 5px rgba(0,0,0,.05);border:1px solid #e8e8eb}.aioseo-app .aioseo-cta.floating{margin-top:0;position:absolute;max-width:850px;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);box-shadow:0 5px 20px rgba(0,0,0,.1);border-radius:3px}.aioseo-app .aioseo-cta .header-text{line-height:1.4;font-weight:600;font-size:24px;text-align:center;color:#141b38}.aioseo-app .aioseo-cta .header-text span.large{line-height:1.4;font-size:32px}.aioseo-app .aioseo-cta .description{margin:30px 0 50px;width:100%;max-width:600px;text-align:center;font-size:16px;color:#141b38;line-height:1.4}.aioseo-app .aioseo-cta .description .aioseo-alert{margin-bottom:30px;text-align:left}.aioseo-app .aioseo-cta .feature-list{color:#141b38;font-size:16px;width:100%;max-width:500px;margin-bottom:50px}.aioseo-app .aioseo-cta .feature-list .aioseo-col{display:flex;align-items:flex-start}.aioseo-app .aioseo-cta .feature-list .aioseo-col svg.aioseo-circle-check{color:#00aa63;width:18px;min-width:18px;min-height:18px;margin-right:10px}.aioseo-app .aioseo-cta a.learn-more{margin-top:20px;color:#8c8f9a;font-size:14px}.aioseo-app .aioseo-cta .type-1{display:flex;flex-direction:column;align-items:center}.aioseo-app .aioseo-cta .type-2{margin:30px 0 30px 50px;display:flex}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .header-text{text-align:left}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .feature-list{margin:30px 0}.aioseo-app .aioseo-cta .type-2>div{margin-right:20px;flex:0 0 50%}.aioseo-app .aioseo-cta .type-2 .featured-image{max-height:540px;border:1px solid #e8e8eb;flex:1;overflow:hidden;margin-right:-41px;margin-bottom:-71px;border-radius:5px 0 0}.aioseo-app .aioseo-cta .type-2 .featured-image img{max-height:600px}@media only screen and (max-width:912px){.aioseo-app .aioseo-cta .type-2{flex-direction:column;align-items:center}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .header-text{text-align:center}.aioseo-app .aioseo-cta .type-2>div{text-align:center;margin-right:0;margin-bottom:30px;flex:1 0 100%;width:100%}.aioseo-app .aioseo-cta .type-2 .featured-image{margin:0 -10px -41px;border-radius:5px 5px 0 0;max-height:300px}}.aioseo-app .aioseo-cta .type-3 .sub-header{line-height:1.4;font-size:16px;font-weight:600;color:#005ae0;margin-bottom:5px}.aioseo-app .aioseo-cta .type-3 .header-text{text-align:left}.aioseo-app .aioseo-cta .type-3 .feature-list{margin:30px 0}.aioseo-app .aioseo-cta .type-3 .feature-list .aioseo-col svg.aioseo-circle-check{color:#00aa63;width:21px;min-width:21px;min-height:21px;margin-right:5px}.aioseo-app .aioseo-cta .type-3 .aioseo-button{margin-right:12px}.aioseo-box-toggle .aioseo-row .aioseo-col{max-width:calc(200px + 1em)}@media only screen and (max-width:48em){.aioseo-box-toggle .aioseo-row .aioseo-col{max-width:100%}}.aioseo-box-toggle input{position:absolute!important;clip:rect(0,0,0,0);height:1px;width:1px;border:0;overflow:hidden}.aioseo-box-toggle input:checked+label{background-color:#fff;box-shadow:0 5px 10px rgba(0,90,224,.1);border:2px solid #005ae0;font-weight:600}.aioseo-box-toggle label{background-color:#f9f9fa;color:#141b38;font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;flex-direction:column;border:1px solid #f9f9fa;transition:all .1s ease-in-out;border-radius:3px;height:165px;position:relative}.aioseo-box-toggle label p{position:absolute;bottom:15px;margin:0}.aioseo-box-toggle label:hover{cursor:pointer}.aioseo-button{flex-shrink:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;padding:0 24px;border-radius:4px;-webkit-appearance:none;cursor:pointer;height:48px;transition:background-color .2s ease;position:relative;overflow:hidden;text-decoration:none;color:#141b38;white-space:nowrap}.aioseo-button.small{height:30px;font-size:14px;padding:0 12px}.aioseo-button.small .loading-spinner{width:25px;height:25px}.aioseo-button.medium{height:40px;font-size:14px;padding:0 18px}.aioseo-button.medium .loading-spinner{width:35px;height:35px}.aioseo-button.xl{height:66px;border-radius:4px;font-size:18px;padding:0 48px}.aioseo-button.gray{border:1px solid #dcdde1;background-color:#f3f4f5}.aioseo-button.gray:hover{background-color:#fff;color:#141b38}.aioseo-button.gray:active{background-color:#f3f4f5}.aioseo-button.green{border:none;background-color:#00aa63;color:#fff}.aioseo-button.green:hover{background-color:#07c575}.aioseo-button.green:active{background-color:#15955f}.aioseo-button.blue{border:none;background-color:#005ae0;color:#fff}.aioseo-button.blue:hover{background-color:#1a82ea}.aioseo-button.blue:active{background-color:#004f9d}.aioseo-button.wp-blue{border:1px solid #005ae0;background-color:#f3f5f6;color:#005ae0}.aioseo-button.wp-blue:hover{background-color:#1a82ea;border-color:#1a82ea;color:#fff}.aioseo-button.wp-blue:active{background-color:#004f9d;border-color:#004f9d;color:#fff}.aioseo-button.black{border:none;background-color:#434960;color:#fff}.aioseo-button.black:hover{background-color:#2c324c}.aioseo-button.black:active{background-color:#141b38}.aioseo-button.red{border:1px solid #df2a4a;background-color:#fff;color:#df2a4a}.aioseo-button.red:hover{background-color:#df2a4a;color:#fff}.aioseo-button.red:active{background-color:#ab2039}.aioseo-button.loading.blue,.aioseo-button.loading.blue:hover{background-color:#004f9d;color:#004f9d}.aioseo-button.loading.green,.aioseo-button.loading.green:hover{background-color:#15955f;color:#15955f}.aioseo-button.loading.gray,.aioseo-button.loading.gray:hover{background-color:#f3f4f5;color:#f3f4f5}.aioseo-button.loading.black,.aioseo-button.loading.black:hover{background-color:#141b38;color:#141b38}.aioseo-button:disabled{border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default}.aioseo-button:disabled.gray:hover{color:#8c8f9a}.aioseo-button:disabled.wp-blue{border-color:#ddd;background-color:#f7f7f7}.aioseo-button:disabled.wp-blue:hover{border-color:#ddd;color:#8c8f9a}.aioseo-button:disabled:hover{background-color:#f3f4f5}.aioseo-checkbox{display:inline-flex;align-items:center}.aioseo-checkbox.disabled,.aioseo-checkbox.disabled .form-checkbox .fancy-checkbox,.aioseo-checkbox.no-clicks,.aioseo-checkbox.no-clicks .form-checkbox .fancy-checkbox{cursor:default}.aioseo-checkbox .form-checkbox-wrapper{margin-right:10px;display:flex}.aioseo-checkbox.medium .form-checkbox{width:20px;height:20px}.aioseo-checkbox.medium .form-checkbox .fancy-checkbox svg{width:12px;height:12px}.aioseo-checkbox.medium .form-checkbox span:before{height:18px;width:18px;line-height:20px}.aioseo-checkbox.round .form-checkbox span,.aioseo-checkbox.round .form-checkbox span:before{border-radius:50%}.aioseo-checkbox .form-checkbox{position:relative;display:inline-block;width:28px;height:28px;color:#fff;vertical-align:bottom;text-align:center}.aioseo-checkbox .form-checkbox input{display:none}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox.blue{background:#005ae0}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox.green{background:#00aa63}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox:before{background:transparent}.aioseo-checkbox .form-checkbox input:disabled+.fancy-checkbox{background:#e8e8eb!important;border:1px solid #d0d1d7;cursor:default}.aioseo-checkbox .form-checkbox input:disabled+.fancy-checkbox svg{color:#8c8f9a}.aioseo-checkbox .form-checkbox input:not(:checked):disabled+.fancy-checkbox:before{left:0;bottom:0;background:#e8e8eb}.aioseo-checkbox .form-checkbox .fancy-checkbox svg{color:#fff;width:16px;height:16px}.aioseo-checkbox .form-checkbox span{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#d0d1d7;transition:.2s;border-radius:3px;display:flex;align-items:center;justify-content:center}.aioseo-checkbox .form-checkbox span:before{position:absolute;content:"";height:26px;width:26px;left:1px;bottom:1px;background-color:#fff;transition:.2s;font-size:18px;line-height:28px;border-radius:2px}.aioseo-date-picker.vue-daterange-picker{width:100%}.aioseo-date-picker.vue-daterange-picker .form-control{display:flex;align-items:center;color:#141b38;font-size:16px;height:48px;border-radius:3px;border:1px solid #d0d1d7;position:relative}.aioseo-date-picker.vue-daterange-picker .form-control svg.aioseo-circle-close{position:absolute;right:10px;color:#434960;width:15px;height:15px}.aioseo-date-picker.vue-daterange-picker.small .form-control{height:30px}.aioseo-date-picker.vue-daterange-picker.medium .form-control{height:40px}body[class*=all-in-one-seo_page] .daterangepicker .yearselect{width:75px}.aioseo-editor{position:relative}.aioseo-editor .aioseo-editor-description .ql-editor{min-height:100px}.aioseo-editor .aioseo-editor-line-numbers .ql-editor{padding:15px 15px 15px 45px}.aioseo-editor .aioseo-editor-single .ql-editor{padding:8px 10px}.aioseo-editor .aioseo-editor-single.aioseo-editor-line-numbers .ql-editor{padding:8px 10px 8px 45px}.aioseo-editor .aioseo-editor-monospace .ql-editor{font-family:monospace}.aioseo-editor .aioseo-line-numbers{background:#f7f6f7;position:absolute;text-align:right;top:1px;width:29px;left:1px;border-radius:3px 0 0 3px;padding:15px 9px 0 0;display:flex;height:calc(100% - 2px);flex-direction:column;overflow:hidden}.aioseo-editor .aioseo-line-numbers div{min-height:25px;color:#8c8f9a;font-size:12px;line-height:1.9}.aioseo-editor .ql-disabled{pointer-events:none;background-color:#f9f9fa}.aioseo-editor .ql-editor{padding:15px;border-radius:3px;font-size:16px;color:#141b38;border:1px solid #d0d1d7}.aioseo-editor .ql-editor:focus{border:1px solid #005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-editor .ql-editor .mention .ql-mention-denotation-char{display:none}.aioseo-editor .ql-editor .mention .aioseo-tag{height:25px;margin:0 1px;color:#434960;font-weight:600;font-size:14px;padding:3px 25px 3px 10px;background-color:#f3f4f5;border-radius:3px;cursor:pointer;position:relative;display:inline-flex;align-items:center}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle{display:inline-flex;align-items:center;background-color:#e8e8eb;position:absolute;top:0;right:0;bottom:0;border-radius:0 3px 3px 0}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle svg.aioseo-caret{width:18px;height:18px;transition:transform .3s}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle svg.aioseo-caret.rotated{transform:rotate(180deg)}.aioseo-editor .ql-mention-list-container{color:#141b38;background-color:#fff;max-width:250px;width:100%;margin-top:3px;border:1px solid #d0d1d7;border-radius:3px;box-shadow:0 3px 15px rgba(0,0,0,.1);z-index:9001}.aioseo-editor .ql-mention-list-container .aioseo-tag-custom,.aioseo-editor .ql-mention-list-container .aioseo-tag-search{padding:12px;border-bottom:1px solid #e8e8eb}.aioseo-editor .ql-mention-list-container .aioseo-tag-custom{display:none}.aioseo-editor .ql-mention-list-container .ql-mention-list{list-style:none;margin:0;padding:0;max-height:210px;overflow:auto}.aioseo-editor .ql-mention-list-container .ql-mention-list li{color:#141b38;margin:0;background-color:transparent;border-bottom:1px solid #e8e8eb;padding:15px;cursor:pointer;font-size:14px}.aioseo-editor .ql-mention-list-container .ql-mention-list li:last-child{border-bottom:0}.aioseo-editor .ql-mention-list-container .ql-mention-list li.selected,.aioseo-editor .ql-mention-list-container .ql-mention-list li:hover{color:#005ae0;background-color:#f2f7fd}.aioseo-editor .ql-mention-list-container .ql-mention-list li.selected .aioseo-tag-description,.aioseo-editor .ql-mention-list-container .ql-mention-list li:hover .aioseo-tag-description{color:initial}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item{display:flex}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item>div:first-child{margin-right:10px}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item .aioseo-tag-title{font-weight:600}.aioseo-editor .ql-mention-list-container .ql-mention-list li svg.aioseo-plus{width:10px;height:10px;color:#005ae0}.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match{cursor:default;padding:12px;font-size:16px;font-weight:600}.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match.highlight,.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match:hover{color:initial;background-color:transparent}.aioseo-editor .ql-toolbar{display:none}.aioseo-editor .ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.aioseo-editor .ql-snow .ql-hidden{display:none}.aioseo-editor .ql-container.ql-snow{border:none}.aioseo-editor .ql-container p{font-size:16px;margin:0;line-height:25px}.aioseo-highlight-toggle{border:1px solid #e8e8eb;border-radius:3px;min-height:48px;display:flex;align-items:center;padding:5px 10px;cursor:pointer}.aioseo-highlight-toggle>*{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-highlight-toggle.active{border-color:#005ae0;box-shadow:0 5px 10px rgba(0,90,224,.1)}.aioseo-highlight-toggle.medium{min-height:40px}.aioseo-highlight-toggle .icon{display:flex;align-items:center;margin-right:5px}.aioseo-input[data-v-20c03142]{position:relative;width:100%}.aioseo-input.file[data-v-20c03142],.aioseo-input.file input[type=file][data-v-20c03142]{position:absolute;top:0;right:0;left:0;bottom:0;margin:0;padding:0}.aioseo-input.file input[type=file][data-v-20c03142]{cursor:pointer;opacity:0}.aioseo-input.file input[type=file][data-v-20c03142]::-webkit-file-upload-button{visibility:hidden}.aioseo-input.file input[type=file][data-v-20c03142]:focus{box-shadow:none}.aioseo-input input[data-v-20c03142]{height:48px;width:100%;background-color:#fff;border:1px solid #d0d1d7;border-radius:3px;padding:15px;font-size:18px;position:relative;overflow:hidden;margin:0}.aioseo-input input[data-v-20c03142]:disabled{background:#f9f9fa}.aioseo-input input[data-v-20c03142]:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-input input[data-v-20c03142]::-moz-placeholder{color:#8c8f9a}.aioseo-input input[data-v-20c03142]:-ms-input-placeholder{color:#8c8f9a}.aioseo-input input[data-v-20c03142]::placeholder{color:#8c8f9a}.aioseo-input input.prepend[data-v-20c03142]{padding-left:50px}.aioseo-input input.append[data-v-20c03142]{padding-right:50px}.aioseo-input input.small[data-v-20c03142]{height:30px;padding:10px;font-size:14px}.aioseo-input input.small.prepend[data-v-20c03142]{padding-left:30px}.aioseo-input input.small.append[data-v-20c03142]{padding-right:30px}.aioseo-input input.medium[data-v-20c03142]{height:40px;padding:12px;font-size:16px}.aioseo-input input.medium.prepend[data-v-20c03142]{padding-left:35px}.aioseo-input input.medium.append[data-v-20c03142]{padding-right:35px}.aioseo-input.aioseo-active input[data-v-20c03142]{border-color:#00aa63}.aioseo-input.aioseo-active input[data-v-20c03142]:active,.aioseo-input.aioseo-active input[data-v-20c03142]:focus{box-shadow:0 0 0 1px #00aa63}.aioseo-input.aioseo-active .append-icon[data-v-20c03142],.aioseo-input.aioseo-active .prepend-icon[data-v-20c03142]{color:#00aa63}.aioseo-input.aioseo-error input[data-v-20c03142]{border-color:#df2a4a}.aioseo-input.aioseo-error input[data-v-20c03142]:active,.aioseo-input.aioseo-error input[data-v-20c03142]:focus{box-shadow:0 0 0 1px #df2a4a}.aioseo-input.aioseo-error .append-icon[data-v-20c03142],.aioseo-input.aioseo-error .prepend-icon[data-v-20c03142]{color:#df2a4a}.aioseo-input.aioseo-warning input[data-v-20c03142]{border-color:#f18200}.aioseo-input.aioseo-warning input[data-v-20c03142]:active,.aioseo-input.aioseo-warning input[data-v-20c03142]:focus{box-shadow:0 0 0 1px #f18200}.aioseo-input.aioseo-warning .append-icon[data-v-20c03142],.aioseo-input.aioseo-warning .prepend-icon[data-v-20c03142]{color:#f18200}.aioseo-input .prepend-icon[data-v-20c03142]{position:absolute;top:0;left:10px;width:30px;height:100%;color:#d0d1d7;display:flex;align-items:center;z-index:1}.aioseo-input .prepend-icon svg[data-v-20c03142]{width:30px;height:30px}.aioseo-input .prepend-icon.small[data-v-20c03142]{width:20px}.aioseo-input .prepend-icon.small svg[data-v-20c03142]{width:10px;height:10px}.aioseo-input .prepend-icon.medium[data-v-20c03142]{width:15px}.aioseo-input .prepend-icon.medium svg[data-v-20c03142]{width:15px;height:15px}.aioseo-input .append-icon[data-v-20c03142]{position:absolute;top:0;right:10px;width:30px;height:100%;color:#d0d1d7;display:flex;align-items:center;z-index:1}.aioseo-input .append-icon svg[data-v-20c03142]{width:30px;height:30px}.aioseo-input .append-icon.small[data-v-20c03142]{width:10px}.aioseo-input .append-icon.medium[data-v-20c03142]{width:15px}.aioseo-input .append-icon.clickable[data-v-20c03142]{cursor:pointer;padding:0 5px;background:#f3f4f5;border:1px solid #d0d1d7;color:#434960;right:0;width:30px;border-radius:0 3px 3px 0}.aioseo-input .append-icon.clickable.small[data-v-20c03142]{width:15px}.aioseo-input .append-icon.clickable.medium[data-v-20c03142]{padding:0 10px;width:40px}.aioseo-phone-number{max-width:600px}.aioseo-phone-number label{display:none}.aioseo-phone-number .maz-input__input{height:40px;min-height:40px;padding-top:0!important;border:1px solid #d0d1d7}.aioseo-phone-number .maz-input__input:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-phone-number .country-selector{flex:0 0 140px;width:140px;min-width:140px;max-width:140px}.aioseo-phone-number .country-selector:hover{z-index:1}.aioseo-phone-number .country-selector>div.maz-base-component.maz-input.has-value.has-1-right-icon.maz-input--primary>input{padding-left:50px!important}.aioseo-phone-number .country-selector .maz-input.is-focused{border-color:#005ae0}.aioseo-phone-number .country-selector .maz-select__options-list__item.selected.keyboard-selected{background-color:#005ae0}.aioseo-phone-number .maz-phone-number-input__country-flag{left:20px;bottom:12px;z-index:auto}.aioseo-phone-number .maz-input__icon{z-index:auto}.aioseo-phone-number .maz-select__options-list input{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-phone-number .maz-input__input{border-radius:3px}.aioseo-phone-number.invalidNumber div.maz-flex-1>div>input{border-color:red}.aioseo-phone-number.invalidNumber div.maz-flex-1>div>input:focus{border-color:#df2a4a;box-shadow:0 0 0 1px #df2a4a}.aioseo-phone-number.validNumber div.maz-flex-1>div>input:focus{border-color:#00aa63;box-shadow:0 0 0 1px #00aa63}.aioseo-radio{display:inline-flex;align-items:center}.aioseo-radio .form-radio-wrapper{margin-right:10px;display:flex}.aioseo-radio.medium .form-radio{width:20px;height:20px}.aioseo-radio.medium .form-radio .fancy-radio svg{width:12px;height:12px}.aioseo-radio.medium.type-1 .form-radio span:before{height:18px;width:18px;line-height:20px}.aioseo-radio.medium.type-2 .form-radio span:before{height:16px;width:16px;line-height:20px}.aioseo-radio.medium.type-2 .form-radio span:after{height:6px;width:6px;left:6px;bottom:6px}.aioseo-radio .form-radio{position:relative;display:inline-block;width:28px;height:28px;color:#fff;vertical-align:bottom;text-align:center}.aioseo-radio .form-radio input{opacity:0}.aioseo-radio .form-radio input:checked+.fancy-radio{background:#005ae0;border-color:#005ae0}.aioseo-radio .form-radio input:checked+.fancy-radio:before{background:transparent}.aioseo-radio .form-radio input:checked+.fancy-radio:after{display:block}.aioseo-radio .form-radio input:disabled+.fancy-radio{cursor:default}.aioseo-radio .form-radio input:focus+.fancy-radio{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-radio .form-radio .fancy-radio{border-radius:50%}.aioseo-radio .form-radio .fancy-radio svg{color:#fff;width:16px;height:16px}.aioseo-radio .form-radio span{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;transition:.2s;border-radius:50%;display:flex;align-items:center;justify-content:center}.aioseo-radio .form-radio span:before{position:absolute;content:"";height:26px;width:26px;left:1px;bottom:1px;transition:.2s;font-size:18px;line-height:28px;border-radius:50%}.aioseo-radio.type-1 .form-radio span,.aioseo-radio.type-1 .form-radio span:before{background-color:#f3f4f5}.aioseo-radio.type-2 .form-radio span{border:1px solid #d0d1d7;background-color:#fff}.aioseo-radio.type-2 .form-radio span:before{background-color:#fff}.aioseo-radio.type-2 .form-radio span:after{display:none;position:absolute;content:"";height:10px;width:10px;left:8px;bottom:8px;background-color:#fff;transition:.2s;border-radius:50%}.aioseo-radio.disabled{cursor:default}.aioseo-radio.disabled.type-2 .form-radio input:checked+.fancy-radio{background-color:#e8e8eb;border-color:#d0d1d7}.aioseo-radio.disabled.type-2 .form-radio span,.aioseo-radio.disabled.type-2 .form-radio span:before{background-color:#e8e8eb}.aioseo-radio.disabled.type-2 .form-radio span:after{background-color:#8c8f9a}.aioseo-radio-toggle{display:flex;align-items:center;height:40px}.aioseo-radio-toggle div{height:100%}.aioseo-radio-toggle.inline{display:inline-flex}.aioseo-radio-toggle div:first-child{overflow:hidden;border-radius:3px 0 0 3px}.aioseo-radio-toggle div:first-child label{border-radius:3px 0 0 3px}.aioseo-radio-toggle div:last-child{overflow:hidden;border-radius:0 3px 3px 0}.aioseo-radio-toggle div:last-child label{border-radius:0 3px 3px 0}.aioseo-radio-toggle input{position:absolute!important;clip:rect(0,0,0,0);height:1px;width:1px;border:0;overflow:hidden}.aioseo-radio-toggle input:checked+label{background-color:#005ae0;color:#fff}.aioseo-radio-toggle input:checked+label.dark{background-color:#434960;color:#fff}.aioseo-radio-toggle label{height:100%;background-color:#e8e8eb;color:#141b38;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;flex-direction:column;transition:all .1s ease-in-out;position:relative;padding:11px 20px;font-weight:600}.aioseo-radio-toggle label.disabled{cursor:default;pointer-events:none;opacity:.5}.aioseo-radio-toggle label:hover{background-color:#dadadf;cursor:pointer}.aioseo-radio-toggle label p{position:absolute;bottom:15px;margin:0}.aioseo-radio-toggle.circle label{background:#fff;color:#8c8f9a}.aioseo-radio-toggle.circle input+label{border-radius:50%;width:36px;height:36px;padding:8px}.aioseo-radio-toggle.circle input:checked+label{background:#e8e8eb;color:#2c324c}.aioseo-select{height:48px}.aioseo-select.multiselect--disabled .multiselect__select{background:none}.aioseo-select .multiselect__select{display:flex;align-items:center;justify-content:center;min-height:46px}.aioseo-select .multiselect__select:before{display:none}.aioseo-select .multiselect__select svg.aioseo-caret{color:#141b38;width:18px;height:18px;transition:transform .3s}.aioseo-select .multiselect__tags{height:100%;border:1px solid #d0d1d7;border-radius:3px;display:flex;justify-content:center;flex-direction:column;padding:16px 40px 16px 16px}.aioseo-select .multiselect__tags .multiselect__spinner{height:calc(100% - 2px);border:2px solid transparent}.aioseo-select .multiselect__tags .multiselect__spinner:after,.aioseo-select .multiselect__tags .multiselect__spinner:before{border-top-color:#434960}.aioseo-select .multiselect__tags .multiselect__single{display:inline-flex;margin:0;padding:0;color:#141b38;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aioseo-select .multiselect__tags .multiselect__placeholder{color:#8c8f9a;font-size:16px;line-height:20px;margin:0;padding:0}.aioseo-select .multiselect__tags .multiselect__input{padding:0;margin:0 10px 0 0;border-radius:0;border:none;color:#141b38;min-height:auto;line-height:20px}.aioseo-select .multiselect__tags .multiselect__input:focus{outline:0;box-shadow:none;border:none}.aioseo-select .multiselect__tags .multiselect__input::-moz-placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__input:-ms-input-placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__input::placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__tags-wrap{display:flex;align-items:center;flex-wrap:wrap}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag{padding:0;display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:#434960;margin:0 3px 0 0;height:24px;background-color:#f3f4f5;flex-shrink:0}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-value{padding:0 5px 0 10px}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove{padding:0 10px;height:100%;cursor:pointer;background-color:#f3f4f5;display:flex;align-items:center}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove:hover{background-color:#434960;color:#fff}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove:hover svg.aioseo-close{color:#fff}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove svg.aioseo-close{color:#434960;width:10px;height:10px}.aioseo-select.multiselect--active .multiselect__tags-wrap{margin-bottom:7px}.aioseo-select.small{height:30px;min-height:30px}.aioseo-select.small .multiselect__tags{min-height:30px;padding:8px 38px 8px 8px}.aioseo-select.small .multiselect__tags .multiselect__placeholder{font-size:14px}.aioseo-select.small .multiselect__select{height:28px;min-height:28px}.aioseo-select.small .multiselect__input{font-size:14px}.aioseo-select.small .multiselect__content-wrapper li.multiselect__element .multiselect__option{font-size:14px;padding:8px;min-height:30px}.aioseo-select.medium{height:40px}.aioseo-select.medium .multiselect__tags{padding:7px 40px 7px 7px}.aioseo-select.medium .multiselect__select{min-height:38px}.aioseo-select.multiple{min-height:48px;height:auto}.aioseo-select.multiple.small{min-height:30px}.aioseo-select.multiple.medium{min-height:40px}.aioseo-select.multiselect--above .multiselect__content-wrapper{border-top:1px solid #d0d1d7;border-bottom:none}.aioseo-select .multiselect__content-wrapper{border:1px solid #d0d1d7;border-top:none;border-bottom-left-radius:3px;border-bottom-right-radius:3px;z-index:50;-webkit-overflow-scrolling:touch}.aioseo-select .multiselect__content-wrapper .multiselect__content{max-width:100%}.aioseo-select .multiselect__content-wrapper li.multiselect__element{margin:0;border-bottom:1px solid #e8e8eb}.aioseo-select .multiselect__content-wrapper li.multiselect__element.last{border-bottom:none}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option{color:#141b38;font-weight:700;font-size:16px;white-space:normal;line-height:1.4}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--highlight{background-color:#f2f7fd}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--highlight:after{background-color:#005ae0;color:#fff}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--selected{background-color:#f2f7fd}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--disabled{font-weight:400;background-color:#fff!important;color:#8c8f9a}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option .docLink{font-size:13px;float:right}.aioseo-textarea-autosize{width:100%;background-color:#fff;border:1px solid #d0d1d7;border-radius:4px;font-size:16px;padding:12px}.aioseo-toggle{display:inline-flex}.aioseo-toggle:active,.aioseo-toggle:focus{outline:2px solid transparent}.aioseo-toggle.disabled{pointer-events:none}.aioseo-toggle.disabled .toggle-content{opacity:.5}.aioseo-toggle .toggle-content{position:relative;display:inline-block;width:36px;height:20px;margin-right:10px}.aioseo-toggle .toggle-content input{display:none}.aioseo-toggle .toggle-content input:checked+.toggle-switch{border:1px solid #005ae0;background-color:#005ae0}.aioseo-toggle .toggle-content input:checked+.toggle-switch:focus{outline:2px solid transparent}.aioseo-toggle .toggle-content input:checked+.toggle-switch:before{background-color:#fff;transform:translateX(15px)}.aioseo-toggle .toggle-content input:focus+.toggle-switch{box-shadow:0 0 1px #005ae0;outline:2px solid transparent}.aioseo-toggle .toggle-content .toggle-switch{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#fff;border:1px solid #d0d1d7;border-radius:15px;transition:.2s}.aioseo-toggle .toggle-content .toggle-switch:before{position:absolute;content:"";height:14px;width:14px;left:3px;bottom:2px;background-color:#d0d1d7;border-radius:50%;transition:.2s}.aioseo-wp-table input[type=search],.aioseo-wp-table select{border-color:#d0d1d7}.aioseo-wp-table select:focus{border-color:#005ae0;color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-wp-table select:hover{color:#005ae0}.aioseo-wp-table input.button,.aioseo-wp-table input.button:hover{color:#005ae0;border-color:#005ae0}.aioseo-wp-table .header .subsubsub{color:#555d66;font-size:13px;font-weight:600}.aioseo-wp-table .header .subsubsub>span{display:inline-flex}.aioseo-wp-table .header .subsubsub .separator{margin:0 5px}.aioseo-wp-table .header .subsubsub .active{font-weight:700;color:#141b38}.aioseo-wp-table .header .subsubsub a{text-decoration:none}.aioseo-wp-table .header .subsubsub a:hover{text-decoration:underline}.aioseo-wp-table .header .search{display:flex;justify-content:flex-end}.aioseo-wp-table .header .search .aioseo-input{width:100%;max-width:215px;margin-right:6px}.aioseo-wp-table .header .pagination{color:#555d66}.aioseo-wp-table .header .pagination .button,.aioseo-wp-table .header .pagination input{margin-left:6px}.aioseo-wp-table .tablenav-pages .current-page{padding:0 0 0 8px}.aioseo-wp-table .wp-table{width:100%;position:relative}.aioseo-wp-table .wp-table .loader-overlay{position:absolute;top:46px;right:0;bottom:36px;left:0;background:rgba(0,0,0,.3);z-index:1;display:flex;align-items:center;justify-content:center}.aioseo-wp-table .wp-table .no-results{color:#8c8f9a;min-height:200px;display:flex;align-items:center;justify-content:center;font-weight:400;font-size:24px}.aioseo-wp-table .wp-table tr.even{background-color:#f9f9fa}.aioseo-wp-table .wp-table tr.enabled td,.aioseo-wp-table .wp-table tr.enabled td strong a{color:#141b38}.aioseo-wp-table .wp-table tr:not(.enabled):not(.edit-row) td,.aioseo-wp-table .wp-table tr:not(.enabled):not(.edit-row) td a.edit-link{color:#8c8f9a}.aioseo-wp-table .wp-table tr.edit-row th{padding:0 0 0 3px}.aioseo-wp-table .wp-table tr.edit-row td{padding:0 30px 0 10px}.aioseo-wp-table .wp-table tr td strong a{font-weight:400}.aioseo-wp-table .wp-table tr td .row-actions .edit a,.aioseo-wp-table .wp-table tr td strong a:hover{color:#005ae0}.aioseo-wp-table .wp-table tr td .row-actions .edit .trash a{color:#df2a4a}.aioseo-wp-table .wp-table tr td.edit-row-content .wrapper .border{padding:8px 0;border-top:1px solid #e8e8eb}.custom-rules[data-v-06a772d2]{width:100%}.custom-rules .rule-table[data-v-06a772d2]{margin-top:5px;border:1px solid #d0d1d7;border-radius:3px;width:100%;font-family:Helvetica;font-size:14px;font-style:normal;font-weight:400;line-height:21px;letter-spacing:0;text-align:left}.custom-rules .rule-table .rule[data-v-06a772d2]{padding:13px;background:#f9f9fa}.custom-rules .rule-table .rule.even[data-v-06a772d2]{background-color:#fff}.custom-rules .rule[data-v-06a772d2]{display:flex;flex-direction:row;align-items:center;padding-top:10px}.custom-rules .rule[data-v-06a772d2]:first-child{border-radius:3px 3px 0 0}.custom-rules .rule[data-v-06a772d2]:last-child{border-radius:0 0 3px 3px}.custom-rules .rule .rule-settings>.aioseo-select[data-v-06a772d2]:first-child{width:250px;min-width:250px}.custom-rules .rule .rule-settings[data-v-06a772d2]{display:flex;flex-direction:row;align-items:center;flex:1}.custom-rules .rule .rule-settings>[data-v-06a772d2]{margin:0 6px 0 0}.custom-rules .rule .rule-settings>.aioseo-toggle[data-v-06a772d2]{margin:0 10px 0 4px}.custom-rules .rule .actions[data-v-06a772d2],.custom-rules .rule .logical[data-v-06a772d2]{flex:0}.custom-rules svg[data-v-06a772d2]{width:14px;height:14px;cursor:pointer}.custom-rules svg.aioseo-trash[data-v-06a772d2]{color:#dadada}.custom-rules svg.aioseo-trash[data-v-06a772d2]:hover{color:#df2a4a}.custom-rules .aioseo-tooltip[data-v-06a772d2]{margin:0;display:flex}.custom-rules .aioseo-button svg[data-v-06a772d2]{color:#fff}.custom-rules .add-rule[data-v-06a772d2]{margin-top:10px}.custom-rules .add-rule svg[data-v-06a772d2]{margin-right:6px}.aioseo-add-redirection.edit-url{margin-bottom:30px}.aioseo-add-redirection.edit-url .urls{align-items:flex-start}.aioseo-add-redirection.edit-url .urls .url-arrow{margin:-8px 30px 0}.aioseo-add-redirection.edit-url .advanced-settings-link{text-decoration:underline;margin-top:21px}.aioseo-add-redirection.log-404 .urls .source{min-height:103px;align-items:flex-start}.aioseo-add-redirection .generic-error{margin-bottom:20px}.aioseo-add-redirection .aioseo-settings-row .settings-name .name{font-size:14px}.aioseo-add-redirection .urls{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}.aioseo-add-redirection .urls .break{flex-basis:100%;height:0}.aioseo-add-redirection .urls .url-arrow{width:36px;margin:-15px 30px 0;display:flex;align-items:center;justify-content:center}.aioseo-add-redirection .urls .url-arrow svg{height:103px;color:#005ae0}.aioseo-add-redirection .urls .source,.aioseo-add-redirection .urls .target{flex:1;display:flex;align-items:center}.aioseo-add-redirection .urls .source>*,.aioseo-add-redirection .urls .target>*{flex:1}.aioseo-add-redirection .urls .source .aioseo-input,.aioseo-add-redirection .urls .target .aioseo-input{margin-bottom:10px}.aioseo-add-redirection .urls .target .aioseo-description{height:30px}.aioseo-add-redirection .urls .target .append-icon{width:60px;justify-content:flex-end}.aioseo-add-redirection .urls .target .append-icon svg{max-width:16px;margin-right:5px}.aioseo-add-redirection .urls .target .append-icon svg:last-of-type{margin-right:0}.aioseo-add-redirection .urls .target .append-icon svg.aioseo-circle-check{color:#00aa63}.aioseo-add-redirection .urls .target .append-icon svg.aioseo-circle-close{color:#df2a4a}.aioseo-add-redirection .urls .target .target-url-error,.aioseo-add-redirection .urls .target .target-url-warning{margin-bottom:10px}.aioseo-add-redirection .settings{display:flex;flex-direction:column;align-items:center;margin-top:30px}.aioseo-add-redirection .settings .all-settings{width:100%}.aioseo-add-redirection .settings .all-settings .all-settings-content{display:flex;align-items:center;flex-wrap:wrap}.aioseo-add-redirection .settings .all-settings .all-settings-content .advanced-settings-link{margin:16px 0 0 16px;color:#8c8f9a}@media (max-width:767px){.aioseo-add-redirection .settings .all-settings .all-settings-content{align-items:start}}.aioseo-add-redirection .settings>.actions{align-self:flex-end;margin-top:-50px}.aioseo-add-redirection .settings>.actions.advanced{margin-top:-40px}.aioseo-add-redirection .settings .query-params,.aioseo-add-redirection .settings .redirect-type{margin-bottom:10px;flex:0 1 auto}.aioseo-add-redirection .settings .query-params .aioseo-select,.aioseo-add-redirection .settings .redirect-type .aioseo-select{margin-top:5px}.aioseo-add-redirection .settings .query-params{width:340px}.aioseo-add-redirection .settings .redirect-type{width:300px;margin-right:24px}.aioseo-add-redirection .settings .aioseo-button{align-self:flex-end}.aioseo-add-redirection .settings .cancel-edit-row{margin-left:10px}.aioseo-add-redirection-target-url,.aioseo-redirect-source-url{position:relative}.aioseo-redirect-source-url .aioseo-input input{padding-right:76px}.aioseo-redirect-source-url .aioseo-input .append-icon{width:60px;justify-content:flex-end}.aioseo-redirect-source-url .aioseo-input .append-icon svg{max-width:16px;margin-right:5px}.aioseo-redirect-source-url .aioseo-input .append-icon svg:last-of-type{margin-right:0}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear{color:#8c8f9a;cursor:pointer}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear.active,.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear:hover{color:#005ae0}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-circle-check{color:#00aa63}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-circle-close{color:#df2a4a}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash{color:#8c8f9a;cursor:pointer}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash.active,.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash:hover{color:#df2a4a}.aioseo-redirect-source-url .source-url-error,.aioseo-redirect-source-url .source-url-warning{margin-bottom:10px}.aioseo-redirect-source-url .source-url-options>div{padding-bottom:5px}.aioseo-redirect-source-url .source-url-options>div>div{margin-bottom:5px}.aioseo-add-redirection-url-results{display:flex;position:absolute;background:#fff;width:100%;max-height:300px;overflow:auto;border:1px solid #d0d1d7;border-radius:3px;z-index:50;left:1px;margin-top:-9px}.aioseo-add-redirection-url-results ul{display:inline-block;max-width:100%;list-style:none;padding:0;margin:0;min-width:100%;vertical-align:top}.aioseo-add-redirection-url-results ul li{margin:0;border-bottom:1px solid #e8e8eb;display:block}.aioseo-add-redirection-url-results ul li:last-of-type{border-bottom:none}.aioseo-add-redirection-url-results ul li>span{color:#141b38;font-weight:700;font-size:16px;white-space:normal;line-height:1.4;display:flex;padding:12px;min-height:40px;text-decoration:none;text-transform:none;vertical-align:middle;position:relative;cursor:pointer}.aioseo-add-redirection-url-results ul li>span:hover{background-color:#f2f7fd}.aioseo-add-redirection-url-results ul li>span:hover .option-title{color:#005ae0}.aioseo-add-redirection-url-results .option{flex:1}.aioseo-add-redirection-url-results .option .option-title{font-weight:500;display:flex;font-size:16px;color:#141b38}.aioseo-add-redirection-url-results .option .option-title>div{margin-right:5px}.aioseo-add-redirection-url-results .option .option-title>div:first-of-type{display:inline-block}.aioseo-add-redirection-url-results .option .option-title .search-term{font-weight:700}.aioseo-add-redirection-url-results .option .option-details{display:flex;align-items:center;font-size:14px;color:#8c8f9a}.aioseo-add-redirection-url-results .option .option-details span{margin-right:15px}.aioseo-add-redirection-url-results .option-permalink{display:flex;align-items:center}.aioseo-add-redirection-url-results .option-permalink svg.aioseo-external{width:15px;height:15px;color:#434960}.aioseo-add-template-tag{border-radius:3px;padding:5px 10px;color:#141b38;font-size:14px;border:1px solid #e8e8eb;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:600}.aioseo-add-template-tag:hover{background-color:#f3f4f5}.aioseo-add-template-tag svg.aioseo-plus{width:10px;height:10px;color:#005ae0}.aioseo-additional-pages .additional-pages-table{border:1px solid #d0d1d7;border-radius:3px;margin-bottom:20px}.aioseo-additional-pages .additional-pages-table .page-priority{max-width:110px}.aioseo-additional-pages .additional-pages-table .page-frequency{max-width:166px}.aioseo-additional-pages .additional-pages-table .page-last-modified{max-width:155px}.aioseo-additional-pages .additional-pages-table .page-actions{max-width:20px}.aioseo-additional-pages .additional-pages-table .page-actions .aioseo-tooltip{display:inline-block;margin:0}.aioseo-additional-pages .additional-pages-table .pages-header{height:50px;display:flex;font-size:14px;padding:0 30px;align-items:center;border-bottom:1px solid #d0d1d7}.aioseo-additional-pages .additional-pages-table .pages-header>div{flex:1 0 auto}.aioseo-additional-pages .additional-pages-table .pages-rows{font-size:14px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row{background-color:#fff;height:70px;display:flex;align-items:center;padding:0 30px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row:last-of-type{border-radius:0 0 3px 3px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row.even{background-color:#f9f9fa}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row>div{flex:1 0 auto;padding-right:30px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row>div:last-child{padding-right:0}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row .page-actions svg.aioseo-trash{width:20px;height:20px;color:#8c8f9a;cursor:pointer;transition:color .1s ease}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row .page-actions svg.aioseo-trash:hover{color:#df2a4a}.aioseo-additional-pages svg.aioseo-circle-plus{width:14px;height:14px;margin-right:10px}.aioseo-alert{position:relative;border-radius:3px;padding:24px;font-size:16px;color:#141b38;line-height:1.4}.aioseo-alert.small{padding:8px;font-size:13px}.aioseo-alert .aioseo-alert-close{cursor:pointer;position:absolute;top:-9px;right:-9px;width:18px;height:18px;border-radius:50%;padding:5px;display:inline-flex;justify-content:center;align-content:center}.aioseo-alert .aioseo-alert-close svg{width:100%;height:100%}.aioseo-alert.blue{border:1px solid #005ae0;background-color:#f2f7fd}.aioseo-alert.blue .aioseo-alert-close{background-color:#005ae0;color:#fff}.aioseo-alert.green{border:1px solid #00aa63;background-color:#f2fdf8}.aioseo-alert.green .aioseo-alert-close{background-color:#00aa63;color:#fff}.aioseo-alert.red{border:1px solid #df2a4a;background-color:#fbe9ec}.aioseo-alert.red .aioseo-alert-close{background-color:#df2a4a;color:#fff}.aioseo-alert.yellow{border:1px solid #f18200;background-color:#fcfae8}.aioseo-alert.yellow .aioseo-alert-close{background-color:#f18200;color:#fff}.aioseo-alert.no-border{border-width:0}.aioseo-alert.text-center{text-align:center}.aioseo-analyze-competitor-site-score{border:1px solid #00aa63;border-radius:3px;color:#00aa63;font-size:14px;padding:0 8px;height:24px;display:inline-flex;align-items:center;justify-content:center;margin-right:14px}.aioseo-analyze-competitor-site-score.red{color:#df2a4a;border-color:#df2a4a}.aioseo-analyze-competitor-site-score.orange{color:#f18200;border-color:#f18200}.aioseo-animated-dannie{display:flex;align-content:center;align-items:center;justify-content:center}.aioseo-animated-dannie svg{max-width:250px}.aioseo-api-bar{height:40px;background-color:#df2a4a;color:#fff;font-size:13px;padding:0 14px 0 40px}.aioseo-api-bar,.aioseo-api-bar .upgrade-text{display:flex;align-items:center;justify-content:center}.aioseo-api-bar .upgrade-text{flex:1}.aioseo-api-bar strong{font-weight:600}.aioseo-api-bar svg.aioseo-logo-gear{width:20px;height:20px;min-width:20px;margin-right:14px}.aioseo-api-bar svg.aioseo-close{cursor:pointer;width:12px;height:12px}.aioseo-api-bar a{color:#fff;text-decoration:underline}.aioseo-api-bar a:hover{text-decoration:none}@media screen and (max-width:782px){.aioseo-api-bar{padding:0 10px;height:60px}}.aioseo-attributes ul.aioseo-attributes-list[data-v-02af7dd2]{list-style:inside;list-style-type:disc;margin:20px 0 0}.aioseo-attributes ul.aioseo-attributes-list li[data-v-02af7dd2]{display:flex;margin-bottom:8px;align-items:flex-start}.aioseo-attributes ul.aioseo-attributes-list li div[data-v-02af7dd2]:first-of-type{flex:0 0 140px}.aioseo-blur{filter:blur(3px);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-card{color:#141b38;background-color:#fff;border:1px solid #e8e8eb;box-shadow:0 2px 5px rgba(0,0,0,.05);margin:30px 0}.aioseo-card.disabled .content{background:#f9f9fa;font-size:16px;line-height:24px}@media only screen and (max-width:782px){.aioseo-card{margin:20px 0}}.aioseo-card svg.aioseo-circle-question-mark{width:17px;height:17px;color:#8c8f99;transition:background-color .2s ease}.aioseo-card svg.aioseo-circle-question-mark:hover{color:#5a5c65}.aioseo-card .header{display:flex;align-items:center;height:70px;padding:0 30px;font-weight:600;font-size:18px;border-bottom:1px solid #e8e8eb}.aioseo-card .header .header-icon{display:flex}.aioseo-card .header .header-icon svg{width:24px;height:24px;margin-right:16px}.aioseo-card .header .text{flex:1 0 auto;display:flex;align-items:center}.aioseo-card .header .text svg.aioseo-circle-question-mark{cursor:pointer;width:17px;height:17px}.aioseo-card .header .text .aioseo-pro-badge{margin-left:10px}.aioseo-card .header .text .card-score{display:flex;flex:1;align-items:center;justify-content:flex-end;padding-right:18px;font-size:13px}.aioseo-card .header .text .card-score.green{color:#00aa63}.aioseo-card .header .text .card-score.orange{color:#f18200}.aioseo-card .header .text .card-score.red{color:#df2a4a}.aioseo-card .header .text .card-score svg{margin-right:7px}.aioseo-card .header svg.aioseo-caret{width:24px;height:24px;cursor:pointer;transform:rotate(-180deg);transition:transform .3s}.aioseo-card .header svg.aioseo-caret.rotated{transform:rotate(-90deg)}.aioseo-card .header svg.aioseo-close{width:14px;height:14px;cursor:pointer}.aioseo-card .content{padding:30px;position:relative}.aioseo-card div.aioseo-settings-row:last-child{margin-bottom:0;border-bottom:none;padding-bottom:0}.aioseo-copy-block{display:inline-flex}.aioseo-copy-block .message{background-color:#fff;min-height:56px;display:flex;align-items:center;border:1px solid #dcdde1;border-radius:3px 0 0 3px;padding:10px 24px;font-weight:600}.aioseo-copy-block .copy-tooltip{display:flex}.aioseo-copy-block .copy{background-color:#fff;min-height:56px;display:flex;align-items:center;border:1px solid #dcdde1;border-left-width:0;border-radius:0 3px 3px 0;padding:10px 16px;font-weight:600;cursor:pointer}.aioseo-copy-block .copy:hover svg.aioseo-copy{color:#a7a7a7}.aioseo-copy-block .copy svg.aioseo-copy{width:20px;height:20px;color:#dadada}.aioseo-copy-block .copy svg.aioseo-circle-check-solid{width:20px;height:20px;color:#00aa63}.aioseo-display-info .aioseo-box-toggle svg{margin-top:-15px;color:#434960}.aioseo-display-info svg.aioseo-new-page,.aioseo-display-info svg.aioseo-shortcode,.aioseo-display-info svg.aioseo-widget{width:100%;height:auto;max-width:60px}.aioseo-display-info svg.aioseo-gutenberg-block{width:59px;height:54px}.aioseo-display-info svg.aioseo-gutenberg-block rect{width:100%;width:56px;height:51px}.aioseo-display-info svg.aioseo-php{width:110px}.aioseo-display-info .copy-box,.aioseo-display-info .extra-box{margin-top:10px;padding:30px;border-radius:3px;background-color:#f9f9fa}.aioseo-display-info .copy-box .aioseo-description,.aioseo-display-info .extra-box .aioseo-description{margin:0}.aioseo-display-info .copy-box .aioseo-copy-block,.aioseo-display-info .extra-box .aioseo-copy-block{margin:20px 0 0}.aioseo-display-info .copy-box .advanced-settings-link,.aioseo-display-info .extra-box .advanced-settings-link{display:inline-block;padding-top:5px;margin:16px 0 0 16px;color:#8c8f9a;text-decoration:underline;font-size:13px}.aioseo-display-info .copy-box .advanced-settings-link:hover,.aioseo-display-info .extra-box .advanced-settings-link:hover{text-decoration:none}.aioseo-display-info .copy-box .advanced-settings,.aioseo-display-info .extra-box .advanced-settings{padding-top:20px}.aioseo-display-info .advanced-settings.advanced-settings-hidden{display:none}.aioseo-display-info .aioseo-tooltip{margin-left:0}.aioseo-exclude-posts{display:flex}.aioseo-facebook-preview{background-color:#f0f2f5;padding:30px;display:flex;align-items:center;justify-content:center}.aioseo-facebook-preview .facebook-post{width:100%;max-width:525px;border-radius:10px;box-shadow:0 2px 5px rgba(0,0,0,.1);background-color:#fff}.aioseo-facebook-preview .facebook-post .facebook-header{height:65px;padding:0 18px;display:flex;align-items:center}.aioseo-facebook-preview .facebook-post .facebook-header .profile-photo{overflow:hidden;width:40px;height:40px;border:1px solid #e8e8eb;border-radius:50%}.aioseo-facebook-preview .facebook-post .facebook-header .profile-photo img{height:100%;width:100%}.aioseo-facebook-preview .facebook-post .facebook-header .poster{margin-left:10px;flex:1 0 auto}.aioseo-facebook-preview .facebook-post .facebook-header .poster .poster-name{font-size:15px;color:#050505;font-weight:500}.aioseo-facebook-preview .facebook-post .facebook-header .poster .poster-date{color:#65676b;font-size:13px}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis{display:inline-flex;align-items:center}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div{background-color:#5e666f;width:4px;height:4px;border-radius:50%;margin:0 2px}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div:first-child{margin-left:0}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div:last-child{margin-right:0}.aioseo-facebook-preview .facebook-post .facebook-content{display:flex;flex-direction:column}.aioseo-facebook-preview .facebook-post .facebook-content img{width:100%;height:auto}.aioseo-facebook-preview .facebook-post .facebook-content.vertical{flex-direction:row}.aioseo-facebook-preview .facebook-post .facebook-content.vertical img{max-width:158px;max-height:158px;width:auto;height:auto}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description{flex:1;background-color:#f2f3f5;padding:9px 13px;color:#606770}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-domain{font-size:13px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-title{color:#1d2129;font-size:17px;font-weight:600;margin:5px 0}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-description{font-size:14px}.aioseo-facebook-preview .facebook-post .facebook-footer{height:24px}.aioseo-feature-card{height:100%;border:1px solid #e8e8eb;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.05);color:#141b38;display:flex;flex-direction:column}.aioseo-feature-card .feature-card-body{padding:30px 30px 20px;flex:1}.aioseo-feature-card .feature-card-body.static{padding:30px}.aioseo-feature-card .feature-card-body .feature-card-header{display:flex;align-items:center;font-size:18px;font-weight:600;margin-bottom:16px}.aioseo-feature-card .feature-card-body .feature-card-header img,.aioseo-feature-card .feature-card-body .feature-card-header svg{width:28px;height:28px;margin-right:10px}.aioseo-feature-card .feature-card-body .feature-card-description{color:#434960;font-size:15px}.aioseo-feature-card .feature-card-body .feature-card-description .learn-more{margin-top:10px}.aioseo-feature-card .feature-card-footer{padding:15px}.aioseo-feature-card .feature-card-footer:not(.upgrade-required){border:2px solid #fff;background-color:#f9f9fa;padding:12px;min-height:43px}.aioseo-feature-card .feature-card-footer .feature-card-install-activate{display:flex;align-items:center;justify-content:flex-end;height:30px;position:relative}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .aioseo-loading-spinner{position:absolute;left:0}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .status{font-weight:600;font-size:14px}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .aioseo-toggle .toggle-content{margin-right:0;margin-left:10px}.aioseo-feature-card .feature-card-footer .feature-card-upgrade-cta{display:flex;align-items:center;justify-content:flex-end}.aioseo-feature-card .feature-card-footer.installed .feature-card-install-activate .status{color:#8c8f9a}.aioseo-setup-wizard-container{margin-top:30px;margin-bottom:50px;padding:30px;color:#fff;position:relative;background-color:#005ae0}@media only screen and (max-width:782px){.aioseo-setup-wizard-container{margin-top:20px}}.aioseo-setup-wizard-container p{color:#fff}.aioseo-setup-wizard-container .getting-started-wrapper{display:flex}.aioseo-setup-wizard-container .getting-started-wrapper .video{flex:0 0 533px;margin:20px 20px 0}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper{padding-bottom:56.25%;margin-bottom:-60px;position:relative;height:0}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper iframe{width:100%;height:100%;position:absolute;top:0;left:0}@media only screen and (max-width:1350px){.aioseo-setup-wizard-container .getting-started-wrapper .video{flex:0 0 593px;margin:20px;align-self:center}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper{margin-bottom:0}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:100%;max-width:100%;justify-content:center}}@media only screen and (max-width:1300px){.aioseo-setup-wizard-container .getting-started-wrapper{flex-direction:row;flex-wrap:wrap}.aioseo-setup-wizard-container .getting-started-wrapper .video{margin:20px 0 -60px}.aioseo-setup-wizard-container .getting-started-wrapper .text,.aioseo-setup-wizard-container .getting-started-wrapper .video{flex-basis:100%;width:100%}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions{justify-content:center}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:inherit;max-width:inherit;justify-content:center}}@media only screen and (max-width:782px){.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:100%;max-width:100%;justify-content:center}}.aioseo-setup-wizard-container .aioseo-row{position:relative;z-index:1}.aioseo-setup-wizard-container .wizard-actions .aioseo-col{display:flex;align-items:center}.aioseo-setup-wizard-container .wizard-actions .aioseo-button svg{width:16px;height:16px;margin-right:10px}.aioseo-setup-wizard-container .setup-wizard-bg{width:100%;height:100%;overflow:hidden;z-index:0;position:absolute;top:0;left:0}.aioseo-setup-wizard-container .setup-wizard-bg svg.aioseo-setup-wizard-bg,.aioseo-setup-wizard-container .setup-wizard-bg svg.aioseo-setup-wizard-bg rect{width:auto;height:100%}.aioseo-setup-wizard-container .close-wizard{color:#fff;width:20px;height:20px;position:absolute;right:20px;top:20px;z-index:1;display:flex;align-items:center;justify-content:center}.aioseo-setup-wizard-container .close-wizard:hover{color:#ccc}.aioseo-setup-wizard-container .close-wizard svg.aioseo-close{width:12px;height:12px;cursor:pointer;color:#fff}.aioseo-setup-wizard-container .close-wizard svg.aioseo-close:hover{color:#dadada}.aioseo-setup-wizard-container p.how-to-get-started{margin:0}.aioseo-setup-wizard-container p.welcome-text{line-height:1.6}.aioseo-setup-wizard-container h2{color:#fff;line-height:1.4}.aioseo-setup-wizard-container a{color:#fff}.aioseo-setup-wizard-container svg.aioseo-book{width:20px;height:20px;margin:0 10px 0 0}.aioseo-setup-wizard-container .getting-started-video{padding-right:20px;margin-bottom:-60px;position:relative;height:0;padding-bottom:56.25%}.aioseo-setup-wizard-container .getting-started-video iframe{width:100%;height:100%;position:absolute;top:0;left:0}.aioseo-google-search-preview{padding:32px 30px;border:1px solid #e8e8eb}.aioseo-google-search-preview .domain{font-size:14px;line-height:1.3;color:#3c4043;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-google-search-preview .site-title{font-size:20px;line-height:1.3;color:#1a0dab;margin:3px 0}.aioseo-google-search-preview .meta-description{max-width:600px;font-size:14px;line-height:1.4;color:#52565a}.edit-post-sidebar .domain{font-size:13px}.edit-post-sidebar .site-title{font-size:16px}.edit-post-sidebar .meta-description{font-size:12px}.aioseo-modal-content .domain,.aioseo-modal-content .meta-description{font-size:14px}.aioseo-modal-content .site-title{font-size:20px}html:not([data-scroll="0"]) .aioseo-header{box-shadow:0 2px 5px rgba(0,0,0,.05);transition:box-shadow .6s}.aioseo-header{position:fixed;z-index:1051;top:0;right:0;left:0;background-color:#fff;height:72px;color:#141b38}.aioseo-header .mascot{width:35px;height:auto;margin-right:10px}.aioseo-header .aioseo-header-content{padding:0;display:flex;height:72px;align-items:center}.aioseo-header .aioseo-header-content a:focus{box-shadow:none}.aioseo-header .aioseo-header-content svg.aioseo-logo{height:26px;margin-right:10px}.aioseo-header .aioseo-header-content .spacer{display:inline-flex;width:26.25px;height:0;border:1px solid #d0d1d7;transform:rotate(-72.26deg)}.aioseo-header .aioseo-header-content .page-name{display:inline-flex;margin-left:10px;font-size:18px;font-weight:400;flex:1 0 auto}.aioseo-header .aioseo-header-content .header-actions{display:flex}.aioseo-header .aioseo-header-content .header-actions .round{position:relative;background-color:#f3f4f5;border-radius:50%;width:40px;height:40px;display:flex;align-items:center;justify-content:center;margin-left:10px;cursor:pointer;transition:background-color .2s ease}.aioseo-header .aioseo-header-content .header-actions .round svg{width:20px;height:20px}.aioseo-header .aioseo-header-content .header-actions .round:hover{background-color:#e5e7e9}.aioseo-header .aioseo-header-content .header-actions .number{position:absolute;background-color:#df2a4a;width:16px;height:16px;font-weight:600;font-size:10px;color:#fff;top:-8px;left:50%;transform:translateX(-50%);margin:0;-webkit-animation:bounce 2s 5;animation:bounce 2s 5}.aioseo-header .aioseo-header-content .header-actions .number:hover{background-color:#df2a4a}@-webkit-keyframes bounce{0%,25%,50%,75%,to{transform:translateX(-50%) translateY(0)}40%{transform:translateX(-50%) translateY(-8px)}60%{transform:translateX(-50%) translateY(-4px)}}@keyframes bounce{0%,25%,50%,75%,to{transform:translateX(-50%) translateY(0)}40%{transform:translateX(-50%) translateY(-8px)}60%{transform:translateX(-50%) translateY(-4px)}}body.modal-open{overflow:hidden}.aioseo-help{display:block;position:fixed;top:0;bottom:0;left:0;right:0;height:100%;width:100vw;background-color:#fff;color:#8c8f9a;opacity:0;max-height:100vh;overflow-y:auto;transition:opacity .3s ease-in 0s;z-index:-999}.aioseo-help.visible{opacity:1;z-index:100000}.aioseo-help .aioseo-help-header{background:#fff;width:100%;height:60px;z-index:1;padding:20px;display:flex}.aioseo-help .aioseo-help-header>.logo{flex:1}.aioseo-help .aioseo-help-docs{margin-bottom:25px;display:none}.aioseo-help .aioseo-help-docs li{padding:0 0 14px 4px;margin:0}.aioseo-help .aioseo-help-docs .aioseo-help-docs-viewall{margin:10px 0 0}.aioseo-help .aioseo-help-docs .aioseo-help-additional-docs{display:none}.aioseo-help .aioseo-help-docs .aioseo-help-additional-docs.opened{display:block}.aioseo-help .aioseo-help-docs .icon .aioseo-description{width:20px;margin-top:0;position:relative;top:5px;left:-5px;color:#8c8f9a}.aioseo-help .help-content{background-color:#fff;width:100%;max-width:740px;margin:0 auto 50px;padding:0 20px;box-sizing:border-box;z-index:1}.aioseo-help .help-content .aioseo-help-category{border-top:1px solid #e8e8eb;margin:0}.aioseo-help .help-content .aioseo-help-category:last-child{border-bottom:1px solid #e8e8eb}.aioseo-help .help-content .aioseo-help-category header{display:block;position:relative;cursor:pointer;width:100%;height:68px}.aioseo-help .help-content .aioseo-help-category header .title{display:block;font-size:16px;color:#8c8f9a;font-weight:600;padding:23px 11px 23px 30px}.aioseo-help .help-content .aioseo-help-category .folder-open{position:absolute;top:24px;width:20px;height:20px;color:#8c8f9a}.aioseo-help .help-content .aioseo-help-category .dashicons-arrow-right-alt2{position:absolute;top:20px;right:0;transition:transform .3s ease-out}.aioseo-help .help-content .aioseo-help-category.opened .aioseo-help-docs{display:block}.aioseo-help .help-content .aioseo-help-category.opened .dashicons-arrow-right-alt2{transform:rotate(90deg)}.aioseo-help .help-content #aioseo-help-search{position:relative;background-color:#fff;text-align:center;top:0;padding:20px 0 50px}.aioseo-help .help-content #aioseo-help-result .aioseo-help-docs{display:block}.aioseo-help .help-content #aioseo-help-footer{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;margin:50px 0 0}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer{display:block}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block{box-sizing:border-box;max-width:325px;border:1px solid #8c8f9a;border-radius:6px;text-align:center}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block{max-width:100%}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block:first-child{margin-right:20px}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block:first-child{margin:0 0 20px}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a{display:block;padding:25px;text-decoration:none;color:#8c8f9a}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a h3{color:#8c8f9a}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a span{font-size:16px;color:#005ae0;text-decoration:underline}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a:hover span{text-decoration:none}.aioseo-help .help-content #aioseo-help-footer .aioseo-description,.aioseo-help .help-content #aioseo-help-footer .aioseo-support{width:48px;margin-top:0;color:#8c8f9a}#aioseo-help-logo{width:132px;height:26px;z-index:2}#aioseo-help-close{width:20px;height:20px;cursor:pointer;opacity:.7;transition:all .05s;z-index:2}@media screen and (max-width:750px){#aioseo-help-close{top:20px;right:20px}}.aioseo-html-tags-editor .no-access{margin-bottom:20px}.aioseo-html-tags-editor .aioseo-description.tags-description{margin:0 0 20px}.aioseo-html-tags-editor .add-tags{display:flex;align-items:center;margin-bottom:20px}.aioseo-html-tags-editor .add-tags div{margin-right:10px}.aioseo-html-tags-editor .add-tags a{font-size:14px}.aioseo-html-tags-editor .add-tags a.no-underline{padding-left:10px}.aioseo-loading-spinner{width:35px;height:35px;position:absolute}.aioseo-loading-spinner .double-bounce1,.aioseo-loading-spinner .double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#fff;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:sk-bounce 1.3s ease-in-out infinite;animation:sk-bounce 1.3s ease-in-out infinite}.aioseo-loading-spinner.dark .double-bounce1,.aioseo-loading-spinner.dark .double-bounce2{background-color:#8c8f9a}.aioseo-loading-spinner .double-bounce2{-webkit-animation-delay:-.65s;animation-delay:-.65s}@-webkit-keyframes sk-bounce{0%,to{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}}@keyframes sk-bounce{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}body.vue-build{margin:0}body.vue-build .aioseo-app{min-height:calc(100vh - 88px)}body.vue-build .aioseo-app .aioseo-main{padding-bottom:30px}body.aioseo-setup-wizard{margin:0;padding:0}body.aioseo-setup-wizard .aioseo-app{min-height:100vh;width:100%}body[class*=page_aioseo] .aioseo-header,body[class*=page_aioseo] .aioseo-notifications .overlay{left:160px}body[class*=page_aioseo].folded .aioseo-header,body[class*=page_aioseo].folded .aioseo-notifications .overlay{left:36px}body[class*=page_aioseo] #wpcontent{padding:0;background-color:#f3f4f5}body[class*=page_aioseo] .update-nag{display:none}body[class*=page_aioseo].admin-bar .aioseo-app{min-height:calc(100vh - 185px)}body[class*=page_aioseo].admin-bar.aioseo-has-bar .aioseo-app{min-height:calc(100vh - 225px)}body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .notification-menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{top:32px}body[class*=page_aioseo] .aioseo-app{min-height:calc(100vh - 153px)}body[class*=page_aioseo].aioseo-has-bar .aioseo-app{min-height:calc(100vh - 193px)}body[class*=page_aioseo].aioseo-has-bar .aioseo-header{height:112px}@media screen and (max-width:782px){body[class*=page_aioseo].aioseo-has-bar .aioseo-header{height:132px}}@media screen and (max-width:960px){body[class*=page_aioseo].auto-fold .aioseo-header,body[class*=page_aioseo].auto-fold .aioseo-notifications .overlay{left:36px}}@media screen and (max-width:782px){body[class*=page_aioseo] #wpbody-content{padding-bottom:20px}body[class*=page_aioseo].admin-bar .aioseo-app{min-height:calc(100vh - 199px)}body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .notification-menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{top:46px}body[class*=page_aioseo] .aioseo-header,body[class*=page_aioseo] .aioseo-notifications .overlay,body[class*=page_aioseo].auto-fold .aioseo-header,body[class*=page_aioseo].auto-fold .aioseo-notifications .overlay{left:0}}@media screen and (max-width:600px){body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{position:absolute;top:46px}}body.aioseo-has-bar .aioseo-app .aioseo-main>.aioseo-container{margin-top:128px}@media screen and (max-width:782px){body.aioseo-has-bar .aioseo-app .aioseo-main>.aioseo-container{margin-top:148px}}.aioseo-app{box-sizing:border-box;background-color:#f3f4f5}.aioseo-app .route-fade-enter-active,.aioseo-app .route-fade-leave-active{transition:all .2s}.aioseo-app .route-fade-enter,.aioseo-app .route-fade-leave-active{opacity:0}.aioseo-app .route-fade-enter{transform:translateX(30px)}.aioseo-app .route-fade-leave-active{transform:translateX(-30px)}.aioseo-app *,.aioseo-app :after,.aioseo-app :before{box-sizing:inherit}.aioseo-app * :not(.aioseo-button):not(.aioseo-input),.aioseo-app :after :not(.aioseo-button):not(.aioseo-input),.aioseo-app :before :not(.aioseo-button):not(.aioseo-input){line-height:1.4}.aioseo-app p{font-size:16px}.aioseo-app a:not(.aioseo-button){color:#005ae0}.aioseo-app a:not(.aioseo-button).text-white{color:#fff}.aioseo-app a:not(.aioseo-button).no-underline,.aioseo-app a:not(.aioseo-button):hover{text-decoration:none}.aioseo-app h2{font-size:32px;margin:0}.aioseo-app .aioseo-main{height:100%}.aioseo-app .aioseo-main>.aioseo-container{margin-top:88px}.aioseo-app .aioseo-main .save-changes{display:flex;justify-content:flex-end}.aioseo-app .d-flex{display:flex}.aioseo-app .aioseo-section-description{font-size:16px;color:#141b38;line-height:1.8;padding-bottom:30px}.aioseo-app .aioseo-description-text{font-size:14px;line-height:1.8;color:#141b38}.aioseo-app .aioseo-description-text.aioseo-error{color:#df2a4a}.aioseo-app .aioseo-description{font-size:14px;line-height:1.8;margin:8px 0 0;color:#141b38}.aioseo-app .aioseo-description.no-margin{margin:0}.aioseo-app .aioseo-description.aioseo-error{color:#df2a4a}.aioseo-app .max-recommended-count{color:#434960;text-align:right;margin-top:10px;font-size:14px}.aioseo-app .max-recommended-count strong.error{color:#df2a4a}.aioseo-app .popper{text-align:left;font-size:12px;padding:20px;background-color:#fff;border:none;border-radius:3px;box-shadow:0 3px 4.8px 0 rgba(32,71,102,.27);z-index:9999;max-width:350px;line-height:1.4}.aioseo-app .popper.action{padding:8px 12px;background-color:#141b38;color:#fff}.aioseo-app .popper.action .popper__arrow{border-top-color:#141b38}.aioseo-app .popper[x-placement^=bottom]{box-shadow:0 -2px 4.8px 0 rgba(32,71,102,.27)}.aioseo-app .popper .aioseo-description{margin:0}.aioseo-app .aioseo-row-highlight{-webkit-animation-name:color;animation-name:color;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-iteration-count:2;animation-iteration-count:2}@-webkit-keyframes color{0%{background-color:#fff}50%{background-color:#00aa63}to{background-color:#fff}}@keyframes color{0%{background-color:#fff}50%{background-color:#00aa63}to{background-color:#fff}}.column-aioseo-details{position:relative}.aioseo-seo-site-score .aioseo-blur{display:flex;align-items:center}.aioseo-seo-site-score .aioseo-seo-site-score-cta{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);background-color:#fff;padding:24px 30px;border:1px solid #e8e8eb;box-shadow:0 2px 10px rgba(0,90,224,.2);color:#141b38;font-size:16px;font-weight:600;width:82%;max-width:500px;text-align:center}.aioseo-app .aioseo-upgrade-bar{height:40px;background-color:#00aa63;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;padding:0 14px 0 40px}.aioseo-app .aioseo-upgrade-bar .upgrade-text{display:flex;align-items:center;flex:1;justify-content:center}.aioseo-app .aioseo-upgrade-bar .upgrade-arrow{font-size:15px;text-decoration:none}.aioseo-app .aioseo-upgrade-bar .upgrade-arrow:hover{text-decoration:none}.aioseo-app .aioseo-upgrade-bar strong{font-weight:600}.aioseo-app .aioseo-upgrade-bar svg.aioseo-logo-gear{width:20px;height:20px;min-width:20px;margin-right:14px}.aioseo-app .aioseo-upgrade-bar svg.aioseo-close{cursor:pointer;width:12px;height:12px}.aioseo-app .aioseo-upgrade-bar a{color:#fff;text-decoration:underline}.aioseo-app .aioseo-upgrade-bar a:hover{text-decoration:none}@media screen and (max-width:782px){.aioseo-app .aioseo-upgrade-bar{padding:0 10px;height:60px}}.field-description[data-v-2bfc1de2]{display:inline-block;margin-top:10px;font-size:14px}.aioseo-address-wrapper[data-v-4bc9bbe6]{display:flex;max-width:500px}.field-description[data-v-4bc9bbe6]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-4bc9bbe6]{margin-top:8px}.field-description[data-v-a0a894b8]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-a0a894b8]{margin-top:8px}.field-description[data-v-4fb4e044]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-4fb4e044]{margin-top:8px}.field-description[data-v-85733554]{display:inline-block;margin-top:10px;font-size:14px}.field-description[data-v-515336a2]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-515336a2]{margin-top:8px}.field-description[data-v-78337de7]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-78337de7]{margin-top:8px}.aioseo-general-settings .more-tooltip-text strong{color:#00aa63}.aioseo-general-settings .license-cta-box{border-radius:3px;background-color:#f2f7fd;padding:20px;max-width:630px;margin:10px 0 30px}.aioseo-general-settings .license-cta-box a{color:#00aa63}.aioseo-general-settings .license-cta-box div{font-weight:600}.aioseo-general-settings .license-cta-box span{font-size:14px;font-style:italic}.aioseo-general-settings .license-key{margin-top:10px;display:flex;max-width:560px}.aioseo-general-settings .license-key .aioseo-input{margin-right:10px}.aioseo-app .aioseo-tabs.internal{margin-bottom:0}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation{margin-top:5px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button{height:60px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 25px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple .md-ripple-wave{display:none}.aioseo-app .aioseo-tabs.skinny .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 16px}.aioseo-app .md-tabs{display:flex;flex-direction:column}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation{margin-top:2px;background:transparent;display:flex;position:relative;justify-content:flex-start}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation.md-elevation-0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button{color:#141b38;max-width:264px;min-width:72px;height:60px;margin:0;border-radius:0;font-size:15px;font-weight:500;padding:0;display:inline-block;position:relative;overflow:hidden;outline:none;background:transparent;border:0;transition:.4s cubic-bezier(.4,0,.2,1);font-family:inherit;line-height:normal;text-decoration:none;vertical-align:top;white-space:nowrap}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:before{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;transition:.4s cubic-bezier(.4,0,.2,1);will-change:background-color,opacity;content:" "}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 18px;display:flex;justify-content:center;align-items:center;width:100%;height:100%;position:relative;overflow:hidden;-webkit-mask-image:radial-gradient(circle,#fff 100%,#000 0);mask-image:radial-gradient(circle,#fff 100%,#000 0)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple .md-button-content{position:static;z-index:2}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]){cursor:pointer}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]):active:before,.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]):hover:before{background-color:currentColor;opacity:.12}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button.md-active{color:#005ae0}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button.md-active:focus{outline:none;box-shadow:none}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator{height:2px;background-color:#005ae0;bottom:-2px;position:absolute;left:0;transform:translateZ(0);will-change:left,right}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator.md-tabs-indicator-left{transition:left .3s cubic-bezier(.4,0,.2,1),right .35s cubic-bezier(.4,0,.2,1)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator.md-tabs-indicator-right{transition:right .3s cubic-bezier(.4,0,.2,1),left .35s cubic-bezier(.4,0,.2,.1)}.aioseo-app .aioseo-tabs{display:flex;border-bottom:2px solid #e8e8eb;position:relative;margin-bottom:38px}.aioseo-app .aioseo-tabs .save-changes{position:absolute;right:0;bottom:10px}.aioseo-app .aioseo-tabs .tab-score{display:inline-flex;align-items:center;justify-content:flex-end;font-size:11px;font-weight:700;padding-left:12px}.aioseo-app .aioseo-tabs .tab-score.green{color:#00aa63}.aioseo-app .aioseo-tabs .tab-score.orange{color:#f18200}.aioseo-app .aioseo-tabs .tab-score.red{color:#df2a4a}.aioseo-app .aioseo-tabs .tab-score svg{display:inline;margin-right:7px}.aioseo-app .aioseo-mobile-tabs{position:relative;height:40px;margin-top:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.aioseo-app .aioseo-mobile-tabs .active-tab{color:#005ae0;padding-left:18px;min-height:100%;display:flex;align-items:center;cursor:pointer}.aioseo-app .aioseo-mobile-tabs .active-tab div{position:relative}.aioseo-app .aioseo-mobile-tabs .active-tab div span{height:2px;background-color:#005ae0;bottom:-7px;position:absolute;left:-18px;right:-18px;z-index:10}.aioseo-app .aioseo-mobile-tabs .active-tab svg.aioseo-caret{width:24px;height:24px;position:relative;top:6px;cursor:pointer;transition:transform .3s}.aioseo-app .aioseo-mobile-tabs .active-tab svg.aioseo-caret.rotated{transform:rotate(180deg)}.aioseo-app .aioseo-mobile-tabs .tab-dropdown{border:1px solid #e8e8eb;border-top:none}.aioseo-app .aioseo-mobile-tabs .tab-links{background:#fff;position:relative;z-index:3;padding:8px;width:100%;max-width:300px}@media screen and (max-width:782px){.aioseo-app .aioseo-mobile-tabs .tab-links{max-width:100%}}.aioseo-app .aioseo-mobile-tabs .tab-links a{padding:10px;display:block;color:#141b38;text-decoration:none}.aioseo-app .aioseo-mobile-tabs .tab-links a:hover{color:#005ae0}.md-tooltip{background-color:#141b38!important;color:#fff!important;border-radius:2px;padding:6px 12px;font-size:14px}.md-tooltip:after{content:"";position:absolute;top:100%;left:50%;margin-left:-5px;border:5px solid transparent;border-top-color:#141b38}.modal-mask{position:fixed;z-index:9998;top:0;left:0;width:100%;height:100%;background-color:rgba(20,27,56,.3);display:table;transition:opacity .3s ease}@media screen and (max-width:520px){.modal-mask{display:block;top:46px}}.modal-mask .modal-wrapper{display:table-cell;vertical-align:middle}@media screen and (max-width:520px){.modal-mask .modal-wrapper{display:block;height:100%}}.modal-mask .modal-wrapper .modal-container{width:100%;max-width:750px;max-height:90vh;overflow-y:hidden;overflow-x:hidden;margin:0 auto;background-color:#fff;box-shadow:0 10px 30px rgba(0,0,0,.15);transition:all .3s ease}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container{width:100%;max-width:100%;max-height:calc(100vh - 46px);height:100%}}.modal-mask .modal-wrapper .modal-container .modal-header{color:#141b38;position:sticky;top:0;z-index:15;padding:0 0 0 40px;height:70px;font-size:20px;font-weight:700;line-height:1.4;border-bottom:1px solid #e8e8eb;background-color:#fff;display:flex;align-items:center}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container .modal-header{padding:15px 0 0 20px}}.modal-mask .modal-wrapper .modal-container .modal-header button.close{position:absolute;right:11px;top:11px;width:24px;height:24px;background-color:#fff;border:none;display:flex;align-items:center}.modal-mask .modal-wrapper .modal-container .modal-header button.close svg.aioseo-close{cursor:pointer;width:14px;height:14px}.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-post-general,.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-post-social{height:calc(90vh - 120px);max-height:600px;overflow-y:auto;overflow-x:hidden}.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-modal-content.has-padding{padding:40px}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container .aioseo-modal-content,.modal-mask .modal-wrapper .modal-container .aioseo-modal-content>.component-wrapper,.modal-mask .modal-wrapper .modal-container .modal-body,.modal-mask .modal-wrapper .modal-container .modal-body>div{height:100%}.modal-mask .modal-wrapper .modal-container .aioseo-modal-content>.component-wrapper{display:flex;align-items:flex-end}.modal-mask .modal-wrapper .modal-container .aioseo-post-general,.modal-mask .modal-wrapper .modal-container .aioseo-post-social{height:100%!important;max-height:100%!important;padding:20px!important}.modal-mask .modal-wrapper .modal-container .aioseo-post-general .mobile-radio-buttons,.modal-mask .modal-wrapper .modal-container .aioseo-post-social .mobile-radio-buttons{margin-bottom:0}.modal-mask .modal-wrapper .modal-container .aioseo-add-template-tag{display:none}.modal-mask .modal-wrapper .modal-container .tab-facebook .aioseo-settings-row:last-of-type,.modal-mask .modal-wrapper .modal-container .tab-twitter .aioseo-settings-row:last-of-type{margin-bottom:64px!important;padding-bottom:32px!important}}.modal-enter,.modal-leave-active{opacity:0}.modal-enter .modal-container,.modal-leave-active .modal-container{transform:scale(1.1)}.aioseo-notification>div .body .title .date{font-weight:400;color:#8c8f9a;font-size:12px}.aioseo-notification-cards .aioseo-notification:last-child>div{border-bottom:none;margin-bottom:none}.aioseo-notification-cards .no-notifications{display:flex;align-items:center;flex-direction:column;padding-top:100px;font-size:16px;color:#8c8f9a}.aioseo-notification-cards .no-notifications img{width:30%;height:auto}.aioseo-notification-cards .no-notifications .great-scott{margin:20px 0 10px;font-size:24px;font-weight:600;color:#434960}.aioseo-notification-cards .no-notifications .no-new-notifications{margin-bottom:10px}body.aioseo-show-notifications .aioseo-main{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-notifications a.dismiss{color:#8c8f9a;font-size:14px}.aioseo-notifications .notification-menu{height:100%;width:100%;max-width:570px;position:fixed;z-index:1053;top:0;right:0;bottom:0;background-color:#fff;overflow-x:hidden;transition:.5s}.aioseo-notifications .notification-menu .notification-header{height:70px;display:flex;align-items:center;padding:0 30px;color:#fff;background-color:#005ae0}.aioseo-notifications .notification-menu .notification-header .new-notifications{font-size:18px;font-weight:600}.aioseo-notifications .notification-menu .notification-header .dismissed-notifications{margin-left:25px;flex:1 1 auto}.aioseo-notifications .notification-menu .notification-header .dismissed-notifications a{font-size:14px;color:#fff}.aioseo-notifications .notification-menu .notification-header svg.aioseo-close{width:14px;height:14px;cursor:pointer}.aioseo-notifications .notification-menu .notification-header svg.aioseo-close:hover{color:#ccc}.aioseo-notifications .notification-menu .notification-cards{padding:30px;height:calc(100% - 192px);overflow:auto}.aioseo-notifications .notification-menu .notification-footer{height:90px;padding:30px;display:flex;align-items:center}.aioseo-notifications .notification-menu .notification-footer div.pagination{flex:1;display:flex;align-items:center}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number{font-size:13px;color:#141b38;background:#e8e8eb;height:30px;width:30px;display:flex;align-items:center;justify-content:center;border-radius:2px;margin-right:4px;cursor:pointer}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number:last-child{margin-right:0}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number.active,.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number:hover{color:#fff;background-color:#005ae0}.aioseo-notifications .overlay{position:fixed;z-index:1052;top:0;right:0;bottom:0;left:160px;background-color:#141b38;opacity:.5;transition:.5s}.aioseo-notifications .notifications-fade-enter-active,.aioseo-notifications .notifications-fade-leave-active{transition:opacity .5s}.aioseo-notifications .notifications-fade-enter,.aioseo-notifications .notifications-fade-leave-to{opacity:0}.aioseo-notifications .notifications-slide-enter-active,.aioseo-notifications .notifications-slide-leave-active{transition:all .5s ease-in-out}.aioseo-notifications .notifications-slide-enter,.aioseo-notifications .notifications-slide-leave-to{right:-570px}.aioseo-post-type-options-toggle{margin-top:20px}.aioseo-priority-score{max-width:350px}.aioseo-priority-score .header-row{font-size:14px}.aioseo-pro-badge{height:24px;border-radius:3px;background:#e8e8eb;color:#434960;font-size:14px;font-weight:600;display:inline-flex;padding:0 8px;align-items:center}.aioseo-score-settings{display:flex;align-items:center;padding-bottom:14px}.aioseo-score-settings svg{margin-right:7px}.aioseo-score-settings span{margin-right:12px}.aioseo-score-button{display:inline-block;padding:5px 8px;font-size:14px;font-weight:700;color:#a1a1a1;border:1px solid #a1a1a1;border-radius:3px}.aioseo-score-button.score-none,.aioseo-score-button.score-red{border-color:#df2a4a;color:#df2a4a!important}.aioseo-score-button.score-orange{border-color:#f18200;color:#f18200!important}.aioseo-score-button.score-green{border-color:#00aa63;color:#00aa63!important}.aioseo-score-button.classic-editor{background:#fff!important;display:inline-block!important;height:auto!important}.aioseo-score-button.classic-editor span{margin-right:0}.aioseo-seo-site-analysis-result{border:1px solid #dcdde1;margin-top:10px}.aioseo-seo-site-analysis-result .result-header{height:66px;padding:0 20px;display:flex;align-items:center}.aioseo-seo-site-analysis-result .result-header .result-icon{display:flex;align-items:center;margin-right:16px}.aioseo-seo-site-analysis-result .result-header .result-icon svg{width:24px;height:24px;color:#8c8f9a}.aioseo-seo-site-analysis-result .result-header .result-icon svg.passed{color:#00aa63}.aioseo-seo-site-analysis-result .result-header .result-icon svg.error{color:#df2a4a}.aioseo-seo-site-analysis-result .result-header .result-icon svg.warning{color:#005ae0}.aioseo-seo-site-analysis-result .result-header .result-content{font-size:16px;font-weight:600;flex:1}.aioseo-seo-site-analysis-result .result-header .result-toggle{width:30px;height:26px;border:1px solid #dcdde1;border-radius:3px;display:flex;align-items:center;justify-content:center;cursor:pointer}.aioseo-seo-site-analysis-result .result-header .result-toggle.active,.aioseo-seo-site-analysis-result .result-header .result-toggle:hover{background-color:#434960}.aioseo-seo-site-analysis-result .result-header .result-toggle.active svg,.aioseo-seo-site-analysis-result .result-header .result-toggle:hover svg{color:#fff}.aioseo-seo-site-analysis-result .result-header .result-toggle.active svg{transform:rotate(-180deg)}.aioseo-seo-site-analysis-result .result-header .result-toggle svg{width:100%;max-width:20px;height:auto;color:#8c8f9a;transform:rotate(-90deg);transition:transform .3s}.aioseo-seo-site-analysis-result .result-body{padding:0 60px 24px}.aioseo-seo-site-analysis-result .result-body .result-message{color:#434960;font-size:16px}.aioseo-seo-site-analysis-result .result-body .result-code-alt pre,.aioseo-seo-site-analysis-result .result-body .result-code pre{background:#f3f4f5;border-radius:3px;max-width:100%;padding:10px;overflow:auto}.aioseo-seo-site-analysis-result .result-body .result-code-alt pre code,.aioseo-seo-site-analysis-result .result-body .result-code pre code{padding:0;background:transparent}.aioseo-seo-site-analysis-result .result-body .result-code pre{white-space:pre-wrap}.aioseo-seo-site-analysis-result .result-body .result-action{margin-top:20px}.aioseo-seo-site-analysis-results .group-header{font-size:16px;font-weight:600}.aioseo-seo-site-analysis-results .group-header:not(:first-child){margin-top:30px}.aioseo-seo-site-analysis-results .group-keywords{display:flex;margin-top:5px;flex-wrap:wrap;align-items:center}.aioseo-seo-site-analysis-results .group-keywords .keyword{font-size:14px;color:#434960;font-weight:600;background:#f3f4f5;padding:9px 10px;border-radius:3px;margin:0 10px 5px 0}.aioseo-seo-site-analysis-results .group-keywords .keyword:first-child{font-size:20px}.aioseo-settings-row{margin-bottom:22px;padding-bottom:16px;border-bottom:1px solid #e8e8eb}.aioseo-settings-row.no-margin{margin-bottom:0}.aioseo-settings-row.small-padding{padding-bottom:5px}.aioseo-settings-row.medium-margin{margin-bottom:15px}.aioseo-settings-row.no-border{border:none}.aioseo-settings-row.no-side-margin{margin-left:0!important;margin-right:0!important}.aioseo-settings-row .settings-name{color:#141b38}.aioseo-settings-row .settings-name .name{font-weight:600;font-size:16px;display:flex;align-items:center}.aioseo-settings-row .settings-name .name.small-margin{margin-bottom:5px}.aioseo-settings-row .settings-name .name.align{line-height:40px}.aioseo-settings-row .settings-name .name.align-small{line-height:30px}.aioseo-settings-row .settings-name .name .aioseo-pro-badge{margin-left:10px}.aioseo-settings-row .settings-name .aioseo-description{margin-top:20px}.aioseo-settings-row .settings-content{font-size:16px}.aioseo-settings-row p.description{font-size:14px}.aioseo-separators{margin-top:-.5rem}.aioseo-separators .aioseo-col .separator{background-color:#f3f4f5;display:flex;align-items:center;justify-content:center;min-height:51px;font-weight:600;font-size:25px;border:1px solid #dcdde1;border-radius:3px;cursor:pointer}.aioseo-separators .aioseo-col .separator:hover{background-color:#e5e7e9}.aioseo-separators .aioseo-col .separator.active{background-color:#005ae0;border-color:#005ae0;color:#fff}.aioseo-separators .aioseo-col .separator.active:hover{background-color:#005ae0}.aioseo-separators .aioseo-col .show-more{height:100%;display:flex;align-items:center}.aioseo-separators .aioseo-col .show-more a{color:#8c8f9a}.aioseo-separators .aioseo-col .custom-separator{margin:20px 0;display:flex;align-items:center}.aioseo-separators .aioseo-col .custom-separator .aioseo-input{margin-left:10px;max-width:100px}.aioseo-sidebar-card .header{height:46px}.aioseo-sidebar-card .header:hover{cursor:pointer}.aioseo-sidebar-card .content{padding-bottom:8px!important}.aioseo-sidebar-card ul{margin-bottom:0}.aioseo-sidebar-card ul li{margin-bottom:16px;padding-left:25px}.aioseo-sidebar-card ul .description{margin:0}.aioseo-robots-meta .global-robots-settings{margin:0;padding-top:24px}.aioseo-robots-meta .global-robots-settings>.settings{padding:8px 0 16px}.aioseo-robots-meta .global-robots-settings-options{display:flex}.aioseo-robots-meta .global-robots-settings-options .max-snippet{margin-right:30px}.aioseo-robots-meta .global-robots-settings-options .max-snippet .aioseo-input{max-width:90px}.aioseo-robots-meta .global-robots-settings-options .max-video-preview{margin-right:30px}.aioseo-robots-meta .global-robots-settings-options .max-video-preview .aioseo-input{max-width:90px}.aioseo-robots-meta .global-robots-settings-options .max-image-preview .aioseo-select{min-width:155px}.aioseo-robots-meta .global-robots-settings-options>span{display:inline-block;margin-bottom:4px}@media screen and (max-width:782px){.aioseo-robots-meta .global-robots-settings-options{display:block}.aioseo-robots-meta .global-robots-settings-options .max-snippet,.aioseo-robots-meta .global-robots-settings-options .max-video-preview{margin-right:0;margin-bottom:20px}.aioseo-robots-meta .global-robots-settings-options>div .aioseo-input,.aioseo-robots-meta .global-robots-settings-options>div .aioseo-select{min-width:100%}}.edit-post-sidebar .global-robots-settings{padding-top:12px}.edit-post-sidebar .global-robots-settings>.settings{padding:4px 0 12px}.edit-post-sidebar .global-robots-settings>.settings label{font-size:16px}.edit-post-sidebar .global-robots-settings .robots-meta-title{padding-top:4px;display:inline-block}.edit-post-sidebar .global-robots-settings-options{flex-wrap:wrap}.edit-post-sidebar .max-snippet{margin-right:30px!important}.edit-post-sidebar .max-video-preview{margin-right:0!important}.edit-post-sidebar .max-image-preview{margin-top:20px!important}.aioseo-score-amount-wrapper{position:absolute;left:0;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#141b38;margin:20px}.aioseo-score-amount-wrapper .aioseo-score-amount .score{font-size:64px;font-weight:600}.aioseo-score-amount-wrapper .aioseo-score-amount .total{font-size:18px;color:#8c8f9a;padding-left:3px}.aioseo-score-amount-wrapper .score-description{max-width:80%;text-align:center;font-size:17px;font-weight:600;line-height:1.1}.aioseo-score-amount-wrapper .score-analyzing{margin-top:20px;font-size:30px}.aioseo-site-score-analyze{position:relative;display:flex;align-items:center;justify-content:center;flex:1}.aioseo-site-score-analyze .analyze-errors{text-align:center;margin-bottom:1em}.aioseo-site-score-analyze .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-right:5em}.aioseo-site-score-analyze .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-analyze .aioseo-seo-site-score-description h2{line-height:1.4}.aioseo-site-score-analyze .aioseo-seo-site-score-description svg.aioseo-book{width:20px;height:20px;margin:0 10px 0 0;color:#005ae0}.aioseo-site-score-analyze .aioseo-seo-site-score-description>div{font-size:16px;color:#141b38;margin-bottom:10px}.aioseo-site-score-analyze .aioseo-seo-site-score-description .links{margin-top:30px;font-size:14px;font-weight:600}.aioseo-site-score-analyze .aioseo-seo-site-score-description .links .no-underline{padding-left:5px}.aioseo-site-score-competitor{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column}.aioseo-site-score-competitor .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-right:1em}.aioseo-site-score-competitor .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations{margin:20px 0}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links){display:flex;align-items:center;font-size:14px;color:#141b38;font-weight:600;margin-bottom:10px}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round{position:relative;border-radius:50%;width:24px;min-width:24px;max-width:24px;height:24px;display:flex;align-items:center;justify-content:center;margin-right:10px;font-size:12px;color:#fff;font-weight:600}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.red{background-color:#df2a4a}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.blue{background-color:#005ae0}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.orange{background-color:#f18200}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.green{background-color:#00aa63}.aioseo-site-score-competitor .refresh-results .aioseo-refresh{width:14px;height:14px;margin-right:10px}.aioseo-site-score-competitor .mobile-snapshot{margin-top:60px;max-width:250px}.aioseo-site-score-competitor .mobile-snapshot div{font-weight:600;font-size:16px;margin-bottom:10px}.aioseo-site-score-competitor .mobile-snapshot img{width:100%;height:auto}.aioseo-site-score-dashboard{position:relative;display:flex;align-items:center;justify-content:center}.aioseo-site-score-dashboard .analyze-errors{text-align:center;margin-bottom:1em}.aioseo-site-score-dashboard .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-right:1em}.aioseo-site-score-dashboard .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links){display:flex;align-items:center;font-size:14px;color:#141b38;font-weight:600;margin-bottom:10px}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round{position:relative;border-radius:50%;width:24px;min-width:24px;max-width:24px;height:24px;display:flex;align-items:center;justify-content:center;margin-right:10px;font-size:12px;color:#fff;font-weight:600}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.red{background-color:#df2a4a}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.blue{background-color:#005ae0}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.orange{background-color:#f18200}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.green{background-color:#00aa63}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations .links{margin-top:30px;font-size:14px;font-weight:600}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations .links .no-underline{padding-left:5px}.aioseo-social-profiles .same-username .use-same{padding:30px;background:#f9f9fa}.aioseo-social-profiles .same-username .use-same .aioseo-checkbox{font-size:16px}.aioseo-social-profiles .aioseo-social-profile-list,.aioseo-social-profiles .same-username .use-same .aioseo-settings-row,.aioseo-social-profiles .same-username .use-same .profiles{margin-top:20px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile{margin-bottom:0;padding-bottom:0;border-bottom:none}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .profile-error{margin-top:10px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .name{margin-bottom:0}.aioseo-social-profiles .aioseo-social-profile-list .social-profile img{height:16px;width:auto;margin-right:10px}.aioseo-tooltip{margin-left:14px;display:inline-flex}.aioseo-tooltip,.aioseo-twitter-preview{align-items:center;justify-content:center}.aioseo-twitter-preview{background-color:#f0f2f5;padding:30px;display:flex}.aioseo-twitter-preview .twitter-post{width:100%;max-width:500px;border-radius:5px;border:1px solid #e1e8ed;background-color:#fff}.aioseo-twitter-preview .twitter-post .twitter-header{height:65px;padding:0 18px;display:flex;align-items:center}.aioseo-twitter-preview .twitter-post .twitter-header .profile-photo{overflow:hidden;width:40px;height:40px;border:1px solid #e8e8eb;border-radius:50%}.aioseo-twitter-preview .twitter-post .twitter-header .profile-photo img{height:100%;width:100%}.aioseo-twitter-preview .twitter-post .twitter-header .poster{margin-left:10px;flex:1 0 auto}.aioseo-twitter-preview .twitter-post .twitter-header .poster .poster-name{font-size:15px;color:#1c2022;font-weight:600}.aioseo-twitter-preview .twitter-post .twitter-header .poster .poster-username{color:#697882;font-weight:500;font-size:13px}.aioseo-twitter-preview .twitter-post .twitter-container{padding:0 20px 20px}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content{flex-direction:row}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content .twitter-image-preview{display:flex;align-items:center;justify-content:center;background-color:#e1e8ed;min-width:125px;min-height:125px;background-size:cover;background-repeat:no-repeat;background-position:50%}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content .twitter-image-preview svg.aioseo-book{width:50px;height:50px;color:#8999a5}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content{border-radius:10px;overflow:hidden;display:flex;flex-direction:column;border:1px solid #e1e8ed}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content img{width:100%;height:auto}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description{padding:18px;color:#1c2022}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-domain{font-size:14px;color:#8899a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-title{font-size:15px;font-weight:600}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-description{font-size:14px;margin:5px 0}.aioseo-col .reverse{flex-direction:column-reverse}.aioseo-col.col-xs,.aioseo-col.col-xs-1,.aioseo-col.col-xs-2,.aioseo-col.col-xs-3,.aioseo-col.col-xs-4,.aioseo-col.col-xs-5,.aioseo-col.col-xs-6,.aioseo-col.col-xs-7,.aioseo-col.col-xs-8,.aioseo-col.col-xs-9,.aioseo-col.col-xs-10,.aioseo-col.col-xs-11,.aioseo-col.col-xs-12,.aioseo-col.col-xs-offset-0,.aioseo-col.col-xs-offset-1,.aioseo-col.col-xs-offset-2,.aioseo-col.col-xs-offset-3,.aioseo-col.col-xs-offset-4,.aioseo-col.col-xs-offset-5,.aioseo-col.col-xs-offset-6,.aioseo-col.col-xs-offset-7,.aioseo-col.col-xs-offset-8,.aioseo-col.col-xs-offset-9,.aioseo-col.col-xs-offset-10,.aioseo-col.col-xs-offset-11,.aioseo-col.col-xs-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-xs{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-xs-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-xs-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-xs-3{flex-basis:25%;max-width:25%}.aioseo-col.col-xs-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-xs-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-xs-6{flex-basis:50%;max-width:50%}.aioseo-col.col-xs-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-xs-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-xs-9{flex-basis:75%;max-width:75%}.aioseo-col.col-xs-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-xs-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-xs-12{flex-basis:100%;max-width:100%}.aioseo-col.col-xs-offset-0{margin-left:0}.aioseo-col.col-xs-offset-1{margin-left:8.33333333%}.aioseo-col.col-xs-offset-2{margin-left:16.66666667%}.aioseo-col.col-xs-offset-3{margin-left:25%}.aioseo-col.col-xs-offset-4{margin-left:33.33333333%}.aioseo-col.col-xs-offset-5{margin-left:41.66666667%}.aioseo-col.col-xs-offset-6{margin-left:50%}.aioseo-col.col-xs-offset-7{margin-left:58.33333333%}.aioseo-col.col-xs-offset-8{margin-left:66.66666667%}.aioseo-col.col-xs-offset-9{margin-left:75%}.aioseo-col.col-xs-offset-10{margin-left:83.33333333%}.aioseo-col.col-xs-offset-11{margin-left:91.66666667%}.aioseo-col.first-xs{order:-1}.aioseo-col.last-xs{order:1}.aioseo-col.text-xs-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-xs-center{text-align:center!important;justify-content:center}.aioseo-col.text-xs-right{text-align:right!important;justify-content:flex-end}.aioseo-col.p-0{padding:0!important}.aioseo-col.pt-0,.aioseo-col.py-0{padding-top:0!important}.aioseo-col.pr-0,.aioseo-col.px-0{padding-right:0!important}.aioseo-col.pb-0,.aioseo-col.py-0{padding-bottom:0!important}.aioseo-col.pl-0,.aioseo-col.px-0{padding-left:0!important}.aioseo-col.p-1{padding:.25rem!important}.aioseo-col.pt-1,.aioseo-col.py-1{padding-top:.25rem!important}.aioseo-col.pr-1,.aioseo-col.px-1{padding-right:.25rem!important}.aioseo-col.pb-1,.aioseo-col.py-1{padding-bottom:.25rem!important}.aioseo-col.pl-1,.aioseo-col.px-1{padding-left:.25rem!important}.aioseo-col.p-2{padding:.5rem!important}.aioseo-col.pt-2,.aioseo-col.py-2{padding-top:.5rem!important}.aioseo-col.pr-2,.aioseo-col.px-2{padding-right:.5rem!important}.aioseo-col.pb-2,.aioseo-col.py-2{padding-bottom:.5rem!important}.aioseo-col.pl-2,.aioseo-col.px-2{padding-left:.5rem!important}.aioseo-col.p-3{padding:1rem!important}.aioseo-col.pt-3,.aioseo-col.py-3{padding-top:1rem!important}.aioseo-col.pr-3,.aioseo-col.px-3{padding-right:1rem!important}.aioseo-col.pb-3,.aioseo-col.py-3{padding-bottom:1rem!important}.aioseo-col.pl-3,.aioseo-col.px-3{padding-left:1rem!important}.aioseo-col.p-4{padding:1.5rem!important}.aioseo-col.pt-4,.aioseo-col.py-4{padding-top:1.5rem!important}.aioseo-col.pr-4,.aioseo-col.px-4{padding-right:1.5rem!important}.aioseo-col.pb-4,.aioseo-col.py-4{padding-bottom:1.5rem!important}.aioseo-col.pl-4,.aioseo-col.px-4{padding-left:1.5rem!important}.aioseo-col.p-5{padding:3rem!important}.aioseo-col.pt-5,.aioseo-col.py-5{padding-top:3rem!important}.aioseo-col.pr-5,.aioseo-col.px-5{padding-right:3rem!important}.aioseo-col.pb-5,.aioseo-col.py-5{padding-bottom:3rem!important}.aioseo-col.pl-5,.aioseo-col.px-5{padding-left:3rem!important}@media only screen and (min-width:782px){.aioseo-col.col-sm,.aioseo-col.col-sm-1,.aioseo-col.col-sm-2,.aioseo-col.col-sm-3,.aioseo-col.col-sm-4,.aioseo-col.col-sm-5,.aioseo-col.col-sm-6,.aioseo-col.col-sm-7,.aioseo-col.col-sm-8,.aioseo-col.col-sm-9,.aioseo-col.col-sm-10,.aioseo-col.col-sm-11,.aioseo-col.col-sm-12,.aioseo-col.col-sm-offset-0,.aioseo-col.col-sm-offset-1,.aioseo-col.col-sm-offset-2,.aioseo-col.col-sm-offset-3,.aioseo-col.col-sm-offset-4,.aioseo-col.col-sm-offset-5,.aioseo-col.col-sm-offset-6,.aioseo-col.col-sm-offset-7,.aioseo-col.col-sm-offset-8,.aioseo-col.col-sm-offset-9,.aioseo-col.col-sm-offset-10,.aioseo-col.col-sm-offset-11,.aioseo-col.col-sm-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-sm{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-sm-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-sm-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-sm-3{flex-basis:25%;max-width:25%}.aioseo-col.col-sm-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-sm-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-sm-6{flex-basis:50%;max-width:50%}.aioseo-col.col-sm-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-sm-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-sm-9{flex-basis:75%;max-width:75%}.aioseo-col.col-sm-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-sm-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-sm-12{flex-basis:100%;max-width:100%}.aioseo-col.col-sm-offset-0{margin-left:0}.aioseo-col.col-sm-offset-1{margin-left:8.33333333%}.aioseo-col.col-sm-offset-2{margin-left:16.66666667%}.aioseo-col.col-sm-offset-3{margin-left:25%}.aioseo-col.col-sm-offset-4{margin-left:33.33333333%}.aioseo-col.col-sm-offset-5{margin-left:41.66666667%}.aioseo-col.col-sm-offset-6{margin-left:50%}.aioseo-col.col-sm-offset-7{margin-left:58.33333333%}.aioseo-col.col-sm-offset-8{margin-left:66.66666667%}.aioseo-col.col-sm-offset-9{margin-left:75%}.aioseo-col.col-sm-offset-10{margin-left:83.33333333%}.aioseo-col.col-sm-offset-11{margin-left:91.66666667%}.aioseo-col.first-sm{order:-1}.aioseo-col.last-sm{order:1}.aioseo-col.text-sm-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-sm-center{text-align:center!important;justify-content:center}.aioseo-col.text-sm-right{text-align:right!important;justify-content:flex-end}}@media only screen and (min-width:912px){.aioseo-col.col-md,.aioseo-col.col-md-1,.aioseo-col.col-md-2,.aioseo-col.col-md-3,.aioseo-col.col-md-4,.aioseo-col.col-md-5,.aioseo-col.col-md-6,.aioseo-col.col-md-7,.aioseo-col.col-md-8,.aioseo-col.col-md-9,.aioseo-col.col-md-10,.aioseo-col.col-md-11,.aioseo-col.col-md-12,.aioseo-col.col-md-offset-0,.aioseo-col.col-md-offset-1,.aioseo-col.col-md-offset-2,.aioseo-col.col-md-offset-3,.aioseo-col.col-md-offset-4,.aioseo-col.col-md-offset-5,.aioseo-col.col-md-offset-6,.aioseo-col.col-md-offset-7,.aioseo-col.col-md-offset-8,.aioseo-col.col-md-offset-9,.aioseo-col.col-md-offset-10,.aioseo-col.col-md-offset-11,.aioseo-col.col-md-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-md{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-md-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-md-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-md-3{flex-basis:25%;max-width:25%}.aioseo-col.col-md-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-md-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-md-6{flex-basis:50%;max-width:50%}.aioseo-col.col-md-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-md-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-md-9{flex-basis:75%;max-width:75%}.aioseo-col.col-md-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-md-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-md-12{flex-basis:100%;max-width:100%}.aioseo-col.col-md-offset-0{margin-left:0}.aioseo-col.col-md-offset-1{margin-left:8.33333333%}.aioseo-col.col-md-offset-2{margin-left:16.66666667%}.aioseo-col.col-md-offset-3{margin-left:25%}.aioseo-col.col-md-offset-4{margin-left:33.33333333%}.aioseo-col.col-md-offset-5{margin-left:41.66666667%}.aioseo-col.col-md-offset-6{margin-left:50%}.aioseo-col.col-md-offset-7{margin-left:58.33333333%}.aioseo-col.col-md-offset-8{margin-left:66.66666667%}.aioseo-col.col-md-offset-9{margin-left:75%}.aioseo-col.col-md-offset-10{margin-left:83.33333333%}.aioseo-col.col-md-offset-11{margin-left:91.66666667%}.aioseo-col.first-md{order:-1}.aioseo-col.last-md{order:1}.aioseo-col.text-md-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-md-center{text-align:center!important;justify-content:center}.aioseo-col.text-md-right{text-align:right!important;justify-content:flex-end}}@media only screen and (min-width:1042px){.aioseo-col.col-lg,.aioseo-col.col-lg-1,.aioseo-col.col-lg-2,.aioseo-col.col-lg-3,.aioseo-col.col-lg-4,.aioseo-col.col-lg-5,.aioseo-col.col-lg-6,.aioseo-col.col-lg-7,.aioseo-col.col-lg-8,.aioseo-col.col-lg-9,.aioseo-col.col-lg-10,.aioseo-col.col-lg-11,.aioseo-col.col-lg-12,.aioseo-col.col-lg-offset-0,.aioseo-col.col-lg-offset-1,.aioseo-col.col-lg-offset-2,.aioseo-col.col-lg-offset-3,.aioseo-col.col-lg-offset-4,.aioseo-col.col-lg-offset-5,.aioseo-col.col-lg-offset-6,.aioseo-col.col-lg-offset-7,.aioseo-col.col-lg-offset-8,.aioseo-col.col-lg-offset-9,.aioseo-col.col-lg-offset-10,.aioseo-col.col-lg-offset-11,.aioseo-col.col-lg-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-lg{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-lg-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-lg-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-lg-3{flex-basis:25%;max-width:25%}.aioseo-col.col-lg-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-lg-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-lg-6{flex-basis:50%;max-width:50%}.aioseo-col.col-lg-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-lg-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-lg-9{flex-basis:75%;max-width:75%}.aioseo-col.col-lg-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-lg-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-lg-12{flex-basis:100%;max-width:100%}.aioseo-col.col-lg-offset-0{margin-left:0}.aioseo-col.col-lg-offset-1{margin-left:8.33333333%}.aioseo-col.col-lg-offset-2{margin-left:16.66666667%}.aioseo-col.col-lg-offset-3{margin-left:25%}.aioseo-col.col-lg-offset-4{margin-left:33.33333333%}.aioseo-col.col-lg-offset-5{margin-left:41.66666667%}.aioseo-col.col-lg-offset-6{margin-left:50%}.aioseo-col.col-lg-offset-7{margin-left:58.33333333%}.aioseo-col.col-lg-offset-8{margin-left:66.66666667%}.aioseo-col.col-lg-offset-9{margin-left:75%}.aioseo-col.col-lg-offset-10{margin-left:83.33333333%}.aioseo-col.col-lg-offset-11{margin-left:91.66666667%}.aioseo-col.first-lg{order:-1}.aioseo-col.last-lg{order:1}.aioseo-col.text-lg-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-lg-center{text-align:center!important;justify-content:center}.aioseo-col.text-lg-right{text-align:right!important;justify-content:flex-end}}@media only screen and (min-width:1140px){.aioseo-col.col-xl,.aioseo-col.col-xl-1,.aioseo-col.col-xl-2,.aioseo-col.col-xl-3,.aioseo-col.col-xl-4,.aioseo-col.col-xl-5,.aioseo-col.col-xl-6,.aioseo-col.col-xl-7,.aioseo-col.col-xl-8,.aioseo-col.col-xl-9,.aioseo-col.col-xl-10,.aioseo-col.col-xl-11,.aioseo-col.col-xl-12,.aioseo-col.col-xl-offset-0,.aioseo-col.col-xl-offset-1,.aioseo-col.col-xl-offset-2,.aioseo-col.col-xl-offset-3,.aioseo-col.col-xl-offset-4,.aioseo-col.col-xl-offset-5,.aioseo-col.col-xl-offset-6,.aioseo-col.col-xl-offset-7,.aioseo-col.col-xl-offset-8,.aioseo-col.col-xl-offset-9,.aioseo-col.col-xl-offset-10,.aioseo-col.col-xl-offset-11,.aioseo-col.col-xl-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-xl{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-xl-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-xl-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-xl-3{flex-basis:25%;max-width:25%}.aioseo-col.col-xl-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-xl-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-xl-6{flex-basis:50%;max-width:50%}.aioseo-col.col-xl-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-xl-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-xl-9{flex-basis:75%;max-width:75%}.aioseo-col.col-xl-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-xl-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-xl-12{flex-basis:100%;max-width:100%}.aioseo-col.col-xl-offset-0{margin-left:0}.aioseo-col.col-xl-offset-1{margin-left:8.33333333%}.aioseo-col.col-xl-offset-2{margin-left:16.66666667%}.aioseo-col.col-xl-offset-3{margin-left:25%}.aioseo-col.col-xl-offset-4{margin-left:33.33333333%}.aioseo-col.col-xl-offset-5{margin-left:41.66666667%}.aioseo-col.col-xl-offset-6{margin-left:50%}.aioseo-col.col-xl-offset-7{margin-left:58.33333333%}.aioseo-col.col-xl-offset-8{margin-left:66.66666667%}.aioseo-col.col-xl-offset-9{margin-left:75%}.aioseo-col.col-xl-offset-10{margin-left:83.33333333%}.aioseo-col.col-xl-offset-11{margin-left:91.66666667%}.aioseo-col.first-xl{order:-1}.aioseo-col.last-xl{order:1}.aioseo-col.text-xl-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-xl-center{text-align:center!important;justify-content:center}.aioseo-col.text-xl-right{text-align:right!important;justify-content:flex-end}}.aioseo-container,.aioseo-container-fluid{margin-right:auto;margin-left:auto}.aioseo-container{padding:0 20px}.aioseo-container-fluid.hero,.aioseo-container.hero{min-height:100vh;display:flex;justify-content:center;align-items:center}.aioseo-container-fluid{padding-right:2rem;padding-left:2rem}@media only screen and (min-width:782px){.aioseo-container{padding:0 30px}}@media only screen and (min-width:1042px){.aioseo-container{max-width:80rem}.aioseo-container.full-width{max-width:100%}.aioseo-container.small{max-width:810px}}.aioseo-masonry{-moz-column-count:0;column-count:0;-moz-column-gap:20px;column-gap:20px;counter-reset:brick-counter}.aioseo-masonry>*{box-sizing:border-box;-moz-column-break-inside:avoid;break-inside:avoid;counter-increment:brick-counter;margin-bottom:20px}@media only screen and (min-width:782px){.aioseo-masonry{-moz-column-count:1;column-count:1}}@media only screen and (min-width:912px){.aioseo-masonry{-moz-column-count:2;column-count:2}}@media only screen and (min-width:1042px){.aioseo-masonry{-moz-column-count:3;column-count:3}}.aioseo-row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap;margin-right:-.5rem;margin-left:-.5rem}.aioseo-row.reverse{flex-direction:row-reverse}.aioseo-row.start-xs{justify-content:flex-start;text-align:start}.aioseo-row.center-xs{justify-content:center;text-align:center}.aioseo-row.end-xs{justify-content:flex-end;text-align:end}.aioseo-row.top-xs{align-items:flex-start}.aioseo-row.middle-xs{align-items:center}.aioseo-row.bottom-xs{align-items:flex-end}.aioseo-row.around-xs{justify-content:space-around}.aioseo-row.between-xs{justify-content:space-between}@media only screen and (min-width:782px){.aioseo-row.start-sm{justify-content:flex-start;text-align:start}.aioseo-row.center-sm{justify-content:center;text-align:center}.aioseo-row.end-sm{justify-content:flex-end;text-align:end}.aioseo-row.top-sm{align-items:flex-start}.aioseo-row.middle-sm{align-items:center}.aioseo-row.bottom-sm{align-items:flex-end}.aioseo-row.around-sm{justify-content:space-around}.aioseo-row.between-sm{justify-content:space-between}}@media only screen and (min-width:912px){.aioseo-row.start-md{justify-content:flex-start;text-align:start}.aioseo-row.center-md{justify-content:center;text-align:center}.aioseo-row.end-md{justify-content:flex-end;text-align:end}.aioseo-row.top-md{align-items:flex-start}.aioseo-row.middle-md{align-items:center}.aioseo-row.bottom-md{align-items:flex-end}.aioseo-row.around-md{justify-content:space-around}.aioseo-row.between-md{justify-content:space-between}}@media only screen and (min-width:1042px){.aioseo-row.start-lg{justify-content:flex-start;text-align:start}.aioseo-row.center-lg{justify-content:center;text-align:center}.aioseo-row.end-lg{justify-content:flex-end;text-align:end}.aioseo-row.top-lg{align-items:flex-start}.aioseo-row.middle-lg{align-items:center}.aioseo-row.bottom-lg{align-items:flex-end}.aioseo-row.around-lg{justify-content:space-around}.aioseo-row.between-lg{justify-content:space-between}}.aioseo-display-info svg.aioseo-new-page{width:100%;height:auto;max-width:45px}.aioseo-display-info .new-page .aioseo-row{margin:0}.aioseo-display-info .new-page svg.aioseo-external{width:14px;height:14px;margin-right:10px}.aioseo-display-info .new-page .aioseo-description{color:#434960}.aioseo-display-info .new-page button.aioseo-html-sitemaps-disabled-button{border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default}.aioseo-display-info .new-page .aioseo-alert{width:100%;margin:8px 8px 0}.aioseo-exclude-posts{display:block}.aioseo-exclude-posts .aioseo-select{max-width:600px;display:inline-block;margin-right:10px}.aioseo-exclude-posts .aioseo-select button{display:none}.aioseo-exclude-posts .aioseo-select .multiselect__option{display:flex}.aioseo-exclude-posts .aioseo-select .multiselect__option--highlight .option-title{color:#005ae0}.aioseo-exclude-posts .aioseo-button.gray{margin-top:10px}.aioseo-exclude-posts .option{flex:1 0 auto}.aioseo-exclude-posts .option .option-title{font-weight:500;font-size:16px;color:#141b38}.aioseo-exclude-posts .option .option-title .search-term{font-weight:700}.aioseo-exclude-posts .option .option-details{display:flex;align-items:center;font-size:14px;color:#8c8f9a}.aioseo-exclude-posts .option .option-details span{margin-right:15px}.aioseo-exclude-posts .option-permalink{display:flex;align-items:center}.aioseo-exclude-posts .option-permalink svg.aioseo-external{width:15px;height:15px;color:#434960}.aioseo-exclude-posts .multiselect-toggle{padding:10px 13px;width:40px;position:absolute;height:36px;right:2px;top:2px;text-align:center;z-index:1}.aioseo-exclude-posts .multiselect-toggle svg.aioseo-add-plus{width:14px;height:14px;color:#000}.aioseo-sidebar-row .aioseo-included-objects-toggle{margin-top:5px}.aioseo-sidebar-row .aioseo-included-objects-toggle .aioseo-included-list{margin-top:8px}.aioseo-notification{margin-bottom:20px}.aioseo-notification>div{display:flex;align-items:flex-start;padding-bottom:10px;border-bottom:1px solid #e8e8eb}.aioseo-notification>div .icon{margin-right:20px}.aioseo-notification>div .icon svg{width:20px;height:20px;color:#00aa63}.aioseo-notification>div .icon svg.warning{color:#f18200}.aioseo-notification>div .icon svg.info{color:#005ae0}.aioseo-notification>div .icon svg.success{color:#00aa63}.aioseo-notification>div .icon svg.error{color:#df2a4a}.aioseo-notification>div .body{margin-right:20px;flex:1}.aioseo-notification>div .body .title{font-size:16px;font-weight:600;color:#141b38;margin-bottom:7px;display:flex;align-items:center}.aioseo-notification>div .body .title div:first-child{flex:1;margin-right:5px;line-height:1.4}.aioseo-notification>div .body .notification-content{margin-bottom:10px;max-width:400px}.aioseo-notification>div .body .actions{flex-wrap:wrap;display:flex;align-items:center}.aioseo-notification>div .body .actions>*{margin-bottom:10px}.aioseo-notification>div .body .actions .aioseo-button{margin-right:20px}.aioseo-notification>div .body .actions .dismiss{color:#8c8f9a;font-size:14px}.aioseo-seo-site-score__circle{animation:aioseo-seo-site-score-fill 1s reverse;transform:rotate(-180deg);transform-origin:center;stroke:#00aa63}.aioseo-seo-site-score__circle.fast{-webkit-animation-duration:.5s;animation-duration:.5s;stroke:#df2a4a}.aioseo-seo-site-score__circle.medium{-webkit-animation-duration:.75s;animation-duration:.75s;stroke:#f18200}.aioseo-seo-site-score__background{stroke:#e8e8eb}@-webkit-keyframes aioseo-seo-site-score-fill{to{stroke-dasharray:0 100}}@keyframes aioseo-seo-site-score-fill{to{stroke-dasharray:0 100}}.aioseo-seo-site-score-svg-loading{-webkit-animation:aioseo-seo-site-score-svg-animation 2s linear infinite;animation:aioseo-seo-site-score-svg-animation 2s linear infinite}.aioseo-seo-site-score-loading__circle{-webkit-animation:aioseo-seo-site-score-fill-loading 2s ease-in-out infinite both;animation:aioseo-seo-site-score-fill-loading 2s ease-in-out infinite both;transform:rotate(-180deg);transform-origin:center;stroke:#005ae0}@-webkit-keyframes aioseo-seo-site-score-svg-animation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes aioseo-seo-site-score-svg-animation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@-webkit-keyframes aioseo-seo-site-score-fill-loading{0%,25%{stroke-dashoffset:90;transform:rotate(0)}50%,75%{stroke-dashoffset:10;transform:rotate(45deg)}to{stroke-dashoffset:90;transform:rotate(1turn)}}@keyframes aioseo-seo-site-score-fill-loading{0%,25%{stroke-dashoffset:90;transform:rotate(0)}50%,75%{stroke-dashoffset:10;transform:rotate(45deg)}to{stroke-dashoffset:90;transform:rotate(1turn)}}.aioseo-table-column{display:flex;flex-direction:column;flex-basis:100%;flex:1;padding:5px;justify-content:center}.aioseo-table-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.aioseo-wizard-body{background-color:#fff;max-width:900px;box-shadow:0 2px 5px rgba(0,0,0,.05)}.aioseo-wizard-body .body-content{padding:80px 140px}@media screen and (max-width:782px){.aioseo-wizard-body .body-content{padding:40px}}.aioseo-wizard-body .body-content .header{line-height:1.4}.aioseo-wizard-body .body-footer{border-top:1px solid #e8e8eb;padding:30px;display:flex;align-items:center}.aioseo-wizard-body .body-footer>*{margin-right:10px}.aioseo-wizard-body .body-footer>:last-child{margin-right:0}.aioseo-wizard-body .body-footer .spacer{flex:1 0 auto}.aioseo-wizard-close-and-exit{margin:96px 0;min-height:96px;text-align:center;font-size:14px}.aioseo-wizard-close-and-exit a{color:#8c8f9a!important}.aioseo-wizard-container{margin:40px auto;max-width:900px}@media screen and (max-width:782px){.aioseo-wizard-container{margin:0 20px}}.aioseo-wizard-header{display:flex;align-items:center;justify-content:center;flex-direction:column}.aioseo-wizard-header svg.aioseo-logo{width:100%;max-width:140px;height:auto;margin:60px 10px 40px 0}.aioseo-wizard-progress{display:flex;align-items:center;justify-content:center}@media screen and (max-width:782px){.aioseo-wizard-progress{display:none}}.aioseo-wizard-progress .circle{background-color:#dcdde1;width:16px;height:16px;border-radius:50%}.aioseo-wizard-progress .circle.active{background-color:#005ae0}.aioseo-wizard-progress .spacer{width:59px;border:1px solid #dcdde1;margin:0 12px}.aioseo-wizard-progress .spacer.active{border-color:#005ae0}.aioseo-wizard-steps{color:#8c8f9a;font-size:14px;margin-bottom:20px}.block-editor-block-card{align-items:center}.block-editor-block-card__title.block-editor-block-card__title{margin:0}.aioseo-sidebar-row{margin-bottom:16px}.aioseo-sidebar-row .aioseo-sidebar-title{font-weight:500}.aioseo-localseo-info .aioseo-input,.aioseo-localseo-info .aioseo-multiselect,.aioseo-localseo-info .aioseo-select{max-width:480px}.aioseo-localseo-info .field-description{font-size:14px}.aioseo-localseo-info .info-businessaddress-row .columns{display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}.aioseo-localseo-opening .field-description{display:inline-block;margin:10px 0;font-size:14px}.aioseo-localseo-opening .field-description.mt-8{margin-top:8px}.aioseo-localseo-opening .aioseo-input,.aioseo-localseo-opening .aioseo-multiselect,.aioseo-localseo-opening .aioseo-select{max-width:480px}.aioseo-localseo-opening .aioseo-col-flex{display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #e8e8eb}.aioseo-localseo-opening .aioseo-col-flex:first-of-type{padding-top:0}.aioseo-localseo-opening .aioseo-col-flex:last-of-type{padding-bottom:0;border:none}.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-day{flex:1}.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-alwaysopen,.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-hours{flex:2}.aioseo-localseo-opening .aioseo-col-flex span.separator{margin:0 5px}.aioseo-localseo-opening .aioseo-col-flex .aioseo-select{display:inline-block;max-width:120px;margin-bottom:5px}.aioseo-localseo-opening .aioseo-col-flex .multiselect--disabled .multiselect__single,.aioseo-localseo-opening .aioseo-col-flex .multiselect--disabled .multiselect__tags{background:#f3f4f5}.aioseo-localseo-opening .aioseo-col-alwaysopen .aioseo-checkbox{padding:0 10px}.sidebar-row{margin-bottom:16px}.sidebar-row .title{font-weight:700}
|
1 |
+
.aioseo-app .aioseo-cta{margin-top:30px;background:#fff;width:100%;padding:40px;box-shadow:0 2px 5px rgba(0,0,0,.05);border:1px solid #e8e8eb}.aioseo-app .aioseo-cta.floating{margin-top:0;position:absolute;max-width:850px;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);box-shadow:0 5px 20px rgba(0,0,0,.1);border-radius:3px}.aioseo-app .aioseo-cta .header-text{line-height:1.4;font-weight:600;font-size:24px;text-align:center;color:#141b38}.aioseo-app .aioseo-cta .header-text span.large{line-height:1.4;font-size:32px}.aioseo-app .aioseo-cta .description{margin:30px 0 50px;width:100%;max-width:600px;text-align:center;font-size:16px;color:#141b38;line-height:1.4}.aioseo-app .aioseo-cta .description .aioseo-alert{margin-bottom:30px;text-align:left}.aioseo-app .aioseo-cta .feature-list{color:#141b38;font-size:16px;width:100%;max-width:500px;margin-bottom:50px}.aioseo-app .aioseo-cta .feature-list .aioseo-col{display:flex;align-items:flex-start}.aioseo-app .aioseo-cta .feature-list .aioseo-col svg.aioseo-circle-check{color:#00aa63;width:18px;min-width:18px;min-height:18px;margin-right:10px}.aioseo-app .aioseo-cta a.learn-more{margin-top:20px;color:#8c8f9a;font-size:14px}.aioseo-app .aioseo-cta .type-1{display:flex;flex-direction:column;align-items:center}.aioseo-app .aioseo-cta .type-2{margin:30px 0 30px 50px;display:flex}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .header-text{text-align:left}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .feature-list{margin:30px 0}.aioseo-app .aioseo-cta .type-2>div{margin-right:20px;flex:0 0 50%}.aioseo-app .aioseo-cta .type-2 .featured-image{max-height:540px;border:1px solid #e8e8eb;flex:1;overflow:hidden;margin-right:-41px;margin-bottom:-71px;border-radius:5px 0 0}.aioseo-app .aioseo-cta .type-2 .featured-image img{max-height:600px}@media only screen and (max-width:912px){.aioseo-app .aioseo-cta .type-2{flex-direction:column;align-items:center}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .header-text{text-align:center}.aioseo-app .aioseo-cta .type-2>div{text-align:center;margin-right:0;margin-bottom:30px;flex:1 0 100%;width:100%}.aioseo-app .aioseo-cta .type-2 .featured-image{margin:0 -10px -41px;border-radius:5px 5px 0 0;max-height:300px}}.aioseo-app .aioseo-cta .type-3 .sub-header{line-height:1.4;font-size:16px;font-weight:600;color:#005ae0;margin-bottom:5px}.aioseo-app .aioseo-cta .type-3 .header-text{text-align:left}.aioseo-app .aioseo-cta .type-3 .feature-list{margin:30px 0}.aioseo-app .aioseo-cta .type-3 .feature-list .aioseo-col svg.aioseo-circle-check{color:#00aa63;width:21px;min-width:21px;min-height:21px;margin-right:5px}.aioseo-app .aioseo-cta .type-3 .aioseo-button{margin-right:12px}.aioseo-box-toggle .aioseo-row .aioseo-col{max-width:calc(200px + 1em)}@media only screen and (max-width:48em){.aioseo-box-toggle .aioseo-row .aioseo-col{max-width:100%}}.aioseo-box-toggle input{position:absolute!important;clip:rect(0,0,0,0);height:1px;width:1px;border:0;overflow:hidden}.aioseo-box-toggle input:checked+label{background-color:#fff;box-shadow:0 5px 10px rgba(0,90,224,.1);border:2px solid #005ae0;font-weight:600}.aioseo-box-toggle label{background-color:#f9f9fa;color:#141b38;font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;flex-direction:column;border:1px solid #f9f9fa;transition:all .1s ease-in-out;border-radius:3px;height:165px;position:relative}.aioseo-box-toggle label p{position:absolute;bottom:15px;margin:0}.aioseo-box-toggle label:hover{cursor:pointer}.aioseo-button{flex-shrink:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;padding:0 24px;border-radius:4px;-webkit-appearance:none;cursor:pointer;height:48px;transition:background-color .2s ease;position:relative;overflow:hidden;text-decoration:none;color:#141b38;white-space:nowrap}.aioseo-button.small,.aioseo-button.small-table{height:30px;font-size:14px;padding:0 12px}.aioseo-button.small-table .loading-spinner,.aioseo-button.small .loading-spinner{width:25px;height:25px}.aioseo-button.small-table{font-size:12px;border-radius:3px}.aioseo-button.medium{height:40px;font-size:14px;padding:0 18px}.aioseo-button.medium .loading-spinner{width:35px;height:35px}.aioseo-button.xl{height:66px;border-radius:4px;font-size:18px;padding:0 48px}.aioseo-button.gray{border:1px solid #dcdde1;background-color:#f3f4f5}.aioseo-button.gray:hover{background-color:#fff;color:#141b38}.aioseo-button.gray:active{background-color:#f3f4f5}.aioseo-button.green{border:none;background-color:#00aa63;color:#fff}.aioseo-button.green:hover{background-color:#07c575}.aioseo-button.green:active{background-color:#15955f}.aioseo-button.blue{border:none;background-color:#005ae0;color:#fff}.aioseo-button.blue:hover{background-color:#1a82ea}.aioseo-button.blue:active{background-color:#004f9d}.aioseo-button.wp-blue{border:1px solid #005ae0;background-color:#f3f5f6;color:#005ae0}.aioseo-button.wp-blue:hover{background-color:#1a82ea;border-color:#1a82ea;color:#fff}.aioseo-button.wp-blue:active{background-color:#004f9d;border-color:#004f9d;color:#fff}.aioseo-button.black{border:none;background-color:#434960;color:#fff}.aioseo-button.black:hover{background-color:#2c324c}.aioseo-button.black:active{background-color:#141b38}.aioseo-button.red{border:1px solid #df2a4a;background-color:#fff;color:#df2a4a}.aioseo-button.red:hover{background-color:#df2a4a;color:#fff}.aioseo-button.red:active{background-color:#ab2039}.aioseo-button.loading.blue,.aioseo-button.loading.blue:hover{background-color:#004f9d;color:#004f9d}.aioseo-button.loading.green,.aioseo-button.loading.green:hover{background-color:#15955f;color:#15955f}.aioseo-button.loading.gray,.aioseo-button.loading.gray:hover{background-color:#f3f4f5;color:#f3f4f5}.aioseo-button.loading.black,.aioseo-button.loading.black:hover{background-color:#141b38;color:#141b38}.aioseo-button:disabled{border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default}.aioseo-button:disabled.gray:hover{color:#8c8f9a}.aioseo-button:disabled.wp-blue{border-color:#ddd;background-color:#f7f7f7}.aioseo-button:disabled.wp-blue:hover{border-color:#ddd;color:#8c8f9a}.aioseo-button:disabled:hover{background-color:#f3f4f5}.aioseo-checkbox{display:inline-flex;align-items:center}.aioseo-checkbox.disabled,.aioseo-checkbox.disabled .form-checkbox .fancy-checkbox,.aioseo-checkbox.no-clicks,.aioseo-checkbox.no-clicks .form-checkbox .fancy-checkbox{cursor:default}.aioseo-checkbox .form-checkbox-wrapper{margin-right:10px;display:flex}.aioseo-checkbox.medium .form-checkbox{width:20px;height:20px}.aioseo-checkbox.medium .form-checkbox .fancy-checkbox svg{width:12px;height:12px}.aioseo-checkbox.medium .form-checkbox span:before{height:18px;width:18px;line-height:20px}.aioseo-checkbox.round .form-checkbox span,.aioseo-checkbox.round .form-checkbox span:before{border-radius:50%}.aioseo-checkbox .form-checkbox{position:relative;display:inline-block;width:28px;height:28px;color:#fff;vertical-align:bottom;text-align:center}.aioseo-checkbox .form-checkbox input{display:none}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox.blue{background:#005ae0}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox.green{background:#00aa63}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox:before{background:transparent}.aioseo-checkbox .form-checkbox input:disabled+.fancy-checkbox{background:#e8e8eb!important;border:1px solid #d0d1d7;cursor:default}.aioseo-checkbox .form-checkbox input:disabled+.fancy-checkbox svg{color:#8c8f9a}.aioseo-checkbox .form-checkbox input:not(:checked):disabled+.fancy-checkbox:before{left:0;bottom:0;background:#e8e8eb}.aioseo-checkbox .form-checkbox .fancy-checkbox svg{color:#fff;width:16px;height:16px}.aioseo-checkbox .form-checkbox span{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#d0d1d7;transition:.2s;border-radius:3px;display:flex;align-items:center;justify-content:center}.aioseo-checkbox .form-checkbox span:before{position:absolute;content:"";height:26px;width:26px;left:1px;bottom:1px;background-color:#fff;transition:.2s;font-size:18px;line-height:28px;border-radius:2px}.aioseo-date-picker.vue-daterange-picker{width:100%}.aioseo-date-picker.vue-daterange-picker .form-control{display:flex;align-items:center;color:#141b38;font-size:16px;height:48px;border-radius:3px;border:1px solid #d0d1d7;position:relative}.aioseo-date-picker.vue-daterange-picker .form-control svg.aioseo-circle-close{position:absolute;right:10px;color:#434960;width:15px;height:15px}.aioseo-date-picker.vue-daterange-picker.small .form-control{height:30px}.aioseo-date-picker.vue-daterange-picker.medium .form-control{height:40px}body[class*=all-in-one-seo_page] .daterangepicker .yearselect{width:75px}.aioseo-editor{position:relative}.aioseo-editor .aioseo-editor-description .ql-editor{min-height:100px}.aioseo-editor .aioseo-editor-line-numbers .ql-editor{padding:15px 15px 15px 45px}.aioseo-editor .aioseo-editor-single .ql-editor{padding:8px 10px}.aioseo-editor .aioseo-editor-single.aioseo-editor-line-numbers .ql-editor{padding:8px 10px 8px 45px}.aioseo-editor .aioseo-editor-monospace .ql-editor{font-family:monospace}.aioseo-editor .aioseo-line-numbers{background:#f7f6f7;position:absolute;text-align:right;top:1px;width:29px;left:1px;border-radius:3px 0 0 3px;padding:15px 9px 0 0;display:flex;height:calc(100% - 2px);flex-direction:column;overflow:hidden}.aioseo-editor .aioseo-line-numbers div{min-height:25px;color:#8c8f9a;font-size:12px;line-height:1.9}.aioseo-editor .ql-disabled{pointer-events:none;background-color:#f9f9fa}.aioseo-editor .ql-editor{padding:15px;border-radius:3px;font-size:16px;color:#141b38;border:1px solid #d0d1d7}.aioseo-editor .ql-editor:focus{border:1px solid #005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-editor .ql-editor .mention .ql-mention-denotation-char{display:none}.aioseo-editor .ql-editor .mention .aioseo-tag{height:25px;margin:0 1px;color:#434960;font-weight:600;font-size:14px;padding:3px 25px 3px 10px;background-color:#f3f4f5;border-radius:3px;cursor:pointer;position:relative;display:inline-flex;align-items:center}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle{display:inline-flex;align-items:center;background-color:#e8e8eb;position:absolute;top:0;right:0;bottom:0;border-radius:0 3px 3px 0}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle svg.aioseo-caret{width:18px;height:18px;transition:transform .3s}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle svg.aioseo-caret.rotated{transform:rotate(180deg)}.aioseo-editor .ql-mention-list-container{color:#141b38;background-color:#fff;max-width:250px;width:100%;margin-top:3px;border:1px solid #d0d1d7;border-radius:3px;box-shadow:0 3px 15px rgba(0,0,0,.1);z-index:9001}.aioseo-editor .ql-mention-list-container .aioseo-tag-custom,.aioseo-editor .ql-mention-list-container .aioseo-tag-search{padding:12px;border-bottom:1px solid #e8e8eb}.aioseo-editor .ql-mention-list-container .aioseo-tag-custom{display:none}.aioseo-editor .ql-mention-list-container .ql-mention-list{list-style:none;margin:0;padding:0;max-height:210px;overflow:auto}.aioseo-editor .ql-mention-list-container .ql-mention-list li{color:#141b38;margin:0;background-color:transparent;border-bottom:1px solid #e8e8eb;padding:15px;cursor:pointer;font-size:14px}.aioseo-editor .ql-mention-list-container .ql-mention-list li:last-child{border-bottom:0}.aioseo-editor .ql-mention-list-container .ql-mention-list li.selected,.aioseo-editor .ql-mention-list-container .ql-mention-list li:hover{color:#005ae0;background-color:#f2f7fd}.aioseo-editor .ql-mention-list-container .ql-mention-list li.selected .aioseo-tag-description,.aioseo-editor .ql-mention-list-container .ql-mention-list li:hover .aioseo-tag-description{color:initial}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item{display:flex}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item>div:first-child{margin-right:10px}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item .aioseo-tag-title{font-weight:600}.aioseo-editor .ql-mention-list-container .ql-mention-list li svg.aioseo-plus{width:10px;height:10px;color:#005ae0}.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match{cursor:default;padding:12px;font-size:16px;font-weight:600}.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match.highlight,.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match:hover{color:initial;background-color:transparent}.aioseo-editor .ql-toolbar{display:none}.aioseo-editor .ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.aioseo-editor .ql-snow .ql-hidden{display:none}.aioseo-editor .ql-container.ql-snow{border:none}.aioseo-editor .ql-container p{font-size:16px;margin:0;line-height:25px}.aioseo-highlight-toggle{border:1px solid #e8e8eb;border-radius:3px;min-height:48px;display:flex;align-items:center;padding:5px 10px;cursor:pointer}.aioseo-highlight-toggle>*{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-highlight-toggle.active{border-color:#005ae0;box-shadow:0 5px 10px rgba(0,90,224,.1)}.aioseo-highlight-toggle.medium{min-height:40px}.aioseo-highlight-toggle .icon{display:flex;align-items:center;margin-right:5px}.aioseo-input[data-v-3f0a80a7]{position:relative;width:100%}.aioseo-input.file[data-v-3f0a80a7],.aioseo-input.file input[type=file][data-v-3f0a80a7]{position:absolute;top:0;right:0;left:0;bottom:0;margin:0;padding:0}.aioseo-input.file input[type=file][data-v-3f0a80a7]{cursor:pointer;opacity:0}.aioseo-input.file input[type=file][data-v-3f0a80a7]::-webkit-file-upload-button{visibility:hidden}.aioseo-input.file input[type=file][data-v-3f0a80a7]:focus{box-shadow:none}.aioseo-input input[data-v-3f0a80a7]{height:48px;width:100%;background-color:#fff;border:1px solid #d0d1d7;border-radius:3px;padding:15px;font-size:18px;position:relative;overflow:hidden;margin:0}.aioseo-input input[data-v-3f0a80a7]:disabled{background:#f9f9fa}.aioseo-input input[data-v-3f0a80a7]:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-input input[data-v-3f0a80a7]::-moz-placeholder{color:#8c8f9a}.aioseo-input input[data-v-3f0a80a7]:-ms-input-placeholder{color:#8c8f9a}.aioseo-input input[data-v-3f0a80a7]::placeholder{color:#8c8f9a}.aioseo-input input.prepend[data-v-3f0a80a7]{padding-left:50px}.aioseo-input input.append[data-v-3f0a80a7]{padding-right:50px}.aioseo-input input.small[data-v-3f0a80a7]{height:30px;padding:10px;font-size:14px}.aioseo-input input.small.prepend[data-v-3f0a80a7]{padding-left:30px}.aioseo-input input.small.append[data-v-3f0a80a7]{padding-right:30px}.aioseo-input input.medium[data-v-3f0a80a7]{height:40px;padding:12px;font-size:16px}.aioseo-input input.medium.prepend[data-v-3f0a80a7]{padding-left:35px}.aioseo-input input.medium.append[data-v-3f0a80a7]{padding-right:35px}.aioseo-input.aioseo-active input[data-v-3f0a80a7]{border-color:#00aa63}.aioseo-input.aioseo-active input[data-v-3f0a80a7]:active,.aioseo-input.aioseo-active input[data-v-3f0a80a7]:focus{box-shadow:0 0 0 1px #00aa63}.aioseo-input.aioseo-active .append-icon[data-v-3f0a80a7],.aioseo-input.aioseo-active .prepend-icon[data-v-3f0a80a7]{color:#00aa63}.aioseo-input.aioseo-error input[data-v-3f0a80a7]{border-color:#df2a4a}.aioseo-input.aioseo-error input[data-v-3f0a80a7]:active,.aioseo-input.aioseo-error input[data-v-3f0a80a7]:focus{box-shadow:0 0 0 1px #df2a4a}.aioseo-input.aioseo-error .append-icon[data-v-3f0a80a7],.aioseo-input.aioseo-error .prepend-icon[data-v-3f0a80a7]{color:#df2a4a}.aioseo-input.aioseo-warning input[data-v-3f0a80a7]{border-color:#f18200}.aioseo-input.aioseo-warning input[data-v-3f0a80a7]:active,.aioseo-input.aioseo-warning input[data-v-3f0a80a7]:focus{box-shadow:0 0 0 1px #f18200}.aioseo-input.aioseo-warning .append-icon[data-v-3f0a80a7],.aioseo-input.aioseo-warning .prepend-icon[data-v-3f0a80a7]{color:#f18200}.aioseo-input .prepend-icon[data-v-3f0a80a7]{position:absolute;top:0;left:10px;width:30px;height:100%;color:#d0d1d7;display:flex;align-items:center;z-index:1}.aioseo-input .prepend-icon svg[data-v-3f0a80a7]{width:30px;height:30px}.aioseo-input .prepend-icon.small[data-v-3f0a80a7]{width:20px}.aioseo-input .prepend-icon.small svg[data-v-3f0a80a7]{width:10px;height:10px}.aioseo-input .prepend-icon.medium[data-v-3f0a80a7]{width:15px}.aioseo-input .prepend-icon.medium svg[data-v-3f0a80a7]{width:15px;height:15px}.aioseo-input .append-icon[data-v-3f0a80a7]{position:absolute;top:0;right:10px;width:30px;height:100%;color:#d0d1d7;display:flex;align-items:center;z-index:1}.aioseo-input .append-icon svg[data-v-3f0a80a7]{width:30px;height:30px}.aioseo-input .append-icon.small[data-v-3f0a80a7]{width:10px}.aioseo-input .append-icon.medium[data-v-3f0a80a7]{width:15px}.aioseo-input .append-icon.clickable[data-v-3f0a80a7]{cursor:pointer;padding:0 5px;background:#f3f4f5;border:1px solid #d0d1d7;color:#434960;right:0;width:30px;border-radius:0 3px 3px 0}.aioseo-input .append-icon.clickable.small[data-v-3f0a80a7]{width:15px}.aioseo-input .append-icon.clickable.medium[data-v-3f0a80a7]{padding:0 10px;width:40px}.aioseo-phone-number{max-width:600px}.aioseo-phone-number label{display:none}.aioseo-phone-number .maz-input__input{height:40px;min-height:40px;padding-top:0!important;border:1px solid #d0d1d7}.aioseo-phone-number .maz-input__input:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-phone-number .country-selector{flex:0 0 140px;width:140px;min-width:140px;max-width:140px}.aioseo-phone-number .country-selector:hover{z-index:1}.aioseo-phone-number .country-selector>div.maz-base-component.maz-input.has-value.has-1-right-icon.maz-input--primary>input{padding-left:50px!important}.aioseo-phone-number .country-selector .maz-input.is-focused{border-color:#005ae0}.aioseo-phone-number .country-selector .maz-select__options-list__item.selected.keyboard-selected{background-color:#005ae0}.aioseo-phone-number .maz-phone-number-input__country-flag{left:20px;bottom:12px;z-index:auto}.aioseo-phone-number .maz-input__icon{z-index:auto}.aioseo-phone-number .maz-select__options-list input{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-phone-number .maz-input__input{border-radius:3px}.aioseo-phone-number.invalidNumber div.maz-flex-1>div>input{border-color:red}.aioseo-phone-number.invalidNumber div.maz-flex-1>div>input:focus{border-color:#df2a4a;box-shadow:0 0 0 1px #df2a4a}.aioseo-phone-number.validNumber div.maz-flex-1>div>input:focus{border-color:#00aa63;box-shadow:0 0 0 1px #00aa63}.aioseo-radio{display:inline-flex;align-items:center}.aioseo-radio .form-radio-wrapper{margin-right:10px;display:flex}.aioseo-radio.medium .form-radio{width:20px;height:20px}.aioseo-radio.medium .form-radio .fancy-radio svg{width:12px;height:12px}.aioseo-radio.medium.type-1 .form-radio span:before{height:18px;width:18px;line-height:20px}.aioseo-radio.medium.type-2 .form-radio span:before{height:16px;width:16px;line-height:20px}.aioseo-radio.medium.type-2 .form-radio span:after{height:6px;width:6px;left:6px;bottom:6px}.aioseo-radio .form-radio{position:relative;display:inline-block;width:28px;height:28px;color:#fff;vertical-align:bottom;text-align:center}.aioseo-radio .form-radio input{opacity:0}.aioseo-radio .form-radio input:checked+.fancy-radio{background:#005ae0;border-color:#005ae0}.aioseo-radio .form-radio input:checked+.fancy-radio:before{background:transparent}.aioseo-radio .form-radio input:checked+.fancy-radio:after{display:block}.aioseo-radio .form-radio input:disabled+.fancy-radio{cursor:default}.aioseo-radio .form-radio input:focus+.fancy-radio{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-radio .form-radio .fancy-radio{border-radius:50%}.aioseo-radio .form-radio .fancy-radio svg{color:#fff;width:16px;height:16px}.aioseo-radio .form-radio span{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;transition:.2s;border-radius:50%;display:flex;align-items:center;justify-content:center}.aioseo-radio .form-radio span:before{position:absolute;content:"";height:26px;width:26px;left:1px;bottom:1px;transition:.2s;font-size:18px;line-height:28px;border-radius:50%}.aioseo-radio.type-1 .form-radio span,.aioseo-radio.type-1 .form-radio span:before{background-color:#f3f4f5}.aioseo-radio.type-2 .form-radio span{border:1px solid #d0d1d7;background-color:#fff}.aioseo-radio.type-2 .form-radio span:before{background-color:#fff}.aioseo-radio.type-2 .form-radio span:after{display:none;position:absolute;content:"";height:10px;width:10px;left:8px;bottom:8px;background-color:#fff;transition:.2s;border-radius:50%}.aioseo-radio.disabled{cursor:default}.aioseo-radio.disabled.type-2 .form-radio input:checked+.fancy-radio{background-color:#e8e8eb;border-color:#d0d1d7}.aioseo-radio.disabled.type-2 .form-radio span,.aioseo-radio.disabled.type-2 .form-radio span:before{background-color:#e8e8eb}.aioseo-radio.disabled.type-2 .form-radio span:after{background-color:#8c8f9a}.aioseo-radio-toggle{display:flex;align-items:center;height:40px}.aioseo-radio-toggle div{height:100%}.aioseo-radio-toggle.inline{display:inline-flex}.aioseo-radio-toggle div:first-child{overflow:hidden;border-radius:3px 0 0 3px}.aioseo-radio-toggle div:first-child label{border-radius:3px 0 0 3px}.aioseo-radio-toggle div:last-child{overflow:hidden;border-radius:0 3px 3px 0}.aioseo-radio-toggle div:last-child label{border-radius:0 3px 3px 0}.aioseo-radio-toggle input{position:absolute!important;clip:rect(0,0,0,0);height:1px;width:1px;border:0;overflow:hidden}.aioseo-radio-toggle input:checked+label{background-color:#005ae0;color:#fff}.aioseo-radio-toggle input:checked+label.dark{background-color:#434960;color:#fff}.aioseo-radio-toggle label{height:100%;background-color:#e8e8eb;color:#141b38;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;flex-direction:column;transition:all .1s ease-in-out;position:relative;padding:11px 20px;font-weight:600}.aioseo-radio-toggle label.disabled{cursor:default;pointer-events:none;opacity:.5}.aioseo-radio-toggle label:hover{background-color:#dadadf;cursor:pointer}.aioseo-radio-toggle label p{position:absolute;bottom:15px;margin:0}.aioseo-radio-toggle.circle label{background:#fff;color:#8c8f9a}.aioseo-radio-toggle.circle input+label{border-radius:50%;width:36px;height:36px;padding:8px}.aioseo-radio-toggle.circle input:checked+label{background:#e8e8eb;color:#2c324c}.aioseo-select{height:48px}.aioseo-select.multiselect--disabled .multiselect__select{background:none}.aioseo-select .multiselect__select{display:flex;align-items:center;justify-content:center;min-height:46px}.aioseo-select .multiselect__select:before{display:none}.aioseo-select .multiselect__select svg.aioseo-caret{color:#141b38;width:18px;height:18px;transition:transform .3s}.aioseo-select .multiselect__tags{height:100%;border:1px solid #d0d1d7;border-radius:3px;display:flex;justify-content:center;flex-direction:column;padding:16px 40px 16px 16px}.aioseo-select .multiselect__tags .multiselect__spinner{height:calc(100% - 2px);border:2px solid transparent}.aioseo-select .multiselect__tags .multiselect__spinner:after,.aioseo-select .multiselect__tags .multiselect__spinner:before{border-top-color:#434960}.aioseo-select .multiselect__tags .multiselect__single{display:inline-flex;margin:0;padding:0;color:#141b38;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aioseo-select .multiselect__tags .multiselect__placeholder{color:#8c8f9a;font-size:16px;line-height:20px;margin:0;padding:0}.aioseo-select .multiselect__tags .multiselect__input{padding:0;margin:0 10px 0 0;border-radius:0;border:none;color:#141b38;min-height:auto;line-height:20px}.aioseo-select .multiselect__tags .multiselect__input:focus{outline:0;box-shadow:none;border:none}.aioseo-select .multiselect__tags .multiselect__input::-moz-placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__input:-ms-input-placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__input::placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__tags-wrap{display:flex;align-items:center;flex-wrap:wrap}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag{padding:0;display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:#434960;margin:0 3px 0 0;height:24px;background-color:#f3f4f5;flex-shrink:0}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-value{padding:0 5px 0 10px}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove{padding:0 10px;height:100%;cursor:pointer;background-color:#f3f4f5;display:flex;align-items:center}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove:hover{background-color:#434960;color:#fff}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove:hover svg.aioseo-close{color:#fff}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove svg.aioseo-close{color:#434960;width:10px;height:10px}.aioseo-select.multiselect--active .multiselect__tags-wrap{margin-bottom:7px}.aioseo-select.small{height:30px;min-height:30px}.aioseo-select.small .multiselect__tags{min-height:30px;padding:8px 38px 8px 8px}.aioseo-select.small .multiselect__tags .multiselect__placeholder{font-size:14px}.aioseo-select.small .multiselect__select{height:28px;min-height:28px}.aioseo-select.small .multiselect__input{font-size:14px}.aioseo-select.small .multiselect__content-wrapper li.multiselect__element .multiselect__option{font-size:14px;padding:8px;min-height:30px}.aioseo-select.medium{height:40px}.aioseo-select.medium .multiselect__tags{padding:7px 40px 7px 7px}.aioseo-select.medium .multiselect__select{min-height:38px}.aioseo-select.multiple{min-height:48px;height:auto}.aioseo-select.multiple.small{min-height:30px}.aioseo-select.multiple.medium{min-height:40px}.aioseo-select.multiselect--above .multiselect__content-wrapper{border-top:1px solid #d0d1d7;border-bottom:none}.aioseo-select .multiselect__content-wrapper{border:1px solid #d0d1d7;border-top:none;border-bottom-left-radius:3px;border-bottom-right-radius:3px;z-index:50;-webkit-overflow-scrolling:touch}.aioseo-select .multiselect__content-wrapper .multiselect__content{max-width:100%}.aioseo-select .multiselect__content-wrapper li.multiselect__element{margin:0;border-bottom:1px solid #e8e8eb}.aioseo-select .multiselect__content-wrapper li.multiselect__element.last{border-bottom:none}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option{color:#141b38;font-weight:700;font-size:16px;white-space:normal;line-height:1.4}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--highlight{background-color:#f2f7fd}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--highlight:after{background-color:#005ae0;color:#fff}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--selected{background-color:#f2f7fd}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--disabled{font-weight:400;background-color:#fff!important;color:#8c8f9a}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option .docLink{font-size:13px;float:right}.aioseo-textarea-autosize{width:100%;background-color:#fff;border:1px solid #d0d1d7;border-radius:4px;font-size:16px;padding:12px}.aioseo-toggle{display:inline-flex}.aioseo-toggle:active,.aioseo-toggle:focus{outline:2px solid transparent}.aioseo-toggle.disabled{pointer-events:none}.aioseo-toggle.disabled .toggle-content{opacity:.5}.aioseo-toggle .toggle-content{position:relative;display:inline-block;width:36px;height:20px;margin-right:10px}.aioseo-toggle .toggle-content input{display:none}.aioseo-toggle .toggle-content input:checked+.toggle-switch{border:1px solid #005ae0;background-color:#005ae0}.aioseo-toggle .toggle-content input:checked+.toggle-switch:focus{outline:2px solid transparent}.aioseo-toggle .toggle-content input:checked+.toggle-switch:before{background-color:#fff;transform:translateX(15px)}.aioseo-toggle .toggle-content input:focus+.toggle-switch{box-shadow:0 0 1px #005ae0;outline:2px solid transparent}.aioseo-toggle .toggle-content .toggle-switch{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#fff;border:1px solid #d0d1d7;border-radius:15px;transition:.2s}.aioseo-toggle .toggle-content .toggle-switch:before{position:absolute;content:"";height:14px;width:14px;left:3px;bottom:2px;background-color:#d0d1d7;border-radius:50%;transition:.2s}.aioseo-wp-table input[type=search],.aioseo-wp-table select{border-color:#d0d1d7}.aioseo-wp-table select:focus{border-color:#005ae0;color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-wp-table select:hover{color:#005ae0}.aioseo-wp-table input.button,.aioseo-wp-table input.button:hover{color:#005ae0;border-color:#005ae0}.aioseo-wp-table .header .subsubsub{color:#555d66;font-size:13px;font-weight:600}.aioseo-wp-table .header .subsubsub>span{display:inline-flex}.aioseo-wp-table .header .subsubsub .separator{margin:0 5px}.aioseo-wp-table .header .subsubsub .active{font-weight:700;color:#141b38}.aioseo-wp-table .header .subsubsub a{text-decoration:none}.aioseo-wp-table .header .subsubsub a:hover{text-decoration:underline}.aioseo-wp-table .header .search{display:flex;justify-content:flex-end}.aioseo-wp-table .header .search .aioseo-input{width:100%;max-width:215px;margin-right:6px}.aioseo-wp-table .header .pagination{color:#555d66}.aioseo-wp-table .header .pagination .button,.aioseo-wp-table .header .pagination input{margin-left:6px}.aioseo-wp-table .tablenav-pages .current-page{padding:0 0 0 8px}.aioseo-wp-table .wp-table{width:100%;position:relative}.aioseo-wp-table .wp-table .loader-overlay{position:absolute;top:46px;right:0;bottom:36px;left:0;background:rgba(0,0,0,.3);z-index:1;display:flex;align-items:center;justify-content:center}.aioseo-wp-table .wp-table .no-results{color:#8c8f9a;min-height:200px;display:flex;align-items:center;justify-content:center;font-weight:400;font-size:24px}.aioseo-wp-table .wp-table tr.even{background-color:#f9f9fa}.aioseo-wp-table .wp-table tr.enabled td,.aioseo-wp-table .wp-table tr.enabled td strong a{color:#141b38}.aioseo-wp-table .wp-table tr:not(.enabled):not(.edit-row) td,.aioseo-wp-table .wp-table tr:not(.enabled):not(.edit-row) td a.edit-link{color:#8c8f9a}.aioseo-wp-table .wp-table tr.edit-row th{padding:0 0 0 3px}.aioseo-wp-table .wp-table tr.edit-row td{padding:0 30px 0 10px}.aioseo-wp-table .wp-table tr td strong a{font-weight:400}.aioseo-wp-table .wp-table tr td .row-actions .edit a,.aioseo-wp-table .wp-table tr td strong a:hover{color:#005ae0}.aioseo-wp-table .wp-table tr td .row-actions .edit .trash a{color:#df2a4a}.aioseo-wp-table .wp-table tr td.edit-row-content .wrapper .border{margin-top:7px;padding:19px 0 20px;border-top:1px solid #e8e8eb}.custom-rules[data-v-191c51fe]{width:100%;margin-top:14px}.custom-rules .rule .rule-settings[data-v-191c51fe]{display:flex;flex-direction:row;align-items:center;flex:1}.custom-rules .rule .rule-settings>.aioseo-select[data-v-191c51fe]:first-child{width:100%;max-width:250px}.custom-rules .rule .rule-settings>[data-v-191c51fe]{margin:0 16px 0 0}.custom-rules .rule .rule-settings>[data-v-191c51fe]:last-child{margin-right:0}.custom-rules .rule .rule-settings>.aioseo-toggle[data-v-191c51fe]{margin:0 10px 0 4px}.custom-rules .rule .actions[data-v-191c51fe],.custom-rules .rule .logical[data-v-191c51fe]{flex:0}.custom-rules svg[data-v-191c51fe]{width:14px;height:14px;cursor:pointer}.custom-rules svg.aioseo-trash[data-v-191c51fe]{color:#dadada}.custom-rules svg.aioseo-trash[data-v-191c51fe]:hover{color:#df2a4a}.custom-rules .aioseo-tooltip[data-v-191c51fe]{margin:0;display:flex}.custom-rules .aioseo-button svg[data-v-191c51fe]{color:#fff;margin-right:6px}.aioseo-add-redirection.edit-url{margin-bottom:30px}.aioseo-add-redirection.edit-url .urls{align-items:flex-start}.aioseo-add-redirection.edit-url .urls .url-arrow{margin:-8px 30px 0}.aioseo-add-redirection.edit-url .advanced-settings-link{margin-top:21px}.aioseo-add-redirection .advanced-settings-link{text-decoration:underline!important}.aioseo-add-redirection.log-404 .urls .source{min-height:103px;align-items:flex-start}.aioseo-add-redirection .generic-error{margin-bottom:20px}.aioseo-add-redirection .aioseo-settings-row .settings-name .name{font-size:14px}.aioseo-add-redirection .urls{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}.aioseo-add-redirection .urls .break{flex-basis:100%;height:0}.aioseo-add-redirection .urls .url-arrow{width:36px;margin:-15px 30px 0;display:flex;align-items:center;justify-content:center}@media (min-width:1200px){.aioseo-add-redirection .urls .url-arrow{margin:-15px 50px 0}}.aioseo-add-redirection .urls .url-arrow svg{height:103px;color:#005ae0}.aioseo-add-redirection .urls .source,.aioseo-add-redirection .urls .target{flex:1;display:flex;align-items:center}.aioseo-add-redirection .urls .source>*,.aioseo-add-redirection .urls .target>*{flex:1}.aioseo-add-redirection .urls .source .aioseo-input,.aioseo-add-redirection .urls .target .aioseo-input{margin-bottom:12px}.aioseo-add-redirection .urls .target input{padding-right:30px}.aioseo-add-redirection .urls .target .append-icon{width:30px;justify-content:flex-end}.aioseo-add-redirection .urls .target .append-icon svg{max-width:16px;margin-right:5px}.aioseo-add-redirection .urls .target .append-icon svg:last-of-type{margin-right:0}.aioseo-add-redirection .urls .target .append-icon svg.aioseo-circle-check{color:#00aa63}.aioseo-add-redirection .urls .target .append-icon svg.aioseo-circle-close{color:#df2a4a}.aioseo-add-redirection .urls .target .aioseo-description{height:30px}.aioseo-add-redirection .urls .target .target-url-error,.aioseo-add-redirection .urls .target .target-url-warning{margin-bottom:10px}.aioseo-add-redirection .settings{display:flex;flex-direction:column;align-items:center;margin-top:24px}.aioseo-add-redirection .settings .all-settings{width:100%}.aioseo-add-redirection .settings .all-settings .all-settings-content{display:flex;align-items:center;flex-wrap:wrap}.aioseo-add-redirection .settings .all-settings .all-settings-content .advanced-settings-link{margin:16px 0 0 16px;color:#8c8f9a}@media (max-width:767px){.aioseo-add-redirection .settings .all-settings .all-settings-content{align-items:start}}.aioseo-add-redirection .settings>.actions{align-self:flex-end;margin-top:-50px}.aioseo-add-redirection .settings>.actions.advanced{margin-top:24px}.aioseo-add-redirection .settings .query-params,.aioseo-add-redirection .settings .redirect-type{margin-bottom:10px;flex:0 1 auto}.aioseo-add-redirection .settings .query-params .aioseo-select,.aioseo-add-redirection .settings .redirect-type .aioseo-select{margin-top:5px}.aioseo-add-redirection .settings .query-params{width:340px}.aioseo-add-redirection .settings .redirect-type{width:300px;margin-right:24px}.aioseo-add-redirection .settings .aioseo-button{align-self:flex-end}.aioseo-add-redirection .settings .cancel-edit-row{margin-left:10px}@media (min-width:1200px){.aioseo-add-redirection .settings .cancel-edit-row{margin-left:16px}}.aioseo-add-redirection-target-url,.aioseo-redirect-source-url{position:relative}.aioseo-redirect-source-url .aioseo-input input{padding-right:76px!important}.aioseo-redirect-source-url .aioseo-input .append-icon{width:60px;justify-content:flex-end}.aioseo-redirect-source-url .aioseo-input .append-icon svg{max-width:16px;margin-right:5px}.aioseo-redirect-source-url .aioseo-input .append-icon svg:last-of-type{margin-right:0}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear{color:#8c8f9a;cursor:pointer}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear.active,.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear:hover{color:#005ae0}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-circle-check{color:#00aa63}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-circle-close{color:#df2a4a}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash{color:#8c8f9a;cursor:pointer}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash.active,.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash:hover{color:#df2a4a}.aioseo-redirect-source-url .source-url-error,.aioseo-redirect-source-url .source-url-warning{margin-bottom:10px}.aioseo-redirect-source-url .source-url-options>div{padding-bottom:5px}.aioseo-redirect-source-url .source-url-options>div>div{margin-bottom:5px}.aioseo-add-redirection-url-results{display:flex;position:absolute;background:#fff;width:100%;max-height:300px;overflow:auto;border:1px solid #d0d1d7;border-radius:3px;z-index:50;left:1px;margin-top:-9px}.aioseo-add-redirection-url-results ul{display:inline-block;max-width:100%;list-style:none;padding:0;margin:0;min-width:100%;vertical-align:top}.aioseo-add-redirection-url-results ul li{margin:0;border-bottom:1px solid #e8e8eb;display:block}.aioseo-add-redirection-url-results ul li:last-of-type{border-bottom:none}.aioseo-add-redirection-url-results ul li>span{color:#141b38;font-weight:700;font-size:16px;white-space:normal;line-height:1.4;display:flex;padding:12px;min-height:40px;text-decoration:none;text-transform:none;vertical-align:middle;position:relative;cursor:pointer}.aioseo-add-redirection-url-results ul li>span:hover{background-color:#f2f7fd}.aioseo-add-redirection-url-results ul li>span:hover .option-title{color:#005ae0}.aioseo-add-redirection-url-results .option{flex:1}.aioseo-add-redirection-url-results .option .option-title{font-weight:500;display:flex;font-size:16px;color:#141b38}.aioseo-add-redirection-url-results .option .option-title>div{margin-right:5px}.aioseo-add-redirection-url-results .option .option-title>div:first-of-type{display:inline-block}.aioseo-add-redirection-url-results .option .option-title .search-term{font-weight:700}.aioseo-add-redirection-url-results .option .option-details{display:flex;align-items:center;font-size:14px;color:#8c8f9a}.aioseo-add-redirection-url-results .option .option-details span{margin-right:15px}.aioseo-add-redirection-url-results .option-permalink{display:flex;align-items:center}.aioseo-add-redirection-url-results .option-permalink svg.aioseo-external{width:15px;height:15px;color:#434960}.aioseo-add-template-tag{border-radius:3px;padding:5px 10px;color:#141b38;font-size:14px;border:1px solid #e8e8eb;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:600}.aioseo-add-template-tag:hover{background-color:#f3f4f5}.aioseo-add-template-tag svg.aioseo-plus{width:10px;height:10px;color:#005ae0}.aioseo-additional-pages .additional-pages-table{border:1px solid #d0d1d7;border-radius:3px;margin-bottom:20px}.aioseo-additional-pages .additional-pages-table .page-priority{max-width:110px}.aioseo-additional-pages .additional-pages-table .page-frequency{max-width:166px}.aioseo-additional-pages .additional-pages-table .page-last-modified{max-width:155px}.aioseo-additional-pages .additional-pages-table .page-actions{max-width:20px}.aioseo-additional-pages .additional-pages-table .page-actions .aioseo-tooltip{display:inline-block;margin:0}.aioseo-additional-pages .additional-pages-table .pages-header{height:50px;display:flex;font-size:14px;padding:0 30px;align-items:center;border-bottom:1px solid #d0d1d7}.aioseo-additional-pages .additional-pages-table .pages-header>div{flex:1 0 auto}.aioseo-additional-pages .additional-pages-table .pages-rows{font-size:14px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row{background-color:#fff;height:70px;display:flex;align-items:center;padding:0 30px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row:last-of-type{border-radius:0 0 3px 3px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row.even{background-color:#f9f9fa}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row>div{flex:1 0 auto;padding-right:30px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row>div:last-child{padding-right:0}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row .page-actions svg.aioseo-trash{width:20px;height:20px;color:#8c8f9a;cursor:pointer;transition:color .1s ease}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row .page-actions svg.aioseo-trash:hover{color:#df2a4a}.aioseo-additional-pages svg.aioseo-circle-plus{width:14px;height:14px;margin-right:10px}.aioseo-alert{position:relative;border-radius:3px;padding:24px;font-size:16px;color:#141b38;line-height:1.4}.aioseo-alert.small{padding:8px;font-size:13px}.aioseo-alert .aioseo-alert-close{cursor:pointer;position:absolute;top:-9px;right:-9px;width:18px;height:18px;border-radius:50%;padding:5px;display:inline-flex;justify-content:center;align-content:center}.aioseo-alert .aioseo-alert-close svg{width:100%;height:100%}.aioseo-alert.blue{border:1px solid #005ae0;background-color:#f2f7fd}.aioseo-alert.blue .aioseo-alert-close{background-color:#005ae0;color:#fff}.aioseo-alert.green{border:1px solid #00aa63;background-color:#f2fdf8}.aioseo-alert.green .aioseo-alert-close{background-color:#00aa63;color:#fff}.aioseo-alert.red{border:1px solid #df2a4a;background-color:#fbe9ec}.aioseo-alert.red .aioseo-alert-close{background-color:#df2a4a;color:#fff}.aioseo-alert.yellow{border:1px solid #f18200;background-color:#fcfae8}.aioseo-alert.yellow .aioseo-alert-close{background-color:#f18200;color:#fff}.aioseo-alert.no-border{border-width:0}.aioseo-alert.text-center{text-align:center}.aioseo-analyze-competitor-site-score{border:1px solid #00aa63;border-radius:3px;color:#00aa63;font-size:14px;padding:0 8px;height:24px;display:inline-flex;align-items:center;justify-content:center;margin-right:14px}.aioseo-analyze-competitor-site-score.red{color:#df2a4a;border-color:#df2a4a}.aioseo-analyze-competitor-site-score.orange{color:#f18200;border-color:#f18200}.aioseo-animated-dannie{display:flex;align-content:center;align-items:center;justify-content:center}.aioseo-animated-dannie svg{max-width:250px}.aioseo-api-bar{height:40px;background-color:#df2a4a;color:#fff;font-size:13px;padding:0 14px 0 40px}.aioseo-api-bar,.aioseo-api-bar .upgrade-text{display:flex;align-items:center;justify-content:center}.aioseo-api-bar .upgrade-text{flex:1}.aioseo-api-bar strong{font-weight:600}.aioseo-api-bar svg.aioseo-logo-gear{width:20px;height:20px;min-width:20px;margin-right:14px}.aioseo-api-bar svg.aioseo-close{cursor:pointer;width:12px;height:12px}.aioseo-api-bar a{color:#fff;text-decoration:underline}.aioseo-api-bar a:hover{text-decoration:none}@media screen and (max-width:782px){.aioseo-api-bar{padding:0 10px;height:60px}}.aioseo-attributes ul.aioseo-attributes-list[data-v-02af7dd2]{list-style:inside;list-style-type:disc;margin:20px 0 0}.aioseo-attributes ul.aioseo-attributes-list li[data-v-02af7dd2]{display:flex;margin-bottom:8px;align-items:flex-start}.aioseo-attributes ul.aioseo-attributes-list li div[data-v-02af7dd2]:first-of-type{flex:0 0 140px}.aioseo-blur{filter:blur(3px);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-card{color:#141b38;background-color:#fff;border:1px solid #e8e8eb;box-shadow:0 2px 5px rgba(0,0,0,.05);margin:30px 0}.aioseo-card.disabled .content{background:#f9f9fa;font-size:16px;line-height:24px}@media only screen and (max-width:782px){.aioseo-card{margin:20px 0}}.aioseo-card svg.aioseo-circle-question-mark{width:17px;height:17px;color:#8c8f99;transition:background-color .2s ease}.aioseo-card svg.aioseo-circle-question-mark:hover{color:#5a5c65}.aioseo-card .header{display:flex;align-items:center;height:70px;padding:0 30px;font-weight:600;font-size:18px;border-bottom:1px solid #e8e8eb}.aioseo-card .header .header-icon{display:flex}.aioseo-card .header .header-icon svg{width:24px;height:24px;margin-right:16px}.aioseo-card .header .text{flex:1 0 auto;display:flex;align-items:center}.aioseo-card .header .text svg.aioseo-circle-question-mark{cursor:pointer;width:17px;height:17px}.aioseo-card .header .text .aioseo-pro-badge{margin-left:10px}.aioseo-card .header .text .card-score{display:flex;flex:1;align-items:center;justify-content:flex-end;padding-right:18px;font-size:13px}.aioseo-card .header .text .card-score.green{color:#00aa63}.aioseo-card .header .text .card-score.orange{color:#f18200}.aioseo-card .header .text .card-score.red{color:#df2a4a}.aioseo-card .header .text .card-score svg{margin-right:7px}.aioseo-card .header svg.aioseo-caret{width:24px;height:24px;cursor:pointer;transform:rotate(-180deg);transition:transform .3s}.aioseo-card .header svg.aioseo-caret.rotated{transform:rotate(-90deg)}.aioseo-card .header svg.aioseo-close{width:14px;height:14px;cursor:pointer}.aioseo-card .content{padding:30px;position:relative}.aioseo-card div.aioseo-settings-row:last-child{margin-bottom:0;border-bottom:none;padding-bottom:0}.aioseo-copy-block{display:inline-flex}.aioseo-copy-block .message{background-color:#fff;min-height:56px;display:flex;align-items:center;border:1px solid #dcdde1;border-radius:3px 0 0 3px;padding:10px 24px;font-weight:600}.aioseo-copy-block .copy-tooltip{display:flex}.aioseo-copy-block .copy{background-color:#fff;min-height:56px;display:flex;align-items:center;border:1px solid #dcdde1;border-left-width:0;border-radius:0 3px 3px 0;padding:10px 16px;font-weight:600;cursor:pointer}.aioseo-copy-block .copy:hover svg.aioseo-copy{color:#a7a7a7}.aioseo-copy-block .copy svg.aioseo-copy{width:20px;height:20px;color:#dadada}.aioseo-copy-block .copy svg.aioseo-circle-check-solid{width:20px;height:20px;color:#00aa63}.aioseo-display-info .aioseo-box-toggle svg{margin-top:-15px;color:#434960}.aioseo-display-info svg.aioseo-new-page,.aioseo-display-info svg.aioseo-shortcode,.aioseo-display-info svg.aioseo-widget{width:100%;height:auto;max-width:60px}.aioseo-display-info svg.aioseo-gutenberg-block{width:59px;height:54px}.aioseo-display-info svg.aioseo-gutenberg-block rect{width:100%;width:56px;height:51px}.aioseo-display-info svg.aioseo-php{width:110px}.aioseo-display-info .copy-box,.aioseo-display-info .extra-box{margin-top:10px;padding:30px;border-radius:3px;background-color:#f9f9fa}.aioseo-display-info .copy-box .aioseo-description,.aioseo-display-info .extra-box .aioseo-description{margin:0}.aioseo-display-info .copy-box .aioseo-copy-block,.aioseo-display-info .extra-box .aioseo-copy-block{margin:20px 0 0}.aioseo-display-info .copy-box .advanced-settings-link,.aioseo-display-info .extra-box .advanced-settings-link{display:inline-block;padding-top:5px;margin:16px 0 0 16px;color:#8c8f9a;text-decoration:underline;font-size:13px}.aioseo-display-info .copy-box .advanced-settings-link:hover,.aioseo-display-info .extra-box .advanced-settings-link:hover{text-decoration:none}.aioseo-display-info .copy-box .advanced-settings,.aioseo-display-info .extra-box .advanced-settings{padding-top:20px}.aioseo-display-info .advanced-settings.advanced-settings-hidden{display:none}.aioseo-display-info .aioseo-tooltip{margin-left:0}.aioseo-exclude-posts{display:flex}.aioseo-facebook-preview{background-color:#f0f2f5;padding:30px;display:flex;align-items:center;justify-content:center}.aioseo-facebook-preview .facebook-post{width:100%;max-width:525px;border-radius:10px;box-shadow:0 2px 5px rgba(0,0,0,.1);background-color:#fff}.aioseo-facebook-preview .facebook-post .facebook-header{height:65px;padding:0 18px;display:flex;align-items:center}.aioseo-facebook-preview .facebook-post .facebook-header .profile-photo{overflow:hidden;width:40px;height:40px;border:1px solid #e8e8eb;border-radius:50%}.aioseo-facebook-preview .facebook-post .facebook-header .profile-photo img{height:100%;width:100%}.aioseo-facebook-preview .facebook-post .facebook-header .poster{margin-left:10px;flex:1 0 auto}.aioseo-facebook-preview .facebook-post .facebook-header .poster .poster-name{font-size:15px;color:#050505;font-weight:500}.aioseo-facebook-preview .facebook-post .facebook-header .poster .poster-date{color:#65676b;font-size:13px}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis{display:inline-flex;align-items:center}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div{background-color:#5e666f;width:4px;height:4px;border-radius:50%;margin:0 2px}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div:first-child{margin-left:0}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div:last-child{margin-right:0}.aioseo-facebook-preview .facebook-post .facebook-content{display:flex;flex-direction:column}.aioseo-facebook-preview .facebook-post .facebook-content img{width:100%;height:auto}.aioseo-facebook-preview .facebook-post .facebook-content.vertical{flex-direction:row}.aioseo-facebook-preview .facebook-post .facebook-content.vertical img{max-width:158px;max-height:158px;width:auto;height:auto}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description{flex:1;background-color:#f2f3f5;padding:9px 13px;color:#606770}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-domain{font-size:13px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-title{color:#1d2129;font-size:17px;font-weight:600;margin:5px 0}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-description{font-size:14px}.aioseo-facebook-preview .facebook-post .facebook-footer{height:24px}.aioseo-feature-card{height:100%;border:1px solid #e8e8eb;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.05);color:#141b38;display:flex;flex-direction:column}.aioseo-feature-card .feature-card-body{padding:30px 30px 20px;flex:1}.aioseo-feature-card .feature-card-body.static{padding:30px}.aioseo-feature-card .feature-card-body .feature-card-header{display:flex;align-items:center;font-size:18px;font-weight:600;margin-bottom:16px}.aioseo-feature-card .feature-card-body .feature-card-header img,.aioseo-feature-card .feature-card-body .feature-card-header svg{width:28px;height:28px;margin-right:10px}.aioseo-feature-card .feature-card-body .feature-card-description{color:#434960;font-size:15px}.aioseo-feature-card .feature-card-body .feature-card-description .learn-more{margin-top:10px}.aioseo-feature-card .feature-card-footer{padding:15px}.aioseo-feature-card .feature-card-footer:not(.upgrade-required){border:2px solid #fff;background-color:#f9f9fa;padding:12px;min-height:43px}.aioseo-feature-card .feature-card-footer .feature-card-install-activate{display:flex;align-items:center;justify-content:flex-end;height:30px;position:relative}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .aioseo-loading-spinner{position:absolute;left:0}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .status{font-weight:600;font-size:14px}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .aioseo-toggle .toggle-content{margin-right:0;margin-left:10px}.aioseo-feature-card .feature-card-footer .feature-card-upgrade-cta{display:flex;align-items:center;justify-content:flex-end}.aioseo-feature-card .feature-card-footer.installed .feature-card-install-activate .status{color:#8c8f9a}.aioseo-setup-wizard-container{margin-top:30px;margin-bottom:50px;padding:30px;color:#fff;position:relative;background-color:#005ae0}@media only screen and (max-width:782px){.aioseo-setup-wizard-container{margin-top:20px}}.aioseo-setup-wizard-container p{color:#fff}.aioseo-setup-wizard-container .getting-started-wrapper{display:flex}.aioseo-setup-wizard-container .getting-started-wrapper .video{flex:0 0 533px;margin:20px 20px 0}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper{padding-bottom:56.25%;margin-bottom:-60px;position:relative;height:0}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper iframe{width:100%;height:100%;position:absolute;top:0;left:0}@media only screen and (max-width:1350px){.aioseo-setup-wizard-container .getting-started-wrapper .video{flex:0 0 593px;margin:20px;align-self:center}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper{margin-bottom:0}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:100%;max-width:100%;justify-content:center}}@media only screen and (max-width:1300px){.aioseo-setup-wizard-container .getting-started-wrapper{flex-direction:row;flex-wrap:wrap}.aioseo-setup-wizard-container .getting-started-wrapper .video{margin:20px 0 -60px}.aioseo-setup-wizard-container .getting-started-wrapper .text,.aioseo-setup-wizard-container .getting-started-wrapper .video{flex-basis:100%;width:100%}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions{justify-content:center}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:inherit;max-width:inherit;justify-content:center}}@media only screen and (max-width:782px){.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:100%;max-width:100%;justify-content:center}}.aioseo-setup-wizard-container .aioseo-row{position:relative;z-index:1}.aioseo-setup-wizard-container .wizard-actions .aioseo-col{display:flex;align-items:center}.aioseo-setup-wizard-container .wizard-actions .aioseo-button svg{width:16px;height:16px;margin-right:10px}.aioseo-setup-wizard-container .setup-wizard-bg{width:100%;height:100%;overflow:hidden;z-index:0;position:absolute;top:0;left:0}.aioseo-setup-wizard-container .setup-wizard-bg svg.aioseo-setup-wizard-bg,.aioseo-setup-wizard-container .setup-wizard-bg svg.aioseo-setup-wizard-bg rect{width:auto;height:100%}.aioseo-setup-wizard-container .close-wizard{color:#fff;width:20px;height:20px;position:absolute;right:20px;top:20px;z-index:1;display:flex;align-items:center;justify-content:center}.aioseo-setup-wizard-container .close-wizard:hover{color:#ccc}.aioseo-setup-wizard-container .close-wizard svg.aioseo-close{width:12px;height:12px;cursor:pointer;color:#fff}.aioseo-setup-wizard-container .close-wizard svg.aioseo-close:hover{color:#dadada}.aioseo-setup-wizard-container p.how-to-get-started{margin:0}.aioseo-setup-wizard-container p.welcome-text{line-height:1.6}.aioseo-setup-wizard-container h2{color:#fff;line-height:1.4}.aioseo-setup-wizard-container a{color:#fff}.aioseo-setup-wizard-container svg.aioseo-book{width:20px;height:20px;margin:0 10px 0 0}.aioseo-setup-wizard-container .getting-started-video{padding-right:20px;margin-bottom:-60px;position:relative;height:0;padding-bottom:56.25%}.aioseo-setup-wizard-container .getting-started-video iframe{width:100%;height:100%;position:absolute;top:0;left:0}.aioseo-google-search-preview{padding:32px 30px;border:1px solid #e8e8eb}.aioseo-google-search-preview .domain{font-size:14px;line-height:1.3;color:#3c4043;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-google-search-preview .site-title{font-size:20px;line-height:1.3;color:#1a0dab;margin:3px 0}.aioseo-google-search-preview .meta-description{max-width:600px;font-size:14px;line-height:1.4;color:#52565a}.edit-post-sidebar .domain,.editor-post-publish-panel .domain{font-size:13px}.edit-post-sidebar .site-title,.editor-post-publish-panel .site-title{font-size:16px}.edit-post-sidebar .meta-description,.editor-post-publish-panel .meta-description{font-size:12px}.aioseo-modal-content .domain,.aioseo-modal-content .meta-description{font-size:14px}.aioseo-modal-content .site-title{font-size:20px}html:not([data-scroll="0"]) .aioseo-header{box-shadow:0 2px 5px rgba(0,0,0,.05);transition:box-shadow .6s}.aioseo-header{position:fixed;z-index:1051;top:0;right:0;left:0;background-color:#fff;height:72px;color:#141b38}.aioseo-header .mascot{width:35px;height:auto;margin-right:10px}.aioseo-header .aioseo-header-content{padding:0;display:flex;height:72px;align-items:center}.aioseo-header .aioseo-header-content a:focus{box-shadow:none}.aioseo-header .aioseo-header-content svg.aioseo-logo{height:26px;margin-right:10px}.aioseo-header .aioseo-header-content .spacer{display:inline-flex;width:26.25px;height:0;border:1px solid #d0d1d7;transform:rotate(-72.26deg)}.aioseo-header .aioseo-header-content .page-name{display:inline-flex;margin-left:10px;font-size:18px;font-weight:400;flex:1 0 auto}.aioseo-header .aioseo-header-content .header-actions{display:flex}.aioseo-header .aioseo-header-content .header-actions .round{position:relative;background-color:#f3f4f5;border-radius:50%;width:40px;height:40px;display:flex;align-items:center;justify-content:center;margin-left:10px;cursor:pointer;transition:background-color .2s ease}.aioseo-header .aioseo-header-content .header-actions .round svg{width:20px;height:20px}.aioseo-header .aioseo-header-content .header-actions .round:hover{background-color:#e5e7e9}.aioseo-header .aioseo-header-content .header-actions .number{position:absolute;background-color:#df2a4a;width:16px;height:16px;font-weight:600;font-size:10px;color:#fff;top:-8px;left:50%;transform:translateX(-50%);margin:0;-webkit-animation:bounce 2s 5;animation:bounce 2s 5}.aioseo-header .aioseo-header-content .header-actions .number:hover{background-color:#df2a4a}@-webkit-keyframes bounce{0%,25%,50%,75%,to{transform:translateX(-50%) translateY(0)}40%{transform:translateX(-50%) translateY(-8px)}60%{transform:translateX(-50%) translateY(-4px)}}@keyframes bounce{0%,25%,50%,75%,to{transform:translateX(-50%) translateY(0)}40%{transform:translateX(-50%) translateY(-8px)}60%{transform:translateX(-50%) translateY(-4px)}}body.modal-open{overflow:hidden}.aioseo-help{display:block;position:fixed;top:0;bottom:0;left:0;right:0;height:100%;width:100vw;background-color:#fff;color:#8c8f9a;opacity:0;max-height:100vh;overflow-y:auto;transition:opacity .3s ease-in 0s;z-index:-999}.aioseo-help.visible{opacity:1;z-index:100000}.aioseo-help .aioseo-help-header{background:#fff;width:100%;height:60px;z-index:1;padding:20px;display:flex}.aioseo-help .aioseo-help-header>.logo{flex:1}.aioseo-help .aioseo-help-docs{margin-bottom:25px;display:none}.aioseo-help .aioseo-help-docs li{padding:0 0 14px 4px;margin:0}.aioseo-help .aioseo-help-docs .aioseo-help-docs-viewall{margin:10px 0 0}.aioseo-help .aioseo-help-docs .aioseo-help-additional-docs{display:none}.aioseo-help .aioseo-help-docs .aioseo-help-additional-docs.opened{display:block}.aioseo-help .aioseo-help-docs .icon .aioseo-description{width:20px;margin-top:0;position:relative;top:5px;left:-5px;color:#8c8f9a}.aioseo-help .help-content{background-color:#fff;width:100%;max-width:740px;margin:0 auto 50px;padding:0 20px;box-sizing:border-box;z-index:1}.aioseo-help .help-content .aioseo-help-category{border-top:1px solid #e8e8eb;margin:0}.aioseo-help .help-content .aioseo-help-category:last-child{border-bottom:1px solid #e8e8eb}.aioseo-help .help-content .aioseo-help-category header{display:block;position:relative;cursor:pointer;width:100%;height:68px}.aioseo-help .help-content .aioseo-help-category header .title{display:block;font-size:16px;color:#8c8f9a;font-weight:600;padding:23px 11px 23px 30px}.aioseo-help .help-content .aioseo-help-category .folder-open{position:absolute;top:24px;width:20px;height:20px;color:#8c8f9a}.aioseo-help .help-content .aioseo-help-category .dashicons-arrow-right-alt2{position:absolute;top:20px;right:0;transition:transform .3s ease-out}.aioseo-help .help-content .aioseo-help-category.opened .aioseo-help-docs{display:block}.aioseo-help .help-content .aioseo-help-category.opened .dashicons-arrow-right-alt2{transform:rotate(90deg)}.aioseo-help .help-content #aioseo-help-search{position:relative;background-color:#fff;text-align:center;top:0;padding:20px 0 50px}.aioseo-help .help-content #aioseo-help-result .aioseo-help-docs{display:block}.aioseo-help .help-content #aioseo-help-footer{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;margin:50px 0 0}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer{display:block}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block{box-sizing:border-box;max-width:325px;border:1px solid #8c8f9a;border-radius:6px;text-align:center}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block{max-width:100%}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block:first-child{margin-right:20px}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block:first-child{margin:0 0 20px}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a{display:block;padding:25px;text-decoration:none;color:#8c8f9a}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a h3{color:#8c8f9a}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a span{font-size:16px;color:#005ae0;text-decoration:underline}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a:hover span{text-decoration:none}.aioseo-help .help-content #aioseo-help-footer .aioseo-description,.aioseo-help .help-content #aioseo-help-footer .aioseo-support{width:48px;margin-top:0;color:#8c8f9a}#aioseo-help-logo{width:132px;height:26px;z-index:2}#aioseo-help-close{width:20px;height:20px;cursor:pointer;opacity:.7;transition:all .05s;z-index:2}@media screen and (max-width:750px){#aioseo-help-close{top:20px;right:20px}}.aioseo-html-tags-editor .no-access{margin-bottom:20px}.aioseo-html-tags-editor .aioseo-description.tags-description{margin:0 0 20px}.aioseo-html-tags-editor .add-tags{display:flex;align-items:center;margin-bottom:20px}.aioseo-html-tags-editor .add-tags div{margin-right:10px}.aioseo-html-tags-editor .add-tags a{font-size:14px}.aioseo-html-tags-editor .add-tags a.no-underline{padding-left:10px}.aioseo-loading-spinner{width:35px;height:35px;position:absolute}.aioseo-loading-spinner .double-bounce1,.aioseo-loading-spinner .double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#fff;opacity:.6;position:absolute;top:0;left:0;-webkit-animation:sk-bounce 1.3s ease-in-out infinite;animation:sk-bounce 1.3s ease-in-out infinite}.aioseo-loading-spinner.dark .double-bounce1,.aioseo-loading-spinner.dark .double-bounce2{background-color:#8c8f9a}.aioseo-loading-spinner .double-bounce2{-webkit-animation-delay:-.65s;animation-delay:-.65s}@-webkit-keyframes sk-bounce{0%,to{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}}@keyframes sk-bounce{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}body.vue-build{margin:0}body.vue-build .aioseo-app{min-height:calc(100vh - 88px)}body.vue-build .aioseo-app .aioseo-main{padding-bottom:30px}body.aioseo-setup-wizard{margin:0;padding:0}body.aioseo-setup-wizard .aioseo-app{min-height:100vh;width:100%}body[class*=page_aioseo] .aioseo-header,body[class*=page_aioseo] .aioseo-notifications .overlay{left:160px}body[class*=page_aioseo].folded .aioseo-header,body[class*=page_aioseo].folded .aioseo-notifications .overlay{left:36px}body[class*=page_aioseo] #wpcontent{padding:0;background-color:#f3f4f5}body[class*=page_aioseo] .update-nag{display:none}body[class*=page_aioseo].admin-bar .aioseo-app{min-height:calc(100vh - 185px)}body[class*=page_aioseo].admin-bar.aioseo-has-bar .aioseo-app{min-height:calc(100vh - 225px)}body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .notification-menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{top:32px}body[class*=page_aioseo] .aioseo-app{min-height:calc(100vh - 153px)}body[class*=page_aioseo].aioseo-has-bar .aioseo-app{min-height:calc(100vh - 193px)}body[class*=page_aioseo].aioseo-has-bar .aioseo-header{height:112px}@media screen and (max-width:782px){body[class*=page_aioseo].aioseo-has-bar .aioseo-header{height:132px}}@media screen and (max-width:960px){body[class*=page_aioseo].auto-fold .aioseo-header,body[class*=page_aioseo].auto-fold .aioseo-notifications .overlay{left:36px}}@media screen and (max-width:782px){body[class*=page_aioseo] #wpbody-content{padding-bottom:20px}body[class*=page_aioseo].admin-bar .aioseo-app{min-height:calc(100vh - 199px)}body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .notification-menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{top:46px}body[class*=page_aioseo] .aioseo-header,body[class*=page_aioseo] .aioseo-notifications .overlay,body[class*=page_aioseo].auto-fold .aioseo-header,body[class*=page_aioseo].auto-fold .aioseo-notifications .overlay{left:0}}@media screen and (max-width:600px){body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{position:absolute;top:46px}}body.aioseo-has-bar .aioseo-app .aioseo-main>.aioseo-container{margin-top:128px}@media screen and (max-width:782px){body.aioseo-has-bar .aioseo-app .aioseo-main>.aioseo-container{margin-top:148px}}.aioseo-app{box-sizing:border-box;background-color:#f3f4f5}.aioseo-app .route-fade-enter-active,.aioseo-app .route-fade-leave-active{transition:all .2s}.aioseo-app .route-fade-enter,.aioseo-app .route-fade-leave-active{opacity:0}.aioseo-app .route-fade-enter{transform:translateX(30px)}.aioseo-app .route-fade-leave-active{transform:translateX(-30px)}.aioseo-app *,.aioseo-app :after,.aioseo-app :before{box-sizing:inherit}.aioseo-app * :not(.aioseo-button):not(.aioseo-input),.aioseo-app :after :not(.aioseo-button):not(.aioseo-input),.aioseo-app :before :not(.aioseo-button):not(.aioseo-input){line-height:1.4}.aioseo-app p{font-size:16px}.aioseo-app a:not(.aioseo-button){color:#005ae0}.aioseo-app a:not(.aioseo-button).text-white{color:#fff}.aioseo-app a:not(.aioseo-button).no-underline,.aioseo-app a:not(.aioseo-button):hover{text-decoration:none}.aioseo-app h2{font-size:32px;margin:0}.aioseo-app .aioseo-main{height:100%}.aioseo-app .aioseo-main>.aioseo-container{margin-top:88px}.aioseo-app .aioseo-main .save-changes{display:flex;justify-content:flex-end}.aioseo-app .d-flex{display:flex}.aioseo-app .aioseo-section-description{font-size:16px;color:#141b38;line-height:1.8;padding-bottom:30px}.aioseo-app .aioseo-description-text{font-size:14px;line-height:1.8;color:#141b38}.aioseo-app .aioseo-description-text.aioseo-error{color:#df2a4a}.aioseo-app .aioseo-description{font-size:14px;line-height:1.8;margin:8px 0 0;color:#141b38}.aioseo-app .aioseo-description.no-margin{margin:0}.aioseo-app .aioseo-description.aioseo-error{color:#df2a4a}.aioseo-app .max-recommended-count{color:#434960;text-align:right;margin-top:10px;font-size:14px}.aioseo-app .max-recommended-count strong.error{color:#df2a4a}.aioseo-app .popper{text-align:left;font-size:12px;padding:20px;background-color:#fff;border:none;border-radius:3px;box-shadow:0 3px 4.8px 0 rgba(32,71,102,.27);z-index:9999;max-width:350px;line-height:1.4}.aioseo-app .popper.action{padding:8px 12px;background-color:#141b38;color:#fff}.aioseo-app .popper.action .popper__arrow{border-top-color:#141b38}.aioseo-app .popper[x-placement^=bottom]{box-shadow:0 -2px 4.8px 0 rgba(32,71,102,.27)}.aioseo-app .popper .aioseo-description{margin:0}.aioseo-app .aioseo-row-highlight{-webkit-animation-name:color;animation-name:color;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-iteration-count:2;animation-iteration-count:2}@-webkit-keyframes color{0%{background-color:#fff}50%{background-color:#00aa63}to{background-color:#fff}}@keyframes color{0%{background-color:#fff}50%{background-color:#00aa63}to{background-color:#fff}}.column-aioseo-details{position:relative}.aioseo-seo-site-score .aioseo-blur{display:flex;align-items:center}.aioseo-seo-site-score .aioseo-seo-site-score-cta{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);background-color:#fff;padding:24px 30px;border:1px solid #e8e8eb;box-shadow:0 2px 10px rgba(0,90,224,.2);color:#141b38;font-size:16px;font-weight:600;width:82%;max-width:500px;text-align:center}.aioseo-app .aioseo-upgrade-bar{height:40px;background-color:#00aa63;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;padding:0 14px 0 40px}.aioseo-app .aioseo-upgrade-bar .upgrade-text{display:flex;align-items:center;flex:1;justify-content:center}.aioseo-app .aioseo-upgrade-bar .upgrade-arrow{font-size:15px;text-decoration:none}.aioseo-app .aioseo-upgrade-bar .upgrade-arrow:hover{text-decoration:none}.aioseo-app .aioseo-upgrade-bar strong{font-weight:600}.aioseo-app .aioseo-upgrade-bar svg.aioseo-logo-gear{width:20px;height:20px;min-width:20px;margin-right:14px}.aioseo-app .aioseo-upgrade-bar svg.aioseo-close{cursor:pointer;width:12px;height:12px}.aioseo-app .aioseo-upgrade-bar a{color:#fff;text-decoration:underline}.aioseo-app .aioseo-upgrade-bar a:hover{text-decoration:none}@media screen and (max-width:782px){.aioseo-app .aioseo-upgrade-bar{padding:0 10px;height:60px}}.field-description[data-v-2bfc1de2]{display:inline-block;margin-top:10px;font-size:14px}.aioseo-address-wrapper[data-v-4bc9bbe6]{display:flex;max-width:500px}.field-description[data-v-4bc9bbe6]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-4bc9bbe6]{margin-top:8px}.field-description[data-v-a0a894b8]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-a0a894b8]{margin-top:8px}.field-description[data-v-4fb4e044]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-4fb4e044]{margin-top:8px}.field-description[data-v-85733554]{display:inline-block;margin-top:10px;font-size:14px}.field-description[data-v-515336a2]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-515336a2]{margin-top:8px}.field-description[data-v-78337de7]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-78337de7]{margin-top:8px}.aioseo-general-settings .more-tooltip-text strong{color:#00aa63}.aioseo-general-settings .license-cta-box{border-radius:3px;background-color:#f2f7fd;padding:20px;max-width:630px;margin:10px 0 30px}.aioseo-general-settings .license-cta-box a{color:#00aa63}.aioseo-general-settings .license-cta-box div{font-weight:600}.aioseo-general-settings .license-cta-box span{font-size:14px;font-style:italic}.aioseo-general-settings .license-key{margin-top:10px;display:flex;max-width:560px}.aioseo-general-settings .license-key .aioseo-input{margin-right:10px}.aioseo-app .aioseo-tabs.internal{margin-bottom:0}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation{margin-top:5px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button{height:60px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 25px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple .md-ripple-wave{display:none}.aioseo-app .aioseo-tabs.skinny .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 16px}.aioseo-app .md-tabs{display:flex;flex-direction:column}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation{margin-top:2px;background:transparent;display:flex;position:relative;justify-content:flex-start}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation.md-elevation-0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button{color:#141b38;max-width:264px;min-width:72px;height:60px;margin:0;border-radius:0;font-size:15px;font-weight:500;padding:0;display:inline-block;position:relative;overflow:hidden;outline:none;background:transparent;border:0;transition:.4s cubic-bezier(.4,0,.2,1);font-family:inherit;line-height:normal;text-decoration:none;vertical-align:top;white-space:nowrap}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:before{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;transition:.4s cubic-bezier(.4,0,.2,1);will-change:background-color,opacity;content:" "}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 18px;display:flex;justify-content:center;align-items:center;width:100%;height:100%;position:relative;overflow:hidden;-webkit-mask-image:radial-gradient(circle,#fff 100%,#000 0);mask-image:radial-gradient(circle,#fff 100%,#000 0)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple .md-button-content{position:static;z-index:2}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]){cursor:pointer}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]):active:before,.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]):hover:before{background-color:currentColor;opacity:.12}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button.md-active{color:#005ae0}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button.md-active:focus{outline:none;box-shadow:none}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator{height:2px;background-color:#005ae0;bottom:-2px;position:absolute;left:0;transform:translateZ(0);will-change:left,right}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator.md-tabs-indicator-left{transition:left .3s cubic-bezier(.4,0,.2,1),right .35s cubic-bezier(.4,0,.2,1)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator.md-tabs-indicator-right{transition:right .3s cubic-bezier(.4,0,.2,1),left .35s cubic-bezier(.4,0,.2,.1)}.aioseo-app .aioseo-tabs{display:flex;border-bottom:2px solid #e8e8eb;position:relative;margin-bottom:38px}.aioseo-app .aioseo-tabs .save-changes{position:absolute;right:0;bottom:10px}.aioseo-app .aioseo-tabs .tab-score{display:inline-flex;align-items:center;justify-content:flex-end;font-size:11px;font-weight:700;padding-left:12px}.aioseo-app .aioseo-tabs .tab-score.green{color:#00aa63}.aioseo-app .aioseo-tabs .tab-score.orange{color:#f18200}.aioseo-app .aioseo-tabs .tab-score.red{color:#df2a4a}.aioseo-app .aioseo-tabs .tab-score svg{display:inline;margin-right:7px}.aioseo-app .aioseo-mobile-tabs{position:relative;height:40px;margin-top:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.aioseo-app .aioseo-mobile-tabs .active-tab{color:#005ae0;padding-left:18px;min-height:100%;display:flex;align-items:center;cursor:pointer}.aioseo-app .aioseo-mobile-tabs .active-tab div{position:relative}.aioseo-app .aioseo-mobile-tabs .active-tab div span{height:2px;background-color:#005ae0;bottom:-7px;position:absolute;left:-18px;right:-18px;z-index:10}.aioseo-app .aioseo-mobile-tabs .active-tab svg.aioseo-caret{width:24px;height:24px;position:relative;top:6px;cursor:pointer;transition:transform .3s}.aioseo-app .aioseo-mobile-tabs .active-tab svg.aioseo-caret.rotated{transform:rotate(180deg)}.aioseo-app .aioseo-mobile-tabs .tab-dropdown{border:1px solid #e8e8eb;border-top:none}.aioseo-app .aioseo-mobile-tabs .tab-links{background:#fff;position:relative;z-index:3;padding:8px;width:100%;max-width:300px}@media screen and (max-width:782px){.aioseo-app .aioseo-mobile-tabs .tab-links{max-width:100%}}.aioseo-app .aioseo-mobile-tabs .tab-links a{padding:10px;display:block;color:#141b38;text-decoration:none}.aioseo-app .aioseo-mobile-tabs .tab-links a:hover{color:#005ae0}.md-tooltip{background-color:#141b38!important;color:#fff!important;border-radius:2px;padding:6px 12px;font-size:14px}.md-tooltip:after{content:"";position:absolute;top:100%;left:50%;margin-left:-5px;border:5px solid transparent;border-top-color:#141b38}.modal-mask{position:fixed;z-index:9998;top:0;left:0;width:100%;height:100%;background-color:rgba(20,27,56,.3);display:table;transition:opacity .3s ease}@media screen and (max-width:520px){.modal-mask{display:block;top:46px}}.modal-mask .modal-wrapper{display:table-cell;vertical-align:middle}@media screen and (max-width:520px){.modal-mask .modal-wrapper{display:block;height:100%}}.modal-mask .modal-wrapper .modal-container{width:100%;max-width:750px;max-height:90vh;overflow-y:hidden;overflow-x:hidden;margin:0 auto;background-color:#fff;box-shadow:0 10px 30px rgba(0,0,0,.15);transition:all .3s ease}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container{width:100%;max-width:100%;max-height:calc(100vh - 46px);height:100%}}.modal-mask .modal-wrapper .modal-container .modal-header{color:#141b38;position:sticky;top:0;z-index:15;padding:0 0 0 40px;height:70px;font-size:20px;font-weight:700;line-height:1.4;border-bottom:1px solid #e8e8eb;background-color:#fff;display:flex;align-items:center}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container .modal-header{padding:15px 0 0 20px}}.modal-mask .modal-wrapper .modal-container .modal-header button.close{position:absolute;right:11px;top:11px;width:24px;height:24px;background-color:#fff;border:none;display:flex;align-items:center}.modal-mask .modal-wrapper .modal-container .modal-header button.close svg.aioseo-close{cursor:pointer;width:14px;height:14px}.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-post-general,.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-post-social{height:calc(90vh - 120px);max-height:600px;overflow-y:auto;overflow-x:hidden}.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-modal-content.has-padding{padding:40px}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container .aioseo-modal-content,.modal-mask .modal-wrapper .modal-container .aioseo-modal-content>.component-wrapper,.modal-mask .modal-wrapper .modal-container .modal-body,.modal-mask .modal-wrapper .modal-container .modal-body>div{height:100%}.modal-mask .modal-wrapper .modal-container .aioseo-modal-content>.component-wrapper{display:flex;align-items:flex-end}.modal-mask .modal-wrapper .modal-container .aioseo-post-general,.modal-mask .modal-wrapper .modal-container .aioseo-post-social{height:100%!important;max-height:100%!important;padding:20px!important}.modal-mask .modal-wrapper .modal-container .aioseo-post-general .mobile-radio-buttons,.modal-mask .modal-wrapper .modal-container .aioseo-post-social .mobile-radio-buttons{margin-bottom:0}.modal-mask .modal-wrapper .modal-container .aioseo-add-template-tag{display:none}.modal-mask .modal-wrapper .modal-container .tab-facebook .aioseo-settings-row:last-of-type,.modal-mask .modal-wrapper .modal-container .tab-twitter .aioseo-settings-row:last-of-type{margin-bottom:64px!important;padding-bottom:32px!important}}.modal-enter,.modal-leave-active{opacity:0}.modal-enter .modal-container,.modal-leave-active .modal-container{transform:scale(1.1)}.aioseo-notification>div .body .title .date{font-weight:400;color:#8c8f9a;font-size:12px}.aioseo-notification-cards .aioseo-notification:last-child>div{border-bottom:none;margin-bottom:none}.aioseo-notification-cards .no-notifications{display:flex;align-items:center;flex-direction:column;padding-top:100px;font-size:16px;color:#8c8f9a}.aioseo-notification-cards .no-notifications img{width:30%;height:auto}.aioseo-notification-cards .no-notifications .great-scott{margin:20px 0 10px;font-size:24px;font-weight:600;color:#434960}.aioseo-notification-cards .no-notifications .no-new-notifications{margin-bottom:10px}body.aioseo-show-notifications .aioseo-main{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-notifications a.dismiss{color:#8c8f9a;font-size:14px}.aioseo-notifications .notification-menu{height:100%;width:100%;max-width:570px;position:fixed;z-index:1053;top:0;right:0;bottom:0;background-color:#fff;overflow-x:hidden;transition:.5s}.aioseo-notifications .notification-menu .notification-header{height:70px;display:flex;align-items:center;padding:0 30px;color:#fff;background-color:#005ae0}.aioseo-notifications .notification-menu .notification-header .new-notifications{font-size:18px;font-weight:600}.aioseo-notifications .notification-menu .notification-header .dismissed-notifications{margin-left:25px;flex:1 1 auto}.aioseo-notifications .notification-menu .notification-header .dismissed-notifications a{font-size:14px;color:#fff}.aioseo-notifications .notification-menu .notification-header svg.aioseo-close{width:14px;height:14px;cursor:pointer}.aioseo-notifications .notification-menu .notification-header svg.aioseo-close:hover{color:#ccc}.aioseo-notifications .notification-menu .notification-cards{padding:30px;height:calc(100% - 192px);overflow:auto}.aioseo-notifications .notification-menu .notification-footer{height:90px;padding:30px;display:flex;align-items:center}.aioseo-notifications .notification-menu .notification-footer div.pagination{flex:1;display:flex;align-items:center}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number{font-size:13px;color:#141b38;background:#e8e8eb;height:30px;width:30px;display:flex;align-items:center;justify-content:center;border-radius:2px;margin-right:4px;cursor:pointer}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number:last-child{margin-right:0}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number.active,.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number:hover{color:#fff;background-color:#005ae0}.aioseo-notifications .overlay{position:fixed;z-index:1052;top:0;right:0;bottom:0;left:160px;background-color:#141b38;opacity:.5;transition:.5s}.aioseo-notifications .notifications-fade-enter-active,.aioseo-notifications .notifications-fade-leave-active{transition:opacity .5s}.aioseo-notifications .notifications-fade-enter,.aioseo-notifications .notifications-fade-leave-to{opacity:0}.aioseo-notifications .notifications-slide-enter-active,.aioseo-notifications .notifications-slide-leave-active{transition:all .5s ease-in-out}.aioseo-notifications .notifications-slide-enter,.aioseo-notifications .notifications-slide-leave-to{right:-570px}.aioseo-post-type-options-toggle{margin-top:20px}.aioseo-priority-score{max-width:350px}.aioseo-priority-score .header-row{font-size:14px}.aioseo-pro-badge{height:24px;border-radius:3px;background:#e8e8eb;color:#434960;font-size:14px;font-weight:600;display:inline-flex;padding:0 8px;align-items:center}.aioseo-score-settings{display:flex;align-items:center;padding-bottom:14px}.aioseo-score-settings svg{margin-right:7px}.aioseo-score-settings span{margin-right:12px}.aioseo-score-button{display:inline-block;padding:5px 8px;font-size:14px;font-weight:700;color:#a1a1a1;border:1px solid #a1a1a1;border-radius:3px}.aioseo-score-button.score-none,.aioseo-score-button.score-red{border-color:#df2a4a;color:#df2a4a!important}.aioseo-score-button.score-orange{border-color:#f18200;color:#f18200!important}.aioseo-score-button.score-green{border-color:#00aa63;color:#00aa63!important}.aioseo-score-button.classic-editor{background:#fff!important;display:inline-block!important;height:auto!important}.aioseo-score-button.classic-editor span{margin-right:0}.aioseo-seo-site-analysis-result{border:1px solid #dcdde1;margin-top:10px}.aioseo-seo-site-analysis-result .result-header{height:66px;padding:0 20px;display:flex;align-items:center}.aioseo-seo-site-analysis-result .result-header .result-icon{display:flex;align-items:center;margin-right:16px}.aioseo-seo-site-analysis-result .result-header .result-icon svg{width:24px;height:24px;color:#8c8f9a}.aioseo-seo-site-analysis-result .result-header .result-icon svg.passed{color:#00aa63}.aioseo-seo-site-analysis-result .result-header .result-icon svg.error{color:#df2a4a}.aioseo-seo-site-analysis-result .result-header .result-icon svg.warning{color:#005ae0}.aioseo-seo-site-analysis-result .result-header .result-content{font-size:16px;font-weight:600;flex:1}.aioseo-seo-site-analysis-result .result-header .result-toggle{width:30px;height:26px;border:1px solid #dcdde1;border-radius:3px;display:flex;align-items:center;justify-content:center;cursor:pointer}.aioseo-seo-site-analysis-result .result-header .result-toggle.active,.aioseo-seo-site-analysis-result .result-header .result-toggle:hover{background-color:#434960}.aioseo-seo-site-analysis-result .result-header .result-toggle.active svg,.aioseo-seo-site-analysis-result .result-header .result-toggle:hover svg{color:#fff}.aioseo-seo-site-analysis-result .result-header .result-toggle.active svg{transform:rotate(-180deg)}.aioseo-seo-site-analysis-result .result-header .result-toggle svg{width:100%;max-width:20px;height:auto;color:#8c8f9a;transform:rotate(-90deg);transition:transform .3s}.aioseo-seo-site-analysis-result .result-body{padding:0 60px 24px}.aioseo-seo-site-analysis-result .result-body .result-message{color:#434960;font-size:16px}.aioseo-seo-site-analysis-result .result-body .result-code-alt pre,.aioseo-seo-site-analysis-result .result-body .result-code pre{background:#f3f4f5;border-radius:3px;max-width:100%;padding:10px;overflow:auto}.aioseo-seo-site-analysis-result .result-body .result-code-alt pre code,.aioseo-seo-site-analysis-result .result-body .result-code pre code{padding:0;background:transparent}.aioseo-seo-site-analysis-result .result-body .result-code pre{white-space:pre-wrap}.aioseo-seo-site-analysis-result .result-body .result-action{margin-top:20px}.aioseo-seo-site-analysis-results .group-header{font-size:16px;font-weight:600}.aioseo-seo-site-analysis-results .group-header:not(:first-child){margin-top:30px}.aioseo-seo-site-analysis-results .group-keywords{display:flex;margin-top:5px;flex-wrap:wrap;align-items:center}.aioseo-seo-site-analysis-results .group-keywords .keyword{font-size:14px;color:#434960;font-weight:600;background:#f3f4f5;padding:9px 10px;border-radius:3px;margin:0 10px 5px 0}.aioseo-seo-site-analysis-results .group-keywords .keyword:first-child{font-size:20px}.aioseo-settings-row{margin-bottom:22px;padding-bottom:16px;border-bottom:1px solid #e8e8eb}.aioseo-settings-row.no-margin{margin-bottom:0}.aioseo-settings-row.small-padding{padding-bottom:5px}.aioseo-settings-row.medium-margin{margin-bottom:15px}.aioseo-settings-row.no-border{border:none}.aioseo-settings-row.no-side-margin{margin-left:0!important;margin-right:0!important}.aioseo-settings-row .settings-name{color:#141b38}.aioseo-settings-row .settings-name .name{font-weight:600;font-size:16px;display:flex;align-items:center}.aioseo-settings-row .settings-name .name.small-margin{margin-bottom:5px}.aioseo-settings-row .settings-name .name.align{line-height:40px}.aioseo-settings-row .settings-name .name.align-small{line-height:30px}.aioseo-settings-row .settings-name .name .aioseo-pro-badge{margin-left:10px}.aioseo-settings-row .settings-name .aioseo-description{margin-top:20px}.aioseo-settings-row .settings-content{font-size:16px}.aioseo-settings-row p.description{font-size:14px}.aioseo-separators{margin-top:-.5rem}.aioseo-separators .aioseo-col .separator{background-color:#f3f4f5;display:flex;align-items:center;justify-content:center;min-height:51px;font-weight:600;font-size:25px;border:1px solid #dcdde1;border-radius:3px;cursor:pointer}.aioseo-separators .aioseo-col .separator:hover{background-color:#e5e7e9}.aioseo-separators .aioseo-col .separator.active{background-color:#005ae0;border-color:#005ae0;color:#fff}.aioseo-separators .aioseo-col .separator.active:hover{background-color:#005ae0}.aioseo-separators .aioseo-col .show-more{height:100%;display:flex;align-items:center}.aioseo-separators .aioseo-col .show-more a{color:#8c8f9a}.aioseo-separators .aioseo-col .custom-separator{margin:20px 0;display:flex;align-items:center}.aioseo-separators .aioseo-col .custom-separator .aioseo-input{margin-left:10px;max-width:100px}.aioseo-sidebar-card .header{height:46px}.aioseo-sidebar-card .header:hover{cursor:pointer}.aioseo-sidebar-card .content{padding-bottom:8px!important}.aioseo-sidebar-card ul{margin-bottom:0}.aioseo-sidebar-card ul li{margin-bottom:16px;padding-left:25px}.aioseo-sidebar-card ul .description{margin:0}.aioseo-robots-meta .global-robots-settings{margin:0;padding-top:24px}.aioseo-robots-meta .global-robots-settings>.settings{padding:8px 0 16px}.aioseo-robots-meta .global-robots-settings-options{display:flex}.aioseo-robots-meta .global-robots-settings-options .max-snippet{margin-right:30px}.aioseo-robots-meta .global-robots-settings-options .max-snippet .aioseo-input{max-width:90px}.aioseo-robots-meta .global-robots-settings-options .max-video-preview{margin-right:30px}.aioseo-robots-meta .global-robots-settings-options .max-video-preview .aioseo-input{max-width:90px}.aioseo-robots-meta .global-robots-settings-options .max-image-preview .aioseo-select{min-width:155px}.aioseo-robots-meta .global-robots-settings-options>span{display:inline-block;margin-bottom:4px}@media screen and (max-width:782px){.aioseo-robots-meta .global-robots-settings-options{display:block}.aioseo-robots-meta .global-robots-settings-options .max-snippet,.aioseo-robots-meta .global-robots-settings-options .max-video-preview{margin-right:0;margin-bottom:20px}.aioseo-robots-meta .global-robots-settings-options>div .aioseo-input,.aioseo-robots-meta .global-robots-settings-options>div .aioseo-select{min-width:100%}}.edit-post-sidebar .global-robots-settings{padding-top:12px}.edit-post-sidebar .global-robots-settings>.settings{padding:4px 0 12px}.edit-post-sidebar .global-robots-settings>.settings label{font-size:16px}.edit-post-sidebar .global-robots-settings .robots-meta-title{padding-top:4px;display:inline-block}.edit-post-sidebar .global-robots-settings-options{flex-wrap:wrap}.edit-post-sidebar .max-snippet{margin-right:30px!important}.edit-post-sidebar .max-video-preview{margin-right:0!important}.edit-post-sidebar .max-image-preview{margin-top:20px!important}.aioseo-score-amount-wrapper{position:absolute;left:0;top:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#141b38;margin:20px}.aioseo-score-amount-wrapper .aioseo-score-amount .score{font-size:64px;font-weight:600}.aioseo-score-amount-wrapper .aioseo-score-amount .total{font-size:18px;color:#8c8f9a;padding-left:3px}.aioseo-score-amount-wrapper .score-description{max-width:80%;text-align:center;font-size:17px;font-weight:600;line-height:1.1}.aioseo-score-amount-wrapper .score-analyzing{margin-top:20px;font-size:30px}.aioseo-site-score-analyze{position:relative;display:flex;align-items:center;justify-content:center;flex:1}.aioseo-site-score-analyze .analyze-errors{text-align:center;margin-bottom:1em}.aioseo-site-score-analyze .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-right:5em}.aioseo-site-score-analyze .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-analyze .aioseo-seo-site-score-description h2{line-height:1.4}.aioseo-site-score-analyze .aioseo-seo-site-score-description svg.aioseo-book{width:20px;height:20px;margin:0 10px 0 0;color:#005ae0}.aioseo-site-score-analyze .aioseo-seo-site-score-description>div{font-size:16px;color:#141b38;margin-bottom:10px}.aioseo-site-score-analyze .aioseo-seo-site-score-description .links{margin-top:30px;font-size:14px;font-weight:600}.aioseo-site-score-analyze .aioseo-seo-site-score-description .links .no-underline{padding-left:5px}.aioseo-site-score-competitor{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column}.aioseo-site-score-competitor .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-right:1em}.aioseo-site-score-competitor .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations{margin:20px 0}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links){display:flex;align-items:center;font-size:14px;color:#141b38;font-weight:600;margin-bottom:10px}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round{position:relative;border-radius:50%;width:24px;min-width:24px;max-width:24px;height:24px;display:flex;align-items:center;justify-content:center;margin-right:10px;font-size:12px;color:#fff;font-weight:600}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.red{background-color:#df2a4a}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.blue{background-color:#005ae0}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.orange{background-color:#f18200}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.green{background-color:#00aa63}.aioseo-site-score-competitor .refresh-results .aioseo-refresh{width:14px;height:14px;margin-right:10px}.aioseo-site-score-competitor .mobile-snapshot{margin-top:60px;max-width:250px}.aioseo-site-score-competitor .mobile-snapshot div{font-weight:600;font-size:16px;margin-bottom:10px}.aioseo-site-score-competitor .mobile-snapshot img{width:100%;height:auto}.aioseo-site-score-dashboard{position:relative;display:flex;align-items:center;justify-content:center}.aioseo-site-score-dashboard .analyze-errors{text-align:center;margin-bottom:1em}.aioseo-site-score-dashboard .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-right:1em}.aioseo-site-score-dashboard .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links){display:flex;align-items:center;font-size:14px;color:#141b38;font-weight:600;margin-bottom:10px}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round{position:relative;border-radius:50%;width:24px;min-width:24px;max-width:24px;height:24px;display:flex;align-items:center;justify-content:center;margin-right:10px;font-size:12px;color:#fff;font-weight:600}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.red{background-color:#df2a4a}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.blue{background-color:#005ae0}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.orange{background-color:#f18200}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.green{background-color:#00aa63}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations .links{margin-top:30px;font-size:14px;font-weight:600}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations .links .no-underline{padding-left:5px}.aioseo-social-profiles .same-username .use-same{padding:30px;background:#f9f9fa}.aioseo-social-profiles .same-username .use-same .aioseo-checkbox{font-size:16px}.aioseo-social-profiles .aioseo-social-profile-list,.aioseo-social-profiles .same-username .use-same .aioseo-settings-row,.aioseo-social-profiles .same-username .use-same .profiles{margin-top:20px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile{margin-bottom:0;padding-bottom:0;border-bottom:none}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .logo-svg{margin-right:10px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .profile-error{margin-top:10px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .name{margin-bottom:0}.aioseo-tooltip{margin-left:14px;display:inline-flex}.aioseo-tooltip,.aioseo-twitter-preview{align-items:center;justify-content:center}.aioseo-twitter-preview{background-color:#f0f2f5;padding:30px;display:flex}.aioseo-twitter-preview .twitter-post{width:100%;max-width:500px;border-radius:5px;border:1px solid #e1e8ed;background-color:#fff}.aioseo-twitter-preview .twitter-post .twitter-header{height:65px;padding:0 18px;display:flex;align-items:center}.aioseo-twitter-preview .twitter-post .twitter-header .profile-photo{overflow:hidden;width:40px;height:40px;border:1px solid #e8e8eb;border-radius:50%}.aioseo-twitter-preview .twitter-post .twitter-header .profile-photo img{height:100%;width:100%}.aioseo-twitter-preview .twitter-post .twitter-header .poster{margin-left:10px;flex:1 0 auto}.aioseo-twitter-preview .twitter-post .twitter-header .poster .poster-name{font-size:15px;color:#1c2022;font-weight:600}.aioseo-twitter-preview .twitter-post .twitter-header .poster .poster-username{color:#697882;font-weight:500;font-size:13px}.aioseo-twitter-preview .twitter-post .twitter-container{padding:0 20px 20px}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content{flex-direction:row}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content .twitter-image-preview{display:flex;align-items:center;justify-content:center;background-color:#e1e8ed;min-width:125px;min-height:125px;background-size:cover;background-repeat:no-repeat;background-position:50%}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content .twitter-image-preview svg.aioseo-book{width:50px;height:50px;color:#8999a5}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content{border-radius:10px;overflow:hidden;display:flex;flex-direction:column;border:1px solid #e1e8ed}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content img{width:100%;height:auto}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description{padding:18px;color:#1c2022}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-domain{font-size:14px;color:#8899a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-title{font-size:15px;font-weight:600}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-description{font-size:14px;margin:5px 0}.aioseo-col .reverse{flex-direction:column-reverse}.aioseo-col.col-xs,.aioseo-col.col-xs-1,.aioseo-col.col-xs-2,.aioseo-col.col-xs-3,.aioseo-col.col-xs-4,.aioseo-col.col-xs-5,.aioseo-col.col-xs-6,.aioseo-col.col-xs-7,.aioseo-col.col-xs-8,.aioseo-col.col-xs-9,.aioseo-col.col-xs-10,.aioseo-col.col-xs-11,.aioseo-col.col-xs-12,.aioseo-col.col-xs-offset-0,.aioseo-col.col-xs-offset-1,.aioseo-col.col-xs-offset-2,.aioseo-col.col-xs-offset-3,.aioseo-col.col-xs-offset-4,.aioseo-col.col-xs-offset-5,.aioseo-col.col-xs-offset-6,.aioseo-col.col-xs-offset-7,.aioseo-col.col-xs-offset-8,.aioseo-col.col-xs-offset-9,.aioseo-col.col-xs-offset-10,.aioseo-col.col-xs-offset-11,.aioseo-col.col-xs-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-xs{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-xs-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-xs-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-xs-3{flex-basis:25%;max-width:25%}.aioseo-col.col-xs-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-xs-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-xs-6{flex-basis:50%;max-width:50%}.aioseo-col.col-xs-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-xs-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-xs-9{flex-basis:75%;max-width:75%}.aioseo-col.col-xs-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-xs-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-xs-12{flex-basis:100%;max-width:100%}.aioseo-col.col-xs-offset-0{margin-left:0}.aioseo-col.col-xs-offset-1{margin-left:8.33333333%}.aioseo-col.col-xs-offset-2{margin-left:16.66666667%}.aioseo-col.col-xs-offset-3{margin-left:25%}.aioseo-col.col-xs-offset-4{margin-left:33.33333333%}.aioseo-col.col-xs-offset-5{margin-left:41.66666667%}.aioseo-col.col-xs-offset-6{margin-left:50%}.aioseo-col.col-xs-offset-7{margin-left:58.33333333%}.aioseo-col.col-xs-offset-8{margin-left:66.66666667%}.aioseo-col.col-xs-offset-9{margin-left:75%}.aioseo-col.col-xs-offset-10{margin-left:83.33333333%}.aioseo-col.col-xs-offset-11{margin-left:91.66666667%}.aioseo-col.first-xs{order:-1}.aioseo-col.last-xs{order:1}.aioseo-col.text-xs-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-xs-center{text-align:center!important;justify-content:center}.aioseo-col.text-xs-right{text-align:right!important;justify-content:flex-end}.aioseo-col.p-0{padding:0!important}.aioseo-col.pt-0,.aioseo-col.py-0{padding-top:0!important}.aioseo-col.pr-0,.aioseo-col.px-0{padding-right:0!important}.aioseo-col.pb-0,.aioseo-col.py-0{padding-bottom:0!important}.aioseo-col.pl-0,.aioseo-col.px-0{padding-left:0!important}.aioseo-col.p-1{padding:.25rem!important}.aioseo-col.pt-1,.aioseo-col.py-1{padding-top:.25rem!important}.aioseo-col.pr-1,.aioseo-col.px-1{padding-right:.25rem!important}.aioseo-col.pb-1,.aioseo-col.py-1{padding-bottom:.25rem!important}.aioseo-col.pl-1,.aioseo-col.px-1{padding-left:.25rem!important}.aioseo-col.p-2{padding:.5rem!important}.aioseo-col.pt-2,.aioseo-col.py-2{padding-top:.5rem!important}.aioseo-col.pr-2,.aioseo-col.px-2{padding-right:.5rem!important}.aioseo-col.pb-2,.aioseo-col.py-2{padding-bottom:.5rem!important}.aioseo-col.pl-2,.aioseo-col.px-2{padding-left:.5rem!important}.aioseo-col.p-3{padding:1rem!important}.aioseo-col.pt-3,.aioseo-col.py-3{padding-top:1rem!important}.aioseo-col.pr-3,.aioseo-col.px-3{padding-right:1rem!important}.aioseo-col.pb-3,.aioseo-col.py-3{padding-bottom:1rem!important}.aioseo-col.pl-3,.aioseo-col.px-3{padding-left:1rem!important}.aioseo-col.p-4{padding:1.5rem!important}.aioseo-col.pt-4,.aioseo-col.py-4{padding-top:1.5rem!important}.aioseo-col.pr-4,.aioseo-col.px-4{padding-right:1.5rem!important}.aioseo-col.pb-4,.aioseo-col.py-4{padding-bottom:1.5rem!important}.aioseo-col.pl-4,.aioseo-col.px-4{padding-left:1.5rem!important}.aioseo-col.p-5{padding:3rem!important}.aioseo-col.pt-5,.aioseo-col.py-5{padding-top:3rem!important}.aioseo-col.pr-5,.aioseo-col.px-5{padding-right:3rem!important}.aioseo-col.pb-5,.aioseo-col.py-5{padding-bottom:3rem!important}.aioseo-col.pl-5,.aioseo-col.px-5{padding-left:3rem!important}@media only screen and (min-width:782px){.aioseo-col.col-sm,.aioseo-col.col-sm-1,.aioseo-col.col-sm-2,.aioseo-col.col-sm-3,.aioseo-col.col-sm-4,.aioseo-col.col-sm-5,.aioseo-col.col-sm-6,.aioseo-col.col-sm-7,.aioseo-col.col-sm-8,.aioseo-col.col-sm-9,.aioseo-col.col-sm-10,.aioseo-col.col-sm-11,.aioseo-col.col-sm-12,.aioseo-col.col-sm-offset-0,.aioseo-col.col-sm-offset-1,.aioseo-col.col-sm-offset-2,.aioseo-col.col-sm-offset-3,.aioseo-col.col-sm-offset-4,.aioseo-col.col-sm-offset-5,.aioseo-col.col-sm-offset-6,.aioseo-col.col-sm-offset-7,.aioseo-col.col-sm-offset-8,.aioseo-col.col-sm-offset-9,.aioseo-col.col-sm-offset-10,.aioseo-col.col-sm-offset-11,.aioseo-col.col-sm-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-sm{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-sm-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-sm-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-sm-3{flex-basis:25%;max-width:25%}.aioseo-col.col-sm-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-sm-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-sm-6{flex-basis:50%;max-width:50%}.aioseo-col.col-sm-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-sm-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-sm-9{flex-basis:75%;max-width:75%}.aioseo-col.col-sm-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-sm-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-sm-12{flex-basis:100%;max-width:100%}.aioseo-col.col-sm-offset-0{margin-left:0}.aioseo-col.col-sm-offset-1{margin-left:8.33333333%}.aioseo-col.col-sm-offset-2{margin-left:16.66666667%}.aioseo-col.col-sm-offset-3{margin-left:25%}.aioseo-col.col-sm-offset-4{margin-left:33.33333333%}.aioseo-col.col-sm-offset-5{margin-left:41.66666667%}.aioseo-col.col-sm-offset-6{margin-left:50%}.aioseo-col.col-sm-offset-7{margin-left:58.33333333%}.aioseo-col.col-sm-offset-8{margin-left:66.66666667%}.aioseo-col.col-sm-offset-9{margin-left:75%}.aioseo-col.col-sm-offset-10{margin-left:83.33333333%}.aioseo-col.col-sm-offset-11{margin-left:91.66666667%}.aioseo-col.first-sm{order:-1}.aioseo-col.last-sm{order:1}.aioseo-col.text-sm-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-sm-center{text-align:center!important;justify-content:center}.aioseo-col.text-sm-right{text-align:right!important;justify-content:flex-end}}@media only screen and (min-width:912px){.aioseo-col.col-md,.aioseo-col.col-md-1,.aioseo-col.col-md-2,.aioseo-col.col-md-3,.aioseo-col.col-md-4,.aioseo-col.col-md-5,.aioseo-col.col-md-6,.aioseo-col.col-md-7,.aioseo-col.col-md-8,.aioseo-col.col-md-9,.aioseo-col.col-md-10,.aioseo-col.col-md-11,.aioseo-col.col-md-12,.aioseo-col.col-md-offset-0,.aioseo-col.col-md-offset-1,.aioseo-col.col-md-offset-2,.aioseo-col.col-md-offset-3,.aioseo-col.col-md-offset-4,.aioseo-col.col-md-offset-5,.aioseo-col.col-md-offset-6,.aioseo-col.col-md-offset-7,.aioseo-col.col-md-offset-8,.aioseo-col.col-md-offset-9,.aioseo-col.col-md-offset-10,.aioseo-col.col-md-offset-11,.aioseo-col.col-md-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-md{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-md-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-md-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-md-3{flex-basis:25%;max-width:25%}.aioseo-col.col-md-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-md-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-md-6{flex-basis:50%;max-width:50%}.aioseo-col.col-md-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-md-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-md-9{flex-basis:75%;max-width:75%}.aioseo-col.col-md-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-md-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-md-12{flex-basis:100%;max-width:100%}.aioseo-col.col-md-offset-0{margin-left:0}.aioseo-col.col-md-offset-1{margin-left:8.33333333%}.aioseo-col.col-md-offset-2{margin-left:16.66666667%}.aioseo-col.col-md-offset-3{margin-left:25%}.aioseo-col.col-md-offset-4{margin-left:33.33333333%}.aioseo-col.col-md-offset-5{margin-left:41.66666667%}.aioseo-col.col-md-offset-6{margin-left:50%}.aioseo-col.col-md-offset-7{margin-left:58.33333333%}.aioseo-col.col-md-offset-8{margin-left:66.66666667%}.aioseo-col.col-md-offset-9{margin-left:75%}.aioseo-col.col-md-offset-10{margin-left:83.33333333%}.aioseo-col.col-md-offset-11{margin-left:91.66666667%}.aioseo-col.first-md{order:-1}.aioseo-col.last-md{order:1}.aioseo-col.text-md-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-md-center{text-align:center!important;justify-content:center}.aioseo-col.text-md-right{text-align:right!important;justify-content:flex-end}}@media only screen and (min-width:1042px){.aioseo-col.col-lg,.aioseo-col.col-lg-1,.aioseo-col.col-lg-2,.aioseo-col.col-lg-3,.aioseo-col.col-lg-4,.aioseo-col.col-lg-5,.aioseo-col.col-lg-6,.aioseo-col.col-lg-7,.aioseo-col.col-lg-8,.aioseo-col.col-lg-9,.aioseo-col.col-lg-10,.aioseo-col.col-lg-11,.aioseo-col.col-lg-12,.aioseo-col.col-lg-offset-0,.aioseo-col.col-lg-offset-1,.aioseo-col.col-lg-offset-2,.aioseo-col.col-lg-offset-3,.aioseo-col.col-lg-offset-4,.aioseo-col.col-lg-offset-5,.aioseo-col.col-lg-offset-6,.aioseo-col.col-lg-offset-7,.aioseo-col.col-lg-offset-8,.aioseo-col.col-lg-offset-9,.aioseo-col.col-lg-offset-10,.aioseo-col.col-lg-offset-11,.aioseo-col.col-lg-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-lg{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-lg-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-lg-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-lg-3{flex-basis:25%;max-width:25%}.aioseo-col.col-lg-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-lg-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-lg-6{flex-basis:50%;max-width:50%}.aioseo-col.col-lg-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-lg-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-lg-9{flex-basis:75%;max-width:75%}.aioseo-col.col-lg-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-lg-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-lg-12{flex-basis:100%;max-width:100%}.aioseo-col.col-lg-offset-0{margin-left:0}.aioseo-col.col-lg-offset-1{margin-left:8.33333333%}.aioseo-col.col-lg-offset-2{margin-left:16.66666667%}.aioseo-col.col-lg-offset-3{margin-left:25%}.aioseo-col.col-lg-offset-4{margin-left:33.33333333%}.aioseo-col.col-lg-offset-5{margin-left:41.66666667%}.aioseo-col.col-lg-offset-6{margin-left:50%}.aioseo-col.col-lg-offset-7{margin-left:58.33333333%}.aioseo-col.col-lg-offset-8{margin-left:66.66666667%}.aioseo-col.col-lg-offset-9{margin-left:75%}.aioseo-col.col-lg-offset-10{margin-left:83.33333333%}.aioseo-col.col-lg-offset-11{margin-left:91.66666667%}.aioseo-col.first-lg{order:-1}.aioseo-col.last-lg{order:1}.aioseo-col.text-lg-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-lg-center{text-align:center!important;justify-content:center}.aioseo-col.text-lg-right{text-align:right!important;justify-content:flex-end}}@media only screen and (min-width:1140px){.aioseo-col.col-xl,.aioseo-col.col-xl-1,.aioseo-col.col-xl-2,.aioseo-col.col-xl-3,.aioseo-col.col-xl-4,.aioseo-col.col-xl-5,.aioseo-col.col-xl-6,.aioseo-col.col-xl-7,.aioseo-col.col-xl-8,.aioseo-col.col-xl-9,.aioseo-col.col-xl-10,.aioseo-col.col-xl-11,.aioseo-col.col-xl-12,.aioseo-col.col-xl-offset-0,.aioseo-col.col-xl-offset-1,.aioseo-col.col-xl-offset-2,.aioseo-col.col-xl-offset-3,.aioseo-col.col-xl-offset-4,.aioseo-col.col-xl-offset-5,.aioseo-col.col-xl-offset-6,.aioseo-col.col-xl-offset-7,.aioseo-col.col-xl-offset-8,.aioseo-col.col-xl-offset-9,.aioseo-col.col-xl-offset-10,.aioseo-col.col-xl-offset-11,.aioseo-col.col-xl-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-xl{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-xl-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-xl-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-xl-3{flex-basis:25%;max-width:25%}.aioseo-col.col-xl-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-xl-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-xl-6{flex-basis:50%;max-width:50%}.aioseo-col.col-xl-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-xl-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-xl-9{flex-basis:75%;max-width:75%}.aioseo-col.col-xl-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-xl-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-xl-12{flex-basis:100%;max-width:100%}.aioseo-col.col-xl-offset-0{margin-left:0}.aioseo-col.col-xl-offset-1{margin-left:8.33333333%}.aioseo-col.col-xl-offset-2{margin-left:16.66666667%}.aioseo-col.col-xl-offset-3{margin-left:25%}.aioseo-col.col-xl-offset-4{margin-left:33.33333333%}.aioseo-col.col-xl-offset-5{margin-left:41.66666667%}.aioseo-col.col-xl-offset-6{margin-left:50%}.aioseo-col.col-xl-offset-7{margin-left:58.33333333%}.aioseo-col.col-xl-offset-8{margin-left:66.66666667%}.aioseo-col.col-xl-offset-9{margin-left:75%}.aioseo-col.col-xl-offset-10{margin-left:83.33333333%}.aioseo-col.col-xl-offset-11{margin-left:91.66666667%}.aioseo-col.first-xl{order:-1}.aioseo-col.last-xl{order:1}.aioseo-col.text-xl-left{text-align:left!important;justify-content:flex-start}.aioseo-col.text-xl-center{text-align:center!important;justify-content:center}.aioseo-col.text-xl-right{text-align:right!important;justify-content:flex-end}}.aioseo-container,.aioseo-container-fluid{margin-right:auto;margin-left:auto}.aioseo-container{padding:0 20px}.aioseo-container-fluid.hero,.aioseo-container.hero{min-height:100vh;display:flex;justify-content:center;align-items:center}.aioseo-container-fluid{padding-right:2rem;padding-left:2rem}@media only screen and (min-width:782px){.aioseo-container{padding:0 30px}}@media only screen and (min-width:1042px){.aioseo-container{max-width:80rem}.aioseo-container.full-width{max-width:100%}.aioseo-container.small{max-width:810px}}.aioseo-masonry{-moz-column-count:0;column-count:0;-moz-column-gap:20px;column-gap:20px;counter-reset:brick-counter}.aioseo-masonry>*{box-sizing:border-box;-moz-column-break-inside:avoid;break-inside:avoid;counter-increment:brick-counter;margin-bottom:20px}@media only screen and (min-width:782px){.aioseo-masonry{-moz-column-count:1;column-count:1}}@media only screen and (min-width:912px){.aioseo-masonry{-moz-column-count:2;column-count:2}}@media only screen and (min-width:1042px){.aioseo-masonry{-moz-column-count:3;column-count:3}}.aioseo-row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap;margin-right:-.5rem;margin-left:-.5rem}.aioseo-row.reverse{flex-direction:row-reverse}.aioseo-row.start-xs{justify-content:flex-start;text-align:start}.aioseo-row.center-xs{justify-content:center;text-align:center}.aioseo-row.end-xs{justify-content:flex-end;text-align:end}.aioseo-row.top-xs{align-items:flex-start}.aioseo-row.middle-xs{align-items:center}.aioseo-row.bottom-xs{align-items:flex-end}.aioseo-row.around-xs{justify-content:space-around}.aioseo-row.between-xs{justify-content:space-between}@media only screen and (min-width:782px){.aioseo-row.start-sm{justify-content:flex-start;text-align:start}.aioseo-row.center-sm{justify-content:center;text-align:center}.aioseo-row.end-sm{justify-content:flex-end;text-align:end}.aioseo-row.top-sm{align-items:flex-start}.aioseo-row.middle-sm{align-items:center}.aioseo-row.bottom-sm{align-items:flex-end}.aioseo-row.around-sm{justify-content:space-around}.aioseo-row.between-sm{justify-content:space-between}}@media only screen and (min-width:912px){.aioseo-row.start-md{justify-content:flex-start;text-align:start}.aioseo-row.center-md{justify-content:center;text-align:center}.aioseo-row.end-md{justify-content:flex-end;text-align:end}.aioseo-row.top-md{align-items:flex-start}.aioseo-row.middle-md{align-items:center}.aioseo-row.bottom-md{align-items:flex-end}.aioseo-row.around-md{justify-content:space-around}.aioseo-row.between-md{justify-content:space-between}}@media only screen and (min-width:1042px){.aioseo-row.start-lg{justify-content:flex-start;text-align:start}.aioseo-row.center-lg{justify-content:center;text-align:center}.aioseo-row.end-lg{justify-content:flex-end;text-align:end}.aioseo-row.top-lg{align-items:flex-start}.aioseo-row.middle-lg{align-items:center}.aioseo-row.bottom-lg{align-items:flex-end}.aioseo-row.around-lg{justify-content:space-around}.aioseo-row.between-lg{justify-content:space-between}}.aioseo-display-info svg.aioseo-new-page{width:100%;height:auto;max-width:45px}.aioseo-display-info .new-page .aioseo-row{margin:0}.aioseo-display-info .new-page svg.aioseo-external{width:14px;height:14px;margin-right:10px}.aioseo-display-info .new-page .aioseo-description{color:#434960}.aioseo-display-info .new-page button.aioseo-html-sitemaps-disabled-button{border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default}.aioseo-display-info .new-page .aioseo-alert{width:100%;margin:8px 8px 0}.aioseo-exclude-posts{display:block}.aioseo-exclude-posts .aioseo-select{max-width:600px;display:inline-block;margin-right:10px}.aioseo-exclude-posts .aioseo-select button{display:none}.aioseo-exclude-posts .aioseo-select .multiselect__option{display:flex}.aioseo-exclude-posts .aioseo-select .multiselect__option--highlight .option-title{color:#005ae0}.aioseo-exclude-posts .aioseo-button.gray{margin-top:10px}.aioseo-exclude-posts .option{flex:1 0 auto}.aioseo-exclude-posts .option .option-title{font-weight:500;font-size:16px;color:#141b38}.aioseo-exclude-posts .option .option-title .search-term{font-weight:700}.aioseo-exclude-posts .option .option-details{display:flex;align-items:center;font-size:14px;color:#8c8f9a}.aioseo-exclude-posts .option .option-details span{margin-right:15px}.aioseo-exclude-posts .option-permalink{display:flex;align-items:center}.aioseo-exclude-posts .option-permalink svg.aioseo-external{width:15px;height:15px;color:#434960}.aioseo-exclude-posts .multiselect-toggle{padding:10px 13px;width:40px;position:absolute;height:36px;right:2px;top:2px;text-align:center;z-index:1}.aioseo-exclude-posts .multiselect-toggle svg.aioseo-add-plus{width:14px;height:14px;color:#000}.aioseo-sidebar-row .aioseo-included-objects-toggle{margin-top:5px}.aioseo-sidebar-row .aioseo-included-objects-toggle .aioseo-included-list{margin-top:8px}.aioseo-notification{margin-bottom:20px}.aioseo-notification>div{display:flex;align-items:flex-start;padding-bottom:10px;border-bottom:1px solid #e8e8eb}.aioseo-notification>div .icon{margin-right:20px}.aioseo-notification>div .icon svg{width:20px;height:20px;color:#00aa63}.aioseo-notification>div .icon svg.warning{color:#f18200}.aioseo-notification>div .icon svg.info{color:#005ae0}.aioseo-notification>div .icon svg.success{color:#00aa63}.aioseo-notification>div .icon svg.error{color:#df2a4a}.aioseo-notification>div .body{margin-right:20px;flex:1}.aioseo-notification>div .body .title{font-size:16px;font-weight:600;color:#141b38;margin-bottom:7px;display:flex;align-items:center}.aioseo-notification>div .body .title div:first-child{flex:1;margin-right:5px;line-height:1.4}.aioseo-notification>div .body .notification-content{margin-bottom:10px;max-width:400px}.aioseo-notification>div .body .actions{flex-wrap:wrap;display:flex;align-items:center}.aioseo-notification>div .body .actions>*{margin-bottom:10px}.aioseo-notification>div .body .actions .aioseo-button{margin-right:20px}.aioseo-notification>div .body .actions .dismiss{color:#8c8f9a;font-size:14px}.aioseo-seo-site-score__circle{animation:aioseo-seo-site-score-fill 1s reverse;transform:rotate(-180deg);transform-origin:center;stroke:#00aa63}.aioseo-seo-site-score__circle.fast{-webkit-animation-duration:.5s;animation-duration:.5s;stroke:#df2a4a}.aioseo-seo-site-score__circle.medium{-webkit-animation-duration:.75s;animation-duration:.75s;stroke:#f18200}.aioseo-seo-site-score__background{stroke:#e8e8eb}@-webkit-keyframes aioseo-seo-site-score-fill{to{stroke-dasharray:0 100}}@keyframes aioseo-seo-site-score-fill{to{stroke-dasharray:0 100}}.aioseo-seo-site-score-svg-loading{-webkit-animation:aioseo-seo-site-score-svg-animation 2s linear infinite;animation:aioseo-seo-site-score-svg-animation 2s linear infinite}.aioseo-seo-site-score-loading__circle{-webkit-animation:aioseo-seo-site-score-fill-loading 2s ease-in-out infinite both;animation:aioseo-seo-site-score-fill-loading 2s ease-in-out infinite both;transform:rotate(-180deg);transform-origin:center;stroke:#005ae0}@-webkit-keyframes aioseo-seo-site-score-svg-animation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes aioseo-seo-site-score-svg-animation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@-webkit-keyframes aioseo-seo-site-score-fill-loading{0%,25%{stroke-dashoffset:90;transform:rotate(0)}50%,75%{stroke-dashoffset:10;transform:rotate(45deg)}to{stroke-dashoffset:90;transform:rotate(1turn)}}@keyframes aioseo-seo-site-score-fill-loading{0%,25%{stroke-dashoffset:90;transform:rotate(0)}50%,75%{stroke-dashoffset:10;transform:rotate(45deg)}to{stroke-dashoffset:90;transform:rotate(1turn)}}.aioseo-table-column{display:flex;flex-direction:column;flex-basis:100%;flex:1;padding:5px;justify-content:center}.aioseo-table-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.aioseo-wizard-body{background-color:#fff;max-width:900px;box-shadow:0 2px 5px rgba(0,0,0,.05)}.aioseo-wizard-body .body-content{padding:80px 140px}@media screen and (max-width:782px){.aioseo-wizard-body .body-content{padding:40px}}.aioseo-wizard-body .body-content .header{line-height:1.4}.aioseo-wizard-body .body-footer{border-top:1px solid #e8e8eb;padding:30px;display:flex;align-items:center}.aioseo-wizard-body .body-footer>*{margin-right:10px}.aioseo-wizard-body .body-footer>:last-child{margin-right:0}.aioseo-wizard-body .body-footer .spacer{flex:1 0 auto}.aioseo-wizard-close-and-exit{margin:96px 0;min-height:96px;text-align:center;font-size:14px}.aioseo-wizard-close-and-exit a{color:#8c8f9a!important}.aioseo-wizard-container{margin:40px auto;max-width:900px}@media screen and (max-width:782px){.aioseo-wizard-container{margin:0 20px}}.aioseo-wizard-header{display:flex;align-items:center;justify-content:center;flex-direction:column}.aioseo-wizard-header svg.aioseo-logo{width:100%;max-width:140px;height:auto;margin:60px 10px 40px 0}.aioseo-wizard-progress{display:flex;align-items:center;justify-content:center}@media screen and (max-width:782px){.aioseo-wizard-progress{display:none}}.aioseo-wizard-progress .circle{background-color:#dcdde1;width:16px;height:16px;border-radius:50%}.aioseo-wizard-progress .circle.active{background-color:#005ae0}.aioseo-wizard-progress .spacer{width:59px;border:1px solid #dcdde1;margin:0 12px}.aioseo-wizard-progress .spacer.active{border-color:#005ae0}.aioseo-wizard-steps{color:#8c8f9a;font-size:14px;margin-bottom:20px}.block-editor-block-card{align-items:center}.block-editor-block-card__title.block-editor-block-card__title{margin:0}.aioseo-sidebar-row{margin-bottom:16px}.aioseo-sidebar-row .aioseo-sidebar-title{font-weight:500}
|
dist/Lite/assets/css/chunk-common.rtl.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.aioseo-app .aioseo-cta{margin-top:30px;background:#fff;width:100%;padding:40px;box-shadow:0 2px 5px rgba(0,0,0,.05);border:1px solid #e8e8eb}.aioseo-app .aioseo-cta.floating{margin-top:0;position:absolute;max-width:850px;right:50%;top:50%;transform:translateX(50%) translateY(-50%);box-shadow:0 5px 20px rgba(0,0,0,.1);border-radius:3px}.aioseo-app .aioseo-cta .header-text{line-height:1.4;font-weight:600;font-size:24px;text-align:center;color:#141b38}.aioseo-app .aioseo-cta .header-text span.large{line-height:1.4;font-size:32px}.aioseo-app .aioseo-cta .description{margin:30px 0 50px;width:100%;max-width:600px;text-align:center;font-size:16px;color:#141b38;line-height:1.4}.aioseo-app .aioseo-cta .description .aioseo-alert{margin-bottom:30px;text-align:right}.aioseo-app .aioseo-cta .feature-list{color:#141b38;font-size:16px;width:100%;max-width:500px;margin-bottom:50px}.aioseo-app .aioseo-cta .feature-list .aioseo-col{display:flex;align-items:flex-start}.aioseo-app .aioseo-cta .feature-list .aioseo-col svg.aioseo-circle-check{color:#00aa63;width:18px;min-width:18px;min-height:18px;margin-left:10px}.aioseo-app .aioseo-cta a.learn-more{margin-top:20px;color:#8c8f9a;font-size:14px}.aioseo-app .aioseo-cta .type-1{display:flex;flex-direction:column;align-items:center}.aioseo-app .aioseo-cta .type-2{margin:30px 50px 30px 0;display:flex}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .header-text{text-align:right}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .feature-list{margin:30px 0}.aioseo-app .aioseo-cta .type-2>div{margin-left:20px;flex:0 0 50%}.aioseo-app .aioseo-cta .type-2 .featured-image{max-height:540px;border:1px solid #e8e8eb;flex:1;overflow:hidden;margin-left:-41px;margin-bottom:-71px;border-radius:0 5px 0 0}.aioseo-app .aioseo-cta .type-2 .featured-image img{max-height:600px}@media only screen and (max-width:912px){.aioseo-app .aioseo-cta .type-2{flex-direction:column;align-items:center}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .header-text{text-align:center}.aioseo-app .aioseo-cta .type-2>div{text-align:center;margin-left:0;margin-bottom:30px;flex:1 0 100%;width:100%}.aioseo-app .aioseo-cta .type-2 .featured-image{margin:0 -10px -41px;border-radius:5px 5px 0 0;max-height:300px}}.aioseo-app .aioseo-cta .type-3 .sub-header{line-height:1.4;font-size:16px;font-weight:600;color:#005ae0;margin-bottom:5px}.aioseo-app .aioseo-cta .type-3 .header-text{text-align:right}.aioseo-app .aioseo-cta .type-3 .feature-list{margin:30px 0}.aioseo-app .aioseo-cta .type-3 .feature-list .aioseo-col svg.aioseo-circle-check{color:#00aa63;width:21px;min-width:21px;min-height:21px;margin-left:5px}.aioseo-app .aioseo-cta .type-3 .aioseo-button{margin-left:12px}.aioseo-box-toggle .aioseo-row .aioseo-col{max-width:calc(200px + 1em)}@media only screen and (max-width:48em){.aioseo-box-toggle .aioseo-row .aioseo-col{max-width:100%}}.aioseo-box-toggle input{position:absolute!important;clip:rect(0,0,0,0);height:1px;width:1px;border:0;overflow:hidden}.aioseo-box-toggle input:checked+label{background-color:#fff;box-shadow:0 5px 10px rgba(0,90,224,.1);border:2px solid #005ae0;font-weight:600}.aioseo-box-toggle label{background-color:#f9f9fa;color:#141b38;font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;flex-direction:column;border:1px solid #f9f9fa;transition:all .1s ease-in-out;border-radius:3px;height:165px;position:relative}.aioseo-box-toggle label p{position:absolute;bottom:15px;margin:0}.aioseo-box-toggle label:hover{cursor:pointer}.aioseo-button{flex-shrink:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;padding:0 24px;border-radius:4px;-webkit-appearance:none;cursor:pointer;height:48px;transition:background-color .2s ease;position:relative;overflow:hidden;text-decoration:none;color:#141b38;white-space:nowrap}.aioseo-button.small{height:30px;font-size:14px;padding:0 12px}.aioseo-button.small .loading-spinner{width:25px;height:25px}.aioseo-button.medium{height:40px;font-size:14px;padding:0 18px}.aioseo-button.medium .loading-spinner{width:35px;height:35px}.aioseo-button.xl{height:66px;border-radius:4px;font-size:18px;padding:0 48px}.aioseo-button.gray{border:1px solid #dcdde1;background-color:#f3f4f5}.aioseo-button.gray:hover{background-color:#fff;color:#141b38}.aioseo-button.gray:active{background-color:#f3f4f5}.aioseo-button.green{border:none;background-color:#00aa63;color:#fff}.aioseo-button.green:hover{background-color:#07c575}.aioseo-button.green:active{background-color:#15955f}.aioseo-button.blue{border:none;background-color:#005ae0;color:#fff}.aioseo-button.blue:hover{background-color:#1a82ea}.aioseo-button.blue:active{background-color:#004f9d}.aioseo-button.wp-blue{border:1px solid #005ae0;background-color:#f3f5f6;color:#005ae0}.aioseo-button.wp-blue:hover{background-color:#1a82ea;border-color:#1a82ea;color:#fff}.aioseo-button.wp-blue:active{background-color:#004f9d;border-color:#004f9d;color:#fff}.aioseo-button.black{border:none;background-color:#434960;color:#fff}.aioseo-button.black:hover{background-color:#2c324c}.aioseo-button.black:active{background-color:#141b38}.aioseo-button.red{border:1px solid #df2a4a;background-color:#fff;color:#df2a4a}.aioseo-button.red:hover{background-color:#df2a4a;color:#fff}.aioseo-button.red:active{background-color:#ab2039}.aioseo-button.loading.blue,.aioseo-button.loading.blue:hover{background-color:#004f9d;color:#004f9d}.aioseo-button.loading.green,.aioseo-button.loading.green:hover{background-color:#15955f;color:#15955f}.aioseo-button.loading.gray,.aioseo-button.loading.gray:hover{background-color:#f3f4f5;color:#f3f4f5}.aioseo-button.loading.black,.aioseo-button.loading.black:hover{background-color:#141b38;color:#141b38}.aioseo-button:disabled{border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default}.aioseo-button:disabled.gray:hover{color:#8c8f9a}.aioseo-button:disabled.wp-blue{border-color:#ddd;background-color:#f7f7f7}.aioseo-button:disabled.wp-blue:hover{border-color:#ddd;color:#8c8f9a}.aioseo-button:disabled:hover{background-color:#f3f4f5}.aioseo-checkbox{display:inline-flex;align-items:center}.aioseo-checkbox.disabled,.aioseo-checkbox.disabled .form-checkbox .fancy-checkbox,.aioseo-checkbox.no-clicks,.aioseo-checkbox.no-clicks .form-checkbox .fancy-checkbox{cursor:default}.aioseo-checkbox .form-checkbox-wrapper{margin-left:10px;display:flex}.aioseo-checkbox.medium .form-checkbox{width:20px;height:20px}.aioseo-checkbox.medium .form-checkbox .fancy-checkbox svg{width:12px;height:12px}.aioseo-checkbox.medium .form-checkbox span:before{height:18px;width:18px;line-height:20px}.aioseo-checkbox.round .form-checkbox span,.aioseo-checkbox.round .form-checkbox span:before{border-radius:50%}.aioseo-checkbox .form-checkbox{position:relative;display:inline-block;width:28px;height:28px;color:#fff;vertical-align:bottom;text-align:center}.aioseo-checkbox .form-checkbox input{display:none}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox.blue{background:#005ae0}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox.green{background:#00aa63}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox:before{background:transparent}.aioseo-checkbox .form-checkbox input:disabled+.fancy-checkbox{background:#e8e8eb!important;border:1px solid #d0d1d7;cursor:default}.aioseo-checkbox .form-checkbox input:disabled+.fancy-checkbox svg{color:#8c8f9a}.aioseo-checkbox .form-checkbox input:not(:checked):disabled+.fancy-checkbox:before{right:0;bottom:0;background:#e8e8eb}.aioseo-checkbox .form-checkbox .fancy-checkbox svg{color:#fff;width:16px;height:16px}.aioseo-checkbox .form-checkbox span{position:absolute;cursor:pointer;top:0;right:0;left:0;bottom:0;background-color:#d0d1d7;transition:.2s;border-radius:3px;display:flex;align-items:center;justify-content:center}.aioseo-checkbox .form-checkbox span:before{position:absolute;content:"";height:26px;width:26px;right:1px;bottom:1px;background-color:#fff;transition:.2s;font-size:18px;line-height:28px;border-radius:2px}.aioseo-date-picker.vue-daterange-picker{width:100%}.aioseo-date-picker.vue-daterange-picker .form-control{display:flex;align-items:center;color:#141b38;font-size:16px;height:48px;border-radius:3px;border:1px solid #d0d1d7;position:relative}.aioseo-date-picker.vue-daterange-picker .form-control svg.aioseo-circle-close{position:absolute;left:10px;color:#434960;width:15px;height:15px}.aioseo-date-picker.vue-daterange-picker.small .form-control{height:30px}.aioseo-date-picker.vue-daterange-picker.medium .form-control{height:40px}body[class*=all-in-one-seo_page] .daterangepicker .yearselect{width:75px}.aioseo-editor{position:relative}.aioseo-editor .aioseo-editor-description .ql-editor{min-height:100px}.aioseo-editor .aioseo-editor-line-numbers .ql-editor{padding:15px 45px 15px 15px}.aioseo-editor .aioseo-editor-single .ql-editor{padding:8px 10px}.aioseo-editor .aioseo-editor-single.aioseo-editor-line-numbers .ql-editor{padding:8px 45px 8px 10px}.aioseo-editor .aioseo-editor-monospace .ql-editor{font-family:monospace}.aioseo-editor .aioseo-line-numbers{background:#f7f6f7;position:absolute;text-align:left;top:1px;width:29px;right:1px;border-radius:0 3px 3px 0;padding:15px 0 0 9px;display:flex;height:calc(100% - 2px);flex-direction:column;overflow:hidden}.aioseo-editor .aioseo-line-numbers div{min-height:25px;color:#8c8f9a;font-size:12px;line-height:1.9}.aioseo-editor .ql-disabled{pointer-events:none;background-color:#f9f9fa}.aioseo-editor .ql-editor{padding:15px;border-radius:3px;font-size:16px;color:#141b38;border:1px solid #d0d1d7}.aioseo-editor .ql-editor:focus{border:1px solid #005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-editor .ql-editor .mention .ql-mention-denotation-char{display:none}.aioseo-editor .ql-editor .mention .aioseo-tag{height:25px;margin:0 1px;color:#434960;font-weight:600;font-size:14px;padding:3px 10px 3px 25px;background-color:#f3f4f5;border-radius:3px;cursor:pointer;position:relative;display:inline-flex;align-items:center}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle{display:inline-flex;align-items:center;background-color:#e8e8eb;position:absolute;top:0;left:0;bottom:0;border-radius:3px 0 0 3px}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle svg.aioseo-caret{width:18px;height:18px;transition:transform .3s}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle svg.aioseo-caret.rotated{transform:rotate(-180deg)}.aioseo-editor .ql-mention-list-container{color:#141b38;background-color:#fff;max-width:250px;width:100%;margin-top:3px;border:1px solid #d0d1d7;border-radius:3px;box-shadow:0 3px 15px rgba(0,0,0,.1);z-index:9001}.aioseo-editor .ql-mention-list-container .aioseo-tag-custom,.aioseo-editor .ql-mention-list-container .aioseo-tag-search{padding:12px;border-bottom:1px solid #e8e8eb}.aioseo-editor .ql-mention-list-container .aioseo-tag-custom{display:none}.aioseo-editor .ql-mention-list-container .ql-mention-list{list-style:none;margin:0;padding:0;max-height:210px;overflow:auto}.aioseo-editor .ql-mention-list-container .ql-mention-list li{color:#141b38;margin:0;background-color:transparent;border-bottom:1px solid #e8e8eb;padding:15px;cursor:pointer;font-size:14px}.aioseo-editor .ql-mention-list-container .ql-mention-list li:last-child{border-bottom:0}.aioseo-editor .ql-mention-list-container .ql-mention-list li.selected,.aioseo-editor .ql-mention-list-container .ql-mention-list li:hover{color:#005ae0;background-color:#f2f7fd}.aioseo-editor .ql-mention-list-container .ql-mention-list li.selected .aioseo-tag-description,.aioseo-editor .ql-mention-list-container .ql-mention-list li:hover .aioseo-tag-description{color:initial}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item{display:flex}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item>div:first-child{margin-left:10px}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item .aioseo-tag-title{font-weight:600}.aioseo-editor .ql-mention-list-container .ql-mention-list li svg.aioseo-plus{width:10px;height:10px;color:#005ae0}.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match{cursor:default;padding:12px;font-size:16px;font-weight:600}.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match.highlight,.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match:hover{color:initial;background-color:transparent}.aioseo-editor .ql-toolbar{display:none}.aioseo-editor .ql-clipboard{right:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.aioseo-editor .ql-snow .ql-hidden{display:none}.aioseo-editor .ql-container.ql-snow{border:none}.aioseo-editor .ql-container p{font-size:16px;margin:0;line-height:25px}.aioseo-highlight-toggle{border:1px solid #e8e8eb;border-radius:3px;min-height:48px;display:flex;align-items:center;padding:5px 10px;cursor:pointer}.aioseo-highlight-toggle>*{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-highlight-toggle.active{border-color:#005ae0;box-shadow:0 5px 10px rgba(0,90,224,.1)}.aioseo-highlight-toggle.medium{min-height:40px}.aioseo-highlight-toggle .icon{display:flex;align-items:center;margin-left:5px}.aioseo-input[data-v-20c03142]{position:relative;width:100%}.aioseo-input.file[data-v-20c03142],.aioseo-input.file input[type=file][data-v-20c03142]{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0}.aioseo-input.file input[type=file][data-v-20c03142]{cursor:pointer;opacity:0}.aioseo-input.file input[type=file][data-v-20c03142]::-webkit-file-upload-button{visibility:hidden}.aioseo-input.file input[type=file][data-v-20c03142]:focus{box-shadow:none}.aioseo-input input[data-v-20c03142]{height:48px;width:100%;background-color:#fff;border:1px solid #d0d1d7;border-radius:3px;padding:15px;font-size:18px;position:relative;overflow:hidden;margin:0}.aioseo-input input[data-v-20c03142]:disabled{background:#f9f9fa}.aioseo-input input[data-v-20c03142]:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-input input[data-v-20c03142]::-moz-placeholder{color:#8c8f9a}.aioseo-input input[data-v-20c03142]:-ms-input-placeholder{color:#8c8f9a}.aioseo-input input[data-v-20c03142]::placeholder{color:#8c8f9a}.aioseo-input input.prepend[data-v-20c03142]{padding-right:50px}.aioseo-input input.append[data-v-20c03142]{padding-left:50px}.aioseo-input input.small[data-v-20c03142]{height:30px;padding:10px;font-size:14px}.aioseo-input input.small.prepend[data-v-20c03142]{padding-right:30px}.aioseo-input input.small.append[data-v-20c03142]{padding-left:30px}.aioseo-input input.medium[data-v-20c03142]{height:40px;padding:12px;font-size:16px}.aioseo-input input.medium.prepend[data-v-20c03142]{padding-right:35px}.aioseo-input input.medium.append[data-v-20c03142]{padding-left:35px}.aioseo-input.aioseo-active input[data-v-20c03142]{border-color:#00aa63}.aioseo-input.aioseo-active input[data-v-20c03142]:active,.aioseo-input.aioseo-active input[data-v-20c03142]:focus{box-shadow:0 0 0 1px #00aa63}.aioseo-input.aioseo-active .append-icon[data-v-20c03142],.aioseo-input.aioseo-active .prepend-icon[data-v-20c03142]{color:#00aa63}.aioseo-input.aioseo-error input[data-v-20c03142]{border-color:#df2a4a}.aioseo-input.aioseo-error input[data-v-20c03142]:active,.aioseo-input.aioseo-error input[data-v-20c03142]:focus{box-shadow:0 0 0 1px #df2a4a}.aioseo-input.aioseo-error .append-icon[data-v-20c03142],.aioseo-input.aioseo-error .prepend-icon[data-v-20c03142]{color:#df2a4a}.aioseo-input.aioseo-warning input[data-v-20c03142]{border-color:#f18200}.aioseo-input.aioseo-warning input[data-v-20c03142]:active,.aioseo-input.aioseo-warning input[data-v-20c03142]:focus{box-shadow:0 0 0 1px #f18200}.aioseo-input.aioseo-warning .append-icon[data-v-20c03142],.aioseo-input.aioseo-warning .prepend-icon[data-v-20c03142]{color:#f18200}.aioseo-input .prepend-icon[data-v-20c03142]{position:absolute;top:0;right:10px;width:30px;height:100%;color:#d0d1d7;display:flex;align-items:center;z-index:1}.aioseo-input .prepend-icon svg[data-v-20c03142]{width:30px;height:30px}.aioseo-input .prepend-icon.small[data-v-20c03142]{width:20px}.aioseo-input .prepend-icon.small svg[data-v-20c03142]{width:10px;height:10px}.aioseo-input .prepend-icon.medium[data-v-20c03142]{width:15px}.aioseo-input .prepend-icon.medium svg[data-v-20c03142]{width:15px;height:15px}.aioseo-input .append-icon[data-v-20c03142]{position:absolute;top:0;left:10px;width:30px;height:100%;color:#d0d1d7;display:flex;align-items:center;z-index:1}.aioseo-input .append-icon svg[data-v-20c03142]{width:30px;height:30px}.aioseo-input .append-icon.small[data-v-20c03142]{width:10px}.aioseo-input .append-icon.medium[data-v-20c03142]{width:15px}.aioseo-input .append-icon.clickable[data-v-20c03142]{cursor:pointer;padding:0 5px;background:#f3f4f5;border:1px solid #d0d1d7;color:#434960;left:0;width:30px;border-radius:3px 0 0 3px}.aioseo-input .append-icon.clickable.small[data-v-20c03142]{width:15px}.aioseo-input .append-icon.clickable.medium[data-v-20c03142]{padding:0 10px;width:40px}.aioseo-phone-number{max-width:600px}.aioseo-phone-number label{display:none}.aioseo-phone-number .maz-input__input{height:40px;min-height:40px;padding-top:0!important;border:1px solid #d0d1d7}.aioseo-phone-number .maz-input__input:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-phone-number .country-selector{flex:0 0 140px;width:140px;min-width:140px;max-width:140px}.aioseo-phone-number .country-selector:hover{z-index:1}.aioseo-phone-number .country-selector>div.maz-base-component.maz-input.has-value.has-1-right-icon.maz-input--primary>input{padding-right:50px!important}.aioseo-phone-number .country-selector .maz-input.is-focused{border-color:#005ae0}.aioseo-phone-number .country-selector .maz-select__options-list__item.selected.keyboard-selected{background-color:#005ae0}.aioseo-phone-number .maz-phone-number-input__country-flag{right:20px;bottom:12px;z-index:auto}.aioseo-phone-number .maz-input__icon{z-index:auto}.aioseo-phone-number .maz-select__options-list input{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-phone-number .maz-input__input{border-radius:3px}.aioseo-phone-number.invalidNumber div.maz-flex-1>div>input{border-color:red}.aioseo-phone-number.invalidNumber div.maz-flex-1>div>input:focus{border-color:#df2a4a;box-shadow:0 0 0 1px #df2a4a}.aioseo-phone-number.validNumber div.maz-flex-1>div>input:focus{border-color:#00aa63;box-shadow:0 0 0 1px #00aa63}.aioseo-radio{display:inline-flex;align-items:center}.aioseo-radio .form-radio-wrapper{margin-left:10px;display:flex}.aioseo-radio.medium .form-radio{width:20px;height:20px}.aioseo-radio.medium .form-radio .fancy-radio svg{width:12px;height:12px}.aioseo-radio.medium.type-1 .form-radio span:before{height:18px;width:18px;line-height:20px}.aioseo-radio.medium.type-2 .form-radio span:before{height:16px;width:16px;line-height:20px}.aioseo-radio.medium.type-2 .form-radio span:after{height:6px;width:6px;right:6px;bottom:6px}.aioseo-radio .form-radio{position:relative;display:inline-block;width:28px;height:28px;color:#fff;vertical-align:bottom;text-align:center}.aioseo-radio .form-radio input{opacity:0}.aioseo-radio .form-radio input:checked+.fancy-radio{background:#005ae0;border-color:#005ae0}.aioseo-radio .form-radio input:checked+.fancy-radio:before{background:transparent}.aioseo-radio .form-radio input:checked+.fancy-radio:after{display:block}.aioseo-radio .form-radio input:disabled+.fancy-radio{cursor:default}.aioseo-radio .form-radio input:focus+.fancy-radio{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-radio .form-radio .fancy-radio{border-radius:50%}.aioseo-radio .form-radio .fancy-radio svg{color:#fff;width:16px;height:16px}.aioseo-radio .form-radio span{position:absolute;cursor:pointer;top:0;right:0;left:0;bottom:0;transition:.2s;border-radius:50%;display:flex;align-items:center;justify-content:center}.aioseo-radio .form-radio span:before{position:absolute;content:"";height:26px;width:26px;right:1px;bottom:1px;transition:.2s;font-size:18px;line-height:28px;border-radius:50%}.aioseo-radio.type-1 .form-radio span,.aioseo-radio.type-1 .form-radio span:before{background-color:#f3f4f5}.aioseo-radio.type-2 .form-radio span{border:1px solid #d0d1d7;background-color:#fff}.aioseo-radio.type-2 .form-radio span:before{background-color:#fff}.aioseo-radio.type-2 .form-radio span:after{display:none;position:absolute;content:"";height:10px;width:10px;right:8px;bottom:8px;background-color:#fff;transition:.2s;border-radius:50%}.aioseo-radio.disabled{cursor:default}.aioseo-radio.disabled.type-2 .form-radio input:checked+.fancy-radio{background-color:#e8e8eb;border-color:#d0d1d7}.aioseo-radio.disabled.type-2 .form-radio span,.aioseo-radio.disabled.type-2 .form-radio span:before{background-color:#e8e8eb}.aioseo-radio.disabled.type-2 .form-radio span:after{background-color:#8c8f9a}.aioseo-radio-toggle{display:flex;align-items:center;height:40px}.aioseo-radio-toggle div{height:100%}.aioseo-radio-toggle.inline{display:inline-flex}.aioseo-radio-toggle div:first-child{overflow:hidden;border-radius:0 3px 3px 0}.aioseo-radio-toggle div:first-child label{border-radius:0 3px 3px 0}.aioseo-radio-toggle div:last-child{overflow:hidden;border-radius:3px 0 0 3px}.aioseo-radio-toggle div:last-child label{border-radius:3px 0 0 3px}.aioseo-radio-toggle input{position:absolute!important;clip:rect(0,0,0,0);height:1px;width:1px;border:0;overflow:hidden}.aioseo-radio-toggle input:checked+label{background-color:#005ae0;color:#fff}.aioseo-radio-toggle input:checked+label.dark{background-color:#434960;color:#fff}.aioseo-radio-toggle label{height:100%;background-color:#e8e8eb;color:#141b38;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;flex-direction:column;transition:all .1s ease-in-out;position:relative;padding:11px 20px;font-weight:600}.aioseo-radio-toggle label.disabled{cursor:default;pointer-events:none;opacity:.5}.aioseo-radio-toggle label:hover{background-color:#dadadf;cursor:pointer}.aioseo-radio-toggle label p{position:absolute;bottom:15px;margin:0}.aioseo-radio-toggle.circle label{background:#fff;color:#8c8f9a}.aioseo-radio-toggle.circle input+label{border-radius:50%;width:36px;height:36px;padding:8px}.aioseo-radio-toggle.circle input:checked+label{background:#e8e8eb;color:#2c324c}.aioseo-select{height:48px}.aioseo-select.multiselect--disabled .multiselect__select{background:none}.aioseo-select .multiselect__select{display:flex;align-items:center;justify-content:center;min-height:46px}.aioseo-select .multiselect__select:before{display:none}.aioseo-select .multiselect__select svg.aioseo-caret{color:#141b38;width:18px;height:18px;transition:transform .3s}.aioseo-select .multiselect__tags{height:100%;border:1px solid #d0d1d7;border-radius:3px;display:flex;justify-content:center;flex-direction:column;padding:16px 16px 16px 40px}.aioseo-select .multiselect__tags .multiselect__spinner{height:calc(100% - 2px);border:2px solid transparent}.aioseo-select .multiselect__tags .multiselect__spinner:after,.aioseo-select .multiselect__tags .multiselect__spinner:before{border-top-color:#434960}.aioseo-select .multiselect__tags .multiselect__single{display:inline-flex;margin:0;padding:0;color:#141b38;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aioseo-select .multiselect__tags .multiselect__placeholder{color:#8c8f9a;font-size:16px;line-height:20px;margin:0;padding:0}.aioseo-select .multiselect__tags .multiselect__input{padding:0;margin:0 0 0 10px;border-radius:0;border:none;color:#141b38;min-height:auto;line-height:20px}.aioseo-select .multiselect__tags .multiselect__input:focus{outline:0;box-shadow:none;border:none}.aioseo-select .multiselect__tags .multiselect__input::-moz-placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__input:-ms-input-placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__input::placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__tags-wrap{display:flex;align-items:center;flex-wrap:wrap}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag{padding:0;display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:#434960;margin:0 0 0 3px;height:24px;background-color:#f3f4f5;flex-shrink:0}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-value{padding:0 10px 0 5px}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove{padding:0 10px;height:100%;cursor:pointer;background-color:#f3f4f5;display:flex;align-items:center}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove:hover{background-color:#434960;color:#fff}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove:hover svg.aioseo-close{color:#fff}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove svg.aioseo-close{color:#434960;width:10px;height:10px}.aioseo-select.multiselect--active .multiselect__tags-wrap{margin-bottom:7px}.aioseo-select.small{height:30px;min-height:30px}.aioseo-select.small .multiselect__tags{min-height:30px;padding:8px 8px 8px 38px}.aioseo-select.small .multiselect__tags .multiselect__placeholder{font-size:14px}.aioseo-select.small .multiselect__select{height:28px;min-height:28px}.aioseo-select.small .multiselect__input{font-size:14px}.aioseo-select.small .multiselect__content-wrapper li.multiselect__element .multiselect__option{font-size:14px;padding:8px;min-height:30px}.aioseo-select.medium{height:40px}.aioseo-select.medium .multiselect__tags{padding:7px 7px 7px 40px}.aioseo-select.medium .multiselect__select{min-height:38px}.aioseo-select.multiple{min-height:48px;height:auto}.aioseo-select.multiple.small{min-height:30px}.aioseo-select.multiple.medium{min-height:40px}.aioseo-select.multiselect--above .multiselect__content-wrapper{border-top:1px solid #d0d1d7;border-bottom:none}.aioseo-select .multiselect__content-wrapper{border:1px solid #d0d1d7;border-top:none;border-bottom-right-radius:3px;border-bottom-left-radius:3px;z-index:50;-webkit-overflow-scrolling:touch}.aioseo-select .multiselect__content-wrapper .multiselect__content{max-width:100%}.aioseo-select .multiselect__content-wrapper li.multiselect__element{margin:0;border-bottom:1px solid #e8e8eb}.aioseo-select .multiselect__content-wrapper li.multiselect__element.last{border-bottom:none}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option{color:#141b38;font-weight:700;font-size:16px;white-space:normal;line-height:1.4}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--highlight{background-color:#f2f7fd}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--highlight:after{background-color:#005ae0;color:#fff}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--selected{background-color:#f2f7fd}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--disabled{font-weight:400;background-color:#fff!important;color:#8c8f9a}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option .docLink{font-size:13px;float:left}.aioseo-textarea-autosize{width:100%;background-color:#fff;border:1px solid #d0d1d7;border-radius:4px;font-size:16px;padding:12px}.aioseo-toggle{display:inline-flex}.aioseo-toggle:active,.aioseo-toggle:focus{outline:2px solid transparent}.aioseo-toggle.disabled{pointer-events:none}.aioseo-toggle.disabled .toggle-content{opacity:.5}.aioseo-toggle .toggle-content{position:relative;display:inline-block;width:36px;height:20px;margin-left:10px}.aioseo-toggle .toggle-content input{display:none}.aioseo-toggle .toggle-content input:checked+.toggle-switch{border:1px solid #005ae0;background-color:#005ae0}.aioseo-toggle .toggle-content input:checked+.toggle-switch:focus{outline:2px solid transparent}.aioseo-toggle .toggle-content input:checked+.toggle-switch:before{background-color:#fff;transform:translateX(-15px)}.aioseo-toggle .toggle-content input:focus+.toggle-switch{box-shadow:0 0 1px #005ae0;outline:2px solid transparent}.aioseo-toggle .toggle-content .toggle-switch{position:absolute;cursor:pointer;top:0;right:0;left:0;bottom:0;background-color:#fff;border:1px solid #d0d1d7;border-radius:15px;transition:.2s}.aioseo-toggle .toggle-content .toggle-switch:before{position:absolute;content:"";height:14px;width:14px;right:3px;bottom:2px;background-color:#d0d1d7;border-radius:50%;transition:.2s}.aioseo-wp-table input[type=search],.aioseo-wp-table select{border-color:#d0d1d7}.aioseo-wp-table select:focus{border-color:#005ae0;color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-wp-table select:hover{color:#005ae0}.aioseo-wp-table input.button,.aioseo-wp-table input.button:hover{color:#005ae0;border-color:#005ae0}.aioseo-wp-table .header .subsubsub{color:#555d66;font-size:13px;font-weight:600}.aioseo-wp-table .header .subsubsub>span{display:inline-flex}.aioseo-wp-table .header .subsubsub .separator{margin:0 5px}.aioseo-wp-table .header .subsubsub .active{font-weight:700;color:#141b38}.aioseo-wp-table .header .subsubsub a{text-decoration:none}.aioseo-wp-table .header .subsubsub a:hover{text-decoration:underline}.aioseo-wp-table .header .search{display:flex;justify-content:flex-end}.aioseo-wp-table .header .search .aioseo-input{width:100%;max-width:215px;margin-left:6px}.aioseo-wp-table .header .pagination{color:#555d66}.aioseo-wp-table .header .pagination .button,.aioseo-wp-table .header .pagination input{margin-right:6px}.aioseo-wp-table .tablenav-pages .current-page{padding:0 8px 0 0}.aioseo-wp-table .wp-table{width:100%;position:relative}.aioseo-wp-table .wp-table .loader-overlay{position:absolute;top:46px;left:0;bottom:36px;right:0;background:rgba(0,0,0,.3);z-index:1;display:flex;align-items:center;justify-content:center}.aioseo-wp-table .wp-table .no-results{color:#8c8f9a;min-height:200px;display:flex;align-items:center;justify-content:center;font-weight:400;font-size:24px}.aioseo-wp-table .wp-table tr.even{background-color:#f9f9fa}.aioseo-wp-table .wp-table tr.enabled td,.aioseo-wp-table .wp-table tr.enabled td strong a{color:#141b38}.aioseo-wp-table .wp-table tr:not(.enabled):not(.edit-row) td,.aioseo-wp-table .wp-table tr:not(.enabled):not(.edit-row) td a.edit-link{color:#8c8f9a}.aioseo-wp-table .wp-table tr.edit-row th{padding:0 3px 0 0}.aioseo-wp-table .wp-table tr.edit-row td{padding:0 10px 0 30px}.aioseo-wp-table .wp-table tr td strong a{font-weight:400}.aioseo-wp-table .wp-table tr td .row-actions .edit a,.aioseo-wp-table .wp-table tr td strong a:hover{color:#005ae0}.aioseo-wp-table .wp-table tr td .row-actions .edit .trash a{color:#df2a4a}.aioseo-wp-table .wp-table tr td.edit-row-content .wrapper .border{padding:8px 0;border-top:1px solid #e8e8eb}.custom-rules[data-v-06a772d2]{width:100%}.custom-rules .rule-table[data-v-06a772d2]{margin-top:5px;border:1px solid #d0d1d7;border-radius:3px;width:100%;font-family:Helvetica;font-size:14px;font-style:normal;font-weight:400;line-height:21px;letter-spacing:0;text-align:right}.custom-rules .rule-table .rule[data-v-06a772d2]{padding:13px;background:#f9f9fa}.custom-rules .rule-table .rule.even[data-v-06a772d2]{background-color:#fff}.custom-rules .rule[data-v-06a772d2]{display:flex;flex-direction:row;align-items:center;padding-top:10px}.custom-rules .rule[data-v-06a772d2]:first-child{border-radius:3px 3px 0 0}.custom-rules .rule[data-v-06a772d2]:last-child{border-radius:0 0 3px 3px}.custom-rules .rule .rule-settings>.aioseo-select[data-v-06a772d2]:first-child{width:250px;min-width:250px}.custom-rules .rule .rule-settings[data-v-06a772d2]{display:flex;flex-direction:row;align-items:center;flex:1}.custom-rules .rule .rule-settings>[data-v-06a772d2]{margin:0 0 0 6px}.custom-rules .rule .rule-settings>.aioseo-toggle[data-v-06a772d2]{margin:0 4px 0 10px}.custom-rules .rule .actions[data-v-06a772d2],.custom-rules .rule .logical[data-v-06a772d2]{flex:0}.custom-rules svg[data-v-06a772d2]{width:14px;height:14px;cursor:pointer}.custom-rules svg.aioseo-trash[data-v-06a772d2]{color:#dadada}.custom-rules svg.aioseo-trash[data-v-06a772d2]:hover{color:#df2a4a}.custom-rules .aioseo-tooltip[data-v-06a772d2]{margin:0;display:flex}.custom-rules .aioseo-button svg[data-v-06a772d2]{color:#fff}.custom-rules .add-rule[data-v-06a772d2]{margin-top:10px}.custom-rules .add-rule svg[data-v-06a772d2]{margin-left:6px}.aioseo-add-redirection.edit-url{margin-bottom:30px}.aioseo-add-redirection.edit-url .urls{align-items:flex-start}.aioseo-add-redirection.edit-url .urls .url-arrow{margin:-8px 30px 0}.aioseo-add-redirection.edit-url .advanced-settings-link{text-decoration:underline;margin-top:21px}.aioseo-add-redirection.log-404 .urls .source{min-height:103px;align-items:flex-start}.aioseo-add-redirection .generic-error{margin-bottom:20px}.aioseo-add-redirection .aioseo-settings-row .settings-name .name{font-size:14px}.aioseo-add-redirection .urls{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}.aioseo-add-redirection .urls .break{flex-basis:100%;height:0}.aioseo-add-redirection .urls .url-arrow{width:36px;margin:-15px 30px 0;display:flex;align-items:center;justify-content:center}.aioseo-add-redirection .urls .url-arrow svg{height:103px;color:#005ae0}.aioseo-add-redirection .urls .source,.aioseo-add-redirection .urls .target{flex:1;display:flex;align-items:center}.aioseo-add-redirection .urls .source>*,.aioseo-add-redirection .urls .target>*{flex:1}.aioseo-add-redirection .urls .source .aioseo-input,.aioseo-add-redirection .urls .target .aioseo-input{margin-bottom:10px}.aioseo-add-redirection .urls .target .aioseo-description{height:30px}.aioseo-add-redirection .urls .target .append-icon{width:60px;justify-content:flex-end}.aioseo-add-redirection .urls .target .append-icon svg{max-width:16px;margin-left:5px}.aioseo-add-redirection .urls .target .append-icon svg:last-of-type{margin-left:0}.aioseo-add-redirection .urls .target .append-icon svg.aioseo-circle-check{color:#00aa63}.aioseo-add-redirection .urls .target .append-icon svg.aioseo-circle-close{color:#df2a4a}.aioseo-add-redirection .urls .target .target-url-error,.aioseo-add-redirection .urls .target .target-url-warning{margin-bottom:10px}.aioseo-add-redirection .settings{display:flex;flex-direction:column;align-items:center;margin-top:30px}.aioseo-add-redirection .settings .all-settings{width:100%}.aioseo-add-redirection .settings .all-settings .all-settings-content{display:flex;align-items:center;flex-wrap:wrap}.aioseo-add-redirection .settings .all-settings .all-settings-content .advanced-settings-link{margin:16px 16px 0 0;color:#8c8f9a}@media (max-width:767px){.aioseo-add-redirection .settings .all-settings .all-settings-content{align-items:start}}.aioseo-add-redirection .settings>.actions{align-self:flex-end;margin-top:-50px}.aioseo-add-redirection .settings>.actions.advanced{margin-top:-40px}.aioseo-add-redirection .settings .query-params,.aioseo-add-redirection .settings .redirect-type{margin-bottom:10px;flex:0 1 auto}.aioseo-add-redirection .settings .query-params .aioseo-select,.aioseo-add-redirection .settings .redirect-type .aioseo-select{margin-top:5px}.aioseo-add-redirection .settings .query-params{width:340px}.aioseo-add-redirection .settings .redirect-type{width:300px;margin-left:24px}.aioseo-add-redirection .settings .aioseo-button{align-self:flex-end}.aioseo-add-redirection .settings .cancel-edit-row{margin-right:10px}.aioseo-add-redirection-target-url,.aioseo-redirect-source-url{position:relative}.aioseo-redirect-source-url .aioseo-input input{padding-left:76px}.aioseo-redirect-source-url .aioseo-input .append-icon{width:60px;justify-content:flex-end}.aioseo-redirect-source-url .aioseo-input .append-icon svg{max-width:16px;margin-left:5px}.aioseo-redirect-source-url .aioseo-input .append-icon svg:last-of-type{margin-left:0}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear{color:#8c8f9a;cursor:pointer}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear.active,.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear:hover{color:#005ae0}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-circle-check{color:#00aa63}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-circle-close{color:#df2a4a}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash{color:#8c8f9a;cursor:pointer}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash.active,.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash:hover{color:#df2a4a}.aioseo-redirect-source-url .source-url-error,.aioseo-redirect-source-url .source-url-warning{margin-bottom:10px}.aioseo-redirect-source-url .source-url-options>div{padding-bottom:5px}.aioseo-redirect-source-url .source-url-options>div>div{margin-bottom:5px}.aioseo-add-redirection-url-results{display:flex;position:absolute;background:#fff;width:100%;max-height:300px;overflow:auto;border:1px solid #d0d1d7;border-radius:3px;z-index:50;right:1px;margin-top:-9px}.aioseo-add-redirection-url-results ul{display:inline-block;max-width:100%;list-style:none;padding:0;margin:0;min-width:100%;vertical-align:top}.aioseo-add-redirection-url-results ul li{margin:0;border-bottom:1px solid #e8e8eb;display:block}.aioseo-add-redirection-url-results ul li:last-of-type{border-bottom:none}.aioseo-add-redirection-url-results ul li>span{color:#141b38;font-weight:700;font-size:16px;white-space:normal;line-height:1.4;display:flex;padding:12px;min-height:40px;text-decoration:none;text-transform:none;vertical-align:middle;position:relative;cursor:pointer}.aioseo-add-redirection-url-results ul li>span:hover{background-color:#f2f7fd}.aioseo-add-redirection-url-results ul li>span:hover .option-title{color:#005ae0}.aioseo-add-redirection-url-results .option{flex:1}.aioseo-add-redirection-url-results .option .option-title{font-weight:500;display:flex;font-size:16px;color:#141b38}.aioseo-add-redirection-url-results .option .option-title>div{margin-left:5px}.aioseo-add-redirection-url-results .option .option-title>div:first-of-type{display:inline-block}.aioseo-add-redirection-url-results .option .option-title .search-term{font-weight:700}.aioseo-add-redirection-url-results .option .option-details{display:flex;align-items:center;font-size:14px;color:#8c8f9a}.aioseo-add-redirection-url-results .option .option-details span{margin-left:15px}.aioseo-add-redirection-url-results .option-permalink{display:flex;align-items:center}.aioseo-add-redirection-url-results .option-permalink svg.aioseo-external{width:15px;height:15px;color:#434960}.aioseo-add-template-tag{border-radius:3px;padding:5px 10px;color:#141b38;font-size:14px;border:1px solid #e8e8eb;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:600}.aioseo-add-template-tag:hover{background-color:#f3f4f5}.aioseo-add-template-tag svg.aioseo-plus{width:10px;height:10px;color:#005ae0}.aioseo-additional-pages .additional-pages-table{border:1px solid #d0d1d7;border-radius:3px;margin-bottom:20px}.aioseo-additional-pages .additional-pages-table .page-priority{max-width:110px}.aioseo-additional-pages .additional-pages-table .page-frequency{max-width:166px}.aioseo-additional-pages .additional-pages-table .page-last-modified{max-width:155px}.aioseo-additional-pages .additional-pages-table .page-actions{max-width:20px}.aioseo-additional-pages .additional-pages-table .page-actions .aioseo-tooltip{display:inline-block;margin:0}.aioseo-additional-pages .additional-pages-table .pages-header{height:50px;display:flex;font-size:14px;padding:0 30px;align-items:center;border-bottom:1px solid #d0d1d7}.aioseo-additional-pages .additional-pages-table .pages-header>div{flex:1 0 auto}.aioseo-additional-pages .additional-pages-table .pages-rows{font-size:14px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row{background-color:#fff;height:70px;display:flex;align-items:center;padding:0 30px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row:last-of-type{border-radius:0 0 3px 3px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row.even{background-color:#f9f9fa}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row>div{flex:1 0 auto;padding-left:30px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row>div:last-child{padding-left:0}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row .page-actions svg.aioseo-trash{width:20px;height:20px;color:#8c8f9a;cursor:pointer;transition:color .1s ease}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row .page-actions svg.aioseo-trash:hover{color:#df2a4a}.aioseo-additional-pages svg.aioseo-circle-plus{width:14px;height:14px;margin-left:10px}.aioseo-alert{position:relative;border-radius:3px;padding:24px;font-size:16px;color:#141b38;line-height:1.4}.aioseo-alert.small{padding:8px;font-size:13px}.aioseo-alert .aioseo-alert-close{cursor:pointer;position:absolute;top:-9px;left:-9px;width:18px;height:18px;border-radius:50%;padding:5px;display:inline-flex;justify-content:center;align-content:center}.aioseo-alert .aioseo-alert-close svg{width:100%;height:100%}.aioseo-alert.blue{border:1px solid #005ae0;background-color:#f2f7fd}.aioseo-alert.blue .aioseo-alert-close{background-color:#005ae0;color:#fff}.aioseo-alert.green{border:1px solid #00aa63;background-color:#f2fdf8}.aioseo-alert.green .aioseo-alert-close{background-color:#00aa63;color:#fff}.aioseo-alert.red{border:1px solid #df2a4a;background-color:#fbe9ec}.aioseo-alert.red .aioseo-alert-close{background-color:#df2a4a;color:#fff}.aioseo-alert.yellow{border:1px solid #f18200;background-color:#fcfae8}.aioseo-alert.yellow .aioseo-alert-close{background-color:#f18200;color:#fff}.aioseo-alert.no-border{border-width:0}.aioseo-alert.text-center{text-align:center}.aioseo-analyze-competitor-site-score{border:1px solid #00aa63;border-radius:3px;color:#00aa63;font-size:14px;padding:0 8px;height:24px;display:inline-flex;align-items:center;justify-content:center;margin-left:14px}.aioseo-analyze-competitor-site-score.red{color:#df2a4a;border-color:#df2a4a}.aioseo-analyze-competitor-site-score.orange{color:#f18200;border-color:#f18200}.aioseo-animated-dannie{display:flex;align-content:center;align-items:center;justify-content:center}.aioseo-animated-dannie svg{max-width:250px}.aioseo-api-bar{height:40px;background-color:#df2a4a;color:#fff;font-size:13px;padding:0 40px 0 14px}.aioseo-api-bar,.aioseo-api-bar .upgrade-text{display:flex;align-items:center;justify-content:center}.aioseo-api-bar .upgrade-text{flex:1}.aioseo-api-bar strong{font-weight:600}.aioseo-api-bar svg.aioseo-logo-gear{width:20px;height:20px;min-width:20px;margin-left:14px}.aioseo-api-bar svg.aioseo-close{cursor:pointer;width:12px;height:12px}.aioseo-api-bar a{color:#fff;text-decoration:underline}.aioseo-api-bar a:hover{text-decoration:none}@media screen and (max-width:782px){.aioseo-api-bar{padding:0 10px;height:60px}}.aioseo-attributes ul.aioseo-attributes-list[data-v-02af7dd2]{list-style:inside;list-style-type:disc;margin:20px 0 0}.aioseo-attributes ul.aioseo-attributes-list li[data-v-02af7dd2]{display:flex;margin-bottom:8px;align-items:flex-start}.aioseo-attributes ul.aioseo-attributes-list li div[data-v-02af7dd2]:first-of-type{flex:0 0 140px}.aioseo-blur{filter:blur(3px);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-card{color:#141b38;background-color:#fff;border:1px solid #e8e8eb;box-shadow:0 2px 5px rgba(0,0,0,.05);margin:30px 0}.aioseo-card.disabled .content{background:#f9f9fa;font-size:16px;line-height:24px}@media only screen and (max-width:782px){.aioseo-card{margin:20px 0}}.aioseo-card svg.aioseo-circle-question-mark{width:17px;height:17px;color:#8c8f99;transition:background-color .2s ease}.aioseo-card svg.aioseo-circle-question-mark:hover{color:#5a5c65}.aioseo-card .header{display:flex;align-items:center;height:70px;padding:0 30px;font-weight:600;font-size:18px;border-bottom:1px solid #e8e8eb}.aioseo-card .header .header-icon{display:flex}.aioseo-card .header .header-icon svg{width:24px;height:24px;margin-left:16px}.aioseo-card .header .text{flex:1 0 auto;display:flex;align-items:center}.aioseo-card .header .text svg.aioseo-circle-question-mark{cursor:pointer;width:17px;height:17px}.aioseo-card .header .text .aioseo-pro-badge{margin-right:10px}.aioseo-card .header .text .card-score{display:flex;flex:1;align-items:center;justify-content:flex-end;padding-left:18px;font-size:13px}.aioseo-card .header .text .card-score.green{color:#00aa63}.aioseo-card .header .text .card-score.orange{color:#f18200}.aioseo-card .header .text .card-score.red{color:#df2a4a}.aioseo-card .header .text .card-score svg{margin-left:7px}.aioseo-card .header svg.aioseo-caret{width:24px;height:24px;cursor:pointer;transform:rotate(180deg);transition:transform .3s}.aioseo-card .header svg.aioseo-caret.rotated{transform:rotate(90deg)}.aioseo-card .header svg.aioseo-close{width:14px;height:14px;cursor:pointer}.aioseo-card .content{padding:30px;position:relative}.aioseo-card div.aioseo-settings-row:last-child{margin-bottom:0;border-bottom:none;padding-bottom:0}.aioseo-copy-block{display:inline-flex}.aioseo-copy-block .message{background-color:#fff;min-height:56px;display:flex;align-items:center;border:1px solid #dcdde1;border-radius:0 3px 3px 0;padding:10px 24px;font-weight:600}.aioseo-copy-block .copy-tooltip{display:flex}.aioseo-copy-block .copy{background-color:#fff;min-height:56px;display:flex;align-items:center;border:1px solid #dcdde1;border-right-width:0;border-radius:3px 0 0 3px;padding:10px 16px;font-weight:600;cursor:pointer}.aioseo-copy-block .copy:hover svg.aioseo-copy{color:#a7a7a7}.aioseo-copy-block .copy svg.aioseo-copy{width:20px;height:20px;color:#dadada}.aioseo-copy-block .copy svg.aioseo-circle-check-solid{width:20px;height:20px;color:#00aa63}.aioseo-display-info .aioseo-box-toggle svg{margin-top:-15px;color:#434960}.aioseo-display-info svg.aioseo-new-page,.aioseo-display-info svg.aioseo-shortcode,.aioseo-display-info svg.aioseo-widget{width:100%;height:auto;max-width:60px}.aioseo-display-info svg.aioseo-gutenberg-block{width:59px;height:54px}.aioseo-display-info svg.aioseo-gutenberg-block rect{width:100%;width:56px;height:51px}.aioseo-display-info svg.aioseo-php{width:110px}.aioseo-display-info .copy-box,.aioseo-display-info .extra-box{margin-top:10px;padding:30px;border-radius:3px;background-color:#f9f9fa}.aioseo-display-info .copy-box .aioseo-description,.aioseo-display-info .extra-box .aioseo-description{margin:0}.aioseo-display-info .copy-box .aioseo-copy-block,.aioseo-display-info .extra-box .aioseo-copy-block{margin:20px 0 0}.aioseo-display-info .copy-box .advanced-settings-link,.aioseo-display-info .extra-box .advanced-settings-link{display:inline-block;padding-top:5px;margin:16px 16px 0 0;color:#8c8f9a;text-decoration:underline;font-size:13px}.aioseo-display-info .copy-box .advanced-settings-link:hover,.aioseo-display-info .extra-box .advanced-settings-link:hover{text-decoration:none}.aioseo-display-info .copy-box .advanced-settings,.aioseo-display-info .extra-box .advanced-settings{padding-top:20px}.aioseo-display-info .advanced-settings.advanced-settings-hidden{display:none}.aioseo-display-info .aioseo-tooltip{margin-right:0}.aioseo-exclude-posts{display:flex}.aioseo-facebook-preview{background-color:#f0f2f5;padding:30px;display:flex;align-items:center;justify-content:center}.aioseo-facebook-preview .facebook-post{width:100%;max-width:525px;border-radius:10px;box-shadow:0 2px 5px rgba(0,0,0,.1);background-color:#fff}.aioseo-facebook-preview .facebook-post .facebook-header{height:65px;padding:0 18px;display:flex;align-items:center}.aioseo-facebook-preview .facebook-post .facebook-header .profile-photo{overflow:hidden;width:40px;height:40px;border:1px solid #e8e8eb;border-radius:50%}.aioseo-facebook-preview .facebook-post .facebook-header .profile-photo img{height:100%;width:100%}.aioseo-facebook-preview .facebook-post .facebook-header .poster{margin-right:10px;flex:1 0 auto}.aioseo-facebook-preview .facebook-post .facebook-header .poster .poster-name{font-size:15px;color:#050505;font-weight:500}.aioseo-facebook-preview .facebook-post .facebook-header .poster .poster-date{color:#65676b;font-size:13px}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis{display:inline-flex;align-items:center}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div{background-color:#5e666f;width:4px;height:4px;border-radius:50%;margin:0 2px}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div:first-child{margin-right:0}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div:last-child{margin-left:0}.aioseo-facebook-preview .facebook-post .facebook-content{display:flex;flex-direction:column}.aioseo-facebook-preview .facebook-post .facebook-content img{width:100%;height:auto}.aioseo-facebook-preview .facebook-post .facebook-content.vertical{flex-direction:row}.aioseo-facebook-preview .facebook-post .facebook-content.vertical img{max-width:158px;max-height:158px;width:auto;height:auto}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description{flex:1;background-color:#f2f3f5;padding:9px 13px;color:#606770}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-domain{font-size:13px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-title{color:#1d2129;font-size:17px;font-weight:600;margin:5px 0}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-description{font-size:14px}.aioseo-facebook-preview .facebook-post .facebook-footer{height:24px}.aioseo-feature-card{height:100%;border:1px solid #e8e8eb;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.05);color:#141b38;display:flex;flex-direction:column}.aioseo-feature-card .feature-card-body{padding:30px 30px 20px;flex:1}.aioseo-feature-card .feature-card-body.static{padding:30px}.aioseo-feature-card .feature-card-body .feature-card-header{display:flex;align-items:center;font-size:18px;font-weight:600;margin-bottom:16px}.aioseo-feature-card .feature-card-body .feature-card-header img,.aioseo-feature-card .feature-card-body .feature-card-header svg{width:28px;height:28px;margin-left:10px}.aioseo-feature-card .feature-card-body .feature-card-description{color:#434960;font-size:15px}.aioseo-feature-card .feature-card-body .feature-card-description .learn-more{margin-top:10px}.aioseo-feature-card .feature-card-footer{padding:15px}.aioseo-feature-card .feature-card-footer:not(.upgrade-required){border:2px solid #fff;background-color:#f9f9fa;padding:12px;min-height:43px}.aioseo-feature-card .feature-card-footer .feature-card-install-activate{display:flex;align-items:center;justify-content:flex-end;height:30px;position:relative}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .aioseo-loading-spinner{position:absolute;right:0}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .status{font-weight:600;font-size:14px}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .aioseo-toggle .toggle-content{margin-left:0;margin-right:10px}.aioseo-feature-card .feature-card-footer .feature-card-upgrade-cta{display:flex;align-items:center;justify-content:flex-end}.aioseo-feature-card .feature-card-footer.installed .feature-card-install-activate .status{color:#8c8f9a}.aioseo-setup-wizard-container{margin-top:30px;margin-bottom:50px;padding:30px;color:#fff;position:relative;background-color:#005ae0}@media only screen and (max-width:782px){.aioseo-setup-wizard-container{margin-top:20px}}.aioseo-setup-wizard-container p{color:#fff}.aioseo-setup-wizard-container .getting-started-wrapper{display:flex}.aioseo-setup-wizard-container .getting-started-wrapper .video{flex:0 0 533px;margin:20px 20px 0}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper{padding-bottom:56.25%;margin-bottom:-60px;position:relative;height:0}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper iframe{width:100%;height:100%;position:absolute;top:0;right:0}@media only screen and (max-width:1350px){.aioseo-setup-wizard-container .getting-started-wrapper .video{flex:0 0 593px;margin:20px;align-self:center}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper{margin-bottom:0}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:100%;max-width:100%;justify-content:center}}@media only screen and (max-width:1300px){.aioseo-setup-wizard-container .getting-started-wrapper{flex-direction:row;flex-wrap:wrap}.aioseo-setup-wizard-container .getting-started-wrapper .video{margin:20px 0 -60px}.aioseo-setup-wizard-container .getting-started-wrapper .text,.aioseo-setup-wizard-container .getting-started-wrapper .video{flex-basis:100%;width:100%}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions{justify-content:center}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:inherit;max-width:inherit;justify-content:center}}@media only screen and (max-width:782px){.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:100%;max-width:100%;justify-content:center}}.aioseo-setup-wizard-container .aioseo-row{position:relative;z-index:1}.aioseo-setup-wizard-container .wizard-actions .aioseo-col{display:flex;align-items:center}.aioseo-setup-wizard-container .wizard-actions .aioseo-button svg{width:16px;height:16px;margin-left:10px}.aioseo-setup-wizard-container .setup-wizard-bg{width:100%;height:100%;overflow:hidden;z-index:0;position:absolute;top:0;right:0}.aioseo-setup-wizard-container .setup-wizard-bg svg.aioseo-setup-wizard-bg,.aioseo-setup-wizard-container .setup-wizard-bg svg.aioseo-setup-wizard-bg rect{width:auto;height:100%}.aioseo-setup-wizard-container .close-wizard{color:#fff;width:20px;height:20px;position:absolute;left:20px;top:20px;z-index:1;display:flex;align-items:center;justify-content:center}.aioseo-setup-wizard-container .close-wizard:hover{color:#ccc}.aioseo-setup-wizard-container .close-wizard svg.aioseo-close{width:12px;height:12px;cursor:pointer;color:#fff}.aioseo-setup-wizard-container .close-wizard svg.aioseo-close:hover{color:#dadada}.aioseo-setup-wizard-container p.how-to-get-started{margin:0}.aioseo-setup-wizard-container p.welcome-text{line-height:1.6}.aioseo-setup-wizard-container h2{color:#fff;line-height:1.4}.aioseo-setup-wizard-container a{color:#fff}.aioseo-setup-wizard-container svg.aioseo-book{width:20px;height:20px;margin:0 0 0 10px}.aioseo-setup-wizard-container .getting-started-video{padding-left:20px;margin-bottom:-60px;position:relative;height:0;padding-bottom:56.25%}.aioseo-setup-wizard-container .getting-started-video iframe{width:100%;height:100%;position:absolute;top:0;right:0}.aioseo-google-search-preview{padding:32px 30px;border:1px solid #e8e8eb}.aioseo-google-search-preview .domain{font-size:14px;line-height:1.3;color:#3c4043;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-google-search-preview .site-title{font-size:20px;line-height:1.3;color:#1a0dab;margin:3px 0}.aioseo-google-search-preview .meta-description{max-width:600px;font-size:14px;line-height:1.4;color:#52565a}.edit-post-sidebar .domain{font-size:13px}.edit-post-sidebar .site-title{font-size:16px}.edit-post-sidebar .meta-description{font-size:12px}.aioseo-modal-content .domain,.aioseo-modal-content .meta-description{font-size:14px}.aioseo-modal-content .site-title{font-size:20px}html:not([data-scroll="0"]) .aioseo-header{box-shadow:0 2px 5px rgba(0,0,0,.05);transition:box-shadow .6s}.aioseo-header{position:fixed;z-index:1051;top:0;left:0;right:0;background-color:#fff;height:72px;color:#141b38}.aioseo-header .mascot{width:35px;height:auto;margin-left:10px}.aioseo-header .aioseo-header-content{padding:0;display:flex;height:72px;align-items:center}.aioseo-header .aioseo-header-content a:focus{box-shadow:none}.aioseo-header .aioseo-header-content svg.aioseo-logo{height:26px;margin-left:10px}.aioseo-header .aioseo-header-content .spacer{display:inline-flex;width:26.25px;height:0;border:1px solid #d0d1d7;transform:rotate(72.26deg)}.aioseo-header .aioseo-header-content .page-name{display:inline-flex;margin-right:10px;font-size:18px;font-weight:400;flex:1 0 auto}.aioseo-header .aioseo-header-content .header-actions{display:flex}.aioseo-header .aioseo-header-content .header-actions .round{position:relative;background-color:#f3f4f5;border-radius:50%;width:40px;height:40px;display:flex;align-items:center;justify-content:center;margin-right:10px;cursor:pointer;transition:background-color .2s ease}.aioseo-header .aioseo-header-content .header-actions .round svg{width:20px;height:20px}.aioseo-header .aioseo-header-content .header-actions .round:hover{background-color:#e5e7e9}.aioseo-header .aioseo-header-content .header-actions .number{position:absolute;background-color:#df2a4a;width:16px;height:16px;font-weight:600;font-size:10px;color:#fff;top:-8px;right:50%;transform:translateX(50%);margin:0;-webkit-animation:bounce 2s 5;animation:bounce 2s 5}.aioseo-header .aioseo-header-content .header-actions .number:hover{background-color:#df2a4a}@-webkit-keyframes bounce{0%,25%,50%,75%,to{transform:translateX(50%) translateY(0)}40%{transform:translateX(50%) translateY(-8px)}60%{transform:translateX(50%) translateY(-4px)}}@keyframes bounce{0%,25%,50%,75%,to{transform:translateX(50%) translateY(0)}40%{transform:translateX(50%) translateY(-8px)}60%{transform:translateX(50%) translateY(-4px)}}body.modal-open{overflow:hidden}.aioseo-help{display:block;position:fixed;top:0;bottom:0;right:0;left:0;height:100%;width:100vw;background-color:#fff;color:#8c8f9a;opacity:0;max-height:100vh;overflow-y:auto;transition:opacity .3s ease-in 0s;z-index:-999}.aioseo-help.visible{opacity:1;z-index:100000}.aioseo-help .aioseo-help-header{background:#fff;width:100%;height:60px;z-index:1;padding:20px;display:flex}.aioseo-help .aioseo-help-header>.logo{flex:1}.aioseo-help .aioseo-help-docs{margin-bottom:25px;display:none}.aioseo-help .aioseo-help-docs li{padding:0 4px 14px 0;margin:0}.aioseo-help .aioseo-help-docs .aioseo-help-docs-viewall{margin:10px 0 0}.aioseo-help .aioseo-help-docs .aioseo-help-additional-docs{display:none}.aioseo-help .aioseo-help-docs .aioseo-help-additional-docs.opened{display:block}.aioseo-help .aioseo-help-docs .icon .aioseo-description{width:20px;margin-top:0;position:relative;top:5px;right:-5px;color:#8c8f9a}.aioseo-help .help-content{background-color:#fff;width:100%;max-width:740px;margin:0 auto 50px;padding:0 20px;box-sizing:border-box;z-index:1}.aioseo-help .help-content .aioseo-help-category{border-top:1px solid #e8e8eb;margin:0}.aioseo-help .help-content .aioseo-help-category:last-child{border-bottom:1px solid #e8e8eb}.aioseo-help .help-content .aioseo-help-category header{display:block;position:relative;cursor:pointer;width:100%;height:68px}.aioseo-help .help-content .aioseo-help-category header .title{display:block;font-size:16px;color:#8c8f9a;font-weight:600;padding:23px 30px 23px 11px}.aioseo-help .help-content .aioseo-help-category .folder-open{position:absolute;top:24px;width:20px;height:20px;color:#8c8f9a}.aioseo-help .help-content .aioseo-help-category .dashicons-arrow-right-alt2{position:absolute;top:20px;left:0;transition:transform .3s ease-out}.aioseo-help .help-content .aioseo-help-category.opened .aioseo-help-docs{display:block}.aioseo-help .help-content .aioseo-help-category.opened .dashicons-arrow-right-alt2{transform:rotate(-90deg)}.aioseo-help .help-content #aioseo-help-search{position:relative;background-color:#fff;text-align:center;top:0;padding:20px 0 50px}.aioseo-help .help-content #aioseo-help-result .aioseo-help-docs{display:block}.aioseo-help .help-content #aioseo-help-footer{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;margin:50px 0 0}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer{display:block}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block{box-sizing:border-box;max-width:325px;border:1px solid #8c8f9a;border-radius:6px;text-align:center}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block{max-width:100%}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block:first-child{margin-left:20px}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block:first-child{margin:0 0 20px}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a{display:block;padding:25px;text-decoration:none;color:#8c8f9a}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a h3{color:#8c8f9a}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a span{font-size:16px;color:#005ae0;text-decoration:underline}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a:hover span{text-decoration:none}.aioseo-help .help-content #aioseo-help-footer .aioseo-description,.aioseo-help .help-content #aioseo-help-footer .aioseo-support{width:48px;margin-top:0;color:#8c8f9a}#aioseo-help-logo{width:132px;height:26px;z-index:2}#aioseo-help-close{width:20px;height:20px;cursor:pointer;opacity:.7;transition:all .05s;z-index:2}@media screen and (max-width:750px){#aioseo-help-close{top:20px;left:20px}}.aioseo-html-tags-editor .no-access{margin-bottom:20px}.aioseo-html-tags-editor .aioseo-description.tags-description{margin:0 0 20px}.aioseo-html-tags-editor .add-tags{display:flex;align-items:center;margin-bottom:20px}.aioseo-html-tags-editor .add-tags div{margin-left:10px}.aioseo-html-tags-editor .add-tags a{font-size:14px}.aioseo-html-tags-editor .add-tags a.no-underline{padding-right:10px}.aioseo-loading-spinner{width:35px;height:35px;position:absolute}.aioseo-loading-spinner .double-bounce1,.aioseo-loading-spinner .double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#fff;opacity:.6;position:absolute;top:0;right:0;-webkit-animation:sk-bounce 1.3s ease-in-out infinite;animation:sk-bounce 1.3s ease-in-out infinite}.aioseo-loading-spinner.dark .double-bounce1,.aioseo-loading-spinner.dark .double-bounce2{background-color:#8c8f9a}.aioseo-loading-spinner .double-bounce2{-webkit-animation-delay:-.65s;animation-delay:-.65s}@-webkit-keyframes sk-bounce{0%,to{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}}@keyframes sk-bounce{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}body.vue-build{margin:0}body.vue-build .aioseo-app{min-height:calc(100vh - 88px)}body.vue-build .aioseo-app .aioseo-main{padding-bottom:30px}body.aioseo-setup-wizard{margin:0;padding:0}body.aioseo-setup-wizard .aioseo-app{min-height:100vh;width:100%}body[class*=page_aioseo] .aioseo-header,body[class*=page_aioseo] .aioseo-notifications .overlay{right:160px}body[class*=page_aioseo].folded .aioseo-header,body[class*=page_aioseo].folded .aioseo-notifications .overlay{right:36px}body[class*=page_aioseo] #wpcontent{padding:0;background-color:#f3f4f5}body[class*=page_aioseo] .update-nag{display:none}body[class*=page_aioseo].admin-bar .aioseo-app{min-height:calc(100vh - 185px)}body[class*=page_aioseo].admin-bar.aioseo-has-bar .aioseo-app{min-height:calc(100vh - 225px)}body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .notification-menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{top:32px}body[class*=page_aioseo] .aioseo-app{min-height:calc(100vh - 153px)}body[class*=page_aioseo].aioseo-has-bar .aioseo-app{min-height:calc(100vh - 193px)}body[class*=page_aioseo].aioseo-has-bar .aioseo-header{height:112px}@media screen and (max-width:782px){body[class*=page_aioseo].aioseo-has-bar .aioseo-header{height:132px}}@media screen and (max-width:960px){body[class*=page_aioseo].auto-fold .aioseo-header,body[class*=page_aioseo].auto-fold .aioseo-notifications .overlay{right:36px}}@media screen and (max-width:782px){body[class*=page_aioseo] #wpbody-content{padding-bottom:20px}body[class*=page_aioseo].admin-bar .aioseo-app{min-height:calc(100vh - 199px)}body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .notification-menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{top:46px}body[class*=page_aioseo] .aioseo-header,body[class*=page_aioseo] .aioseo-notifications .overlay,body[class*=page_aioseo].auto-fold .aioseo-header,body[class*=page_aioseo].auto-fold .aioseo-notifications .overlay{right:0}}@media screen and (max-width:600px){body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{position:absolute;top:46px}}body.aioseo-has-bar .aioseo-app .aioseo-main>.aioseo-container{margin-top:128px}@media screen and (max-width:782px){body.aioseo-has-bar .aioseo-app .aioseo-main>.aioseo-container{margin-top:148px}}.aioseo-app{box-sizing:border-box;background-color:#f3f4f5}.aioseo-app .route-fade-enter-active,.aioseo-app .route-fade-leave-active{transition:all .2s}.aioseo-app .route-fade-enter,.aioseo-app .route-fade-leave-active{opacity:0}.aioseo-app .route-fade-enter{transform:translateX(-30px)}.aioseo-app .route-fade-leave-active{transform:translateX(30px)}.aioseo-app *,.aioseo-app :after,.aioseo-app :before{box-sizing:inherit}.aioseo-app * :not(.aioseo-button):not(.aioseo-input),.aioseo-app :after :not(.aioseo-button):not(.aioseo-input),.aioseo-app :before :not(.aioseo-button):not(.aioseo-input){line-height:1.4}.aioseo-app p{font-size:16px}.aioseo-app a:not(.aioseo-button){color:#005ae0}.aioseo-app a:not(.aioseo-button).text-white{color:#fff}.aioseo-app a:not(.aioseo-button).no-underline,.aioseo-app a:not(.aioseo-button):hover{text-decoration:none}.aioseo-app h2{font-size:32px;margin:0}.aioseo-app .aioseo-main{height:100%}.aioseo-app .aioseo-main>.aioseo-container{margin-top:88px}.aioseo-app .aioseo-main .save-changes{display:flex;justify-content:flex-end}.aioseo-app .d-flex{display:flex}.aioseo-app .aioseo-section-description{font-size:16px;color:#141b38;line-height:1.8;padding-bottom:30px}.aioseo-app .aioseo-description-text{font-size:14px;line-height:1.8;color:#141b38}.aioseo-app .aioseo-description-text.aioseo-error{color:#df2a4a}.aioseo-app .aioseo-description{font-size:14px;line-height:1.8;margin:8px 0 0;color:#141b38}.aioseo-app .aioseo-description.no-margin{margin:0}.aioseo-app .aioseo-description.aioseo-error{color:#df2a4a}.aioseo-app .max-recommended-count{color:#434960;text-align:left;margin-top:10px;font-size:14px}.aioseo-app .max-recommended-count strong.error{color:#df2a4a}.aioseo-app .popper{text-align:right;font-size:12px;padding:20px;background-color:#fff;border:none;border-radius:3px;box-shadow:0 3px 4.8px 0 rgba(32,71,102,.27);z-index:9999;max-width:350px;line-height:1.4}.aioseo-app .popper.action{padding:8px 12px;background-color:#141b38;color:#fff}.aioseo-app .popper.action .popper__arrow{border-top-color:#141b38}.aioseo-app .popper[x-placement^=bottom]{box-shadow:0 -2px 4.8px 0 rgba(32,71,102,.27)}.aioseo-app .popper .aioseo-description{margin:0}.aioseo-app .aioseo-row-highlight{-webkit-animation-name:color;animation-name:color;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-iteration-count:2;animation-iteration-count:2}@-webkit-keyframes color{0%{background-color:#fff}50%{background-color:#00aa63}to{background-color:#fff}}@keyframes color{0%{background-color:#fff}50%{background-color:#00aa63}to{background-color:#fff}}.column-aioseo-details{position:relative}.aioseo-seo-site-score .aioseo-blur{display:flex;align-items:center}.aioseo-seo-site-score .aioseo-seo-site-score-cta{position:absolute;right:50%;top:50%;transform:translateX(50%) translateY(-50%);background-color:#fff;padding:24px 30px;border:1px solid #e8e8eb;box-shadow:0 2px 10px rgba(0,90,224,.2);color:#141b38;font-size:16px;font-weight:600;width:82%;max-width:500px;text-align:center}.aioseo-app .aioseo-upgrade-bar{height:40px;background-color:#00aa63;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;padding:0 40px 0 14px}.aioseo-app .aioseo-upgrade-bar .upgrade-text{display:flex;align-items:center;flex:1;justify-content:center}.aioseo-app .aioseo-upgrade-bar .upgrade-arrow{font-size:15px;text-decoration:none}.aioseo-app .aioseo-upgrade-bar .upgrade-arrow:hover{text-decoration:none}.aioseo-app .aioseo-upgrade-bar strong{font-weight:600}.aioseo-app .aioseo-upgrade-bar svg.aioseo-logo-gear{width:20px;height:20px;min-width:20px;margin-left:14px}.aioseo-app .aioseo-upgrade-bar svg.aioseo-close{cursor:pointer;width:12px;height:12px}.aioseo-app .aioseo-upgrade-bar a{color:#fff;text-decoration:underline}.aioseo-app .aioseo-upgrade-bar a:hover{text-decoration:none}@media screen and (max-width:782px){.aioseo-app .aioseo-upgrade-bar{padding:0 10px;height:60px}}.field-description[data-v-2bfc1de2]{display:inline-block;margin-top:10px;font-size:14px}.aioseo-address-wrapper[data-v-4bc9bbe6]{display:flex;max-width:500px}.field-description[data-v-4bc9bbe6]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-4bc9bbe6]{margin-top:8px}.field-description[data-v-a0a894b8]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-a0a894b8]{margin-top:8px}.field-description[data-v-4fb4e044]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-4fb4e044]{margin-top:8px}.field-description[data-v-85733554]{display:inline-block;margin-top:10px;font-size:14px}.field-description[data-v-515336a2]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-515336a2]{margin-top:8px}.field-description[data-v-78337de7]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-78337de7]{margin-top:8px}.aioseo-general-settings .more-tooltip-text strong{color:#00aa63}.aioseo-general-settings .license-cta-box{border-radius:3px;background-color:#f2f7fd;padding:20px;max-width:630px;margin:10px 0 30px}.aioseo-general-settings .license-cta-box a{color:#00aa63}.aioseo-general-settings .license-cta-box div{font-weight:600}.aioseo-general-settings .license-cta-box span{font-size:14px;font-style:italic}.aioseo-general-settings .license-key{margin-top:10px;display:flex;max-width:560px}.aioseo-general-settings .license-key .aioseo-input{margin-left:10px}.aioseo-app .aioseo-tabs.internal{margin-bottom:0}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation{margin-top:5px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button{height:60px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 25px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple .md-ripple-wave{display:none}.aioseo-app .aioseo-tabs.skinny .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 16px}.aioseo-app .md-tabs{display:flex;flex-direction:column}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation{margin-top:2px;background:transparent;display:flex;position:relative;justify-content:flex-start}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation.md-elevation-0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button{color:#141b38;max-width:264px;min-width:72px;height:60px;margin:0;border-radius:0;font-size:15px;font-weight:500;padding:0;display:inline-block;position:relative;overflow:hidden;outline:none;background:transparent;border:0;transition:.4s cubic-bezier(.4,0,.2,1);font-family:inherit;line-height:normal;text-decoration:none;vertical-align:top;white-space:nowrap}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:before{position:absolute;top:0;left:0;bottom:0;right:0;opacity:0;transition:.4s cubic-bezier(.4,0,.2,1);will-change:background-color,opacity;content:" "}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 18px;display:flex;justify-content:center;align-items:center;width:100%;height:100%;position:relative;overflow:hidden;-webkit-mask-image:radial-gradient(circle,#fff 100%,#000 0);mask-image:radial-gradient(circle,#fff 100%,#000 0)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple .md-button-content{position:static;z-index:2}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]){cursor:pointer}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]):active:before,.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]):hover:before{background-color:currentColor;opacity:.12}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button.md-active{color:#005ae0}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button.md-active:focus{outline:none;box-shadow:none}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator{height:2px;background-color:#005ae0;bottom:-2px;position:absolute;right:0;transform:translateZ(0);will-change:left,right}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator.md-tabs-indicator-left{transition:right .3s cubic-bezier(.4,0,.2,1),left .35s cubic-bezier(.4,0,.2,1)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator.md-tabs-indicator-right{transition:left .3s cubic-bezier(.4,0,.2,1),right .35s cubic-bezier(.4,0,.2,.1)}.aioseo-app .aioseo-tabs{display:flex;border-bottom:2px solid #e8e8eb;position:relative;margin-bottom:38px}.aioseo-app .aioseo-tabs .save-changes{position:absolute;left:0;bottom:10px}.aioseo-app .aioseo-tabs .tab-score{display:inline-flex;align-items:center;justify-content:flex-end;font-size:11px;font-weight:700;padding-right:12px}.aioseo-app .aioseo-tabs .tab-score.green{color:#00aa63}.aioseo-app .aioseo-tabs .tab-score.orange{color:#f18200}.aioseo-app .aioseo-tabs .tab-score.red{color:#df2a4a}.aioseo-app .aioseo-tabs .tab-score svg{display:inline;margin-left:7px}.aioseo-app .aioseo-mobile-tabs{position:relative;height:40px;margin-top:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.aioseo-app .aioseo-mobile-tabs .active-tab{color:#005ae0;padding-right:18px;min-height:100%;display:flex;align-items:center;cursor:pointer}.aioseo-app .aioseo-mobile-tabs .active-tab div{position:relative}.aioseo-app .aioseo-mobile-tabs .active-tab div span{height:2px;background-color:#005ae0;bottom:-7px;position:absolute;right:-18px;left:-18px;z-index:10}.aioseo-app .aioseo-mobile-tabs .active-tab svg.aioseo-caret{width:24px;height:24px;position:relative;top:6px;cursor:pointer;transition:transform .3s}.aioseo-app .aioseo-mobile-tabs .active-tab svg.aioseo-caret.rotated{transform:rotate(-180deg)}.aioseo-app .aioseo-mobile-tabs .tab-dropdown{border:1px solid #e8e8eb;border-top:none}.aioseo-app .aioseo-mobile-tabs .tab-links{background:#fff;position:relative;z-index:3;padding:8px;width:100%;max-width:300px}@media screen and (max-width:782px){.aioseo-app .aioseo-mobile-tabs .tab-links{max-width:100%}}.aioseo-app .aioseo-mobile-tabs .tab-links a{padding:10px;display:block;color:#141b38;text-decoration:none}.aioseo-app .aioseo-mobile-tabs .tab-links a:hover{color:#005ae0}.md-tooltip{background-color:#141b38!important;color:#fff!important;border-radius:2px;padding:6px 12px;font-size:14px}.md-tooltip:after{content:"";position:absolute;top:100%;right:50%;margin-right:-5px;border:5px solid transparent;border-top-color:#141b38}.modal-mask{position:fixed;z-index:9998;top:0;right:0;width:100%;height:100%;background-color:rgba(20,27,56,.3);display:table;transition:opacity .3s ease}@media screen and (max-width:520px){.modal-mask{display:block;top:46px}}.modal-mask .modal-wrapper{display:table-cell;vertical-align:middle}@media screen and (max-width:520px){.modal-mask .modal-wrapper{display:block;height:100%}}.modal-mask .modal-wrapper .modal-container{width:100%;max-width:750px;max-height:90vh;overflow-y:hidden;overflow-x:hidden;margin:0 auto;background-color:#fff;box-shadow:0 10px 30px rgba(0,0,0,.15);transition:all .3s ease}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container{width:100%;max-width:100%;max-height:calc(100vh - 46px);height:100%}}.modal-mask .modal-wrapper .modal-container .modal-header{color:#141b38;position:sticky;top:0;z-index:15;padding:0 40px 0 0;height:70px;font-size:20px;font-weight:700;line-height:1.4;border-bottom:1px solid #e8e8eb;background-color:#fff;display:flex;align-items:center}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container .modal-header{padding:15px 20px 0 0}}.modal-mask .modal-wrapper .modal-container .modal-header button.close{position:absolute;left:11px;top:11px;width:24px;height:24px;background-color:#fff;border:none;display:flex;align-items:center}.modal-mask .modal-wrapper .modal-container .modal-header button.close svg.aioseo-close{cursor:pointer;width:14px;height:14px}.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-post-general,.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-post-social{height:calc(90vh - 120px);max-height:600px;overflow-y:auto;overflow-x:hidden}.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-modal-content.has-padding{padding:40px}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container .aioseo-modal-content,.modal-mask .modal-wrapper .modal-container .aioseo-modal-content>.component-wrapper,.modal-mask .modal-wrapper .modal-container .modal-body,.modal-mask .modal-wrapper .modal-container .modal-body>div{height:100%}.modal-mask .modal-wrapper .modal-container .aioseo-modal-content>.component-wrapper{display:flex;align-items:flex-end}.modal-mask .modal-wrapper .modal-container .aioseo-post-general,.modal-mask .modal-wrapper .modal-container .aioseo-post-social{height:100%!important;max-height:100%!important;padding:20px!important}.modal-mask .modal-wrapper .modal-container .aioseo-post-general .mobile-radio-buttons,.modal-mask .modal-wrapper .modal-container .aioseo-post-social .mobile-radio-buttons{margin-bottom:0}.modal-mask .modal-wrapper .modal-container .aioseo-add-template-tag{display:none}.modal-mask .modal-wrapper .modal-container .tab-facebook .aioseo-settings-row:last-of-type,.modal-mask .modal-wrapper .modal-container .tab-twitter .aioseo-settings-row:last-of-type{margin-bottom:64px!important;padding-bottom:32px!important}}.modal-enter,.modal-leave-active{opacity:0}.modal-enter .modal-container,.modal-leave-active .modal-container{transform:scale(1.1)}.aioseo-notification>div .body .title .date{font-weight:400;color:#8c8f9a;font-size:12px}.aioseo-notification-cards .aioseo-notification:last-child>div{border-bottom:none;margin-bottom:none}.aioseo-notification-cards .no-notifications{display:flex;align-items:center;flex-direction:column;padding-top:100px;font-size:16px;color:#8c8f9a}.aioseo-notification-cards .no-notifications img{width:30%;height:auto}.aioseo-notification-cards .no-notifications .great-scott{margin:20px 0 10px;font-size:24px;font-weight:600;color:#434960}.aioseo-notification-cards .no-notifications .no-new-notifications{margin-bottom:10px}body.aioseo-show-notifications .aioseo-main{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-notifications a.dismiss{color:#8c8f9a;font-size:14px}.aioseo-notifications .notification-menu{height:100%;width:100%;max-width:570px;position:fixed;z-index:1053;top:0;left:0;bottom:0;background-color:#fff;overflow-x:hidden;transition:.5s}.aioseo-notifications .notification-menu .notification-header{height:70px;display:flex;align-items:center;padding:0 30px;color:#fff;background-color:#005ae0}.aioseo-notifications .notification-menu .notification-header .new-notifications{font-size:18px;font-weight:600}.aioseo-notifications .notification-menu .notification-header .dismissed-notifications{margin-right:25px;flex:1 1 auto}.aioseo-notifications .notification-menu .notification-header .dismissed-notifications a{font-size:14px;color:#fff}.aioseo-notifications .notification-menu .notification-header svg.aioseo-close{width:14px;height:14px;cursor:pointer}.aioseo-notifications .notification-menu .notification-header svg.aioseo-close:hover{color:#ccc}.aioseo-notifications .notification-menu .notification-cards{padding:30px;height:calc(100% - 192px);overflow:auto}.aioseo-notifications .notification-menu .notification-footer{height:90px;padding:30px;display:flex;align-items:center}.aioseo-notifications .notification-menu .notification-footer div.pagination{flex:1;display:flex;align-items:center}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number{font-size:13px;color:#141b38;background:#e8e8eb;height:30px;width:30px;display:flex;align-items:center;justify-content:center;border-radius:2px;margin-left:4px;cursor:pointer}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number:last-child{margin-left:0}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number.active,.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number:hover{color:#fff;background-color:#005ae0}.aioseo-notifications .overlay{position:fixed;z-index:1052;top:0;left:0;bottom:0;right:160px;background-color:#141b38;opacity:.5;transition:.5s}.aioseo-notifications .notifications-fade-enter-active,.aioseo-notifications .notifications-fade-leave-active{transition:opacity .5s}.aioseo-notifications .notifications-fade-enter,.aioseo-notifications .notifications-fade-leave-to{opacity:0}.aioseo-notifications .notifications-slide-enter-active,.aioseo-notifications .notifications-slide-leave-active{transition:all .5s ease-in-out}.aioseo-notifications .notifications-slide-enter,.aioseo-notifications .notifications-slide-leave-to{left:-570px}.aioseo-post-type-options-toggle{margin-top:20px}.aioseo-priority-score{max-width:350px}.aioseo-priority-score .header-row{font-size:14px}.aioseo-pro-badge{height:24px;border-radius:3px;background:#e8e8eb;color:#434960;font-size:14px;font-weight:600;display:inline-flex;padding:0 8px;align-items:center}.aioseo-score-settings{display:flex;align-items:center;padding-bottom:14px}.aioseo-score-settings svg{margin-left:7px}.aioseo-score-settings span{margin-left:12px}.aioseo-score-button{display:inline-block;padding:5px 8px;font-size:14px;font-weight:700;color:#a1a1a1;border:1px solid #a1a1a1;border-radius:3px}.aioseo-score-button.score-none,.aioseo-score-button.score-red{border-color:#df2a4a;color:#df2a4a!important}.aioseo-score-button.score-orange{border-color:#f18200;color:#f18200!important}.aioseo-score-button.score-green{border-color:#00aa63;color:#00aa63!important}.aioseo-score-button.classic-editor{background:#fff!important;display:inline-block!important;height:auto!important}.aioseo-score-button.classic-editor span{margin-left:0}.aioseo-seo-site-analysis-result{border:1px solid #dcdde1;margin-top:10px}.aioseo-seo-site-analysis-result .result-header{height:66px;padding:0 20px;display:flex;align-items:center}.aioseo-seo-site-analysis-result .result-header .result-icon{display:flex;align-items:center;margin-left:16px}.aioseo-seo-site-analysis-result .result-header .result-icon svg{width:24px;height:24px;color:#8c8f9a}.aioseo-seo-site-analysis-result .result-header .result-icon svg.passed{color:#00aa63}.aioseo-seo-site-analysis-result .result-header .result-icon svg.error{color:#df2a4a}.aioseo-seo-site-analysis-result .result-header .result-icon svg.warning{color:#005ae0}.aioseo-seo-site-analysis-result .result-header .result-content{font-size:16px;font-weight:600;flex:1}.aioseo-seo-site-analysis-result .result-header .result-toggle{width:30px;height:26px;border:1px solid #dcdde1;border-radius:3px;display:flex;align-items:center;justify-content:center;cursor:pointer}.aioseo-seo-site-analysis-result .result-header .result-toggle.active,.aioseo-seo-site-analysis-result .result-header .result-toggle:hover{background-color:#434960}.aioseo-seo-site-analysis-result .result-header .result-toggle.active svg,.aioseo-seo-site-analysis-result .result-header .result-toggle:hover svg{color:#fff}.aioseo-seo-site-analysis-result .result-header .result-toggle.active svg{transform:rotate(180deg)}.aioseo-seo-site-analysis-result .result-header .result-toggle svg{width:100%;max-width:20px;height:auto;color:#8c8f9a;transform:rotate(90deg);transition:transform .3s}.aioseo-seo-site-analysis-result .result-body{padding:0 60px 24px}.aioseo-seo-site-analysis-result .result-body .result-message{color:#434960;font-size:16px}.aioseo-seo-site-analysis-result .result-body .result-code-alt pre,.aioseo-seo-site-analysis-result .result-body .result-code pre{background:#f3f4f5;border-radius:3px;max-width:100%;padding:10px;overflow:auto}.aioseo-seo-site-analysis-result .result-body .result-code-alt pre code,.aioseo-seo-site-analysis-result .result-body .result-code pre code{padding:0;background:transparent}.aioseo-seo-site-analysis-result .result-body .result-code pre{white-space:pre-wrap}.aioseo-seo-site-analysis-result .result-body .result-action{margin-top:20px}.aioseo-seo-site-analysis-results .group-header{font-size:16px;font-weight:600}.aioseo-seo-site-analysis-results .group-header:not(:first-child){margin-top:30px}.aioseo-seo-site-analysis-results .group-keywords{display:flex;margin-top:5px;flex-wrap:wrap;align-items:center}.aioseo-seo-site-analysis-results .group-keywords .keyword{font-size:14px;color:#434960;font-weight:600;background:#f3f4f5;padding:9px 10px;border-radius:3px;margin:0 0 5px 10px}.aioseo-seo-site-analysis-results .group-keywords .keyword:first-child{font-size:20px}.aioseo-settings-row{margin-bottom:22px;padding-bottom:16px;border-bottom:1px solid #e8e8eb}.aioseo-settings-row.no-margin{margin-bottom:0}.aioseo-settings-row.small-padding{padding-bottom:5px}.aioseo-settings-row.medium-margin{margin-bottom:15px}.aioseo-settings-row.no-border{border:none}.aioseo-settings-row.no-side-margin{margin-right:0!important;margin-left:0!important}.aioseo-settings-row .settings-name{color:#141b38}.aioseo-settings-row .settings-name .name{font-weight:600;font-size:16px;display:flex;align-items:center}.aioseo-settings-row .settings-name .name.small-margin{margin-bottom:5px}.aioseo-settings-row .settings-name .name.align{line-height:40px}.aioseo-settings-row .settings-name .name.align-small{line-height:30px}.aioseo-settings-row .settings-name .name .aioseo-pro-badge{margin-right:10px}.aioseo-settings-row .settings-name .aioseo-description{margin-top:20px}.aioseo-settings-row .settings-content{font-size:16px}.aioseo-settings-row p.description{font-size:14px}.aioseo-separators{margin-top:-.5rem}.aioseo-separators .aioseo-col .separator{background-color:#f3f4f5;display:flex;align-items:center;justify-content:center;min-height:51px;font-weight:600;font-size:25px;border:1px solid #dcdde1;border-radius:3px;cursor:pointer}.aioseo-separators .aioseo-col .separator:hover{background-color:#e5e7e9}.aioseo-separators .aioseo-col .separator.active{background-color:#005ae0;border-color:#005ae0;color:#fff}.aioseo-separators .aioseo-col .separator.active:hover{background-color:#005ae0}.aioseo-separators .aioseo-col .show-more{height:100%;display:flex;align-items:center}.aioseo-separators .aioseo-col .show-more a{color:#8c8f9a}.aioseo-separators .aioseo-col .custom-separator{margin:20px 0;display:flex;align-items:center}.aioseo-separators .aioseo-col .custom-separator .aioseo-input{margin-right:10px;max-width:100px}.aioseo-sidebar-card .header{height:46px}.aioseo-sidebar-card .header:hover{cursor:pointer}.aioseo-sidebar-card .content{padding-bottom:8px!important}.aioseo-sidebar-card ul{margin-bottom:0}.aioseo-sidebar-card ul li{margin-bottom:16px;padding-right:25px}.aioseo-sidebar-card ul .description{margin:0}.aioseo-robots-meta .global-robots-settings{margin:0;padding-top:24px}.aioseo-robots-meta .global-robots-settings>.settings{padding:8px 0 16px}.aioseo-robots-meta .global-robots-settings-options{display:flex}.aioseo-robots-meta .global-robots-settings-options .max-snippet{margin-left:30px}.aioseo-robots-meta .global-robots-settings-options .max-snippet .aioseo-input{max-width:90px}.aioseo-robots-meta .global-robots-settings-options .max-video-preview{margin-left:30px}.aioseo-robots-meta .global-robots-settings-options .max-video-preview .aioseo-input{max-width:90px}.aioseo-robots-meta .global-robots-settings-options .max-image-preview .aioseo-select{min-width:155px}.aioseo-robots-meta .global-robots-settings-options>span{display:inline-block;margin-bottom:4px}@media screen and (max-width:782px){.aioseo-robots-meta .global-robots-settings-options{display:block}.aioseo-robots-meta .global-robots-settings-options .max-snippet,.aioseo-robots-meta .global-robots-settings-options .max-video-preview{margin-left:0;margin-bottom:20px}.aioseo-robots-meta .global-robots-settings-options>div .aioseo-input,.aioseo-robots-meta .global-robots-settings-options>div .aioseo-select{min-width:100%}}.edit-post-sidebar .global-robots-settings{padding-top:12px}.edit-post-sidebar .global-robots-settings>.settings{padding:4px 0 12px}.edit-post-sidebar .global-robots-settings>.settings label{font-size:16px}.edit-post-sidebar .global-robots-settings .robots-meta-title{padding-top:4px;display:inline-block}.edit-post-sidebar .global-robots-settings-options{flex-wrap:wrap}.edit-post-sidebar .max-snippet{margin-left:30px!important}.edit-post-sidebar .max-video-preview{margin-left:0!important}.edit-post-sidebar .max-image-preview{margin-top:20px!important}.aioseo-score-amount-wrapper{position:absolute;right:0;top:0;left:0;bottom:0;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#141b38;margin:20px}.aioseo-score-amount-wrapper .aioseo-score-amount .score{font-size:64px;font-weight:600}.aioseo-score-amount-wrapper .aioseo-score-amount .total{font-size:18px;color:#8c8f9a;padding-right:3px}.aioseo-score-amount-wrapper .score-description{max-width:80%;text-align:center;font-size:17px;font-weight:600;line-height:1.1}.aioseo-score-amount-wrapper .score-analyzing{margin-top:20px;font-size:30px}.aioseo-site-score-analyze{position:relative;display:flex;align-items:center;justify-content:center;flex:1}.aioseo-site-score-analyze .analyze-errors{text-align:center;margin-bottom:1em}.aioseo-site-score-analyze .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-left:5em}.aioseo-site-score-analyze .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-analyze .aioseo-seo-site-score-description h2{line-height:1.4}.aioseo-site-score-analyze .aioseo-seo-site-score-description svg.aioseo-book{width:20px;height:20px;margin:0 0 0 10px;color:#005ae0}.aioseo-site-score-analyze .aioseo-seo-site-score-description>div{font-size:16px;color:#141b38;margin-bottom:10px}.aioseo-site-score-analyze .aioseo-seo-site-score-description .links{margin-top:30px;font-size:14px;font-weight:600}.aioseo-site-score-analyze .aioseo-seo-site-score-description .links .no-underline{padding-right:5px}.aioseo-site-score-competitor{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column}.aioseo-site-score-competitor .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-left:1em}.aioseo-site-score-competitor .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations{margin:20px 0}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links){display:flex;align-items:center;font-size:14px;color:#141b38;font-weight:600;margin-bottom:10px}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round{position:relative;border-radius:50%;width:24px;min-width:24px;max-width:24px;height:24px;display:flex;align-items:center;justify-content:center;margin-left:10px;font-size:12px;color:#fff;font-weight:600}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.red{background-color:#df2a4a}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.blue{background-color:#005ae0}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.orange{background-color:#f18200}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.green{background-color:#00aa63}.aioseo-site-score-competitor .refresh-results .aioseo-refresh{width:14px;height:14px;margin-left:10px}.aioseo-site-score-competitor .mobile-snapshot{margin-top:60px;max-width:250px}.aioseo-site-score-competitor .mobile-snapshot div{font-weight:600;font-size:16px;margin-bottom:10px}.aioseo-site-score-competitor .mobile-snapshot img{width:100%;height:auto}.aioseo-site-score-dashboard{position:relative;display:flex;align-items:center;justify-content:center}.aioseo-site-score-dashboard .analyze-errors{text-align:center;margin-bottom:1em}.aioseo-site-score-dashboard .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-left:1em}.aioseo-site-score-dashboard .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links){display:flex;align-items:center;font-size:14px;color:#141b38;font-weight:600;margin-bottom:10px}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round{position:relative;border-radius:50%;width:24px;min-width:24px;max-width:24px;height:24px;display:flex;align-items:center;justify-content:center;margin-left:10px;font-size:12px;color:#fff;font-weight:600}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.red{background-color:#df2a4a}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.blue{background-color:#005ae0}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.orange{background-color:#f18200}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.green{background-color:#00aa63}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations .links{margin-top:30px;font-size:14px;font-weight:600}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations .links .no-underline{padding-right:5px}.aioseo-social-profiles .same-username .use-same{padding:30px;background:#f9f9fa}.aioseo-social-profiles .same-username .use-same .aioseo-checkbox{font-size:16px}.aioseo-social-profiles .aioseo-social-profile-list,.aioseo-social-profiles .same-username .use-same .aioseo-settings-row,.aioseo-social-profiles .same-username .use-same .profiles{margin-top:20px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile{margin-bottom:0;padding-bottom:0;border-bottom:none}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .profile-error{margin-top:10px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .name{margin-bottom:0}.aioseo-social-profiles .aioseo-social-profile-list .social-profile img{height:16px;width:auto;margin-left:10px}.aioseo-tooltip{margin-right:14px;display:inline-flex}.aioseo-tooltip,.aioseo-twitter-preview{align-items:center;justify-content:center}.aioseo-twitter-preview{background-color:#f0f2f5;padding:30px;display:flex}.aioseo-twitter-preview .twitter-post{width:100%;max-width:500px;border-radius:5px;border:1px solid #e1e8ed;background-color:#fff}.aioseo-twitter-preview .twitter-post .twitter-header{height:65px;padding:0 18px;display:flex;align-items:center}.aioseo-twitter-preview .twitter-post .twitter-header .profile-photo{overflow:hidden;width:40px;height:40px;border:1px solid #e8e8eb;border-radius:50%}.aioseo-twitter-preview .twitter-post .twitter-header .profile-photo img{height:100%;width:100%}.aioseo-twitter-preview .twitter-post .twitter-header .poster{margin-right:10px;flex:1 0 auto}.aioseo-twitter-preview .twitter-post .twitter-header .poster .poster-name{font-size:15px;color:#1c2022;font-weight:600}.aioseo-twitter-preview .twitter-post .twitter-header .poster .poster-username{color:#697882;font-weight:500;font-size:13px}.aioseo-twitter-preview .twitter-post .twitter-container{padding:0 20px 20px}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content{flex-direction:row}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content .twitter-image-preview{display:flex;align-items:center;justify-content:center;background-color:#e1e8ed;min-width:125px;min-height:125px;background-size:cover;background-repeat:no-repeat;background-position:50%}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content .twitter-image-preview svg.aioseo-book{width:50px;height:50px;color:#8999a5}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content{border-radius:10px;overflow:hidden;display:flex;flex-direction:column;border:1px solid #e1e8ed}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content img{width:100%;height:auto}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description{padding:18px;color:#1c2022}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-domain{font-size:14px;color:#8899a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-title{font-size:15px;font-weight:600}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-description{font-size:14px;margin:5px 0}.aioseo-col .reverse{flex-direction:column-reverse}.aioseo-col.col-xs,.aioseo-col.col-xs-1,.aioseo-col.col-xs-2,.aioseo-col.col-xs-3,.aioseo-col.col-xs-4,.aioseo-col.col-xs-5,.aioseo-col.col-xs-6,.aioseo-col.col-xs-7,.aioseo-col.col-xs-8,.aioseo-col.col-xs-9,.aioseo-col.col-xs-10,.aioseo-col.col-xs-11,.aioseo-col.col-xs-12,.aioseo-col.col-xs-offset-0,.aioseo-col.col-xs-offset-1,.aioseo-col.col-xs-offset-2,.aioseo-col.col-xs-offset-3,.aioseo-col.col-xs-offset-4,.aioseo-col.col-xs-offset-5,.aioseo-col.col-xs-offset-6,.aioseo-col.col-xs-offset-7,.aioseo-col.col-xs-offset-8,.aioseo-col.col-xs-offset-9,.aioseo-col.col-xs-offset-10,.aioseo-col.col-xs-offset-11,.aioseo-col.col-xs-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-xs{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-xs-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-xs-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-xs-3{flex-basis:25%;max-width:25%}.aioseo-col.col-xs-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-xs-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-xs-6{flex-basis:50%;max-width:50%}.aioseo-col.col-xs-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-xs-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-xs-9{flex-basis:75%;max-width:75%}.aioseo-col.col-xs-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-xs-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-xs-12{flex-basis:100%;max-width:100%}.aioseo-col.col-xs-offset-0{margin-right:0}.aioseo-col.col-xs-offset-1{margin-right:8.33333333%}.aioseo-col.col-xs-offset-2{margin-right:16.66666667%}.aioseo-col.col-xs-offset-3{margin-right:25%}.aioseo-col.col-xs-offset-4{margin-right:33.33333333%}.aioseo-col.col-xs-offset-5{margin-right:41.66666667%}.aioseo-col.col-xs-offset-6{margin-right:50%}.aioseo-col.col-xs-offset-7{margin-right:58.33333333%}.aioseo-col.col-xs-offset-8{margin-right:66.66666667%}.aioseo-col.col-xs-offset-9{margin-right:75%}.aioseo-col.col-xs-offset-10{margin-right:83.33333333%}.aioseo-col.col-xs-offset-11{margin-right:91.66666667%}.aioseo-col.first-xs{order:-1}.aioseo-col.last-xs{order:1}.aioseo-col.text-xs-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-xs-center{text-align:center!important;justify-content:center}.aioseo-col.text-xs-right{text-align:left!important;justify-content:flex-end}.aioseo-col.p-0{padding:0!important}.aioseo-col.pt-0,.aioseo-col.py-0{padding-top:0!important}.aioseo-col.pr-0,.aioseo-col.px-0{padding-left:0!important}.aioseo-col.pb-0,.aioseo-col.py-0{padding-bottom:0!important}.aioseo-col.pl-0,.aioseo-col.px-0{padding-right:0!important}.aioseo-col.p-1{padding:.25rem!important}.aioseo-col.pt-1,.aioseo-col.py-1{padding-top:.25rem!important}.aioseo-col.pr-1,.aioseo-col.px-1{padding-left:.25rem!important}.aioseo-col.pb-1,.aioseo-col.py-1{padding-bottom:.25rem!important}.aioseo-col.pl-1,.aioseo-col.px-1{padding-right:.25rem!important}.aioseo-col.p-2{padding:.5rem!important}.aioseo-col.pt-2,.aioseo-col.py-2{padding-top:.5rem!important}.aioseo-col.pr-2,.aioseo-col.px-2{padding-left:.5rem!important}.aioseo-col.pb-2,.aioseo-col.py-2{padding-bottom:.5rem!important}.aioseo-col.pl-2,.aioseo-col.px-2{padding-right:.5rem!important}.aioseo-col.p-3{padding:1rem!important}.aioseo-col.pt-3,.aioseo-col.py-3{padding-top:1rem!important}.aioseo-col.pr-3,.aioseo-col.px-3{padding-left:1rem!important}.aioseo-col.pb-3,.aioseo-col.py-3{padding-bottom:1rem!important}.aioseo-col.pl-3,.aioseo-col.px-3{padding-right:1rem!important}.aioseo-col.p-4{padding:1.5rem!important}.aioseo-col.pt-4,.aioseo-col.py-4{padding-top:1.5rem!important}.aioseo-col.pr-4,.aioseo-col.px-4{padding-left:1.5rem!important}.aioseo-col.pb-4,.aioseo-col.py-4{padding-bottom:1.5rem!important}.aioseo-col.pl-4,.aioseo-col.px-4{padding-right:1.5rem!important}.aioseo-col.p-5{padding:3rem!important}.aioseo-col.pt-5,.aioseo-col.py-5{padding-top:3rem!important}.aioseo-col.pr-5,.aioseo-col.px-5{padding-left:3rem!important}.aioseo-col.pb-5,.aioseo-col.py-5{padding-bottom:3rem!important}.aioseo-col.pl-5,.aioseo-col.px-5{padding-right:3rem!important}@media only screen and (min-width:782px){.aioseo-col.col-sm,.aioseo-col.col-sm-1,.aioseo-col.col-sm-2,.aioseo-col.col-sm-3,.aioseo-col.col-sm-4,.aioseo-col.col-sm-5,.aioseo-col.col-sm-6,.aioseo-col.col-sm-7,.aioseo-col.col-sm-8,.aioseo-col.col-sm-9,.aioseo-col.col-sm-10,.aioseo-col.col-sm-11,.aioseo-col.col-sm-12,.aioseo-col.col-sm-offset-0,.aioseo-col.col-sm-offset-1,.aioseo-col.col-sm-offset-2,.aioseo-col.col-sm-offset-3,.aioseo-col.col-sm-offset-4,.aioseo-col.col-sm-offset-5,.aioseo-col.col-sm-offset-6,.aioseo-col.col-sm-offset-7,.aioseo-col.col-sm-offset-8,.aioseo-col.col-sm-offset-9,.aioseo-col.col-sm-offset-10,.aioseo-col.col-sm-offset-11,.aioseo-col.col-sm-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-sm{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-sm-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-sm-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-sm-3{flex-basis:25%;max-width:25%}.aioseo-col.col-sm-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-sm-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-sm-6{flex-basis:50%;max-width:50%}.aioseo-col.col-sm-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-sm-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-sm-9{flex-basis:75%;max-width:75%}.aioseo-col.col-sm-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-sm-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-sm-12{flex-basis:100%;max-width:100%}.aioseo-col.col-sm-offset-0{margin-right:0}.aioseo-col.col-sm-offset-1{margin-right:8.33333333%}.aioseo-col.col-sm-offset-2{margin-right:16.66666667%}.aioseo-col.col-sm-offset-3{margin-right:25%}.aioseo-col.col-sm-offset-4{margin-right:33.33333333%}.aioseo-col.col-sm-offset-5{margin-right:41.66666667%}.aioseo-col.col-sm-offset-6{margin-right:50%}.aioseo-col.col-sm-offset-7{margin-right:58.33333333%}.aioseo-col.col-sm-offset-8{margin-right:66.66666667%}.aioseo-col.col-sm-offset-9{margin-right:75%}.aioseo-col.col-sm-offset-10{margin-right:83.33333333%}.aioseo-col.col-sm-offset-11{margin-right:91.66666667%}.aioseo-col.first-sm{order:-1}.aioseo-col.last-sm{order:1}.aioseo-col.text-sm-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-sm-center{text-align:center!important;justify-content:center}.aioseo-col.text-sm-right{text-align:left!important;justify-content:flex-end}}@media only screen and (min-width:912px){.aioseo-col.col-md,.aioseo-col.col-md-1,.aioseo-col.col-md-2,.aioseo-col.col-md-3,.aioseo-col.col-md-4,.aioseo-col.col-md-5,.aioseo-col.col-md-6,.aioseo-col.col-md-7,.aioseo-col.col-md-8,.aioseo-col.col-md-9,.aioseo-col.col-md-10,.aioseo-col.col-md-11,.aioseo-col.col-md-12,.aioseo-col.col-md-offset-0,.aioseo-col.col-md-offset-1,.aioseo-col.col-md-offset-2,.aioseo-col.col-md-offset-3,.aioseo-col.col-md-offset-4,.aioseo-col.col-md-offset-5,.aioseo-col.col-md-offset-6,.aioseo-col.col-md-offset-7,.aioseo-col.col-md-offset-8,.aioseo-col.col-md-offset-9,.aioseo-col.col-md-offset-10,.aioseo-col.col-md-offset-11,.aioseo-col.col-md-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-md{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-md-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-md-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-md-3{flex-basis:25%;max-width:25%}.aioseo-col.col-md-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-md-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-md-6{flex-basis:50%;max-width:50%}.aioseo-col.col-md-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-md-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-md-9{flex-basis:75%;max-width:75%}.aioseo-col.col-md-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-md-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-md-12{flex-basis:100%;max-width:100%}.aioseo-col.col-md-offset-0{margin-right:0}.aioseo-col.col-md-offset-1{margin-right:8.33333333%}.aioseo-col.col-md-offset-2{margin-right:16.66666667%}.aioseo-col.col-md-offset-3{margin-right:25%}.aioseo-col.col-md-offset-4{margin-right:33.33333333%}.aioseo-col.col-md-offset-5{margin-right:41.66666667%}.aioseo-col.col-md-offset-6{margin-right:50%}.aioseo-col.col-md-offset-7{margin-right:58.33333333%}.aioseo-col.col-md-offset-8{margin-right:66.66666667%}.aioseo-col.col-md-offset-9{margin-right:75%}.aioseo-col.col-md-offset-10{margin-right:83.33333333%}.aioseo-col.col-md-offset-11{margin-right:91.66666667%}.aioseo-col.first-md{order:-1}.aioseo-col.last-md{order:1}.aioseo-col.text-md-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-md-center{text-align:center!important;justify-content:center}.aioseo-col.text-md-right{text-align:left!important;justify-content:flex-end}}@media only screen and (min-width:1042px){.aioseo-col.col-lg,.aioseo-col.col-lg-1,.aioseo-col.col-lg-2,.aioseo-col.col-lg-3,.aioseo-col.col-lg-4,.aioseo-col.col-lg-5,.aioseo-col.col-lg-6,.aioseo-col.col-lg-7,.aioseo-col.col-lg-8,.aioseo-col.col-lg-9,.aioseo-col.col-lg-10,.aioseo-col.col-lg-11,.aioseo-col.col-lg-12,.aioseo-col.col-lg-offset-0,.aioseo-col.col-lg-offset-1,.aioseo-col.col-lg-offset-2,.aioseo-col.col-lg-offset-3,.aioseo-col.col-lg-offset-4,.aioseo-col.col-lg-offset-5,.aioseo-col.col-lg-offset-6,.aioseo-col.col-lg-offset-7,.aioseo-col.col-lg-offset-8,.aioseo-col.col-lg-offset-9,.aioseo-col.col-lg-offset-10,.aioseo-col.col-lg-offset-11,.aioseo-col.col-lg-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-lg{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-lg-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-lg-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-lg-3{flex-basis:25%;max-width:25%}.aioseo-col.col-lg-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-lg-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-lg-6{flex-basis:50%;max-width:50%}.aioseo-col.col-lg-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-lg-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-lg-9{flex-basis:75%;max-width:75%}.aioseo-col.col-lg-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-lg-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-lg-12{flex-basis:100%;max-width:100%}.aioseo-col.col-lg-offset-0{margin-right:0}.aioseo-col.col-lg-offset-1{margin-right:8.33333333%}.aioseo-col.col-lg-offset-2{margin-right:16.66666667%}.aioseo-col.col-lg-offset-3{margin-right:25%}.aioseo-col.col-lg-offset-4{margin-right:33.33333333%}.aioseo-col.col-lg-offset-5{margin-right:41.66666667%}.aioseo-col.col-lg-offset-6{margin-right:50%}.aioseo-col.col-lg-offset-7{margin-right:58.33333333%}.aioseo-col.col-lg-offset-8{margin-right:66.66666667%}.aioseo-col.col-lg-offset-9{margin-right:75%}.aioseo-col.col-lg-offset-10{margin-right:83.33333333%}.aioseo-col.col-lg-offset-11{margin-right:91.66666667%}.aioseo-col.first-lg{order:-1}.aioseo-col.last-lg{order:1}.aioseo-col.text-lg-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-lg-center{text-align:center!important;justify-content:center}.aioseo-col.text-lg-right{text-align:left!important;justify-content:flex-end}}@media only screen and (min-width:1140px){.aioseo-col.col-xl,.aioseo-col.col-xl-1,.aioseo-col.col-xl-2,.aioseo-col.col-xl-3,.aioseo-col.col-xl-4,.aioseo-col.col-xl-5,.aioseo-col.col-xl-6,.aioseo-col.col-xl-7,.aioseo-col.col-xl-8,.aioseo-col.col-xl-9,.aioseo-col.col-xl-10,.aioseo-col.col-xl-11,.aioseo-col.col-xl-12,.aioseo-col.col-xl-offset-0,.aioseo-col.col-xl-offset-1,.aioseo-col.col-xl-offset-2,.aioseo-col.col-xl-offset-3,.aioseo-col.col-xl-offset-4,.aioseo-col.col-xl-offset-5,.aioseo-col.col-xl-offset-6,.aioseo-col.col-xl-offset-7,.aioseo-col.col-xl-offset-8,.aioseo-col.col-xl-offset-9,.aioseo-col.col-xl-offset-10,.aioseo-col.col-xl-offset-11,.aioseo-col.col-xl-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-xl{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-xl-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-xl-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-xl-3{flex-basis:25%;max-width:25%}.aioseo-col.col-xl-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-xl-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-xl-6{flex-basis:50%;max-width:50%}.aioseo-col.col-xl-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-xl-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-xl-9{flex-basis:75%;max-width:75%}.aioseo-col.col-xl-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-xl-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-xl-12{flex-basis:100%;max-width:100%}.aioseo-col.col-xl-offset-0{margin-right:0}.aioseo-col.col-xl-offset-1{margin-right:8.33333333%}.aioseo-col.col-xl-offset-2{margin-right:16.66666667%}.aioseo-col.col-xl-offset-3{margin-right:25%}.aioseo-col.col-xl-offset-4{margin-right:33.33333333%}.aioseo-col.col-xl-offset-5{margin-right:41.66666667%}.aioseo-col.col-xl-offset-6{margin-right:50%}.aioseo-col.col-xl-offset-7{margin-right:58.33333333%}.aioseo-col.col-xl-offset-8{margin-right:66.66666667%}.aioseo-col.col-xl-offset-9{margin-right:75%}.aioseo-col.col-xl-offset-10{margin-right:83.33333333%}.aioseo-col.col-xl-offset-11{margin-right:91.66666667%}.aioseo-col.first-xl{order:-1}.aioseo-col.last-xl{order:1}.aioseo-col.text-xl-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-xl-center{text-align:center!important;justify-content:center}.aioseo-col.text-xl-right{text-align:left!important;justify-content:flex-end}}.aioseo-container,.aioseo-container-fluid{margin-left:auto;margin-right:auto}.aioseo-container{padding:0 20px}.aioseo-container-fluid.hero,.aioseo-container.hero{min-height:100vh;display:flex;justify-content:center;align-items:center}.aioseo-container-fluid{padding-left:2rem;padding-right:2rem}@media only screen and (min-width:782px){.aioseo-container{padding:0 30px}}@media only screen and (min-width:1042px){.aioseo-container{max-width:80rem}.aioseo-container.full-width{max-width:100%}.aioseo-container.small{max-width:810px}}.aioseo-masonry{-moz-column-count:0;column-count:0;-moz-column-gap:20px;column-gap:20px;counter-reset:brick-counter}.aioseo-masonry>*{box-sizing:border-box;-moz-column-break-inside:avoid;break-inside:avoid;counter-increment:brick-counter;margin-bottom:20px}@media only screen and (min-width:782px){.aioseo-masonry{-moz-column-count:1;column-count:1}}@media only screen and (min-width:912px){.aioseo-masonry{-moz-column-count:2;column-count:2}}@media only screen and (min-width:1042px){.aioseo-masonry{-moz-column-count:3;column-count:3}}.aioseo-row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap;margin-left:-.5rem;margin-right:-.5rem}.aioseo-row.reverse{flex-direction:row-reverse}.aioseo-row.start-xs{justify-content:flex-start;text-align:start}.aioseo-row.center-xs{justify-content:center;text-align:center}.aioseo-row.end-xs{justify-content:flex-end;text-align:end}.aioseo-row.top-xs{align-items:flex-start}.aioseo-row.middle-xs{align-items:center}.aioseo-row.bottom-xs{align-items:flex-end}.aioseo-row.around-xs{justify-content:space-around}.aioseo-row.between-xs{justify-content:space-between}@media only screen and (min-width:782px){.aioseo-row.start-sm{justify-content:flex-start;text-align:start}.aioseo-row.center-sm{justify-content:center;text-align:center}.aioseo-row.end-sm{justify-content:flex-end;text-align:end}.aioseo-row.top-sm{align-items:flex-start}.aioseo-row.middle-sm{align-items:center}.aioseo-row.bottom-sm{align-items:flex-end}.aioseo-row.around-sm{justify-content:space-around}.aioseo-row.between-sm{justify-content:space-between}}@media only screen and (min-width:912px){.aioseo-row.start-md{justify-content:flex-start;text-align:start}.aioseo-row.center-md{justify-content:center;text-align:center}.aioseo-row.end-md{justify-content:flex-end;text-align:end}.aioseo-row.top-md{align-items:flex-start}.aioseo-row.middle-md{align-items:center}.aioseo-row.bottom-md{align-items:flex-end}.aioseo-row.around-md{justify-content:space-around}.aioseo-row.between-md{justify-content:space-between}}@media only screen and (min-width:1042px){.aioseo-row.start-lg{justify-content:flex-start;text-align:start}.aioseo-row.center-lg{justify-content:center;text-align:center}.aioseo-row.end-lg{justify-content:flex-end;text-align:end}.aioseo-row.top-lg{align-items:flex-start}.aioseo-row.middle-lg{align-items:center}.aioseo-row.bottom-lg{align-items:flex-end}.aioseo-row.around-lg{justify-content:space-around}.aioseo-row.between-lg{justify-content:space-between}}.aioseo-display-info svg.aioseo-new-page{width:100%;height:auto;max-width:45px}.aioseo-display-info .new-page .aioseo-row{margin:0}.aioseo-display-info .new-page svg.aioseo-external{width:14px;height:14px;margin-left:10px}.aioseo-display-info .new-page .aioseo-description{color:#434960}.aioseo-display-info .new-page button.aioseo-html-sitemaps-disabled-button{border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default}.aioseo-display-info .new-page .aioseo-alert{width:100%;margin:8px 8px 0}.aioseo-exclude-posts{display:block}.aioseo-exclude-posts .aioseo-select{max-width:600px;display:inline-block;margin-left:10px}.aioseo-exclude-posts .aioseo-select button{display:none}.aioseo-exclude-posts .aioseo-select .multiselect__option{display:flex}.aioseo-exclude-posts .aioseo-select .multiselect__option--highlight .option-title{color:#005ae0}.aioseo-exclude-posts .aioseo-button.gray{margin-top:10px}.aioseo-exclude-posts .option{flex:1 0 auto}.aioseo-exclude-posts .option .option-title{font-weight:500;font-size:16px;color:#141b38}.aioseo-exclude-posts .option .option-title .search-term{font-weight:700}.aioseo-exclude-posts .option .option-details{display:flex;align-items:center;font-size:14px;color:#8c8f9a}.aioseo-exclude-posts .option .option-details span{margin-left:15px}.aioseo-exclude-posts .option-permalink{display:flex;align-items:center}.aioseo-exclude-posts .option-permalink svg.aioseo-external{width:15px;height:15px;color:#434960}.aioseo-exclude-posts .multiselect-toggle{padding:10px 13px;width:40px;position:absolute;height:36px;left:2px;top:2px;text-align:center;z-index:1}.aioseo-exclude-posts .multiselect-toggle svg.aioseo-add-plus{width:14px;height:14px;color:#000}.aioseo-sidebar-row .aioseo-included-objects-toggle{margin-top:5px}.aioseo-sidebar-row .aioseo-included-objects-toggle .aioseo-included-list{margin-top:8px}.aioseo-notification{margin-bottom:20px}.aioseo-notification>div{display:flex;align-items:flex-start;padding-bottom:10px;border-bottom:1px solid #e8e8eb}.aioseo-notification>div .icon{margin-left:20px}.aioseo-notification>div .icon svg{width:20px;height:20px;color:#00aa63}.aioseo-notification>div .icon svg.warning{color:#f18200}.aioseo-notification>div .icon svg.info{color:#005ae0}.aioseo-notification>div .icon svg.success{color:#00aa63}.aioseo-notification>div .icon svg.error{color:#df2a4a}.aioseo-notification>div .body{margin-left:20px;flex:1}.aioseo-notification>div .body .title{font-size:16px;font-weight:600;color:#141b38;margin-bottom:7px;display:flex;align-items:center}.aioseo-notification>div .body .title div:first-child{flex:1;margin-left:5px;line-height:1.4}.aioseo-notification>div .body .notification-content{margin-bottom:10px;max-width:400px}.aioseo-notification>div .body .actions{flex-wrap:wrap;display:flex;align-items:center}.aioseo-notification>div .body .actions>*{margin-bottom:10px}.aioseo-notification>div .body .actions .aioseo-button{margin-left:20px}.aioseo-notification>div .body .actions .dismiss{color:#8c8f9a;font-size:14px}.aioseo-seo-site-score__circle{animation:aioseo-seo-site-score-fill 1s reverse;transform:rotate(180deg);transform-origin:center;stroke:#00aa63}.aioseo-seo-site-score__circle.fast{-webkit-animation-duration:.5s;animation-duration:.5s;stroke:#df2a4a}.aioseo-seo-site-score__circle.medium{-webkit-animation-duration:.75s;animation-duration:.75s;stroke:#f18200}.aioseo-seo-site-score__background{stroke:#e8e8eb}@-webkit-keyframes aioseo-seo-site-score-fill{to{stroke-dasharray:0 100}}@keyframes aioseo-seo-site-score-fill{to{stroke-dasharray:0 100}}.aioseo-seo-site-score-svg-loading{-webkit-animation:aioseo-seo-site-score-svg-animation 2s linear infinite;animation:aioseo-seo-site-score-svg-animation 2s linear infinite}.aioseo-seo-site-score-loading__circle{-webkit-animation:aioseo-seo-site-score-fill-loading 2s ease-in-out infinite both;animation:aioseo-seo-site-score-fill-loading 2s ease-in-out infinite both;transform:rotate(180deg);transform-origin:center;stroke:#005ae0}@-webkit-keyframes aioseo-seo-site-score-svg-animation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@keyframes aioseo-seo-site-score-svg-animation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@-webkit-keyframes aioseo-seo-site-score-fill-loading{0%,25%{stroke-dashoffset:90;transform:rotate(0)}50%,75%{stroke-dashoffset:10;transform:rotate(-45deg)}to{stroke-dashoffset:90;transform:rotate(-1turn)}}@keyframes aioseo-seo-site-score-fill-loading{0%,25%{stroke-dashoffset:90;transform:rotate(0)}50%,75%{stroke-dashoffset:10;transform:rotate(-45deg)}to{stroke-dashoffset:90;transform:rotate(-1turn)}}.aioseo-table-column{display:flex;flex-direction:column;flex-basis:100%;flex:1;padding:5px;justify-content:center}.aioseo-table-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.aioseo-wizard-body{background-color:#fff;max-width:900px;box-shadow:0 2px 5px rgba(0,0,0,.05)}.aioseo-wizard-body .body-content{padding:80px 140px}@media screen and (max-width:782px){.aioseo-wizard-body .body-content{padding:40px}}.aioseo-wizard-body .body-content .header{line-height:1.4}.aioseo-wizard-body .body-footer{border-top:1px solid #e8e8eb;padding:30px;display:flex;align-items:center}.aioseo-wizard-body .body-footer>*{margin-left:10px}.aioseo-wizard-body .body-footer>:last-child{margin-left:0}.aioseo-wizard-body .body-footer .spacer{flex:1 0 auto}.aioseo-wizard-close-and-exit{margin:96px 0;min-height:96px;text-align:center;font-size:14px}.aioseo-wizard-close-and-exit a{color:#8c8f9a!important}.aioseo-wizard-container{margin:40px auto;max-width:900px}@media screen and (max-width:782px){.aioseo-wizard-container{margin:0 20px}}.aioseo-wizard-header{display:flex;align-items:center;justify-content:center;flex-direction:column}.aioseo-wizard-header svg.aioseo-logo{width:100%;max-width:140px;height:auto;margin:60px 0 40px 10px}.aioseo-wizard-progress{display:flex;align-items:center;justify-content:center}@media screen and (max-width:782px){.aioseo-wizard-progress{display:none}}.aioseo-wizard-progress .circle{background-color:#dcdde1;width:16px;height:16px;border-radius:50%}.aioseo-wizard-progress .circle.active{background-color:#005ae0}.aioseo-wizard-progress .spacer{width:59px;border:1px solid #dcdde1;margin:0 12px}.aioseo-wizard-progress .spacer.active{border-color:#005ae0}.aioseo-wizard-steps{color:#8c8f9a;font-size:14px;margin-bottom:20px}.block-editor-block-card{align-items:center}.block-editor-block-card__title.block-editor-block-card__title{margin:0}.aioseo-sidebar-row{margin-bottom:16px}.aioseo-sidebar-row .aioseo-sidebar-title{font-weight:500}.aioseo-localseo-info .aioseo-input,.aioseo-localseo-info .aioseo-multiselect,.aioseo-localseo-info .aioseo-select{max-width:480px}.aioseo-localseo-info .field-description{font-size:14px}.aioseo-localseo-info .info-businessaddress-row .columns{display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}.aioseo-localseo-opening .field-description{display:inline-block;margin:10px 0;font-size:14px}.aioseo-localseo-opening .field-description.mt-8{margin-top:8px}.aioseo-localseo-opening .aioseo-input,.aioseo-localseo-opening .aioseo-multiselect,.aioseo-localseo-opening .aioseo-select{max-width:480px}.aioseo-localseo-opening .aioseo-col-flex{display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #e8e8eb}.aioseo-localseo-opening .aioseo-col-flex:first-of-type{padding-top:0}.aioseo-localseo-opening .aioseo-col-flex:last-of-type{padding-bottom:0;border:none}.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-day{flex:1}.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-alwaysopen,.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-hours{flex:2}.aioseo-localseo-opening .aioseo-col-flex span.separator{margin:0 5px}.aioseo-localseo-opening .aioseo-col-flex .aioseo-select{display:inline-block;max-width:120px;margin-bottom:5px}.aioseo-localseo-opening .aioseo-col-flex .multiselect--disabled .multiselect__single,.aioseo-localseo-opening .aioseo-col-flex .multiselect--disabled .multiselect__tags{background:#f3f4f5}.aioseo-localseo-opening .aioseo-col-alwaysopen .aioseo-checkbox{padding:0 10px}.sidebar-row{margin-bottom:16px}.sidebar-row .title{font-weight:700}
|
1 |
+
.aioseo-app .aioseo-cta{margin-top:30px;background:#fff;width:100%;padding:40px;box-shadow:0 2px 5px rgba(0,0,0,.05);border:1px solid #e8e8eb}.aioseo-app .aioseo-cta.floating{margin-top:0;position:absolute;max-width:850px;right:50%;top:50%;transform:translateX(50%) translateY(-50%);box-shadow:0 5px 20px rgba(0,0,0,.1);border-radius:3px}.aioseo-app .aioseo-cta .header-text{line-height:1.4;font-weight:600;font-size:24px;text-align:center;color:#141b38}.aioseo-app .aioseo-cta .header-text span.large{line-height:1.4;font-size:32px}.aioseo-app .aioseo-cta .description{margin:30px 0 50px;width:100%;max-width:600px;text-align:center;font-size:16px;color:#141b38;line-height:1.4}.aioseo-app .aioseo-cta .description .aioseo-alert{margin-bottom:30px;text-align:right}.aioseo-app .aioseo-cta .feature-list{color:#141b38;font-size:16px;width:100%;max-width:500px;margin-bottom:50px}.aioseo-app .aioseo-cta .feature-list .aioseo-col{display:flex;align-items:flex-start}.aioseo-app .aioseo-cta .feature-list .aioseo-col svg.aioseo-circle-check{color:#00aa63;width:18px;min-width:18px;min-height:18px;margin-left:10px}.aioseo-app .aioseo-cta a.learn-more{margin-top:20px;color:#8c8f9a;font-size:14px}.aioseo-app .aioseo-cta .type-1{display:flex;flex-direction:column;align-items:center}.aioseo-app .aioseo-cta .type-2{margin:30px 50px 30px 0;display:flex}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .header-text{text-align:right}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .feature-list{margin:30px 0}.aioseo-app .aioseo-cta .type-2>div{margin-left:20px;flex:0 0 50%}.aioseo-app .aioseo-cta .type-2 .featured-image{max-height:540px;border:1px solid #e8e8eb;flex:1;overflow:hidden;margin-left:-41px;margin-bottom:-71px;border-radius:0 5px 0 0}.aioseo-app .aioseo-cta .type-2 .featured-image img{max-height:600px}@media only screen and (max-width:912px){.aioseo-app .aioseo-cta .type-2{flex-direction:column;align-items:center}.aioseo-app .aioseo-cta .type-2 .description,.aioseo-app .aioseo-cta .type-2 .header-text{text-align:center}.aioseo-app .aioseo-cta .type-2>div{text-align:center;margin-left:0;margin-bottom:30px;flex:1 0 100%;width:100%}.aioseo-app .aioseo-cta .type-2 .featured-image{margin:0 -10px -41px;border-radius:5px 5px 0 0;max-height:300px}}.aioseo-app .aioseo-cta .type-3 .sub-header{line-height:1.4;font-size:16px;font-weight:600;color:#005ae0;margin-bottom:5px}.aioseo-app .aioseo-cta .type-3 .header-text{text-align:right}.aioseo-app .aioseo-cta .type-3 .feature-list{margin:30px 0}.aioseo-app .aioseo-cta .type-3 .feature-list .aioseo-col svg.aioseo-circle-check{color:#00aa63;width:21px;min-width:21px;min-height:21px;margin-left:5px}.aioseo-app .aioseo-cta .type-3 .aioseo-button{margin-left:12px}.aioseo-box-toggle .aioseo-row .aioseo-col{max-width:calc(200px + 1em)}@media only screen and (max-width:48em){.aioseo-box-toggle .aioseo-row .aioseo-col{max-width:100%}}.aioseo-box-toggle input{position:absolute!important;clip:rect(0,0,0,0);height:1px;width:1px;border:0;overflow:hidden}.aioseo-box-toggle input:checked+label{background-color:#fff;box-shadow:0 5px 10px rgba(0,90,224,.1);border:2px solid #005ae0;font-weight:600}.aioseo-box-toggle label{background-color:#f9f9fa;color:#141b38;font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;flex-direction:column;border:1px solid #f9f9fa;transition:all .1s ease-in-out;border-radius:3px;height:165px;position:relative}.aioseo-box-toggle label p{position:absolute;bottom:15px;margin:0}.aioseo-box-toggle label:hover{cursor:pointer}.aioseo-button{flex-shrink:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;padding:0 24px;border-radius:4px;-webkit-appearance:none;cursor:pointer;height:48px;transition:background-color .2s ease;position:relative;overflow:hidden;text-decoration:none;color:#141b38;white-space:nowrap}.aioseo-button.small,.aioseo-button.small-table{height:30px;font-size:14px;padding:0 12px}.aioseo-button.small-table .loading-spinner,.aioseo-button.small .loading-spinner{width:25px;height:25px}.aioseo-button.small-table{font-size:12px;border-radius:3px}.aioseo-button.medium{height:40px;font-size:14px;padding:0 18px}.aioseo-button.medium .loading-spinner{width:35px;height:35px}.aioseo-button.xl{height:66px;border-radius:4px;font-size:18px;padding:0 48px}.aioseo-button.gray{border:1px solid #dcdde1;background-color:#f3f4f5}.aioseo-button.gray:hover{background-color:#fff;color:#141b38}.aioseo-button.gray:active{background-color:#f3f4f5}.aioseo-button.green{border:none;background-color:#00aa63;color:#fff}.aioseo-button.green:hover{background-color:#07c575}.aioseo-button.green:active{background-color:#15955f}.aioseo-button.blue{border:none;background-color:#005ae0;color:#fff}.aioseo-button.blue:hover{background-color:#1a82ea}.aioseo-button.blue:active{background-color:#004f9d}.aioseo-button.wp-blue{border:1px solid #005ae0;background-color:#f3f5f6;color:#005ae0}.aioseo-button.wp-blue:hover{background-color:#1a82ea;border-color:#1a82ea;color:#fff}.aioseo-button.wp-blue:active{background-color:#004f9d;border-color:#004f9d;color:#fff}.aioseo-button.black{border:none;background-color:#434960;color:#fff}.aioseo-button.black:hover{background-color:#2c324c}.aioseo-button.black:active{background-color:#141b38}.aioseo-button.red{border:1px solid #df2a4a;background-color:#fff;color:#df2a4a}.aioseo-button.red:hover{background-color:#df2a4a;color:#fff}.aioseo-button.red:active{background-color:#ab2039}.aioseo-button.loading.blue,.aioseo-button.loading.blue:hover{background-color:#004f9d;color:#004f9d}.aioseo-button.loading.green,.aioseo-button.loading.green:hover{background-color:#15955f;color:#15955f}.aioseo-button.loading.gray,.aioseo-button.loading.gray:hover{background-color:#f3f4f5;color:#f3f4f5}.aioseo-button.loading.black,.aioseo-button.loading.black:hover{background-color:#141b38;color:#141b38}.aioseo-button:disabled{border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default}.aioseo-button:disabled.gray:hover{color:#8c8f9a}.aioseo-button:disabled.wp-blue{border-color:#ddd;background-color:#f7f7f7}.aioseo-button:disabled.wp-blue:hover{border-color:#ddd;color:#8c8f9a}.aioseo-button:disabled:hover{background-color:#f3f4f5}.aioseo-checkbox{display:inline-flex;align-items:center}.aioseo-checkbox.disabled,.aioseo-checkbox.disabled .form-checkbox .fancy-checkbox,.aioseo-checkbox.no-clicks,.aioseo-checkbox.no-clicks .form-checkbox .fancy-checkbox{cursor:default}.aioseo-checkbox .form-checkbox-wrapper{margin-left:10px;display:flex}.aioseo-checkbox.medium .form-checkbox{width:20px;height:20px}.aioseo-checkbox.medium .form-checkbox .fancy-checkbox svg{width:12px;height:12px}.aioseo-checkbox.medium .form-checkbox span:before{height:18px;width:18px;line-height:20px}.aioseo-checkbox.round .form-checkbox span,.aioseo-checkbox.round .form-checkbox span:before{border-radius:50%}.aioseo-checkbox .form-checkbox{position:relative;display:inline-block;width:28px;height:28px;color:#fff;vertical-align:bottom;text-align:center}.aioseo-checkbox .form-checkbox input{display:none}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox.blue{background:#005ae0}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox.green{background:#00aa63}.aioseo-checkbox .form-checkbox input:checked+.fancy-checkbox:before{background:transparent}.aioseo-checkbox .form-checkbox input:disabled+.fancy-checkbox{background:#e8e8eb!important;border:1px solid #d0d1d7;cursor:default}.aioseo-checkbox .form-checkbox input:disabled+.fancy-checkbox svg{color:#8c8f9a}.aioseo-checkbox .form-checkbox input:not(:checked):disabled+.fancy-checkbox:before{right:0;bottom:0;background:#e8e8eb}.aioseo-checkbox .form-checkbox .fancy-checkbox svg{color:#fff;width:16px;height:16px}.aioseo-checkbox .form-checkbox span{position:absolute;cursor:pointer;top:0;right:0;left:0;bottom:0;background-color:#d0d1d7;transition:.2s;border-radius:3px;display:flex;align-items:center;justify-content:center}.aioseo-checkbox .form-checkbox span:before{position:absolute;content:"";height:26px;width:26px;right:1px;bottom:1px;background-color:#fff;transition:.2s;font-size:18px;line-height:28px;border-radius:2px}.aioseo-date-picker.vue-daterange-picker{width:100%}.aioseo-date-picker.vue-daterange-picker .form-control{display:flex;align-items:center;color:#141b38;font-size:16px;height:48px;border-radius:3px;border:1px solid #d0d1d7;position:relative}.aioseo-date-picker.vue-daterange-picker .form-control svg.aioseo-circle-close{position:absolute;left:10px;color:#434960;width:15px;height:15px}.aioseo-date-picker.vue-daterange-picker.small .form-control{height:30px}.aioseo-date-picker.vue-daterange-picker.medium .form-control{height:40px}body[class*=all-in-one-seo_page] .daterangepicker .yearselect{width:75px}.aioseo-editor{position:relative}.aioseo-editor .aioseo-editor-description .ql-editor{min-height:100px}.aioseo-editor .aioseo-editor-line-numbers .ql-editor{padding:15px 45px 15px 15px}.aioseo-editor .aioseo-editor-single .ql-editor{padding:8px 10px}.aioseo-editor .aioseo-editor-single.aioseo-editor-line-numbers .ql-editor{padding:8px 45px 8px 10px}.aioseo-editor .aioseo-editor-monospace .ql-editor{font-family:monospace}.aioseo-editor .aioseo-line-numbers{background:#f7f6f7;position:absolute;text-align:left;top:1px;width:29px;right:1px;border-radius:0 3px 3px 0;padding:15px 0 0 9px;display:flex;height:calc(100% - 2px);flex-direction:column;overflow:hidden}.aioseo-editor .aioseo-line-numbers div{min-height:25px;color:#8c8f9a;font-size:12px;line-height:1.9}.aioseo-editor .ql-disabled{pointer-events:none;background-color:#f9f9fa}.aioseo-editor .ql-editor{padding:15px;border-radius:3px;font-size:16px;color:#141b38;border:1px solid #d0d1d7}.aioseo-editor .ql-editor:focus{border:1px solid #005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-editor .ql-editor .mention .ql-mention-denotation-char{display:none}.aioseo-editor .ql-editor .mention .aioseo-tag{height:25px;margin:0 1px;color:#434960;font-weight:600;font-size:14px;padding:3px 10px 3px 25px;background-color:#f3f4f5;border-radius:3px;cursor:pointer;position:relative;display:inline-flex;align-items:center}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle{display:inline-flex;align-items:center;background-color:#e8e8eb;position:absolute;top:0;left:0;bottom:0;border-radius:3px 0 0 3px}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle svg.aioseo-caret{width:18px;height:18px;transition:transform .3s}.aioseo-editor .ql-editor .mention .aioseo-tag .tag-toggle svg.aioseo-caret.rotated{transform:rotate(-180deg)}.aioseo-editor .ql-mention-list-container{color:#141b38;background-color:#fff;max-width:250px;width:100%;margin-top:3px;border:1px solid #d0d1d7;border-radius:3px;box-shadow:0 3px 15px rgba(0,0,0,.1);z-index:9001}.aioseo-editor .ql-mention-list-container .aioseo-tag-custom,.aioseo-editor .ql-mention-list-container .aioseo-tag-search{padding:12px;border-bottom:1px solid #e8e8eb}.aioseo-editor .ql-mention-list-container .aioseo-tag-custom{display:none}.aioseo-editor .ql-mention-list-container .ql-mention-list{list-style:none;margin:0;padding:0;max-height:210px;overflow:auto}.aioseo-editor .ql-mention-list-container .ql-mention-list li{color:#141b38;margin:0;background-color:transparent;border-bottom:1px solid #e8e8eb;padding:15px;cursor:pointer;font-size:14px}.aioseo-editor .ql-mention-list-container .ql-mention-list li:last-child{border-bottom:0}.aioseo-editor .ql-mention-list-container .ql-mention-list li.selected,.aioseo-editor .ql-mention-list-container .ql-mention-list li:hover{color:#005ae0;background-color:#f2f7fd}.aioseo-editor .ql-mention-list-container .ql-mention-list li.selected .aioseo-tag-description,.aioseo-editor .ql-mention-list-container .ql-mention-list li:hover .aioseo-tag-description{color:initial}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item{display:flex}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item>div:first-child{margin-left:10px}.aioseo-editor .ql-mention-list-container .ql-mention-list li .aioseo-tag-item .aioseo-tag-title{font-weight:600}.aioseo-editor .ql-mention-list-container .ql-mention-list li svg.aioseo-plus{width:10px;height:10px;color:#005ae0}.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match{cursor:default;padding:12px;font-size:16px;font-weight:600}.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match.highlight,.aioseo-editor .ql-mention-list-container .ql-mention-list li.aioseo-tag-no-match:hover{color:initial;background-color:transparent}.aioseo-editor .ql-toolbar{display:none}.aioseo-editor .ql-clipboard{right:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.aioseo-editor .ql-snow .ql-hidden{display:none}.aioseo-editor .ql-container.ql-snow{border:none}.aioseo-editor .ql-container p{font-size:16px;margin:0;line-height:25px}.aioseo-highlight-toggle{border:1px solid #e8e8eb;border-radius:3px;min-height:48px;display:flex;align-items:center;padding:5px 10px;cursor:pointer}.aioseo-highlight-toggle>*{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-highlight-toggle.active{border-color:#005ae0;box-shadow:0 5px 10px rgba(0,90,224,.1)}.aioseo-highlight-toggle.medium{min-height:40px}.aioseo-highlight-toggle .icon{display:flex;align-items:center;margin-left:5px}.aioseo-input[data-v-3f0a80a7]{position:relative;width:100%}.aioseo-input.file[data-v-3f0a80a7],.aioseo-input.file input[type=file][data-v-3f0a80a7]{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:0}.aioseo-input.file input[type=file][data-v-3f0a80a7]{cursor:pointer;opacity:0}.aioseo-input.file input[type=file][data-v-3f0a80a7]::-webkit-file-upload-button{visibility:hidden}.aioseo-input.file input[type=file][data-v-3f0a80a7]:focus{box-shadow:none}.aioseo-input input[data-v-3f0a80a7]{height:48px;width:100%;background-color:#fff;border:1px solid #d0d1d7;border-radius:3px;padding:15px;font-size:18px;position:relative;overflow:hidden;margin:0}.aioseo-input input[data-v-3f0a80a7]:disabled{background:#f9f9fa}.aioseo-input input[data-v-3f0a80a7]:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-input input[data-v-3f0a80a7]::-moz-placeholder{color:#8c8f9a}.aioseo-input input[data-v-3f0a80a7]:-ms-input-placeholder{color:#8c8f9a}.aioseo-input input[data-v-3f0a80a7]::placeholder{color:#8c8f9a}.aioseo-input input.prepend[data-v-3f0a80a7]{padding-right:50px}.aioseo-input input.append[data-v-3f0a80a7]{padding-left:50px}.aioseo-input input.small[data-v-3f0a80a7]{height:30px;padding:10px;font-size:14px}.aioseo-input input.small.prepend[data-v-3f0a80a7]{padding-right:30px}.aioseo-input input.small.append[data-v-3f0a80a7]{padding-left:30px}.aioseo-input input.medium[data-v-3f0a80a7]{height:40px;padding:12px;font-size:16px}.aioseo-input input.medium.prepend[data-v-3f0a80a7]{padding-right:35px}.aioseo-input input.medium.append[data-v-3f0a80a7]{padding-left:35px}.aioseo-input.aioseo-active input[data-v-3f0a80a7]{border-color:#00aa63}.aioseo-input.aioseo-active input[data-v-3f0a80a7]:active,.aioseo-input.aioseo-active input[data-v-3f0a80a7]:focus{box-shadow:0 0 0 1px #00aa63}.aioseo-input.aioseo-active .append-icon[data-v-3f0a80a7],.aioseo-input.aioseo-active .prepend-icon[data-v-3f0a80a7]{color:#00aa63}.aioseo-input.aioseo-error input[data-v-3f0a80a7]{border-color:#df2a4a}.aioseo-input.aioseo-error input[data-v-3f0a80a7]:active,.aioseo-input.aioseo-error input[data-v-3f0a80a7]:focus{box-shadow:0 0 0 1px #df2a4a}.aioseo-input.aioseo-error .append-icon[data-v-3f0a80a7],.aioseo-input.aioseo-error .prepend-icon[data-v-3f0a80a7]{color:#df2a4a}.aioseo-input.aioseo-warning input[data-v-3f0a80a7]{border-color:#f18200}.aioseo-input.aioseo-warning input[data-v-3f0a80a7]:active,.aioseo-input.aioseo-warning input[data-v-3f0a80a7]:focus{box-shadow:0 0 0 1px #f18200}.aioseo-input.aioseo-warning .append-icon[data-v-3f0a80a7],.aioseo-input.aioseo-warning .prepend-icon[data-v-3f0a80a7]{color:#f18200}.aioseo-input .prepend-icon[data-v-3f0a80a7]{position:absolute;top:0;right:10px;width:30px;height:100%;color:#d0d1d7;display:flex;align-items:center;z-index:1}.aioseo-input .prepend-icon svg[data-v-3f0a80a7]{width:30px;height:30px}.aioseo-input .prepend-icon.small[data-v-3f0a80a7]{width:20px}.aioseo-input .prepend-icon.small svg[data-v-3f0a80a7]{width:10px;height:10px}.aioseo-input .prepend-icon.medium[data-v-3f0a80a7]{width:15px}.aioseo-input .prepend-icon.medium svg[data-v-3f0a80a7]{width:15px;height:15px}.aioseo-input .append-icon[data-v-3f0a80a7]{position:absolute;top:0;left:10px;width:30px;height:100%;color:#d0d1d7;display:flex;align-items:center;z-index:1}.aioseo-input .append-icon svg[data-v-3f0a80a7]{width:30px;height:30px}.aioseo-input .append-icon.small[data-v-3f0a80a7]{width:10px}.aioseo-input .append-icon.medium[data-v-3f0a80a7]{width:15px}.aioseo-input .append-icon.clickable[data-v-3f0a80a7]{cursor:pointer;padding:0 5px;background:#f3f4f5;border:1px solid #d0d1d7;color:#434960;left:0;width:30px;border-radius:3px 0 0 3px}.aioseo-input .append-icon.clickable.small[data-v-3f0a80a7]{width:15px}.aioseo-input .append-icon.clickable.medium[data-v-3f0a80a7]{padding:0 10px;width:40px}.aioseo-phone-number{max-width:600px}.aioseo-phone-number label{display:none}.aioseo-phone-number .maz-input__input{height:40px;min-height:40px;padding-top:0!important;border:1px solid #d0d1d7}.aioseo-phone-number .maz-input__input:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-phone-number .country-selector{flex:0 0 140px;width:140px;min-width:140px;max-width:140px}.aioseo-phone-number .country-selector:hover{z-index:1}.aioseo-phone-number .country-selector>div.maz-base-component.maz-input.has-value.has-1-right-icon.maz-input--primary>input{padding-right:50px!important}.aioseo-phone-number .country-selector .maz-input.is-focused{border-color:#005ae0}.aioseo-phone-number .country-selector .maz-select__options-list__item.selected.keyboard-selected{background-color:#005ae0}.aioseo-phone-number .maz-phone-number-input__country-flag{right:20px;bottom:12px;z-index:auto}.aioseo-phone-number .maz-input__icon{z-index:auto}.aioseo-phone-number .maz-select__options-list input{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-phone-number .maz-input__input{border-radius:3px}.aioseo-phone-number.invalidNumber div.maz-flex-1>div>input{border-color:red}.aioseo-phone-number.invalidNumber div.maz-flex-1>div>input:focus{border-color:#df2a4a;box-shadow:0 0 0 1px #df2a4a}.aioseo-phone-number.validNumber div.maz-flex-1>div>input:focus{border-color:#00aa63;box-shadow:0 0 0 1px #00aa63}.aioseo-radio{display:inline-flex;align-items:center}.aioseo-radio .form-radio-wrapper{margin-left:10px;display:flex}.aioseo-radio.medium .form-radio{width:20px;height:20px}.aioseo-radio.medium .form-radio .fancy-radio svg{width:12px;height:12px}.aioseo-radio.medium.type-1 .form-radio span:before{height:18px;width:18px;line-height:20px}.aioseo-radio.medium.type-2 .form-radio span:before{height:16px;width:16px;line-height:20px}.aioseo-radio.medium.type-2 .form-radio span:after{height:6px;width:6px;right:6px;bottom:6px}.aioseo-radio .form-radio{position:relative;display:inline-block;width:28px;height:28px;color:#fff;vertical-align:bottom;text-align:center}.aioseo-radio .form-radio input{opacity:0}.aioseo-radio .form-radio input:checked+.fancy-radio{background:#005ae0;border-color:#005ae0}.aioseo-radio .form-radio input:checked+.fancy-radio:before{background:transparent}.aioseo-radio .form-radio input:checked+.fancy-radio:after{display:block}.aioseo-radio .form-radio input:disabled+.fancy-radio{cursor:default}.aioseo-radio .form-radio input:focus+.fancy-radio{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-radio .form-radio .fancy-radio{border-radius:50%}.aioseo-radio .form-radio .fancy-radio svg{color:#fff;width:16px;height:16px}.aioseo-radio .form-radio span{position:absolute;cursor:pointer;top:0;right:0;left:0;bottom:0;transition:.2s;border-radius:50%;display:flex;align-items:center;justify-content:center}.aioseo-radio .form-radio span:before{position:absolute;content:"";height:26px;width:26px;right:1px;bottom:1px;transition:.2s;font-size:18px;line-height:28px;border-radius:50%}.aioseo-radio.type-1 .form-radio span,.aioseo-radio.type-1 .form-radio span:before{background-color:#f3f4f5}.aioseo-radio.type-2 .form-radio span{border:1px solid #d0d1d7;background-color:#fff}.aioseo-radio.type-2 .form-radio span:before{background-color:#fff}.aioseo-radio.type-2 .form-radio span:after{display:none;position:absolute;content:"";height:10px;width:10px;right:8px;bottom:8px;background-color:#fff;transition:.2s;border-radius:50%}.aioseo-radio.disabled{cursor:default}.aioseo-radio.disabled.type-2 .form-radio input:checked+.fancy-radio{background-color:#e8e8eb;border-color:#d0d1d7}.aioseo-radio.disabled.type-2 .form-radio span,.aioseo-radio.disabled.type-2 .form-radio span:before{background-color:#e8e8eb}.aioseo-radio.disabled.type-2 .form-radio span:after{background-color:#8c8f9a}.aioseo-radio-toggle{display:flex;align-items:center;height:40px}.aioseo-radio-toggle div{height:100%}.aioseo-radio-toggle.inline{display:inline-flex}.aioseo-radio-toggle div:first-child{overflow:hidden;border-radius:0 3px 3px 0}.aioseo-radio-toggle div:first-child label{border-radius:0 3px 3px 0}.aioseo-radio-toggle div:last-child{overflow:hidden;border-radius:3px 0 0 3px}.aioseo-radio-toggle div:last-child label{border-radius:3px 0 0 3px}.aioseo-radio-toggle input{position:absolute!important;clip:rect(0,0,0,0);height:1px;width:1px;border:0;overflow:hidden}.aioseo-radio-toggle input:checked+label{background-color:#005ae0;color:#fff}.aioseo-radio-toggle input:checked+label.dark{background-color:#434960;color:#fff}.aioseo-radio-toggle label{height:100%;background-color:#e8e8eb;color:#141b38;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;flex-direction:column;transition:all .1s ease-in-out;position:relative;padding:11px 20px;font-weight:600}.aioseo-radio-toggle label.disabled{cursor:default;pointer-events:none;opacity:.5}.aioseo-radio-toggle label:hover{background-color:#dadadf;cursor:pointer}.aioseo-radio-toggle label p{position:absolute;bottom:15px;margin:0}.aioseo-radio-toggle.circle label{background:#fff;color:#8c8f9a}.aioseo-radio-toggle.circle input+label{border-radius:50%;width:36px;height:36px;padding:8px}.aioseo-radio-toggle.circle input:checked+label{background:#e8e8eb;color:#2c324c}.aioseo-select{height:48px}.aioseo-select.multiselect--disabled .multiselect__select{background:none}.aioseo-select .multiselect__select{display:flex;align-items:center;justify-content:center;min-height:46px}.aioseo-select .multiselect__select:before{display:none}.aioseo-select .multiselect__select svg.aioseo-caret{color:#141b38;width:18px;height:18px;transition:transform .3s}.aioseo-select .multiselect__tags{height:100%;border:1px solid #d0d1d7;border-radius:3px;display:flex;justify-content:center;flex-direction:column;padding:16px 16px 16px 40px}.aioseo-select .multiselect__tags .multiselect__spinner{height:calc(100% - 2px);border:2px solid transparent}.aioseo-select .multiselect__tags .multiselect__spinner:after,.aioseo-select .multiselect__tags .multiselect__spinner:before{border-top-color:#434960}.aioseo-select .multiselect__tags .multiselect__single{display:inline-flex;margin:0;padding:0;color:#141b38;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aioseo-select .multiselect__tags .multiselect__placeholder{color:#8c8f9a;font-size:16px;line-height:20px;margin:0;padding:0}.aioseo-select .multiselect__tags .multiselect__input{padding:0;margin:0 0 0 10px;border-radius:0;border:none;color:#141b38;min-height:auto;line-height:20px}.aioseo-select .multiselect__tags .multiselect__input:focus{outline:0;box-shadow:none;border:none}.aioseo-select .multiselect__tags .multiselect__input::-moz-placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__input:-ms-input-placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__input::placeholder{color:#8c8f9a}.aioseo-select .multiselect__tags .multiselect__tags-wrap{display:flex;align-items:center;flex-wrap:wrap}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag{padding:0;display:inline-flex;align-items:center;font-size:14px;font-weight:600;color:#434960;margin:0 0 0 3px;height:24px;background-color:#f3f4f5;flex-shrink:0}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-value{padding:0 10px 0 5px}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove{padding:0 10px;height:100%;cursor:pointer;background-color:#f3f4f5;display:flex;align-items:center}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove:hover{background-color:#434960;color:#fff}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove:hover svg.aioseo-close{color:#fff}.aioseo-select .multiselect__tags .multiselect__tags-wrap .multiselect__tag .multiselect__tag-remove svg.aioseo-close{color:#434960;width:10px;height:10px}.aioseo-select.multiselect--active .multiselect__tags-wrap{margin-bottom:7px}.aioseo-select.small{height:30px;min-height:30px}.aioseo-select.small .multiselect__tags{min-height:30px;padding:8px 8px 8px 38px}.aioseo-select.small .multiselect__tags .multiselect__placeholder{font-size:14px}.aioseo-select.small .multiselect__select{height:28px;min-height:28px}.aioseo-select.small .multiselect__input{font-size:14px}.aioseo-select.small .multiselect__content-wrapper li.multiselect__element .multiselect__option{font-size:14px;padding:8px;min-height:30px}.aioseo-select.medium{height:40px}.aioseo-select.medium .multiselect__tags{padding:7px 7px 7px 40px}.aioseo-select.medium .multiselect__select{min-height:38px}.aioseo-select.multiple{min-height:48px;height:auto}.aioseo-select.multiple.small{min-height:30px}.aioseo-select.multiple.medium{min-height:40px}.aioseo-select.multiselect--above .multiselect__content-wrapper{border-top:1px solid #d0d1d7;border-bottom:none}.aioseo-select .multiselect__content-wrapper{border:1px solid #d0d1d7;border-top:none;border-bottom-right-radius:3px;border-bottom-left-radius:3px;z-index:50;-webkit-overflow-scrolling:touch}.aioseo-select .multiselect__content-wrapper .multiselect__content{max-width:100%}.aioseo-select .multiselect__content-wrapper li.multiselect__element{margin:0;border-bottom:1px solid #e8e8eb}.aioseo-select .multiselect__content-wrapper li.multiselect__element.last{border-bottom:none}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option{color:#141b38;font-weight:700;font-size:16px;white-space:normal;line-height:1.4}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--highlight{background-color:#f2f7fd}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--highlight:after{background-color:#005ae0;color:#fff}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--selected{background-color:#f2f7fd}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option--disabled{font-weight:400;background-color:#fff!important;color:#8c8f9a}.aioseo-select .multiselect__content-wrapper li.multiselect__element .multiselect__option .docLink{font-size:13px;float:left}.aioseo-textarea-autosize{width:100%;background-color:#fff;border:1px solid #d0d1d7;border-radius:4px;font-size:16px;padding:12px}.aioseo-toggle{display:inline-flex}.aioseo-toggle:active,.aioseo-toggle:focus{outline:2px solid transparent}.aioseo-toggle.disabled{pointer-events:none}.aioseo-toggle.disabled .toggle-content{opacity:.5}.aioseo-toggle .toggle-content{position:relative;display:inline-block;width:36px;height:20px;margin-left:10px}.aioseo-toggle .toggle-content input{display:none}.aioseo-toggle .toggle-content input:checked+.toggle-switch{border:1px solid #005ae0;background-color:#005ae0}.aioseo-toggle .toggle-content input:checked+.toggle-switch:focus{outline:2px solid transparent}.aioseo-toggle .toggle-content input:checked+.toggle-switch:before{background-color:#fff;transform:translateX(-15px)}.aioseo-toggle .toggle-content input:focus+.toggle-switch{box-shadow:0 0 1px #005ae0;outline:2px solid transparent}.aioseo-toggle .toggle-content .toggle-switch{position:absolute;cursor:pointer;top:0;right:0;left:0;bottom:0;background-color:#fff;border:1px solid #d0d1d7;border-radius:15px;transition:.2s}.aioseo-toggle .toggle-content .toggle-switch:before{position:absolute;content:"";height:14px;width:14px;right:3px;bottom:2px;background-color:#d0d1d7;border-radius:50%;transition:.2s}.aioseo-wp-table input[type=search],.aioseo-wp-table select{border-color:#d0d1d7}.aioseo-wp-table select:focus{border-color:#005ae0;color:#005ae0;box-shadow:0 0 0 1px #005ae0}.aioseo-wp-table select:hover{color:#005ae0}.aioseo-wp-table input.button,.aioseo-wp-table input.button:hover{color:#005ae0;border-color:#005ae0}.aioseo-wp-table .header .subsubsub{color:#555d66;font-size:13px;font-weight:600}.aioseo-wp-table .header .subsubsub>span{display:inline-flex}.aioseo-wp-table .header .subsubsub .separator{margin:0 5px}.aioseo-wp-table .header .subsubsub .active{font-weight:700;color:#141b38}.aioseo-wp-table .header .subsubsub a{text-decoration:none}.aioseo-wp-table .header .subsubsub a:hover{text-decoration:underline}.aioseo-wp-table .header .search{display:flex;justify-content:flex-end}.aioseo-wp-table .header .search .aioseo-input{width:100%;max-width:215px;margin-left:6px}.aioseo-wp-table .header .pagination{color:#555d66}.aioseo-wp-table .header .pagination .button,.aioseo-wp-table .header .pagination input{margin-right:6px}.aioseo-wp-table .tablenav-pages .current-page{padding:0 8px 0 0}.aioseo-wp-table .wp-table{width:100%;position:relative}.aioseo-wp-table .wp-table .loader-overlay{position:absolute;top:46px;left:0;bottom:36px;right:0;background:rgba(0,0,0,.3);z-index:1;display:flex;align-items:center;justify-content:center}.aioseo-wp-table .wp-table .no-results{color:#8c8f9a;min-height:200px;display:flex;align-items:center;justify-content:center;font-weight:400;font-size:24px}.aioseo-wp-table .wp-table tr.even{background-color:#f9f9fa}.aioseo-wp-table .wp-table tr.enabled td,.aioseo-wp-table .wp-table tr.enabled td strong a{color:#141b38}.aioseo-wp-table .wp-table tr:not(.enabled):not(.edit-row) td,.aioseo-wp-table .wp-table tr:not(.enabled):not(.edit-row) td a.edit-link{color:#8c8f9a}.aioseo-wp-table .wp-table tr.edit-row th{padding:0 3px 0 0}.aioseo-wp-table .wp-table tr.edit-row td{padding:0 10px 0 30px}.aioseo-wp-table .wp-table tr td strong a{font-weight:400}.aioseo-wp-table .wp-table tr td .row-actions .edit a,.aioseo-wp-table .wp-table tr td strong a:hover{color:#005ae0}.aioseo-wp-table .wp-table tr td .row-actions .edit .trash a{color:#df2a4a}.aioseo-wp-table .wp-table tr td.edit-row-content .wrapper .border{margin-top:7px;padding:19px 0 20px;border-top:1px solid #e8e8eb}.custom-rules[data-v-191c51fe]{width:100%;margin-top:14px}.custom-rules .rule .rule-settings[data-v-191c51fe]{display:flex;flex-direction:row;align-items:center;flex:1}.custom-rules .rule .rule-settings>.aioseo-select[data-v-191c51fe]:first-child{width:100%;max-width:250px}.custom-rules .rule .rule-settings>[data-v-191c51fe]{margin:0 0 0 16px}.custom-rules .rule .rule-settings>[data-v-191c51fe]:last-child{margin-left:0}.custom-rules .rule .rule-settings>.aioseo-toggle[data-v-191c51fe]{margin:0 4px 0 10px}.custom-rules .rule .actions[data-v-191c51fe],.custom-rules .rule .logical[data-v-191c51fe]{flex:0}.custom-rules svg[data-v-191c51fe]{width:14px;height:14px;cursor:pointer}.custom-rules svg.aioseo-trash[data-v-191c51fe]{color:#dadada}.custom-rules svg.aioseo-trash[data-v-191c51fe]:hover{color:#df2a4a}.custom-rules .aioseo-tooltip[data-v-191c51fe]{margin:0;display:flex}.custom-rules .aioseo-button svg[data-v-191c51fe]{color:#fff;margin-left:6px}.aioseo-add-redirection.edit-url{margin-bottom:30px}.aioseo-add-redirection.edit-url .urls{align-items:flex-start}.aioseo-add-redirection.edit-url .urls .url-arrow{margin:-8px 30px 0}.aioseo-add-redirection.edit-url .advanced-settings-link{margin-top:21px}.aioseo-add-redirection .advanced-settings-link{text-decoration:underline!important}.aioseo-add-redirection.log-404 .urls .source{min-height:103px;align-items:flex-start}.aioseo-add-redirection .generic-error{margin-bottom:20px}.aioseo-add-redirection .aioseo-settings-row .settings-name .name{font-size:14px}.aioseo-add-redirection .urls{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}.aioseo-add-redirection .urls .break{flex-basis:100%;height:0}.aioseo-add-redirection .urls .url-arrow{width:36px;margin:-15px 30px 0;display:flex;align-items:center;justify-content:center}@media (min-width:1200px){.aioseo-add-redirection .urls .url-arrow{margin:-15px 50px 0}}.aioseo-add-redirection .urls .url-arrow svg{height:103px;color:#005ae0}.aioseo-add-redirection .urls .source,.aioseo-add-redirection .urls .target{flex:1;display:flex;align-items:center}.aioseo-add-redirection .urls .source>*,.aioseo-add-redirection .urls .target>*{flex:1}.aioseo-add-redirection .urls .source .aioseo-input,.aioseo-add-redirection .urls .target .aioseo-input{margin-bottom:12px}.aioseo-add-redirection .urls .target input{padding-left:30px}.aioseo-add-redirection .urls .target .append-icon{width:30px;justify-content:flex-end}.aioseo-add-redirection .urls .target .append-icon svg{max-width:16px;margin-left:5px}.aioseo-add-redirection .urls .target .append-icon svg:last-of-type{margin-left:0}.aioseo-add-redirection .urls .target .append-icon svg.aioseo-circle-check{color:#00aa63}.aioseo-add-redirection .urls .target .append-icon svg.aioseo-circle-close{color:#df2a4a}.aioseo-add-redirection .urls .target .aioseo-description{height:30px}.aioseo-add-redirection .urls .target .target-url-error,.aioseo-add-redirection .urls .target .target-url-warning{margin-bottom:10px}.aioseo-add-redirection .settings{display:flex;flex-direction:column;align-items:center;margin-top:24px}.aioseo-add-redirection .settings .all-settings{width:100%}.aioseo-add-redirection .settings .all-settings .all-settings-content{display:flex;align-items:center;flex-wrap:wrap}.aioseo-add-redirection .settings .all-settings .all-settings-content .advanced-settings-link{margin:16px 16px 0 0;color:#8c8f9a}@media (max-width:767px){.aioseo-add-redirection .settings .all-settings .all-settings-content{align-items:start}}.aioseo-add-redirection .settings>.actions{align-self:flex-end;margin-top:-50px}.aioseo-add-redirection .settings>.actions.advanced{margin-top:24px}.aioseo-add-redirection .settings .query-params,.aioseo-add-redirection .settings .redirect-type{margin-bottom:10px;flex:0 1 auto}.aioseo-add-redirection .settings .query-params .aioseo-select,.aioseo-add-redirection .settings .redirect-type .aioseo-select{margin-top:5px}.aioseo-add-redirection .settings .query-params{width:340px}.aioseo-add-redirection .settings .redirect-type{width:300px;margin-left:24px}.aioseo-add-redirection .settings .aioseo-button{align-self:flex-end}.aioseo-add-redirection .settings .cancel-edit-row{margin-right:10px}@media (min-width:1200px){.aioseo-add-redirection .settings .cancel-edit-row{margin-right:16px}}.aioseo-add-redirection-target-url,.aioseo-redirect-source-url{position:relative}.aioseo-redirect-source-url .aioseo-input input{padding-left:76px!important}.aioseo-redirect-source-url .aioseo-input .append-icon{width:60px;justify-content:flex-end}.aioseo-redirect-source-url .aioseo-input .append-icon svg{max-width:16px;margin-left:5px}.aioseo-redirect-source-url .aioseo-input .append-icon svg:last-of-type{margin-left:0}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear{color:#8c8f9a;cursor:pointer}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear.active,.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-gear:hover{color:#005ae0}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-circle-check{color:#00aa63}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-circle-close{color:#df2a4a}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash{color:#8c8f9a;cursor:pointer}.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash.active,.aioseo-redirect-source-url .aioseo-input .append-icon svg.aioseo-trash:hover{color:#df2a4a}.aioseo-redirect-source-url .source-url-error,.aioseo-redirect-source-url .source-url-warning{margin-bottom:10px}.aioseo-redirect-source-url .source-url-options>div{padding-bottom:5px}.aioseo-redirect-source-url .source-url-options>div>div{margin-bottom:5px}.aioseo-add-redirection-url-results{display:flex;position:absolute;background:#fff;width:100%;max-height:300px;overflow:auto;border:1px solid #d0d1d7;border-radius:3px;z-index:50;right:1px;margin-top:-9px}.aioseo-add-redirection-url-results ul{display:inline-block;max-width:100%;list-style:none;padding:0;margin:0;min-width:100%;vertical-align:top}.aioseo-add-redirection-url-results ul li{margin:0;border-bottom:1px solid #e8e8eb;display:block}.aioseo-add-redirection-url-results ul li:last-of-type{border-bottom:none}.aioseo-add-redirection-url-results ul li>span{color:#141b38;font-weight:700;font-size:16px;white-space:normal;line-height:1.4;display:flex;padding:12px;min-height:40px;text-decoration:none;text-transform:none;vertical-align:middle;position:relative;cursor:pointer}.aioseo-add-redirection-url-results ul li>span:hover{background-color:#f2f7fd}.aioseo-add-redirection-url-results ul li>span:hover .option-title{color:#005ae0}.aioseo-add-redirection-url-results .option{flex:1}.aioseo-add-redirection-url-results .option .option-title{font-weight:500;display:flex;font-size:16px;color:#141b38}.aioseo-add-redirection-url-results .option .option-title>div{margin-left:5px}.aioseo-add-redirection-url-results .option .option-title>div:first-of-type{display:inline-block}.aioseo-add-redirection-url-results .option .option-title .search-term{font-weight:700}.aioseo-add-redirection-url-results .option .option-details{display:flex;align-items:center;font-size:14px;color:#8c8f9a}.aioseo-add-redirection-url-results .option .option-details span{margin-left:15px}.aioseo-add-redirection-url-results .option-permalink{display:flex;align-items:center}.aioseo-add-redirection-url-results .option-permalink svg.aioseo-external{width:15px;height:15px;color:#434960}.aioseo-add-template-tag{border-radius:3px;padding:5px 10px;color:#141b38;font-size:14px;border:1px solid #e8e8eb;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:600}.aioseo-add-template-tag:hover{background-color:#f3f4f5}.aioseo-add-template-tag svg.aioseo-plus{width:10px;height:10px;color:#005ae0}.aioseo-additional-pages .additional-pages-table{border:1px solid #d0d1d7;border-radius:3px;margin-bottom:20px}.aioseo-additional-pages .additional-pages-table .page-priority{max-width:110px}.aioseo-additional-pages .additional-pages-table .page-frequency{max-width:166px}.aioseo-additional-pages .additional-pages-table .page-last-modified{max-width:155px}.aioseo-additional-pages .additional-pages-table .page-actions{max-width:20px}.aioseo-additional-pages .additional-pages-table .page-actions .aioseo-tooltip{display:inline-block;margin:0}.aioseo-additional-pages .additional-pages-table .pages-header{height:50px;display:flex;font-size:14px;padding:0 30px;align-items:center;border-bottom:1px solid #d0d1d7}.aioseo-additional-pages .additional-pages-table .pages-header>div{flex:1 0 auto}.aioseo-additional-pages .additional-pages-table .pages-rows{font-size:14px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row{background-color:#fff;height:70px;display:flex;align-items:center;padding:0 30px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row:last-of-type{border-radius:0 0 3px 3px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row.even{background-color:#f9f9fa}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row>div{flex:1 0 auto;padding-left:30px}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row>div:last-child{padding-left:0}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row .page-actions svg.aioseo-trash{width:20px;height:20px;color:#8c8f9a;cursor:pointer;transition:color .1s ease}.aioseo-additional-pages .additional-pages-table .pages-rows .page-row .page-actions svg.aioseo-trash:hover{color:#df2a4a}.aioseo-additional-pages svg.aioseo-circle-plus{width:14px;height:14px;margin-left:10px}.aioseo-alert{position:relative;border-radius:3px;padding:24px;font-size:16px;color:#141b38;line-height:1.4}.aioseo-alert.small{padding:8px;font-size:13px}.aioseo-alert .aioseo-alert-close{cursor:pointer;position:absolute;top:-9px;left:-9px;width:18px;height:18px;border-radius:50%;padding:5px;display:inline-flex;justify-content:center;align-content:center}.aioseo-alert .aioseo-alert-close svg{width:100%;height:100%}.aioseo-alert.blue{border:1px solid #005ae0;background-color:#f2f7fd}.aioseo-alert.blue .aioseo-alert-close{background-color:#005ae0;color:#fff}.aioseo-alert.green{border:1px solid #00aa63;background-color:#f2fdf8}.aioseo-alert.green .aioseo-alert-close{background-color:#00aa63;color:#fff}.aioseo-alert.red{border:1px solid #df2a4a;background-color:#fbe9ec}.aioseo-alert.red .aioseo-alert-close{background-color:#df2a4a;color:#fff}.aioseo-alert.yellow{border:1px solid #f18200;background-color:#fcfae8}.aioseo-alert.yellow .aioseo-alert-close{background-color:#f18200;color:#fff}.aioseo-alert.no-border{border-width:0}.aioseo-alert.text-center{text-align:center}.aioseo-analyze-competitor-site-score{border:1px solid #00aa63;border-radius:3px;color:#00aa63;font-size:14px;padding:0 8px;height:24px;display:inline-flex;align-items:center;justify-content:center;margin-left:14px}.aioseo-analyze-competitor-site-score.red{color:#df2a4a;border-color:#df2a4a}.aioseo-analyze-competitor-site-score.orange{color:#f18200;border-color:#f18200}.aioseo-animated-dannie{display:flex;align-content:center;align-items:center;justify-content:center}.aioseo-animated-dannie svg{max-width:250px}.aioseo-api-bar{height:40px;background-color:#df2a4a;color:#fff;font-size:13px;padding:0 40px 0 14px}.aioseo-api-bar,.aioseo-api-bar .upgrade-text{display:flex;align-items:center;justify-content:center}.aioseo-api-bar .upgrade-text{flex:1}.aioseo-api-bar strong{font-weight:600}.aioseo-api-bar svg.aioseo-logo-gear{width:20px;height:20px;min-width:20px;margin-left:14px}.aioseo-api-bar svg.aioseo-close{cursor:pointer;width:12px;height:12px}.aioseo-api-bar a{color:#fff;text-decoration:underline}.aioseo-api-bar a:hover{text-decoration:none}@media screen and (max-width:782px){.aioseo-api-bar{padding:0 10px;height:60px}}.aioseo-attributes ul.aioseo-attributes-list[data-v-02af7dd2]{list-style:inside;list-style-type:disc;margin:20px 0 0}.aioseo-attributes ul.aioseo-attributes-list li[data-v-02af7dd2]{display:flex;margin-bottom:8px;align-items:flex-start}.aioseo-attributes ul.aioseo-attributes-list li div[data-v-02af7dd2]:first-of-type{flex:0 0 140px}.aioseo-blur{filter:blur(3px);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-card{color:#141b38;background-color:#fff;border:1px solid #e8e8eb;box-shadow:0 2px 5px rgba(0,0,0,.05);margin:30px 0}.aioseo-card.disabled .content{background:#f9f9fa;font-size:16px;line-height:24px}@media only screen and (max-width:782px){.aioseo-card{margin:20px 0}}.aioseo-card svg.aioseo-circle-question-mark{width:17px;height:17px;color:#8c8f99;transition:background-color .2s ease}.aioseo-card svg.aioseo-circle-question-mark:hover{color:#5a5c65}.aioseo-card .header{display:flex;align-items:center;height:70px;padding:0 30px;font-weight:600;font-size:18px;border-bottom:1px solid #e8e8eb}.aioseo-card .header .header-icon{display:flex}.aioseo-card .header .header-icon svg{width:24px;height:24px;margin-left:16px}.aioseo-card .header .text{flex:1 0 auto;display:flex;align-items:center}.aioseo-card .header .text svg.aioseo-circle-question-mark{cursor:pointer;width:17px;height:17px}.aioseo-card .header .text .aioseo-pro-badge{margin-right:10px}.aioseo-card .header .text .card-score{display:flex;flex:1;align-items:center;justify-content:flex-end;padding-left:18px;font-size:13px}.aioseo-card .header .text .card-score.green{color:#00aa63}.aioseo-card .header .text .card-score.orange{color:#f18200}.aioseo-card .header .text .card-score.red{color:#df2a4a}.aioseo-card .header .text .card-score svg{margin-left:7px}.aioseo-card .header svg.aioseo-caret{width:24px;height:24px;cursor:pointer;transform:rotate(180deg);transition:transform .3s}.aioseo-card .header svg.aioseo-caret.rotated{transform:rotate(90deg)}.aioseo-card .header svg.aioseo-close{width:14px;height:14px;cursor:pointer}.aioseo-card .content{padding:30px;position:relative}.aioseo-card div.aioseo-settings-row:last-child{margin-bottom:0;border-bottom:none;padding-bottom:0}.aioseo-copy-block{display:inline-flex}.aioseo-copy-block .message{background-color:#fff;min-height:56px;display:flex;align-items:center;border:1px solid #dcdde1;border-radius:0 3px 3px 0;padding:10px 24px;font-weight:600}.aioseo-copy-block .copy-tooltip{display:flex}.aioseo-copy-block .copy{background-color:#fff;min-height:56px;display:flex;align-items:center;border:1px solid #dcdde1;border-right-width:0;border-radius:3px 0 0 3px;padding:10px 16px;font-weight:600;cursor:pointer}.aioseo-copy-block .copy:hover svg.aioseo-copy{color:#a7a7a7}.aioseo-copy-block .copy svg.aioseo-copy{width:20px;height:20px;color:#dadada}.aioseo-copy-block .copy svg.aioseo-circle-check-solid{width:20px;height:20px;color:#00aa63}.aioseo-display-info .aioseo-box-toggle svg{margin-top:-15px;color:#434960}.aioseo-display-info svg.aioseo-new-page,.aioseo-display-info svg.aioseo-shortcode,.aioseo-display-info svg.aioseo-widget{width:100%;height:auto;max-width:60px}.aioseo-display-info svg.aioseo-gutenberg-block{width:59px;height:54px}.aioseo-display-info svg.aioseo-gutenberg-block rect{width:100%;width:56px;height:51px}.aioseo-display-info svg.aioseo-php{width:110px}.aioseo-display-info .copy-box,.aioseo-display-info .extra-box{margin-top:10px;padding:30px;border-radius:3px;background-color:#f9f9fa}.aioseo-display-info .copy-box .aioseo-description,.aioseo-display-info .extra-box .aioseo-description{margin:0}.aioseo-display-info .copy-box .aioseo-copy-block,.aioseo-display-info .extra-box .aioseo-copy-block{margin:20px 0 0}.aioseo-display-info .copy-box .advanced-settings-link,.aioseo-display-info .extra-box .advanced-settings-link{display:inline-block;padding-top:5px;margin:16px 16px 0 0;color:#8c8f9a;text-decoration:underline;font-size:13px}.aioseo-display-info .copy-box .advanced-settings-link:hover,.aioseo-display-info .extra-box .advanced-settings-link:hover{text-decoration:none}.aioseo-display-info .copy-box .advanced-settings,.aioseo-display-info .extra-box .advanced-settings{padding-top:20px}.aioseo-display-info .advanced-settings.advanced-settings-hidden{display:none}.aioseo-display-info .aioseo-tooltip{margin-right:0}.aioseo-exclude-posts{display:flex}.aioseo-facebook-preview{background-color:#f0f2f5;padding:30px;display:flex;align-items:center;justify-content:center}.aioseo-facebook-preview .facebook-post{width:100%;max-width:525px;border-radius:10px;box-shadow:0 2px 5px rgba(0,0,0,.1);background-color:#fff}.aioseo-facebook-preview .facebook-post .facebook-header{height:65px;padding:0 18px;display:flex;align-items:center}.aioseo-facebook-preview .facebook-post .facebook-header .profile-photo{overflow:hidden;width:40px;height:40px;border:1px solid #e8e8eb;border-radius:50%}.aioseo-facebook-preview .facebook-post .facebook-header .profile-photo img{height:100%;width:100%}.aioseo-facebook-preview .facebook-post .facebook-header .poster{margin-right:10px;flex:1 0 auto}.aioseo-facebook-preview .facebook-post .facebook-header .poster .poster-name{font-size:15px;color:#050505;font-weight:500}.aioseo-facebook-preview .facebook-post .facebook-header .poster .poster-date{color:#65676b;font-size:13px}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis{display:inline-flex;align-items:center}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div{background-color:#5e666f;width:4px;height:4px;border-radius:50%;margin:0 2px}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div:first-child{margin-right:0}.aioseo-facebook-preview .facebook-post .facebook-header .ellipsis div:last-child{margin-left:0}.aioseo-facebook-preview .facebook-post .facebook-content{display:flex;flex-direction:column}.aioseo-facebook-preview .facebook-post .facebook-content img{width:100%;height:auto}.aioseo-facebook-preview .facebook-post .facebook-content.vertical{flex-direction:row}.aioseo-facebook-preview .facebook-post .facebook-content.vertical img{max-width:158px;max-height:158px;width:auto;height:auto}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description{flex:1;background-color:#f2f3f5;padding:9px 13px;color:#606770}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-domain{font-size:13px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-title{color:#1d2129;font-size:17px;font-weight:600;margin:5px 0}.aioseo-facebook-preview .facebook-post .facebook-content .facebook-site-description .site-description{font-size:14px}.aioseo-facebook-preview .facebook-post .facebook-footer{height:24px}.aioseo-feature-card{height:100%;border:1px solid #e8e8eb;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.05);color:#141b38;display:flex;flex-direction:column}.aioseo-feature-card .feature-card-body{padding:30px 30px 20px;flex:1}.aioseo-feature-card .feature-card-body.static{padding:30px}.aioseo-feature-card .feature-card-body .feature-card-header{display:flex;align-items:center;font-size:18px;font-weight:600;margin-bottom:16px}.aioseo-feature-card .feature-card-body .feature-card-header img,.aioseo-feature-card .feature-card-body .feature-card-header svg{width:28px;height:28px;margin-left:10px}.aioseo-feature-card .feature-card-body .feature-card-description{color:#434960;font-size:15px}.aioseo-feature-card .feature-card-body .feature-card-description .learn-more{margin-top:10px}.aioseo-feature-card .feature-card-footer{padding:15px}.aioseo-feature-card .feature-card-footer:not(.upgrade-required){border:2px solid #fff;background-color:#f9f9fa;padding:12px;min-height:43px}.aioseo-feature-card .feature-card-footer .feature-card-install-activate{display:flex;align-items:center;justify-content:flex-end;height:30px;position:relative}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .aioseo-loading-spinner{position:absolute;right:0}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .status{font-weight:600;font-size:14px}.aioseo-feature-card .feature-card-footer .feature-card-install-activate .aioseo-toggle .toggle-content{margin-left:0;margin-right:10px}.aioseo-feature-card .feature-card-footer .feature-card-upgrade-cta{display:flex;align-items:center;justify-content:flex-end}.aioseo-feature-card .feature-card-footer.installed .feature-card-install-activate .status{color:#8c8f9a}.aioseo-setup-wizard-container{margin-top:30px;margin-bottom:50px;padding:30px;color:#fff;position:relative;background-color:#005ae0}@media only screen and (max-width:782px){.aioseo-setup-wizard-container{margin-top:20px}}.aioseo-setup-wizard-container p{color:#fff}.aioseo-setup-wizard-container .getting-started-wrapper{display:flex}.aioseo-setup-wizard-container .getting-started-wrapper .video{flex:0 0 533px;margin:20px 20px 0}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper{padding-bottom:56.25%;margin-bottom:-60px;position:relative;height:0}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper iframe{width:100%;height:100%;position:absolute;top:0;right:0}@media only screen and (max-width:1350px){.aioseo-setup-wizard-container .getting-started-wrapper .video{flex:0 0 593px;margin:20px;align-self:center}.aioseo-setup-wizard-container .getting-started-wrapper .video .wrapper{margin-bottom:0}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:100%;max-width:100%;justify-content:center}}@media only screen and (max-width:1300px){.aioseo-setup-wizard-container .getting-started-wrapper{flex-direction:row;flex-wrap:wrap}.aioseo-setup-wizard-container .getting-started-wrapper .video{margin:20px 0 -60px}.aioseo-setup-wizard-container .getting-started-wrapper .text,.aioseo-setup-wizard-container .getting-started-wrapper .video{flex-basis:100%;width:100%}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions{justify-content:center}.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:inherit;max-width:inherit;justify-content:center}}@media only screen and (max-width:782px){.aioseo-setup-wizard-container .getting-started-wrapper .wizard-actions .aioseo-col{flex-basis:100%;max-width:100%;justify-content:center}}.aioseo-setup-wizard-container .aioseo-row{position:relative;z-index:1}.aioseo-setup-wizard-container .wizard-actions .aioseo-col{display:flex;align-items:center}.aioseo-setup-wizard-container .wizard-actions .aioseo-button svg{width:16px;height:16px;margin-left:10px}.aioseo-setup-wizard-container .setup-wizard-bg{width:100%;height:100%;overflow:hidden;z-index:0;position:absolute;top:0;right:0}.aioseo-setup-wizard-container .setup-wizard-bg svg.aioseo-setup-wizard-bg,.aioseo-setup-wizard-container .setup-wizard-bg svg.aioseo-setup-wizard-bg rect{width:auto;height:100%}.aioseo-setup-wizard-container .close-wizard{color:#fff;width:20px;height:20px;position:absolute;left:20px;top:20px;z-index:1;display:flex;align-items:center;justify-content:center}.aioseo-setup-wizard-container .close-wizard:hover{color:#ccc}.aioseo-setup-wizard-container .close-wizard svg.aioseo-close{width:12px;height:12px;cursor:pointer;color:#fff}.aioseo-setup-wizard-container .close-wizard svg.aioseo-close:hover{color:#dadada}.aioseo-setup-wizard-container p.how-to-get-started{margin:0}.aioseo-setup-wizard-container p.welcome-text{line-height:1.6}.aioseo-setup-wizard-container h2{color:#fff;line-height:1.4}.aioseo-setup-wizard-container a{color:#fff}.aioseo-setup-wizard-container svg.aioseo-book{width:20px;height:20px;margin:0 0 0 10px}.aioseo-setup-wizard-container .getting-started-video{padding-left:20px;margin-bottom:-60px;position:relative;height:0;padding-bottom:56.25%}.aioseo-setup-wizard-container .getting-started-video iframe{width:100%;height:100%;position:absolute;top:0;right:0}.aioseo-google-search-preview{padding:32px 30px;border:1px solid #e8e8eb}.aioseo-google-search-preview .domain{font-size:14px;line-height:1.3;color:#3c4043;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-google-search-preview .site-title{font-size:20px;line-height:1.3;color:#1a0dab;margin:3px 0}.aioseo-google-search-preview .meta-description{max-width:600px;font-size:14px;line-height:1.4;color:#52565a}.edit-post-sidebar .domain,.editor-post-publish-panel .domain{font-size:13px}.edit-post-sidebar .site-title,.editor-post-publish-panel .site-title{font-size:16px}.edit-post-sidebar .meta-description,.editor-post-publish-panel .meta-description{font-size:12px}.aioseo-modal-content .domain,.aioseo-modal-content .meta-description{font-size:14px}.aioseo-modal-content .site-title{font-size:20px}html:not([data-scroll="0"]) .aioseo-header{box-shadow:0 2px 5px rgba(0,0,0,.05);transition:box-shadow .6s}.aioseo-header{position:fixed;z-index:1051;top:0;left:0;right:0;background-color:#fff;height:72px;color:#141b38}.aioseo-header .mascot{width:35px;height:auto;margin-left:10px}.aioseo-header .aioseo-header-content{padding:0;display:flex;height:72px;align-items:center}.aioseo-header .aioseo-header-content a:focus{box-shadow:none}.aioseo-header .aioseo-header-content svg.aioseo-logo{height:26px;margin-left:10px}.aioseo-header .aioseo-header-content .spacer{display:inline-flex;width:26.25px;height:0;border:1px solid #d0d1d7;transform:rotate(72.26deg)}.aioseo-header .aioseo-header-content .page-name{display:inline-flex;margin-right:10px;font-size:18px;font-weight:400;flex:1 0 auto}.aioseo-header .aioseo-header-content .header-actions{display:flex}.aioseo-header .aioseo-header-content .header-actions .round{position:relative;background-color:#f3f4f5;border-radius:50%;width:40px;height:40px;display:flex;align-items:center;justify-content:center;margin-right:10px;cursor:pointer;transition:background-color .2s ease}.aioseo-header .aioseo-header-content .header-actions .round svg{width:20px;height:20px}.aioseo-header .aioseo-header-content .header-actions .round:hover{background-color:#e5e7e9}.aioseo-header .aioseo-header-content .header-actions .number{position:absolute;background-color:#df2a4a;width:16px;height:16px;font-weight:600;font-size:10px;color:#fff;top:-8px;right:50%;transform:translateX(50%);margin:0;-webkit-animation:bounce 2s 5;animation:bounce 2s 5}.aioseo-header .aioseo-header-content .header-actions .number:hover{background-color:#df2a4a}@-webkit-keyframes bounce{0%,25%,50%,75%,to{transform:translateX(50%) translateY(0)}40%{transform:translateX(50%) translateY(-8px)}60%{transform:translateX(50%) translateY(-4px)}}@keyframes bounce{0%,25%,50%,75%,to{transform:translateX(50%) translateY(0)}40%{transform:translateX(50%) translateY(-8px)}60%{transform:translateX(50%) translateY(-4px)}}body.modal-open{overflow:hidden}.aioseo-help{display:block;position:fixed;top:0;bottom:0;right:0;left:0;height:100%;width:100vw;background-color:#fff;color:#8c8f9a;opacity:0;max-height:100vh;overflow-y:auto;transition:opacity .3s ease-in 0s;z-index:-999}.aioseo-help.visible{opacity:1;z-index:100000}.aioseo-help .aioseo-help-header{background:#fff;width:100%;height:60px;z-index:1;padding:20px;display:flex}.aioseo-help .aioseo-help-header>.logo{flex:1}.aioseo-help .aioseo-help-docs{margin-bottom:25px;display:none}.aioseo-help .aioseo-help-docs li{padding:0 4px 14px 0;margin:0}.aioseo-help .aioseo-help-docs .aioseo-help-docs-viewall{margin:10px 0 0}.aioseo-help .aioseo-help-docs .aioseo-help-additional-docs{display:none}.aioseo-help .aioseo-help-docs .aioseo-help-additional-docs.opened{display:block}.aioseo-help .aioseo-help-docs .icon .aioseo-description{width:20px;margin-top:0;position:relative;top:5px;right:-5px;color:#8c8f9a}.aioseo-help .help-content{background-color:#fff;width:100%;max-width:740px;margin:0 auto 50px;padding:0 20px;box-sizing:border-box;z-index:1}.aioseo-help .help-content .aioseo-help-category{border-top:1px solid #e8e8eb;margin:0}.aioseo-help .help-content .aioseo-help-category:last-child{border-bottom:1px solid #e8e8eb}.aioseo-help .help-content .aioseo-help-category header{display:block;position:relative;cursor:pointer;width:100%;height:68px}.aioseo-help .help-content .aioseo-help-category header .title{display:block;font-size:16px;color:#8c8f9a;font-weight:600;padding:23px 30px 23px 11px}.aioseo-help .help-content .aioseo-help-category .folder-open{position:absolute;top:24px;width:20px;height:20px;color:#8c8f9a}.aioseo-help .help-content .aioseo-help-category .dashicons-arrow-right-alt2{position:absolute;top:20px;left:0;transition:transform .3s ease-out}.aioseo-help .help-content .aioseo-help-category.opened .aioseo-help-docs{display:block}.aioseo-help .help-content .aioseo-help-category.opened .dashicons-arrow-right-alt2{transform:rotate(-90deg)}.aioseo-help .help-content #aioseo-help-search{position:relative;background-color:#fff;text-align:center;top:0;padding:20px 0 50px}.aioseo-help .help-content #aioseo-help-result .aioseo-help-docs{display:block}.aioseo-help .help-content #aioseo-help-footer{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;margin:50px 0 0}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer{display:block}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block{box-sizing:border-box;max-width:325px;border:1px solid #8c8f9a;border-radius:6px;text-align:center}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block{max-width:100%}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block:first-child{margin-left:20px}@media screen and (max-width:750px){.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block:first-child{margin:0 0 20px}}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a{display:block;padding:25px;text-decoration:none;color:#8c8f9a}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a h3{color:#8c8f9a}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a span{font-size:16px;color:#005ae0;text-decoration:underline}.aioseo-help .help-content #aioseo-help-footer .aioseo-help-footer-block a:hover span{text-decoration:none}.aioseo-help .help-content #aioseo-help-footer .aioseo-description,.aioseo-help .help-content #aioseo-help-footer .aioseo-support{width:48px;margin-top:0;color:#8c8f9a}#aioseo-help-logo{width:132px;height:26px;z-index:2}#aioseo-help-close{width:20px;height:20px;cursor:pointer;opacity:.7;transition:all .05s;z-index:2}@media screen and (max-width:750px){#aioseo-help-close{top:20px;left:20px}}.aioseo-html-tags-editor .no-access{margin-bottom:20px}.aioseo-html-tags-editor .aioseo-description.tags-description{margin:0 0 20px}.aioseo-html-tags-editor .add-tags{display:flex;align-items:center;margin-bottom:20px}.aioseo-html-tags-editor .add-tags div{margin-left:10px}.aioseo-html-tags-editor .add-tags a{font-size:14px}.aioseo-html-tags-editor .add-tags a.no-underline{padding-right:10px}.aioseo-loading-spinner{width:35px;height:35px;position:absolute}.aioseo-loading-spinner .double-bounce1,.aioseo-loading-spinner .double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#fff;opacity:.6;position:absolute;top:0;right:0;-webkit-animation:sk-bounce 1.3s ease-in-out infinite;animation:sk-bounce 1.3s ease-in-out infinite}.aioseo-loading-spinner.dark .double-bounce1,.aioseo-loading-spinner.dark .double-bounce2{background-color:#8c8f9a}.aioseo-loading-spinner .double-bounce2{-webkit-animation-delay:-.65s;animation-delay:-.65s}@-webkit-keyframes sk-bounce{0%,to{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}}@keyframes sk-bounce{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}body.vue-build{margin:0}body.vue-build .aioseo-app{min-height:calc(100vh - 88px)}body.vue-build .aioseo-app .aioseo-main{padding-bottom:30px}body.aioseo-setup-wizard{margin:0;padding:0}body.aioseo-setup-wizard .aioseo-app{min-height:100vh;width:100%}body[class*=page_aioseo] .aioseo-header,body[class*=page_aioseo] .aioseo-notifications .overlay{right:160px}body[class*=page_aioseo].folded .aioseo-header,body[class*=page_aioseo].folded .aioseo-notifications .overlay{right:36px}body[class*=page_aioseo] #wpcontent{padding:0;background-color:#f3f4f5}body[class*=page_aioseo] .update-nag{display:none}body[class*=page_aioseo].admin-bar .aioseo-app{min-height:calc(100vh - 185px)}body[class*=page_aioseo].admin-bar.aioseo-has-bar .aioseo-app{min-height:calc(100vh - 225px)}body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .notification-menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{top:32px}body[class*=page_aioseo] .aioseo-app{min-height:calc(100vh - 153px)}body[class*=page_aioseo].aioseo-has-bar .aioseo-app{min-height:calc(100vh - 193px)}body[class*=page_aioseo].aioseo-has-bar .aioseo-header{height:112px}@media screen and (max-width:782px){body[class*=page_aioseo].aioseo-has-bar .aioseo-header{height:132px}}@media screen and (max-width:960px){body[class*=page_aioseo].auto-fold .aioseo-header,body[class*=page_aioseo].auto-fold .aioseo-notifications .overlay{right:36px}}@media screen and (max-width:782px){body[class*=page_aioseo] #wpbody-content{padding-bottom:20px}body[class*=page_aioseo].admin-bar .aioseo-app{min-height:calc(100vh - 199px)}body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .notification-menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{top:46px}body[class*=page_aioseo] .aioseo-header,body[class*=page_aioseo] .aioseo-notifications .overlay,body[class*=page_aioseo].auto-fold .aioseo-header,body[class*=page_aioseo].auto-fold .aioseo-notifications .overlay{right:0}}@media screen and (max-width:600px){body[class*=page_aioseo].admin-bar .aioseo-header,body[class*=page_aioseo].admin-bar .aioseo-notifications .menu,body[class*=page_aioseo].admin-bar .aioseo-notifications .overlay{position:absolute;top:46px}}body.aioseo-has-bar .aioseo-app .aioseo-main>.aioseo-container{margin-top:128px}@media screen and (max-width:782px){body.aioseo-has-bar .aioseo-app .aioseo-main>.aioseo-container{margin-top:148px}}.aioseo-app{box-sizing:border-box;background-color:#f3f4f5}.aioseo-app .route-fade-enter-active,.aioseo-app .route-fade-leave-active{transition:all .2s}.aioseo-app .route-fade-enter,.aioseo-app .route-fade-leave-active{opacity:0}.aioseo-app .route-fade-enter{transform:translateX(-30px)}.aioseo-app .route-fade-leave-active{transform:translateX(30px)}.aioseo-app *,.aioseo-app :after,.aioseo-app :before{box-sizing:inherit}.aioseo-app * :not(.aioseo-button):not(.aioseo-input),.aioseo-app :after :not(.aioseo-button):not(.aioseo-input),.aioseo-app :before :not(.aioseo-button):not(.aioseo-input){line-height:1.4}.aioseo-app p{font-size:16px}.aioseo-app a:not(.aioseo-button){color:#005ae0}.aioseo-app a:not(.aioseo-button).text-white{color:#fff}.aioseo-app a:not(.aioseo-button).no-underline,.aioseo-app a:not(.aioseo-button):hover{text-decoration:none}.aioseo-app h2{font-size:32px;margin:0}.aioseo-app .aioseo-main{height:100%}.aioseo-app .aioseo-main>.aioseo-container{margin-top:88px}.aioseo-app .aioseo-main .save-changes{display:flex;justify-content:flex-end}.aioseo-app .d-flex{display:flex}.aioseo-app .aioseo-section-description{font-size:16px;color:#141b38;line-height:1.8;padding-bottom:30px}.aioseo-app .aioseo-description-text{font-size:14px;line-height:1.8;color:#141b38}.aioseo-app .aioseo-description-text.aioseo-error{color:#df2a4a}.aioseo-app .aioseo-description{font-size:14px;line-height:1.8;margin:8px 0 0;color:#141b38}.aioseo-app .aioseo-description.no-margin{margin:0}.aioseo-app .aioseo-description.aioseo-error{color:#df2a4a}.aioseo-app .max-recommended-count{color:#434960;text-align:left;margin-top:10px;font-size:14px}.aioseo-app .max-recommended-count strong.error{color:#df2a4a}.aioseo-app .popper{text-align:right;font-size:12px;padding:20px;background-color:#fff;border:none;border-radius:3px;box-shadow:0 3px 4.8px 0 rgba(32,71,102,.27);z-index:9999;max-width:350px;line-height:1.4}.aioseo-app .popper.action{padding:8px 12px;background-color:#141b38;color:#fff}.aioseo-app .popper.action .popper__arrow{border-top-color:#141b38}.aioseo-app .popper[x-placement^=bottom]{box-shadow:0 -2px 4.8px 0 rgba(32,71,102,.27)}.aioseo-app .popper .aioseo-description{margin:0}.aioseo-app .aioseo-row-highlight{-webkit-animation-name:color;animation-name:color;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-iteration-count:2;animation-iteration-count:2}@-webkit-keyframes color{0%{background-color:#fff}50%{background-color:#00aa63}to{background-color:#fff}}@keyframes color{0%{background-color:#fff}50%{background-color:#00aa63}to{background-color:#fff}}.column-aioseo-details{position:relative}.aioseo-seo-site-score .aioseo-blur{display:flex;align-items:center}.aioseo-seo-site-score .aioseo-seo-site-score-cta{position:absolute;right:50%;top:50%;transform:translateX(50%) translateY(-50%);background-color:#fff;padding:24px 30px;border:1px solid #e8e8eb;box-shadow:0 2px 10px rgba(0,90,224,.2);color:#141b38;font-size:16px;font-weight:600;width:82%;max-width:500px;text-align:center}.aioseo-app .aioseo-upgrade-bar{height:40px;background-color:#00aa63;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;padding:0 40px 0 14px}.aioseo-app .aioseo-upgrade-bar .upgrade-text{display:flex;align-items:center;flex:1;justify-content:center}.aioseo-app .aioseo-upgrade-bar .upgrade-arrow{font-size:15px;text-decoration:none}.aioseo-app .aioseo-upgrade-bar .upgrade-arrow:hover{text-decoration:none}.aioseo-app .aioseo-upgrade-bar strong{font-weight:600}.aioseo-app .aioseo-upgrade-bar svg.aioseo-logo-gear{width:20px;height:20px;min-width:20px;margin-left:14px}.aioseo-app .aioseo-upgrade-bar svg.aioseo-close{cursor:pointer;width:12px;height:12px}.aioseo-app .aioseo-upgrade-bar a{color:#fff;text-decoration:underline}.aioseo-app .aioseo-upgrade-bar a:hover{text-decoration:none}@media screen and (max-width:782px){.aioseo-app .aioseo-upgrade-bar{padding:0 10px;height:60px}}.field-description[data-v-2bfc1de2]{display:inline-block;margin-top:10px;font-size:14px}.aioseo-address-wrapper[data-v-4bc9bbe6]{display:flex;max-width:500px}.field-description[data-v-4bc9bbe6]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-4bc9bbe6]{margin-top:8px}.field-description[data-v-a0a894b8]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-a0a894b8]{margin-top:8px}.field-description[data-v-4fb4e044]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-4fb4e044]{margin-top:8px}.field-description[data-v-85733554]{display:inline-block;margin-top:10px;font-size:14px}.field-description[data-v-515336a2]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-515336a2]{margin-top:8px}.field-description[data-v-78337de7]{display:inline-block;margin-bottom:10px;font-size:14px}.mt-8[data-v-78337de7]{margin-top:8px}.aioseo-general-settings .more-tooltip-text strong{color:#00aa63}.aioseo-general-settings .license-cta-box{border-radius:3px;background-color:#f2f7fd;padding:20px;max-width:630px;margin:10px 0 30px}.aioseo-general-settings .license-cta-box a{color:#00aa63}.aioseo-general-settings .license-cta-box div{font-weight:600}.aioseo-general-settings .license-cta-box span{font-size:14px;font-style:italic}.aioseo-general-settings .license-key{margin-top:10px;display:flex;max-width:560px}.aioseo-general-settings .license-key .aioseo-input{margin-left:10px}.aioseo-app .aioseo-tabs.internal{margin-bottom:0}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation{margin-top:5px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button{height:60px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 25px}.aioseo-app .aioseo-tabs.internal .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple .md-ripple-wave{display:none}.aioseo-app .aioseo-tabs.skinny .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 16px}.aioseo-app .md-tabs{display:flex;flex-direction:column}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation{margin-top:2px;background:transparent;display:flex;position:relative;justify-content:flex-start}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation.md-elevation-0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button{color:#141b38;max-width:264px;min-width:72px;height:60px;margin:0;border-radius:0;font-size:15px;font-weight:500;padding:0;display:inline-block;position:relative;overflow:hidden;outline:none;background:transparent;border:0;transition:.4s cubic-bezier(.4,0,.2,1);font-family:inherit;line-height:normal;text-decoration:none;vertical-align:top;white-space:nowrap}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:before{position:absolute;top:0;left:0;bottom:0;right:0;opacity:0;transition:.4s cubic-bezier(.4,0,.2,1);will-change:background-color,opacity;content:" "}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple{padding:0 18px;display:flex;justify-content:center;align-items:center;width:100%;height:100%;position:relative;overflow:hidden;-webkit-mask-image:radial-gradient(circle,#fff 100%,#000 0);mask-image:radial-gradient(circle,#fff 100%,#000 0)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button .md-ripple .md-button-content{position:static;z-index:2}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]){cursor:pointer}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]):active:before,.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button:not([disabled]):hover:before{background-color:currentColor;opacity:.12}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button.md-active{color:#005ae0}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-button.md-active:focus{outline:none;box-shadow:none}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator{height:2px;background-color:#005ae0;bottom:-2px;position:absolute;right:0;transform:translateZ(0);will-change:left,right}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator.md-tabs-indicator-left{transition:right .3s cubic-bezier(.4,0,.2,1),left .35s cubic-bezier(.4,0,.2,1)}.aioseo-app .md-tabs.md-theme-default .md-tabs-navigation .md-tabs-indicator.md-tabs-indicator-right{transition:left .3s cubic-bezier(.4,0,.2,1),right .35s cubic-bezier(.4,0,.2,.1)}.aioseo-app .aioseo-tabs{display:flex;border-bottom:2px solid #e8e8eb;position:relative;margin-bottom:38px}.aioseo-app .aioseo-tabs .save-changes{position:absolute;left:0;bottom:10px}.aioseo-app .aioseo-tabs .tab-score{display:inline-flex;align-items:center;justify-content:flex-end;font-size:11px;font-weight:700;padding-right:12px}.aioseo-app .aioseo-tabs .tab-score.green{color:#00aa63}.aioseo-app .aioseo-tabs .tab-score.orange{color:#f18200}.aioseo-app .aioseo-tabs .tab-score.red{color:#df2a4a}.aioseo-app .aioseo-tabs .tab-score svg{display:inline;margin-left:7px}.aioseo-app .aioseo-mobile-tabs{position:relative;height:40px;margin-top:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.aioseo-app .aioseo-mobile-tabs .active-tab{color:#005ae0;padding-right:18px;min-height:100%;display:flex;align-items:center;cursor:pointer}.aioseo-app .aioseo-mobile-tabs .active-tab div{position:relative}.aioseo-app .aioseo-mobile-tabs .active-tab div span{height:2px;background-color:#005ae0;bottom:-7px;position:absolute;right:-18px;left:-18px;z-index:10}.aioseo-app .aioseo-mobile-tabs .active-tab svg.aioseo-caret{width:24px;height:24px;position:relative;top:6px;cursor:pointer;transition:transform .3s}.aioseo-app .aioseo-mobile-tabs .active-tab svg.aioseo-caret.rotated{transform:rotate(-180deg)}.aioseo-app .aioseo-mobile-tabs .tab-dropdown{border:1px solid #e8e8eb;border-top:none}.aioseo-app .aioseo-mobile-tabs .tab-links{background:#fff;position:relative;z-index:3;padding:8px;width:100%;max-width:300px}@media screen and (max-width:782px){.aioseo-app .aioseo-mobile-tabs .tab-links{max-width:100%}}.aioseo-app .aioseo-mobile-tabs .tab-links a{padding:10px;display:block;color:#141b38;text-decoration:none}.aioseo-app .aioseo-mobile-tabs .tab-links a:hover{color:#005ae0}.md-tooltip{background-color:#141b38!important;color:#fff!important;border-radius:2px;padding:6px 12px;font-size:14px}.md-tooltip:after{content:"";position:absolute;top:100%;right:50%;margin-right:-5px;border:5px solid transparent;border-top-color:#141b38}.modal-mask{position:fixed;z-index:9998;top:0;right:0;width:100%;height:100%;background-color:rgba(20,27,56,.3);display:table;transition:opacity .3s ease}@media screen and (max-width:520px){.modal-mask{display:block;top:46px}}.modal-mask .modal-wrapper{display:table-cell;vertical-align:middle}@media screen and (max-width:520px){.modal-mask .modal-wrapper{display:block;height:100%}}.modal-mask .modal-wrapper .modal-container{width:100%;max-width:750px;max-height:90vh;overflow-y:hidden;overflow-x:hidden;margin:0 auto;background-color:#fff;box-shadow:0 10px 30px rgba(0,0,0,.15);transition:all .3s ease}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container{width:100%;max-width:100%;max-height:calc(100vh - 46px);height:100%}}.modal-mask .modal-wrapper .modal-container .modal-header{color:#141b38;position:sticky;top:0;z-index:15;padding:0 40px 0 0;height:70px;font-size:20px;font-weight:700;line-height:1.4;border-bottom:1px solid #e8e8eb;background-color:#fff;display:flex;align-items:center}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container .modal-header{padding:15px 20px 0 0}}.modal-mask .modal-wrapper .modal-container .modal-header button.close{position:absolute;left:11px;top:11px;width:24px;height:24px;background-color:#fff;border:none;display:flex;align-items:center}.modal-mask .modal-wrapper .modal-container .modal-header button.close svg.aioseo-close{cursor:pointer;width:14px;height:14px}.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-post-general,.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-post-social{height:calc(90vh - 120px);max-height:600px;overflow-y:auto;overflow-x:hidden}.modal-mask .modal-wrapper .modal-container .modal-body .aioseo-modal-content.has-padding{padding:40px}@media screen and (max-width:520px){.modal-mask .modal-wrapper .modal-container .aioseo-modal-content,.modal-mask .modal-wrapper .modal-container .aioseo-modal-content>.component-wrapper,.modal-mask .modal-wrapper .modal-container .modal-body,.modal-mask .modal-wrapper .modal-container .modal-body>div{height:100%}.modal-mask .modal-wrapper .modal-container .aioseo-modal-content>.component-wrapper{display:flex;align-items:flex-end}.modal-mask .modal-wrapper .modal-container .aioseo-post-general,.modal-mask .modal-wrapper .modal-container .aioseo-post-social{height:100%!important;max-height:100%!important;padding:20px!important}.modal-mask .modal-wrapper .modal-container .aioseo-post-general .mobile-radio-buttons,.modal-mask .modal-wrapper .modal-container .aioseo-post-social .mobile-radio-buttons{margin-bottom:0}.modal-mask .modal-wrapper .modal-container .aioseo-add-template-tag{display:none}.modal-mask .modal-wrapper .modal-container .tab-facebook .aioseo-settings-row:last-of-type,.modal-mask .modal-wrapper .modal-container .tab-twitter .aioseo-settings-row:last-of-type{margin-bottom:64px!important;padding-bottom:32px!important}}.modal-enter,.modal-leave-active{opacity:0}.modal-enter .modal-container,.modal-leave-active .modal-container{transform:scale(1.1)}.aioseo-notification>div .body .title .date{font-weight:400;color:#8c8f9a;font-size:12px}.aioseo-notification-cards .aioseo-notification:last-child>div{border-bottom:none;margin-bottom:none}.aioseo-notification-cards .no-notifications{display:flex;align-items:center;flex-direction:column;padding-top:100px;font-size:16px;color:#8c8f9a}.aioseo-notification-cards .no-notifications img{width:30%;height:auto}.aioseo-notification-cards .no-notifications .great-scott{margin:20px 0 10px;font-size:24px;font-weight:600;color:#434960}.aioseo-notification-cards .no-notifications .no-new-notifications{margin-bottom:10px}body.aioseo-show-notifications .aioseo-main{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.aioseo-notifications a.dismiss{color:#8c8f9a;font-size:14px}.aioseo-notifications .notification-menu{height:100%;width:100%;max-width:570px;position:fixed;z-index:1053;top:0;left:0;bottom:0;background-color:#fff;overflow-x:hidden;transition:.5s}.aioseo-notifications .notification-menu .notification-header{height:70px;display:flex;align-items:center;padding:0 30px;color:#fff;background-color:#005ae0}.aioseo-notifications .notification-menu .notification-header .new-notifications{font-size:18px;font-weight:600}.aioseo-notifications .notification-menu .notification-header .dismissed-notifications{margin-right:25px;flex:1 1 auto}.aioseo-notifications .notification-menu .notification-header .dismissed-notifications a{font-size:14px;color:#fff}.aioseo-notifications .notification-menu .notification-header svg.aioseo-close{width:14px;height:14px;cursor:pointer}.aioseo-notifications .notification-menu .notification-header svg.aioseo-close:hover{color:#ccc}.aioseo-notifications .notification-menu .notification-cards{padding:30px;height:calc(100% - 192px);overflow:auto}.aioseo-notifications .notification-menu .notification-footer{height:90px;padding:30px;display:flex;align-items:center}.aioseo-notifications .notification-menu .notification-footer div.pagination{flex:1;display:flex;align-items:center}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number{font-size:13px;color:#141b38;background:#e8e8eb;height:30px;width:30px;display:flex;align-items:center;justify-content:center;border-radius:2px;margin-left:4px;cursor:pointer}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number:last-child{margin-left:0}.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number.active,.aioseo-notifications .notification-menu .notification-footer div.pagination .page-number:hover{color:#fff;background-color:#005ae0}.aioseo-notifications .overlay{position:fixed;z-index:1052;top:0;left:0;bottom:0;right:160px;background-color:#141b38;opacity:.5;transition:.5s}.aioseo-notifications .notifications-fade-enter-active,.aioseo-notifications .notifications-fade-leave-active{transition:opacity .5s}.aioseo-notifications .notifications-fade-enter,.aioseo-notifications .notifications-fade-leave-to{opacity:0}.aioseo-notifications .notifications-slide-enter-active,.aioseo-notifications .notifications-slide-leave-active{transition:all .5s ease-in-out}.aioseo-notifications .notifications-slide-enter,.aioseo-notifications .notifications-slide-leave-to{left:-570px}.aioseo-post-type-options-toggle{margin-top:20px}.aioseo-priority-score{max-width:350px}.aioseo-priority-score .header-row{font-size:14px}.aioseo-pro-badge{height:24px;border-radius:3px;background:#e8e8eb;color:#434960;font-size:14px;font-weight:600;display:inline-flex;padding:0 8px;align-items:center}.aioseo-score-settings{display:flex;align-items:center;padding-bottom:14px}.aioseo-score-settings svg{margin-left:7px}.aioseo-score-settings span{margin-left:12px}.aioseo-score-button{display:inline-block;padding:5px 8px;font-size:14px;font-weight:700;color:#a1a1a1;border:1px solid #a1a1a1;border-radius:3px}.aioseo-score-button.score-none,.aioseo-score-button.score-red{border-color:#df2a4a;color:#df2a4a!important}.aioseo-score-button.score-orange{border-color:#f18200;color:#f18200!important}.aioseo-score-button.score-green{border-color:#00aa63;color:#00aa63!important}.aioseo-score-button.classic-editor{background:#fff!important;display:inline-block!important;height:auto!important}.aioseo-score-button.classic-editor span{margin-left:0}.aioseo-seo-site-analysis-result{border:1px solid #dcdde1;margin-top:10px}.aioseo-seo-site-analysis-result .result-header{height:66px;padding:0 20px;display:flex;align-items:center}.aioseo-seo-site-analysis-result .result-header .result-icon{display:flex;align-items:center;margin-left:16px}.aioseo-seo-site-analysis-result .result-header .result-icon svg{width:24px;height:24px;color:#8c8f9a}.aioseo-seo-site-analysis-result .result-header .result-icon svg.passed{color:#00aa63}.aioseo-seo-site-analysis-result .result-header .result-icon svg.error{color:#df2a4a}.aioseo-seo-site-analysis-result .result-header .result-icon svg.warning{color:#005ae0}.aioseo-seo-site-analysis-result .result-header .result-content{font-size:16px;font-weight:600;flex:1}.aioseo-seo-site-analysis-result .result-header .result-toggle{width:30px;height:26px;border:1px solid #dcdde1;border-radius:3px;display:flex;align-items:center;justify-content:center;cursor:pointer}.aioseo-seo-site-analysis-result .result-header .result-toggle.active,.aioseo-seo-site-analysis-result .result-header .result-toggle:hover{background-color:#434960}.aioseo-seo-site-analysis-result .result-header .result-toggle.active svg,.aioseo-seo-site-analysis-result .result-header .result-toggle:hover svg{color:#fff}.aioseo-seo-site-analysis-result .result-header .result-toggle.active svg{transform:rotate(180deg)}.aioseo-seo-site-analysis-result .result-header .result-toggle svg{width:100%;max-width:20px;height:auto;color:#8c8f9a;transform:rotate(90deg);transition:transform .3s}.aioseo-seo-site-analysis-result .result-body{padding:0 60px 24px}.aioseo-seo-site-analysis-result .result-body .result-message{color:#434960;font-size:16px}.aioseo-seo-site-analysis-result .result-body .result-code-alt pre,.aioseo-seo-site-analysis-result .result-body .result-code pre{background:#f3f4f5;border-radius:3px;max-width:100%;padding:10px;overflow:auto}.aioseo-seo-site-analysis-result .result-body .result-code-alt pre code,.aioseo-seo-site-analysis-result .result-body .result-code pre code{padding:0;background:transparent}.aioseo-seo-site-analysis-result .result-body .result-code pre{white-space:pre-wrap}.aioseo-seo-site-analysis-result .result-body .result-action{margin-top:20px}.aioseo-seo-site-analysis-results .group-header{font-size:16px;font-weight:600}.aioseo-seo-site-analysis-results .group-header:not(:first-child){margin-top:30px}.aioseo-seo-site-analysis-results .group-keywords{display:flex;margin-top:5px;flex-wrap:wrap;align-items:center}.aioseo-seo-site-analysis-results .group-keywords .keyword{font-size:14px;color:#434960;font-weight:600;background:#f3f4f5;padding:9px 10px;border-radius:3px;margin:0 0 5px 10px}.aioseo-seo-site-analysis-results .group-keywords .keyword:first-child{font-size:20px}.aioseo-settings-row{margin-bottom:22px;padding-bottom:16px;border-bottom:1px solid #e8e8eb}.aioseo-settings-row.no-margin{margin-bottom:0}.aioseo-settings-row.small-padding{padding-bottom:5px}.aioseo-settings-row.medium-margin{margin-bottom:15px}.aioseo-settings-row.no-border{border:none}.aioseo-settings-row.no-side-margin{margin-right:0!important;margin-left:0!important}.aioseo-settings-row .settings-name{color:#141b38}.aioseo-settings-row .settings-name .name{font-weight:600;font-size:16px;display:flex;align-items:center}.aioseo-settings-row .settings-name .name.small-margin{margin-bottom:5px}.aioseo-settings-row .settings-name .name.align{line-height:40px}.aioseo-settings-row .settings-name .name.align-small{line-height:30px}.aioseo-settings-row .settings-name .name .aioseo-pro-badge{margin-right:10px}.aioseo-settings-row .settings-name .aioseo-description{margin-top:20px}.aioseo-settings-row .settings-content{font-size:16px}.aioseo-settings-row p.description{font-size:14px}.aioseo-separators{margin-top:-.5rem}.aioseo-separators .aioseo-col .separator{background-color:#f3f4f5;display:flex;align-items:center;justify-content:center;min-height:51px;font-weight:600;font-size:25px;border:1px solid #dcdde1;border-radius:3px;cursor:pointer}.aioseo-separators .aioseo-col .separator:hover{background-color:#e5e7e9}.aioseo-separators .aioseo-col .separator.active{background-color:#005ae0;border-color:#005ae0;color:#fff}.aioseo-separators .aioseo-col .separator.active:hover{background-color:#005ae0}.aioseo-separators .aioseo-col .show-more{height:100%;display:flex;align-items:center}.aioseo-separators .aioseo-col .show-more a{color:#8c8f9a}.aioseo-separators .aioseo-col .custom-separator{margin:20px 0;display:flex;align-items:center}.aioseo-separators .aioseo-col .custom-separator .aioseo-input{margin-right:10px;max-width:100px}.aioseo-sidebar-card .header{height:46px}.aioseo-sidebar-card .header:hover{cursor:pointer}.aioseo-sidebar-card .content{padding-bottom:8px!important}.aioseo-sidebar-card ul{margin-bottom:0}.aioseo-sidebar-card ul li{margin-bottom:16px;padding-right:25px}.aioseo-sidebar-card ul .description{margin:0}.aioseo-robots-meta .global-robots-settings{margin:0;padding-top:24px}.aioseo-robots-meta .global-robots-settings>.settings{padding:8px 0 16px}.aioseo-robots-meta .global-robots-settings-options{display:flex}.aioseo-robots-meta .global-robots-settings-options .max-snippet{margin-left:30px}.aioseo-robots-meta .global-robots-settings-options .max-snippet .aioseo-input{max-width:90px}.aioseo-robots-meta .global-robots-settings-options .max-video-preview{margin-left:30px}.aioseo-robots-meta .global-robots-settings-options .max-video-preview .aioseo-input{max-width:90px}.aioseo-robots-meta .global-robots-settings-options .max-image-preview .aioseo-select{min-width:155px}.aioseo-robots-meta .global-robots-settings-options>span{display:inline-block;margin-bottom:4px}@media screen and (max-width:782px){.aioseo-robots-meta .global-robots-settings-options{display:block}.aioseo-robots-meta .global-robots-settings-options .max-snippet,.aioseo-robots-meta .global-robots-settings-options .max-video-preview{margin-left:0;margin-bottom:20px}.aioseo-robots-meta .global-robots-settings-options>div .aioseo-input,.aioseo-robots-meta .global-robots-settings-options>div .aioseo-select{min-width:100%}}.edit-post-sidebar .global-robots-settings{padding-top:12px}.edit-post-sidebar .global-robots-settings>.settings{padding:4px 0 12px}.edit-post-sidebar .global-robots-settings>.settings label{font-size:16px}.edit-post-sidebar .global-robots-settings .robots-meta-title{padding-top:4px;display:inline-block}.edit-post-sidebar .global-robots-settings-options{flex-wrap:wrap}.edit-post-sidebar .max-snippet{margin-left:30px!important}.edit-post-sidebar .max-video-preview{margin-left:0!important}.edit-post-sidebar .max-image-preview{margin-top:20px!important}.aioseo-score-amount-wrapper{position:absolute;right:0;top:0;left:0;bottom:0;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#141b38;margin:20px}.aioseo-score-amount-wrapper .aioseo-score-amount .score{font-size:64px;font-weight:600}.aioseo-score-amount-wrapper .aioseo-score-amount .total{font-size:18px;color:#8c8f9a;padding-right:3px}.aioseo-score-amount-wrapper .score-description{max-width:80%;text-align:center;font-size:17px;font-weight:600;line-height:1.1}.aioseo-score-amount-wrapper .score-analyzing{margin-top:20px;font-size:30px}.aioseo-site-score-analyze{position:relative;display:flex;align-items:center;justify-content:center;flex:1}.aioseo-site-score-analyze .analyze-errors{text-align:center;margin-bottom:1em}.aioseo-site-score-analyze .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-left:5em}.aioseo-site-score-analyze .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-analyze .aioseo-seo-site-score-description h2{line-height:1.4}.aioseo-site-score-analyze .aioseo-seo-site-score-description svg.aioseo-book{width:20px;height:20px;margin:0 0 0 10px;color:#005ae0}.aioseo-site-score-analyze .aioseo-seo-site-score-description>div{font-size:16px;color:#141b38;margin-bottom:10px}.aioseo-site-score-analyze .aioseo-seo-site-score-description .links{margin-top:30px;font-size:14px;font-weight:600}.aioseo-site-score-analyze .aioseo-seo-site-score-description .links .no-underline{padding-right:5px}.aioseo-site-score-competitor{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column}.aioseo-site-score-competitor .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-left:1em}.aioseo-site-score-competitor .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations{margin:20px 0}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links){display:flex;align-items:center;font-size:14px;color:#141b38;font-weight:600;margin-bottom:10px}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round{position:relative;border-radius:50%;width:24px;min-width:24px;max-width:24px;height:24px;display:flex;align-items:center;justify-content:center;margin-left:10px;font-size:12px;color:#fff;font-weight:600}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.red{background-color:#df2a4a}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.blue{background-color:#005ae0}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.orange{background-color:#f18200}.aioseo-site-score-competitor .aioseo-seo-site-score-recommendations>div:not(.links) .round.green{background-color:#00aa63}.aioseo-site-score-competitor .refresh-results .aioseo-refresh{width:14px;height:14px;margin-left:10px}.aioseo-site-score-competitor .mobile-snapshot{margin-top:60px;max-width:250px}.aioseo-site-score-competitor .mobile-snapshot div{font-weight:600;font-size:16px;margin-bottom:10px}.aioseo-site-score-competitor .mobile-snapshot img{width:100%;height:auto}.aioseo-site-score-dashboard{position:relative;display:flex;align-items:center;justify-content:center}.aioseo-site-score-dashboard .analyze-errors{text-align:center;margin-bottom:1em}.aioseo-site-score-dashboard .aioseo-seo-site-score-score{position:relative;min-width:175px;max-width:217px;margin-left:1em}.aioseo-site-score-dashboard .aioseo-seo-site-score-score svg{width:100%;height:auto}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links){display:flex;align-items:center;font-size:14px;color:#141b38;font-weight:600;margin-bottom:10px}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round{position:relative;border-radius:50%;width:24px;min-width:24px;max-width:24px;height:24px;display:flex;align-items:center;justify-content:center;margin-left:10px;font-size:12px;color:#fff;font-weight:600}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.red{background-color:#df2a4a}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.blue{background-color:#005ae0}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.orange{background-color:#f18200}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations>div:not(.links) .round.green{background-color:#00aa63}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations .links{margin-top:30px;font-size:14px;font-weight:600}.aioseo-site-score-dashboard .aioseo-seo-site-score-recommendations .links .no-underline{padding-right:5px}.aioseo-social-profiles .same-username .use-same{padding:30px;background:#f9f9fa}.aioseo-social-profiles .same-username .use-same .aioseo-checkbox{font-size:16px}.aioseo-social-profiles .aioseo-social-profile-list,.aioseo-social-profiles .same-username .use-same .aioseo-settings-row,.aioseo-social-profiles .same-username .use-same .profiles{margin-top:20px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile{margin-bottom:0;padding-bottom:0;border-bottom:none}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .logo-svg{margin-left:10px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .profile-error{margin-top:10px}.aioseo-social-profiles .aioseo-social-profile-list .social-profile .name{margin-bottom:0}.aioseo-tooltip{margin-right:14px;display:inline-flex}.aioseo-tooltip,.aioseo-twitter-preview{align-items:center;justify-content:center}.aioseo-twitter-preview{background-color:#f0f2f5;padding:30px;display:flex}.aioseo-twitter-preview .twitter-post{width:100%;max-width:500px;border-radius:5px;border:1px solid #e1e8ed;background-color:#fff}.aioseo-twitter-preview .twitter-post .twitter-header{height:65px;padding:0 18px;display:flex;align-items:center}.aioseo-twitter-preview .twitter-post .twitter-header .profile-photo{overflow:hidden;width:40px;height:40px;border:1px solid #e8e8eb;border-radius:50%}.aioseo-twitter-preview .twitter-post .twitter-header .profile-photo img{height:100%;width:100%}.aioseo-twitter-preview .twitter-post .twitter-header .poster{margin-right:10px;flex:1 0 auto}.aioseo-twitter-preview .twitter-post .twitter-header .poster .poster-name{font-size:15px;color:#1c2022;font-weight:600}.aioseo-twitter-preview .twitter-post .twitter-header .poster .poster-username{color:#697882;font-weight:500;font-size:13px}.aioseo-twitter-preview .twitter-post .twitter-container{padding:0 20px 20px}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content{flex-direction:row}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content .twitter-image-preview{display:flex;align-items:center;justify-content:center;background-color:#e1e8ed;min-width:125px;min-height:125px;background-size:cover;background-repeat:no-repeat;background-position:50%}.aioseo-twitter-preview .twitter-post .twitter-container.summary .twitter-content .twitter-image-preview svg.aioseo-book{width:50px;height:50px;color:#8999a5}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content{border-radius:10px;overflow:hidden;display:flex;flex-direction:column;border:1px solid #e1e8ed}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content img{width:100%;height:auto}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description{padding:18px;color:#1c2022}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-domain{font-size:14px;color:#8899a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-title{font-size:15px;font-weight:600}.aioseo-twitter-preview .twitter-post .twitter-container .twitter-content .twitter-site-description .site-description{font-size:14px;margin:5px 0}.aioseo-col .reverse{flex-direction:column-reverse}.aioseo-col.col-xs,.aioseo-col.col-xs-1,.aioseo-col.col-xs-2,.aioseo-col.col-xs-3,.aioseo-col.col-xs-4,.aioseo-col.col-xs-5,.aioseo-col.col-xs-6,.aioseo-col.col-xs-7,.aioseo-col.col-xs-8,.aioseo-col.col-xs-9,.aioseo-col.col-xs-10,.aioseo-col.col-xs-11,.aioseo-col.col-xs-12,.aioseo-col.col-xs-offset-0,.aioseo-col.col-xs-offset-1,.aioseo-col.col-xs-offset-2,.aioseo-col.col-xs-offset-3,.aioseo-col.col-xs-offset-4,.aioseo-col.col-xs-offset-5,.aioseo-col.col-xs-offset-6,.aioseo-col.col-xs-offset-7,.aioseo-col.col-xs-offset-8,.aioseo-col.col-xs-offset-9,.aioseo-col.col-xs-offset-10,.aioseo-col.col-xs-offset-11,.aioseo-col.col-xs-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-xs{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-xs-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-xs-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-xs-3{flex-basis:25%;max-width:25%}.aioseo-col.col-xs-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-xs-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-xs-6{flex-basis:50%;max-width:50%}.aioseo-col.col-xs-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-xs-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-xs-9{flex-basis:75%;max-width:75%}.aioseo-col.col-xs-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-xs-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-xs-12{flex-basis:100%;max-width:100%}.aioseo-col.col-xs-offset-0{margin-right:0}.aioseo-col.col-xs-offset-1{margin-right:8.33333333%}.aioseo-col.col-xs-offset-2{margin-right:16.66666667%}.aioseo-col.col-xs-offset-3{margin-right:25%}.aioseo-col.col-xs-offset-4{margin-right:33.33333333%}.aioseo-col.col-xs-offset-5{margin-right:41.66666667%}.aioseo-col.col-xs-offset-6{margin-right:50%}.aioseo-col.col-xs-offset-7{margin-right:58.33333333%}.aioseo-col.col-xs-offset-8{margin-right:66.66666667%}.aioseo-col.col-xs-offset-9{margin-right:75%}.aioseo-col.col-xs-offset-10{margin-right:83.33333333%}.aioseo-col.col-xs-offset-11{margin-right:91.66666667%}.aioseo-col.first-xs{order:-1}.aioseo-col.last-xs{order:1}.aioseo-col.text-xs-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-xs-center{text-align:center!important;justify-content:center}.aioseo-col.text-xs-right{text-align:left!important;justify-content:flex-end}.aioseo-col.p-0{padding:0!important}.aioseo-col.pt-0,.aioseo-col.py-0{padding-top:0!important}.aioseo-col.pr-0,.aioseo-col.px-0{padding-left:0!important}.aioseo-col.pb-0,.aioseo-col.py-0{padding-bottom:0!important}.aioseo-col.pl-0,.aioseo-col.px-0{padding-right:0!important}.aioseo-col.p-1{padding:.25rem!important}.aioseo-col.pt-1,.aioseo-col.py-1{padding-top:.25rem!important}.aioseo-col.pr-1,.aioseo-col.px-1{padding-left:.25rem!important}.aioseo-col.pb-1,.aioseo-col.py-1{padding-bottom:.25rem!important}.aioseo-col.pl-1,.aioseo-col.px-1{padding-right:.25rem!important}.aioseo-col.p-2{padding:.5rem!important}.aioseo-col.pt-2,.aioseo-col.py-2{padding-top:.5rem!important}.aioseo-col.pr-2,.aioseo-col.px-2{padding-left:.5rem!important}.aioseo-col.pb-2,.aioseo-col.py-2{padding-bottom:.5rem!important}.aioseo-col.pl-2,.aioseo-col.px-2{padding-right:.5rem!important}.aioseo-col.p-3{padding:1rem!important}.aioseo-col.pt-3,.aioseo-col.py-3{padding-top:1rem!important}.aioseo-col.pr-3,.aioseo-col.px-3{padding-left:1rem!important}.aioseo-col.pb-3,.aioseo-col.py-3{padding-bottom:1rem!important}.aioseo-col.pl-3,.aioseo-col.px-3{padding-right:1rem!important}.aioseo-col.p-4{padding:1.5rem!important}.aioseo-col.pt-4,.aioseo-col.py-4{padding-top:1.5rem!important}.aioseo-col.pr-4,.aioseo-col.px-4{padding-left:1.5rem!important}.aioseo-col.pb-4,.aioseo-col.py-4{padding-bottom:1.5rem!important}.aioseo-col.pl-4,.aioseo-col.px-4{padding-right:1.5rem!important}.aioseo-col.p-5{padding:3rem!important}.aioseo-col.pt-5,.aioseo-col.py-5{padding-top:3rem!important}.aioseo-col.pr-5,.aioseo-col.px-5{padding-left:3rem!important}.aioseo-col.pb-5,.aioseo-col.py-5{padding-bottom:3rem!important}.aioseo-col.pl-5,.aioseo-col.px-5{padding-right:3rem!important}@media only screen and (min-width:782px){.aioseo-col.col-sm,.aioseo-col.col-sm-1,.aioseo-col.col-sm-2,.aioseo-col.col-sm-3,.aioseo-col.col-sm-4,.aioseo-col.col-sm-5,.aioseo-col.col-sm-6,.aioseo-col.col-sm-7,.aioseo-col.col-sm-8,.aioseo-col.col-sm-9,.aioseo-col.col-sm-10,.aioseo-col.col-sm-11,.aioseo-col.col-sm-12,.aioseo-col.col-sm-offset-0,.aioseo-col.col-sm-offset-1,.aioseo-col.col-sm-offset-2,.aioseo-col.col-sm-offset-3,.aioseo-col.col-sm-offset-4,.aioseo-col.col-sm-offset-5,.aioseo-col.col-sm-offset-6,.aioseo-col.col-sm-offset-7,.aioseo-col.col-sm-offset-8,.aioseo-col.col-sm-offset-9,.aioseo-col.col-sm-offset-10,.aioseo-col.col-sm-offset-11,.aioseo-col.col-sm-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-sm{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-sm-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-sm-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-sm-3{flex-basis:25%;max-width:25%}.aioseo-col.col-sm-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-sm-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-sm-6{flex-basis:50%;max-width:50%}.aioseo-col.col-sm-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-sm-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-sm-9{flex-basis:75%;max-width:75%}.aioseo-col.col-sm-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-sm-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-sm-12{flex-basis:100%;max-width:100%}.aioseo-col.col-sm-offset-0{margin-right:0}.aioseo-col.col-sm-offset-1{margin-right:8.33333333%}.aioseo-col.col-sm-offset-2{margin-right:16.66666667%}.aioseo-col.col-sm-offset-3{margin-right:25%}.aioseo-col.col-sm-offset-4{margin-right:33.33333333%}.aioseo-col.col-sm-offset-5{margin-right:41.66666667%}.aioseo-col.col-sm-offset-6{margin-right:50%}.aioseo-col.col-sm-offset-7{margin-right:58.33333333%}.aioseo-col.col-sm-offset-8{margin-right:66.66666667%}.aioseo-col.col-sm-offset-9{margin-right:75%}.aioseo-col.col-sm-offset-10{margin-right:83.33333333%}.aioseo-col.col-sm-offset-11{margin-right:91.66666667%}.aioseo-col.first-sm{order:-1}.aioseo-col.last-sm{order:1}.aioseo-col.text-sm-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-sm-center{text-align:center!important;justify-content:center}.aioseo-col.text-sm-right{text-align:left!important;justify-content:flex-end}}@media only screen and (min-width:912px){.aioseo-col.col-md,.aioseo-col.col-md-1,.aioseo-col.col-md-2,.aioseo-col.col-md-3,.aioseo-col.col-md-4,.aioseo-col.col-md-5,.aioseo-col.col-md-6,.aioseo-col.col-md-7,.aioseo-col.col-md-8,.aioseo-col.col-md-9,.aioseo-col.col-md-10,.aioseo-col.col-md-11,.aioseo-col.col-md-12,.aioseo-col.col-md-offset-0,.aioseo-col.col-md-offset-1,.aioseo-col.col-md-offset-2,.aioseo-col.col-md-offset-3,.aioseo-col.col-md-offset-4,.aioseo-col.col-md-offset-5,.aioseo-col.col-md-offset-6,.aioseo-col.col-md-offset-7,.aioseo-col.col-md-offset-8,.aioseo-col.col-md-offset-9,.aioseo-col.col-md-offset-10,.aioseo-col.col-md-offset-11,.aioseo-col.col-md-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-md{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-md-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-md-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-md-3{flex-basis:25%;max-width:25%}.aioseo-col.col-md-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-md-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-md-6{flex-basis:50%;max-width:50%}.aioseo-col.col-md-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-md-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-md-9{flex-basis:75%;max-width:75%}.aioseo-col.col-md-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-md-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-md-12{flex-basis:100%;max-width:100%}.aioseo-col.col-md-offset-0{margin-right:0}.aioseo-col.col-md-offset-1{margin-right:8.33333333%}.aioseo-col.col-md-offset-2{margin-right:16.66666667%}.aioseo-col.col-md-offset-3{margin-right:25%}.aioseo-col.col-md-offset-4{margin-right:33.33333333%}.aioseo-col.col-md-offset-5{margin-right:41.66666667%}.aioseo-col.col-md-offset-6{margin-right:50%}.aioseo-col.col-md-offset-7{margin-right:58.33333333%}.aioseo-col.col-md-offset-8{margin-right:66.66666667%}.aioseo-col.col-md-offset-9{margin-right:75%}.aioseo-col.col-md-offset-10{margin-right:83.33333333%}.aioseo-col.col-md-offset-11{margin-right:91.66666667%}.aioseo-col.first-md{order:-1}.aioseo-col.last-md{order:1}.aioseo-col.text-md-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-md-center{text-align:center!important;justify-content:center}.aioseo-col.text-md-right{text-align:left!important;justify-content:flex-end}}@media only screen and (min-width:1042px){.aioseo-col.col-lg,.aioseo-col.col-lg-1,.aioseo-col.col-lg-2,.aioseo-col.col-lg-3,.aioseo-col.col-lg-4,.aioseo-col.col-lg-5,.aioseo-col.col-lg-6,.aioseo-col.col-lg-7,.aioseo-col.col-lg-8,.aioseo-col.col-lg-9,.aioseo-col.col-lg-10,.aioseo-col.col-lg-11,.aioseo-col.col-lg-12,.aioseo-col.col-lg-offset-0,.aioseo-col.col-lg-offset-1,.aioseo-col.col-lg-offset-2,.aioseo-col.col-lg-offset-3,.aioseo-col.col-lg-offset-4,.aioseo-col.col-lg-offset-5,.aioseo-col.col-lg-offset-6,.aioseo-col.col-lg-offset-7,.aioseo-col.col-lg-offset-8,.aioseo-col.col-lg-offset-9,.aioseo-col.col-lg-offset-10,.aioseo-col.col-lg-offset-11,.aioseo-col.col-lg-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-lg{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-lg-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-lg-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-lg-3{flex-basis:25%;max-width:25%}.aioseo-col.col-lg-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-lg-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-lg-6{flex-basis:50%;max-width:50%}.aioseo-col.col-lg-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-lg-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-lg-9{flex-basis:75%;max-width:75%}.aioseo-col.col-lg-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-lg-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-lg-12{flex-basis:100%;max-width:100%}.aioseo-col.col-lg-offset-0{margin-right:0}.aioseo-col.col-lg-offset-1{margin-right:8.33333333%}.aioseo-col.col-lg-offset-2{margin-right:16.66666667%}.aioseo-col.col-lg-offset-3{margin-right:25%}.aioseo-col.col-lg-offset-4{margin-right:33.33333333%}.aioseo-col.col-lg-offset-5{margin-right:41.66666667%}.aioseo-col.col-lg-offset-6{margin-right:50%}.aioseo-col.col-lg-offset-7{margin-right:58.33333333%}.aioseo-col.col-lg-offset-8{margin-right:66.66666667%}.aioseo-col.col-lg-offset-9{margin-right:75%}.aioseo-col.col-lg-offset-10{margin-right:83.33333333%}.aioseo-col.col-lg-offset-11{margin-right:91.66666667%}.aioseo-col.first-lg{order:-1}.aioseo-col.last-lg{order:1}.aioseo-col.text-lg-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-lg-center{text-align:center!important;justify-content:center}.aioseo-col.text-lg-right{text-align:left!important;justify-content:flex-end}}@media only screen and (min-width:1140px){.aioseo-col.col-xl,.aioseo-col.col-xl-1,.aioseo-col.col-xl-2,.aioseo-col.col-xl-3,.aioseo-col.col-xl-4,.aioseo-col.col-xl-5,.aioseo-col.col-xl-6,.aioseo-col.col-xl-7,.aioseo-col.col-xl-8,.aioseo-col.col-xl-9,.aioseo-col.col-xl-10,.aioseo-col.col-xl-11,.aioseo-col.col-xl-12,.aioseo-col.col-xl-offset-0,.aioseo-col.col-xl-offset-1,.aioseo-col.col-xl-offset-2,.aioseo-col.col-xl-offset-3,.aioseo-col.col-xl-offset-4,.aioseo-col.col-xl-offset-5,.aioseo-col.col-xl-offset-6,.aioseo-col.col-xl-offset-7,.aioseo-col.col-xl-offset-8,.aioseo-col.col-xl-offset-9,.aioseo-col.col-xl-offset-10,.aioseo-col.col-xl-offset-11,.aioseo-col.col-xl-offset-12{box-sizing:border-box;flex:0 0 auto;padding:.5rem}.aioseo-col.col-xl{flex-grow:1;flex-basis:0;max-width:100%}.aioseo-col.col-xl-1{flex-basis:8.33333333%;max-width:8.33333333%}.aioseo-col.col-xl-2{flex-basis:16.66666667%;max-width:16.66666667%}.aioseo-col.col-xl-3{flex-basis:25%;max-width:25%}.aioseo-col.col-xl-4{flex-basis:33.33333333%;max-width:33.33333333%}.aioseo-col.col-xl-5{flex-basis:41.66666667%;max-width:41.66666667%}.aioseo-col.col-xl-6{flex-basis:50%;max-width:50%}.aioseo-col.col-xl-7{flex-basis:58.33333333%;max-width:58.33333333%}.aioseo-col.col-xl-8{flex-basis:66.66666667%;max-width:66.66666667%}.aioseo-col.col-xl-9{flex-basis:75%;max-width:75%}.aioseo-col.col-xl-10{flex-basis:83.33333333%;max-width:83.33333333%}.aioseo-col.col-xl-11{flex-basis:91.66666667%;max-width:91.66666667%}.aioseo-col.col-xl-12{flex-basis:100%;max-width:100%}.aioseo-col.col-xl-offset-0{margin-right:0}.aioseo-col.col-xl-offset-1{margin-right:8.33333333%}.aioseo-col.col-xl-offset-2{margin-right:16.66666667%}.aioseo-col.col-xl-offset-3{margin-right:25%}.aioseo-col.col-xl-offset-4{margin-right:33.33333333%}.aioseo-col.col-xl-offset-5{margin-right:41.66666667%}.aioseo-col.col-xl-offset-6{margin-right:50%}.aioseo-col.col-xl-offset-7{margin-right:58.33333333%}.aioseo-col.col-xl-offset-8{margin-right:66.66666667%}.aioseo-col.col-xl-offset-9{margin-right:75%}.aioseo-col.col-xl-offset-10{margin-right:83.33333333%}.aioseo-col.col-xl-offset-11{margin-right:91.66666667%}.aioseo-col.first-xl{order:-1}.aioseo-col.last-xl{order:1}.aioseo-col.text-xl-left{text-align:right!important;justify-content:flex-start}.aioseo-col.text-xl-center{text-align:center!important;justify-content:center}.aioseo-col.text-xl-right{text-align:left!important;justify-content:flex-end}}.aioseo-container,.aioseo-container-fluid{margin-left:auto;margin-right:auto}.aioseo-container{padding:0 20px}.aioseo-container-fluid.hero,.aioseo-container.hero{min-height:100vh;display:flex;justify-content:center;align-items:center}.aioseo-container-fluid{padding-left:2rem;padding-right:2rem}@media only screen and (min-width:782px){.aioseo-container{padding:0 30px}}@media only screen and (min-width:1042px){.aioseo-container{max-width:80rem}.aioseo-container.full-width{max-width:100%}.aioseo-container.small{max-width:810px}}.aioseo-masonry{-moz-column-count:0;column-count:0;-moz-column-gap:20px;column-gap:20px;counter-reset:brick-counter}.aioseo-masonry>*{box-sizing:border-box;-moz-column-break-inside:avoid;break-inside:avoid;counter-increment:brick-counter;margin-bottom:20px}@media only screen and (min-width:782px){.aioseo-masonry{-moz-column-count:1;column-count:1}}@media only screen and (min-width:912px){.aioseo-masonry{-moz-column-count:2;column-count:2}}@media only screen and (min-width:1042px){.aioseo-masonry{-moz-column-count:3;column-count:3}}.aioseo-row{box-sizing:border-box;display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap;margin-left:-.5rem;margin-right:-.5rem}.aioseo-row.reverse{flex-direction:row-reverse}.aioseo-row.start-xs{justify-content:flex-start;text-align:start}.aioseo-row.center-xs{justify-content:center;text-align:center}.aioseo-row.end-xs{justify-content:flex-end;text-align:end}.aioseo-row.top-xs{align-items:flex-start}.aioseo-row.middle-xs{align-items:center}.aioseo-row.bottom-xs{align-items:flex-end}.aioseo-row.around-xs{justify-content:space-around}.aioseo-row.between-xs{justify-content:space-between}@media only screen and (min-width:782px){.aioseo-row.start-sm{justify-content:flex-start;text-align:start}.aioseo-row.center-sm{justify-content:center;text-align:center}.aioseo-row.end-sm{justify-content:flex-end;text-align:end}.aioseo-row.top-sm{align-items:flex-start}.aioseo-row.middle-sm{align-items:center}.aioseo-row.bottom-sm{align-items:flex-end}.aioseo-row.around-sm{justify-content:space-around}.aioseo-row.between-sm{justify-content:space-between}}@media only screen and (min-width:912px){.aioseo-row.start-md{justify-content:flex-start;text-align:start}.aioseo-row.center-md{justify-content:center;text-align:center}.aioseo-row.end-md{justify-content:flex-end;text-align:end}.aioseo-row.top-md{align-items:flex-start}.aioseo-row.middle-md{align-items:center}.aioseo-row.bottom-md{align-items:flex-end}.aioseo-row.around-md{justify-content:space-around}.aioseo-row.between-md{justify-content:space-between}}@media only screen and (min-width:1042px){.aioseo-row.start-lg{justify-content:flex-start;text-align:start}.aioseo-row.center-lg{justify-content:center;text-align:center}.aioseo-row.end-lg{justify-content:flex-end;text-align:end}.aioseo-row.top-lg{align-items:flex-start}.aioseo-row.middle-lg{align-items:center}.aioseo-row.bottom-lg{align-items:flex-end}.aioseo-row.around-lg{justify-content:space-around}.aioseo-row.between-lg{justify-content:space-between}}.aioseo-display-info svg.aioseo-new-page{width:100%;height:auto;max-width:45px}.aioseo-display-info .new-page .aioseo-row{margin:0}.aioseo-display-info .new-page svg.aioseo-external{width:14px;height:14px;margin-left:10px}.aioseo-display-info .new-page .aioseo-description{color:#434960}.aioseo-display-info .new-page button.aioseo-html-sitemaps-disabled-button{border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default}.aioseo-display-info .new-page .aioseo-alert{width:100%;margin:8px 8px 0}.aioseo-exclude-posts{display:block}.aioseo-exclude-posts .aioseo-select{max-width:600px;display:inline-block;margin-left:10px}.aioseo-exclude-posts .aioseo-select button{display:none}.aioseo-exclude-posts .aioseo-select .multiselect__option{display:flex}.aioseo-exclude-posts .aioseo-select .multiselect__option--highlight .option-title{color:#005ae0}.aioseo-exclude-posts .aioseo-button.gray{margin-top:10px}.aioseo-exclude-posts .option{flex:1 0 auto}.aioseo-exclude-posts .option .option-title{font-weight:500;font-size:16px;color:#141b38}.aioseo-exclude-posts .option .option-title .search-term{font-weight:700}.aioseo-exclude-posts .option .option-details{display:flex;align-items:center;font-size:14px;color:#8c8f9a}.aioseo-exclude-posts .option .option-details span{margin-left:15px}.aioseo-exclude-posts .option-permalink{display:flex;align-items:center}.aioseo-exclude-posts .option-permalink svg.aioseo-external{width:15px;height:15px;color:#434960}.aioseo-exclude-posts .multiselect-toggle{padding:10px 13px;width:40px;position:absolute;height:36px;left:2px;top:2px;text-align:center;z-index:1}.aioseo-exclude-posts .multiselect-toggle svg.aioseo-add-plus{width:14px;height:14px;color:#000}.aioseo-sidebar-row .aioseo-included-objects-toggle{margin-top:5px}.aioseo-sidebar-row .aioseo-included-objects-toggle .aioseo-included-list{margin-top:8px}.aioseo-notification{margin-bottom:20px}.aioseo-notification>div{display:flex;align-items:flex-start;padding-bottom:10px;border-bottom:1px solid #e8e8eb}.aioseo-notification>div .icon{margin-left:20px}.aioseo-notification>div .icon svg{width:20px;height:20px;color:#00aa63}.aioseo-notification>div .icon svg.warning{color:#f18200}.aioseo-notification>div .icon svg.info{color:#005ae0}.aioseo-notification>div .icon svg.success{color:#00aa63}.aioseo-notification>div .icon svg.error{color:#df2a4a}.aioseo-notification>div .body{margin-left:20px;flex:1}.aioseo-notification>div .body .title{font-size:16px;font-weight:600;color:#141b38;margin-bottom:7px;display:flex;align-items:center}.aioseo-notification>div .body .title div:first-child{flex:1;margin-left:5px;line-height:1.4}.aioseo-notification>div .body .notification-content{margin-bottom:10px;max-width:400px}.aioseo-notification>div .body .actions{flex-wrap:wrap;display:flex;align-items:center}.aioseo-notification>div .body .actions>*{margin-bottom:10px}.aioseo-notification>div .body .actions .aioseo-button{margin-left:20px}.aioseo-notification>div .body .actions .dismiss{color:#8c8f9a;font-size:14px}.aioseo-seo-site-score__circle{animation:aioseo-seo-site-score-fill 1s reverse;transform:rotate(180deg);transform-origin:center;stroke:#00aa63}.aioseo-seo-site-score__circle.fast{-webkit-animation-duration:.5s;animation-duration:.5s;stroke:#df2a4a}.aioseo-seo-site-score__circle.medium{-webkit-animation-duration:.75s;animation-duration:.75s;stroke:#f18200}.aioseo-seo-site-score__background{stroke:#e8e8eb}@-webkit-keyframes aioseo-seo-site-score-fill{to{stroke-dasharray:0 100}}@keyframes aioseo-seo-site-score-fill{to{stroke-dasharray:0 100}}.aioseo-seo-site-score-svg-loading{-webkit-animation:aioseo-seo-site-score-svg-animation 2s linear infinite;animation:aioseo-seo-site-score-svg-animation 2s linear infinite}.aioseo-seo-site-score-loading__circle{-webkit-animation:aioseo-seo-site-score-fill-loading 2s ease-in-out infinite both;animation:aioseo-seo-site-score-fill-loading 2s ease-in-out infinite both;transform:rotate(180deg);transform-origin:center;stroke:#005ae0}@-webkit-keyframes aioseo-seo-site-score-svg-animation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@keyframes aioseo-seo-site-score-svg-animation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@-webkit-keyframes aioseo-seo-site-score-fill-loading{0%,25%{stroke-dashoffset:90;transform:rotate(0)}50%,75%{stroke-dashoffset:10;transform:rotate(-45deg)}to{stroke-dashoffset:90;transform:rotate(-1turn)}}@keyframes aioseo-seo-site-score-fill-loading{0%,25%{stroke-dashoffset:90;transform:rotate(0)}50%,75%{stroke-dashoffset:10;transform:rotate(-45deg)}to{stroke-dashoffset:90;transform:rotate(-1turn)}}.aioseo-table-column{display:flex;flex-direction:column;flex-basis:100%;flex:1;padding:5px;justify-content:center}.aioseo-table-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.aioseo-wizard-body{background-color:#fff;max-width:900px;box-shadow:0 2px 5px rgba(0,0,0,.05)}.aioseo-wizard-body .body-content{padding:80px 140px}@media screen and (max-width:782px){.aioseo-wizard-body .body-content{padding:40px}}.aioseo-wizard-body .body-content .header{line-height:1.4}.aioseo-wizard-body .body-footer{border-top:1px solid #e8e8eb;padding:30px;display:flex;align-items:center}.aioseo-wizard-body .body-footer>*{margin-left:10px}.aioseo-wizard-body .body-footer>:last-child{margin-left:0}.aioseo-wizard-body .body-footer .spacer{flex:1 0 auto}.aioseo-wizard-close-and-exit{margin:96px 0;min-height:96px;text-align:center;font-size:14px}.aioseo-wizard-close-and-exit a{color:#8c8f9a!important}.aioseo-wizard-container{margin:40px auto;max-width:900px}@media screen and (max-width:782px){.aioseo-wizard-container{margin:0 20px}}.aioseo-wizard-header{display:flex;align-items:center;justify-content:center;flex-direction:column}.aioseo-wizard-header svg.aioseo-logo{width:100%;max-width:140px;height:auto;margin:60px 0 40px 10px}.aioseo-wizard-progress{display:flex;align-items:center;justify-content:center}@media screen and (max-width:782px){.aioseo-wizard-progress{display:none}}.aioseo-wizard-progress .circle{background-color:#dcdde1;width:16px;height:16px;border-radius:50%}.aioseo-wizard-progress .circle.active{background-color:#005ae0}.aioseo-wizard-progress .spacer{width:59px;border:1px solid #dcdde1;margin:0 12px}.aioseo-wizard-progress .spacer.active{border-color:#005ae0}.aioseo-wizard-steps{color:#8c8f9a;font-size:14px;margin-bottom:20px}.block-editor-block-card{align-items:center}.block-editor-block-card__title.block-editor-block-card__title{margin:0}.aioseo-sidebar-row{margin-bottom:16px}.aioseo-sidebar-row .aioseo-sidebar-title{font-weight:500}
|
dist/Lite/assets/css/headline-analyzer.css
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
/*! ! built on
|
2 |
Â
.aioseo-inline-buttons{display:grid;grid-template-columns:repeat(2, 1fr)}.aioseo-switcher-button{border:0;border-radius:0;font-size:14px;font-weight:normal;color:#434960;padding:16px 10px;box-shadow:0px 2px 0px #e8e8eb;cursor:pointer;text-align:left;white-space:nowrap;position:relative;transition:0.4s cubic-bezier(0.4, 0, 0.2, 1);background:#fafafa}.aioseo-switcher-button:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;opacity:0;transition:0.4s cubic-bezier(0.4, 0, 0.2, 1);will-change:background-color,opacity;content:" "}.aioseo-switcher-button.active:before,.aioseo-switcher-button:hover:before,.aioseo-switcher-button:active:before{background-color:currentColor;opacity:.12}.aioseo-switcher-button.active{font-weight:700;color:#141B38;box-shadow:0px 2px 0px #005AE0}.aioseo-headline-analyzer-wrapper{position:relative}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-pie-chart-container{position:relative;width:200px;height:200px;margin:0 auto;margin-bottom:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-total-out-of-score{font-size:18px;color:#8c8f9a;font-weight:600;z-index:0}.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened svg.components-panel__arrow{transform:rotate(0deg)}.aioseo-headline-analyzer-wrapper .components-panel__body svg.components-panel__arrow{transform:rotate(-90deg);top:50%;margin-top:-12px;transition:.3s}.aioseo-headline-analyzer-wrapper p{font-size:13px;color:#434960;margin-bottom:16px}.aioseo-headline-analyzer-wrapper p>strong{font-size:13px;font-weight:700}.aioseo-headline-analyzer-wrapper .green{color:#00aa63}.aioseo-headline-analyzer-wrapper .orange{color:#f18200}.aioseo-headline-analyzer-wrapper .red{color:#df2a4a}.aioseo-headline-analyzer-wrapper .green-bg{background:#00aa63}.aioseo-headline-analyzer-wrapper .orange-bg{background:#f18200}.aioseo-headline-analyzer-wrapper .red-bg{background:#df2a4a}.aioseo-headline-analyzer-wrapper .components-panel__body-toggle.components-button{font-weight:700;color:#141B38;padding:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-empty-title-warning{text-align:center;padding:0 20px;margin:20px 0;font-size:13px;color:#141B38}.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened>.components-panel__body-title{margin:0}.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened{padding:0}.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened .aioseo-headline-analyzer-words-block,.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened .aioseo-headline-analyzer-panel-first-block{padding:0 16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-score.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-sentiment.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-previous-scores.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-tab-new-score.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-tab-new-score-form.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-beginning-ending-words.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-tab-new-score.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-search-preview.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-balance.is-opened .components-panel__body-title{border-bottom:1px solid #e8e8eb;margin-bottom:16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-current-score,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-status{position:absolute;top:45%;left:0;right:0;text-align:center;font-size:50px;line-height:0%;z-index:0;font-weight:700}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-current-score p,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-status p{margin-bottom:0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel{top:calc(58% + 16px)}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-status{top:65%;font-size:16px;z-index:0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-current-score-tab p{text-align:center}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-current-score-tab .aioseo-headline-analyzer-current-title{text-align:center;font-size:16px;color:#141B38;margin:0 0 24px 0;line-height:1.4}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel h4{text-align:center;font-size:16px;color:#141B38;margin:0 0 28px 0;line-height:1.4}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .aioseo-headline-analyzer-pie-chart-container{position:relative;width:200px;height:200px;margin:0 auto;margin-bottom:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-new-score{position:absolute;top:calc(38% + 16px);left:0;right:0;text-align:center;font-size:50px;font-weight:700;line-height:0%;z-index:10}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-new-score p{margin-bottom:0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .current-score{border-top:1px solid #E8E8EB;padding-top:24px;display:flex;align-items:center;flex-direction:row}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .current-score .aioseo-headline-analyzer-score{min-height:40px;min-width:40px;font-weight:700;color:#ffffff;margin-right:16px;text-align:center;line-height:40px;border-radius:50%;font-size:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .current-score h5{font-weight:400;color:#8C8F9A;margin-top:0;margin-bottom:8px;font-size:13px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .current-score p{margin-top:8px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-tab{margin-bottom:6px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-form-block{padding:6px 12px 22px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-input-field{margin-bottom:10px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-input-field .components-base-control__label{display:block;max-width:100%;font-size:13px;margin:0 0 10px;color:#434960}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-input-field input{padding:11px 12px;font-size:13px;border:1px solid #D0D1D7;color:#393f4c;border-radius:3px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button{font-size:14px;border-radius:4px;padding:0;height:40px;background:#005AE0;width:100%;justify-content:center;color:#ffffff;font-weight:600;border:1px solid transparent;transition:background-color .2s ease;opacity:1}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:disabled{border:1px solid #dcdde1;background-color:#f3f4f5;color:#8c8f9a;cursor:default}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:disabled:hover{color:#8c8f9a}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:hover,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:focus,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:visited{color:#ffffff;box-shadow:none}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-difference{font-weight:700;position:absolute;left:0;top:16%;right:0;text-align:center;width:42px;height:26px;margin:0 auto;font-size:16px;line-height:26px;border-radius:4px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-difference.red{background:#fbe9ec}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-difference.orange{background:#FCFAE8}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-difference.green{background:#CBEAE1}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-previous-scores{margin:0 !important}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-previous-scores li{margin-bottom:16px;cursor:pointer;display:flex;flex-direction:row;align-items:center;color:#434960;font-size:13px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-previous-scores li span.aioseo-headline-analyzer-score{min-height:24px;min-width:24px;margin-right:8px;font-size:11px;text-align:center;line-height:24px;border-radius:50%;color:#ffffff;font-weight:700}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-previous-scores li span.aioseo-headline-analyzer-score-text{flex-basis:calc(100% - 32px)}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon .components-panel__body-toggle .components-panel__icon{position:absolute;right:52px;top:50%;margin-top:-10px}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon.red .components-panel__body-toggle .components-panel__icon path{fill:#df2a4a}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon.orange .components-panel__body-toggle .components-panel__icon path{fill:#f18200}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon.green .components-panel__body-toggle .components-panel__icon path{fill:#00aa63}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon-alternative{position:relative}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon-alternative .aioseo-headline-analyzer-panel-icon-alternative{position:absolute;top:14px;right:40px;font-weight:700}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-word-balance .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-sentiment .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-types .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-character-count .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-word-count .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row{display:block}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-word-balance .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-sentiment .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-types .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-character-count .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-word-count .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row h4{font-size:16px;color:#141B38;font-weight:700;margin:0 0 16px 0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block{margin-top:16px;border-bottom:1px solid #e8e8eb}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block h5{font-size:13px;color:#434960;margin-top:0;margin-bottom:16px;font-weight:700}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data{overflow:hidden;display:flex;flex-direction:row}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span{display:block;float:left;flex-basis:70%;z-index:0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-percentage{font-size:28px;font-weight:700;flex-basis:25%;justify-content:flex-start;align-items:center;display:flex;margin-right:11px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-goal{width:100%;font-size:13px;font-weight:400;color:#8C8F9A}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-progressbar{width:100%;position:relative;height:4px;margin-top:4px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-progressbar .aioseo-headline-analyzer-progressbar-bg{width:100%;background:#EEF0F2;height:4px;z-index:9;position:absolute;top:0;left:0;border-radius:30px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-progressbar .aioseo-headline-analyzer-progressbar-part{position:absolute;height:4px;top:0;left:0;z-index:10;border-radius:30px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-tag-list{margin:0;padding:0;list-style:none;display:block;margin-top:16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-tag-list li{display:inline-block;font-size:13px;font-weight:700;color:#434960;background:#F3F4F5;border-radius:3px;padding:4px 9px;margin-right:8px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-guideline{margin-top:8px;color:#4f4f4f}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-character-length>span,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-word-length>span{width:36px;height:48px;display:inline-block;background:#e8e8eb;text-align:center;line-height:48px;font-size:28px;color:#2c324c;font-weight:700;margin-right:4px;border-radius:4px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-character-length>span.character-zero,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-word-length>span.character-zero{color:#D0D1D7}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-status-on-character-length,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-status-on-word-length{display:block;font-weight:700;font-size:16px;color:#141b38;margin-bottom:16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-character-count-container,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-word-counter{margin-bottom:16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count p{text-align:left}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count .aioseo-headline-analyzer-pie-chart-container{position:relative;width:200px;height:80px;margin:0 auto;margin-bottom:18px;margin-left:-40px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-character-length{position:absolute;top:50%;left:0;right:0;text-align:center;font-size:30px;line-height:0%;z-index:10}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-status-on-character-length{position:absolute;left:144px;top:50%;font-size:16px;color:#141B38;margin:-9px 0 0 0;font-weight:700;width:130px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count p{text-align:left}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count .aioseo-headline-analyzer-pie-chart-container{position:relative;width:200px;height:80px;margin:0 auto;margin-bottom:18px;margin-left:-40px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-word-length{position:absolute;top:50%;left:0;right:0;text-align:center;font-size:30px;line-height:0%;z-index:10}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-status-on-word-length{position:absolute;left:144px;top:50%;font-size:16px;color:#141B38;margin:-9px 0 0 0;font-weight:700;width:130px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-words{display:block;margin-bottom:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-words span{font-size:13px;color:#434960;background:#f3f4f5;border-radius:3px;padding:4px 8px;font-weight:700;display:inline-block}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-words-guideline{margin-top:20px}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-word-ending-title,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-word-begining-title{font-weight:700;font-size:13px;color:#141b38;margin-bottom:12px;list-style:initial;margin:0 16px 8px 16px;padding:0 0 0 8px}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-word-ending-title li,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-word-begining-title li{margin:0}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row .aioseo-headline-analyzer-search-prevew-wrap{background:#ffffff;border:0.837954px solid #e8e8eb;padding:8px;margin-bottom:16px}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row h4{color:#1a0dab;font-size:16px;margin-top:0 !important;text-transform:none;margin-bottom:5px;font-weight:500}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row .aioseo-headline-analyzer-post-url{margin-bottom:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row .aioseo-headline-analyzer-post-url a{color:#3c4043;font-size:13px;text-decoration:none}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row .aioseo-headline-analyzer-post-url a:hover{opacity:0.8}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row p{font-size:12px;color:#434960;margin:0px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types .aioseo-headline-analyzer-panel-types-title{display:block;width:100%;font-size:14px;color:#141B38}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types .aioseo-headline-analyzer-panel-types-title span{float:right;margin-right:25px;color:#141B38;font-size:13px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types p a{color:#005AE0;text-decoration:none}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types p a span{text-decoration:underline}.edit-post-header__settings button.components-button[aioseo-button-color]{display:flex;align-items:center}.edit-post-header__settings button.components-button[aioseo-button-color] svg{max-width:22px;max-height:20px;margin-right:8px}.edit-post-header__settings button.components-button[aioseo-button-color] span{color:#fff;font-weight:700}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]{border:1px solid #df2a4a}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed{background:#df2a4a !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed svg path{fill:#fff}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"] svg path{fill:#df2a4a}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"] span{color:#df2a4a}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]{border:1px solid #f18200}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed{background:#f18200 !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed svg path{fill:#fff}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"] svg path{fill:#f08629}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"] span{color:#f18200}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]{border:1px solid #1ec185}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed{background:#1ec185 !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed svg path{fill:#fff}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"] svg path{fill:#1ec185}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"] span{color:#1bb17a}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed{box-shadow:none !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed svg path{fill:#fff !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed span{color:#fff}.edit-post-sidebar{scroll-behavior:smooth}.aioseo-headline-analyzer-current-score-content>p{font-weight:700}.aioseo-headline-analyzer-bottom-notice{padding:16px;background:#E6EEFC;margin:16px;border-radius:3px;font-size:13px;color:#141B38}.aioseo-headline-analyzer-bottom-notice p{text-align:left}.aioseo-headline-analyzer-bottom-notice p a{color:#005AE0;text-decoration:none}.aioseo-headline-analyzer-bottom-notice p a span{text-decoration:underline}.aioseo-donut-container{display:flex;align-items:center;justify-content:center}.aioseo-donut-container .aioseo-seo-headline-analyzer-score__circle{animation:aioseo-seo-site-score-fill 1s reverse;transform:rotate(-180deg);transform-origin:center}
|
3 |
Â
|
1 |
+
/*! ! built on Tuesday, September 21st 2021, 9:50:25 pm */
|
2 |
Â
.aioseo-inline-buttons{display:grid;grid-template-columns:repeat(2, 1fr)}.aioseo-switcher-button{border:0;border-radius:0;font-size:14px;font-weight:normal;color:#434960;padding:16px 10px;box-shadow:0px 2px 0px #e8e8eb;cursor:pointer;text-align:left;white-space:nowrap;position:relative;transition:0.4s cubic-bezier(0.4, 0, 0.2, 1);background:#fafafa}.aioseo-switcher-button:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;opacity:0;transition:0.4s cubic-bezier(0.4, 0, 0.2, 1);will-change:background-color,opacity;content:" "}.aioseo-switcher-button.active:before,.aioseo-switcher-button:hover:before,.aioseo-switcher-button:active:before{background-color:currentColor;opacity:.12}.aioseo-switcher-button.active{font-weight:700;color:#141B38;box-shadow:0px 2px 0px #005AE0}.aioseo-headline-analyzer-wrapper{position:relative}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-pie-chart-container{position:relative;width:200px;height:200px;margin:0 auto;margin-bottom:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-total-out-of-score{font-size:18px;color:#8c8f9a;font-weight:600;z-index:0}.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened svg.components-panel__arrow{transform:rotate(0deg)}.aioseo-headline-analyzer-wrapper .components-panel__body svg.components-panel__arrow{transform:rotate(-90deg);top:50%;margin-top:-12px;transition:.3s}.aioseo-headline-analyzer-wrapper p{font-size:13px;color:#434960;margin-bottom:16px}.aioseo-headline-analyzer-wrapper p>strong{font-size:13px;font-weight:700}.aioseo-headline-analyzer-wrapper .green{color:#00aa63}.aioseo-headline-analyzer-wrapper .orange{color:#f18200}.aioseo-headline-analyzer-wrapper .red{color:#df2a4a}.aioseo-headline-analyzer-wrapper .green-bg{background:#00aa63}.aioseo-headline-analyzer-wrapper .orange-bg{background:#f18200}.aioseo-headline-analyzer-wrapper .red-bg{background:#df2a4a}.aioseo-headline-analyzer-wrapper .components-panel__body-toggle.components-button{font-weight:700;color:#141B38;padding:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-empty-title-warning{text-align:center;padding:0 20px;margin:20px 0;font-size:13px;color:#141B38}.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened>.components-panel__body-title{margin:0}.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened{padding:0}.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened .aioseo-headline-analyzer-words-block,.aioseo-headline-analyzer-wrapper .components-panel__body.is-opened .aioseo-headline-analyzer-panel-first-block{padding:0 16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-score.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-sentiment.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-previous-scores.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-tab-new-score.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-tab-new-score-form.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-beginning-ending-words.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-tab-new-score.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-search-preview.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types.is-opened .components-panel__body-title,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-balance.is-opened .components-panel__body-title{border-bottom:1px solid #e8e8eb;margin-bottom:16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-current-score,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-status{position:absolute;top:45%;left:0;right:0;text-align:center;font-size:50px;line-height:0%;z-index:0;font-weight:700}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-current-score p,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-status p{margin-bottom:0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel{top:calc(58% + 16px)}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-status{top:65%;font-size:16px;z-index:0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-current-score-tab p{text-align:center}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-current-score-tab .aioseo-headline-analyzer-current-title{text-align:center;font-size:16px;color:#141B38;margin:0 0 24px 0;line-height:1.4}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel h4{text-align:center;font-size:16px;color:#141B38;margin:0 0 28px 0;line-height:1.4}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .aioseo-headline-analyzer-pie-chart-container{position:relative;width:200px;height:200px;margin:0 auto;margin-bottom:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-new-score{position:absolute;top:calc(38% + 16px);left:0;right:0;text-align:center;font-size:50px;font-weight:700;line-height:0%;z-index:10}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-new-score p{margin-bottom:0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .current-score{border-top:1px solid #E8E8EB;padding-top:24px;display:flex;align-items:center;flex-direction:row}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .current-score .aioseo-headline-analyzer-score{min-height:40px;min-width:40px;font-weight:700;color:#ffffff;margin-right:16px;text-align:center;line-height:40px;border-radius:50%;font-size:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .current-score h5{font-weight:400;color:#8C8F9A;margin-top:0;margin-bottom:8px;font-size:13px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-panel .current-score p{margin-top:8px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-tab{margin-bottom:6px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-new-score-form-block{padding:6px 12px 22px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-input-field{margin-bottom:10px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-input-field .components-base-control__label{display:block;max-width:100%;font-size:13px;margin:0 0 10px;color:#434960}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-input-field input{padding:11px 12px;font-size:13px;border:1px solid #D0D1D7;color:#393f4c;border-radius:3px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button{font-size:14px;border-radius:4px;padding:0;height:40px;background:#005AE0;width:100%;justify-content:center;color:#ffffff;font-weight:600;border:1px solid transparent;transition:background-color .2s ease;opacity:1}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:disabled{border:1px solid #dcdde1;background-color:#f3f4f5;color:#8c8f9a;cursor:default}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:disabled:hover{color:#8c8f9a}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:hover,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:focus,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-button:visited{color:#ffffff;box-shadow:none}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-difference{font-weight:700;position:absolute;left:0;top:16%;right:0;text-align:center;width:42px;height:26px;margin:0 auto;font-size:16px;line-height:26px;border-radius:4px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-difference.red{background:#fbe9ec}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-difference.orange{background:#FCFAE8}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-score-difference.green{background:#CBEAE1}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-previous-scores{margin:0 !important}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-previous-scores li{margin-bottom:16px;cursor:pointer;display:flex;flex-direction:row;align-items:center;color:#434960;font-size:13px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-previous-scores li span.aioseo-headline-analyzer-score{min-height:24px;min-width:24px;margin-right:8px;font-size:11px;text-align:center;line-height:24px;border-radius:50%;color:#ffffff;font-weight:700}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-previous-scores li span.aioseo-headline-analyzer-score-text{flex-basis:calc(100% - 32px)}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon .components-panel__body-toggle .components-panel__icon{position:absolute;right:52px;top:50%;margin-top:-10px}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon.red .components-panel__body-toggle .components-panel__icon path{fill:#df2a4a}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon.orange .components-panel__body-toggle .components-panel__icon path{fill:#f18200}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon.green .components-panel__body-toggle .components-panel__icon path{fill:#00aa63}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon-alternative{position:relative}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-has-icon-alternative .aioseo-headline-analyzer-panel-icon-alternative{position:absolute;top:14px;right:40px;font-weight:700}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-word-balance .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-sentiment .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-types .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-character-count .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-word-count .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .components-panel__row,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row{display:block}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-word-balance .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-sentiment .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-types .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-character-count .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-word-count .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .components-panel__row h4,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row h4{font-size:16px;color:#141B38;font-weight:700;margin:0 0 16px 0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block{margin-top:16px;border-bottom:1px solid #e8e8eb}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block h5{font-size:13px;color:#434960;margin-top:0;margin-bottom:16px;font-weight:700}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data{overflow:hidden;display:flex;flex-direction:row}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span{display:block;float:left;flex-basis:70%;z-index:0}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-percentage{font-size:28px;font-weight:700;flex-basis:25%;justify-content:flex-start;align-items:center;display:flex;margin-right:11px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-goal{width:100%;font-size:13px;font-weight:400;color:#8C8F9A}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-progressbar{width:100%;position:relative;height:4px;margin-top:4px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-progressbar .aioseo-headline-analyzer-progressbar-bg{width:100%;background:#EEF0F2;height:4px;z-index:9;position:absolute;top:0;left:0;border-radius:30px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-block-data span.aioseo-headline-analyzer-words-block-progressbar .aioseo-headline-analyzer-progressbar-part{position:absolute;height:4px;top:0;left:0;z-index:10;border-radius:30px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-tag-list{margin:0;padding:0;list-style:none;display:block;margin-top:16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-tag-list li{display:inline-block;font-size:13px;font-weight:700;color:#434960;background:#F3F4F5;border-radius:3px;padding:4px 9px;margin-right:8px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-words-block .aioseo-headline-analyzer-words-guideline{margin-top:8px;color:#4f4f4f}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-character-length>span,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-word-length>span{width:36px;height:48px;display:inline-block;background:#e8e8eb;text-align:center;line-height:48px;font-size:28px;color:#2c324c;font-weight:700;margin-right:4px;border-radius:4px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-character-length>span.character-zero,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-word-length>span.character-zero{color:#D0D1D7}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-status-on-character-length,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-status-on-word-length{display:block;font-weight:700;font-size:16px;color:#141b38;margin-bottom:16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-character-count-container,.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-word-counter{margin-bottom:16px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count p{text-align:left}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count .aioseo-headline-analyzer-pie-chart-container{position:relative;width:200px;height:80px;margin:0 auto;margin-bottom:18px;margin-left:-40px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-character-length{position:absolute;top:50%;left:0;right:0;text-align:center;font-size:30px;line-height:0%;z-index:10}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-character-count .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-status-on-character-length{position:absolute;left:144px;top:50%;font-size:16px;color:#141B38;margin:-9px 0 0 0;font-weight:700;width:130px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count p{text-align:left}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count .aioseo-headline-analyzer-pie-chart-container{position:relative;width:200px;height:80px;margin:0 auto;margin-bottom:18px;margin-left:-40px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-word-length{position:absolute;top:50%;left:0;right:0;text-align:center;font-size:30px;line-height:0%;z-index:10}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-word-count .aioseo-headline-analyzer-pie-chart-container .aioseo-headline-analyzer-status-on-word-length{position:absolute;left:144px;top:50%;font-size:16px;color:#141B38;margin:-9px 0 0 0;font-weight:700;width:130px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-words{display:block;margin-bottom:18px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-words span{font-size:13px;color:#434960;background:#f3f4f5;border-radius:3px;padding:4px 8px;font-weight:700;display:inline-block}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-words-guideline{margin-top:20px}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-word-ending-title,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-word-begining-title{font-weight:700;font-size:13px;color:#141b38;margin-bottom:12px;list-style:initial;margin:0 16px 8px 16px;padding:0 0 0 8px}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-word-ending-title li,.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-beginning-ending-words .aioseo-headline-analyzer-word-begining-title li{margin:0}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row .aioseo-headline-analyzer-search-prevew-wrap{background:#ffffff;border:0.837954px solid #e8e8eb;padding:8px;margin-bottom:16px}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row h4{color:#1a0dab;font-size:16px;margin-top:0 !important;text-transform:none;margin-bottom:5px;font-weight:500}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row .aioseo-headline-analyzer-post-url{margin-bottom:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row .aioseo-headline-analyzer-post-url a{color:#3c4043;font-size:13px;text-decoration:none}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row .aioseo-headline-analyzer-post-url a:hover{opacity:0.8}.aioseo-headline-analyzer-wrapper .components-panel__body.aioseo-headline-analyzer-panel-search-preview .components-panel__row p{font-size:12px;color:#434960;margin:0px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types .aioseo-headline-analyzer-panel-types-title{display:block;width:100%;font-size:14px;color:#141B38}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types .aioseo-headline-analyzer-panel-types-title span{float:right;margin-right:25px;color:#141B38;font-size:13px}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types p a{color:#005AE0;text-decoration:none}.aioseo-headline-analyzer-wrapper .aioseo-headline-analyzer-panel-types p a span{text-decoration:underline}.edit-post-header__settings button.components-button[aioseo-button-color]{display:flex;align-items:center}.edit-post-header__settings button.components-button[aioseo-button-color] svg{max-width:22px;max-height:20px;margin-right:8px}.edit-post-header__settings button.components-button[aioseo-button-color] span{color:#fff;font-weight:700}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]{border:1px solid #df2a4a}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed{background:#df2a4a !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed svg path{fill:#fff}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"] svg path{fill:#df2a4a}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"] span{color:#df2a4a}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]{border:1px solid #f18200}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed{background:#f18200 !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed svg path{fill:#fff}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"] svg path{fill:#f08629}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"] span{color:#f18200}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]{border:1px solid #1ec185}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed{background:#1ec185 !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed svg path{fill:#fff}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"] svg path{fill:#1ec185}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"] span{color:#1bb17a}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed{box-shadow:none !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus svg path,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed svg path{fill:#fff !important}.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:active span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"]:focus span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="red"].is-pressed span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:active span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"]:focus span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="green"].is-pressed span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:active span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"]:focus span,.edit-post-header__settings button.components-button[aioseo-button-color][aioseo-button-color="orange"].is-pressed span{color:#fff}.edit-post-sidebar{scroll-behavior:smooth}.aioseo-headline-analyzer-current-score-content>p{font-weight:700}.aioseo-headline-analyzer-bottom-notice{padding:16px;background:#E6EEFC;margin:16px;border-radius:3px;font-size:13px;color:#141B38}.aioseo-headline-analyzer-bottom-notice p{text-align:left}.aioseo-headline-analyzer-bottom-notice p a{color:#005AE0;text-decoration:none}.aioseo-headline-analyzer-bottom-notice p a span{text-decoration:underline}.aioseo-donut-container{display:flex;align-items:center;justify-content:center}.aioseo-donut-container .aioseo-seo-headline-analyzer-score__circle{animation:aioseo-seo-site-score-fill 1s reverse;transform:rotate(-180deg);transform-origin:center}
|
3 |
Â
|
dist/Lite/assets/css/headline-analyzer.css.gz
CHANGED
Binary file
|
dist/Lite/assets/css/local-seo-Maps-vue.css
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
.aioseo-local-maps{position:relative}.aioseo-local-maps .image-upload{display:flex}.aioseo-local-maps .image-upload .aioseo-input{max-width:445px;margin-right:10px}.aioseo-local-maps .image-upload .insert-image{min-width:214px;margin-right:10px}.aioseo-local-maps .image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-right:10px}.aioseo-local-maps .aioseo-settings-row .aioseo-alert{margin-top:10px}.aioseo-local-maps .aioseo-settings-row .aioseo-input,.aioseo-local-maps .aioseo-settings-row .aioseo-select{max-width:480px}.aioseo-local-maps .apikey-description{margin:0 0 16px}
|
dist/Lite/assets/css/local-seo-Maps-vue.rtl.css
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
.aioseo-local-maps{position:relative}.aioseo-local-maps .image-upload{display:flex}.aioseo-local-maps .image-upload .aioseo-input{max-width:445px;margin-left:10px}.aioseo-local-maps .image-upload .insert-image{min-width:214px;margin-left:10px}.aioseo-local-maps .image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-left:10px}.aioseo-local-maps .aioseo-settings-row .aioseo-alert{margin-top:10px}.aioseo-local-maps .aioseo-settings-row .aioseo-input,.aioseo-local-maps .aioseo-settings-row .aioseo-select{max-width:480px}.aioseo-local-maps .apikey-description{margin:0 0 16px}
|
dist/Lite/assets/css/local-seo-lite-Maps-vue.css
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
.aioseo-local-maps{position:relative}
|
dist/Lite/assets/css/local-seo-lite-Maps-vue.rtl.css
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
.aioseo-local-maps{position:relative}
|
dist/Lite/assets/css/local-seo-pro-Maps-vue.css
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
.aioseo-local-maps .image-upload{display:flex}.aioseo-local-maps .image-upload .aioseo-input{max-width:445px;margin-right:10px}.aioseo-local-maps .image-upload .insert-image{min-width:214px;margin-right:10px}.aioseo-local-maps .image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-right:10px}.aioseo-local-maps .aioseo-settings-row .aioseo-alert{margin-top:10px}.aioseo-local-maps .aioseo-settings-row .aioseo-input,.aioseo-local-maps .aioseo-settings-row .aioseo-select{max-width:480px}.aioseo-local-maps .apikey-description{margin:0 0 16px}
|
dist/Lite/assets/css/local-seo-pro-Maps-vue.rtl.css
ADDED
@@ -0,0 +1 @@
|
|
Â
|
1 |
+
.aioseo-local-maps .image-upload{display:flex}.aioseo-local-maps .image-upload .aioseo-input{max-width:445px;margin-left:10px}.aioseo-local-maps .image-upload .insert-image{min-width:214px;margin-left:10px}.aioseo-local-maps .image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-left:10px}.aioseo-local-maps .aioseo-settings-row .aioseo-alert{margin-top:10px}.aioseo-local-maps .aioseo-settings-row .aioseo-input,.aioseo-local-maps .aioseo-settings-row .aioseo-select{max-width:480px}.aioseo-local-maps .apikey-description{margin:0 0 16px}
|
dist/Lite/assets/css/post-settings.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.aioseo-post-advanced .inline-upsell{display:inline-flex;margin-top:20px}.aioseo-post-advanced .selectbox-row{display:flex;align-items:center}.aioseo-post-advanced .selectbox-row .separator{display:inline-block;margin:0 20px;padding-bottom:10px;align-self:flex-end}.aioseo-post-advanced .selectbox-row .select{display:inline-block;width:100%;max-width:125px}.aioseo-post-advanced .selectbox-row .select>span{display:inline-block;font-size:14px;margin-bottom:10px}.aioseo-analysis-detail{margin:0 0 35px}.aioseo-analysis-detail li{padding-left:24px;position:relative;margin-bottom:24px}.aioseo-analysis-detail li:last-of-type{margin-bottom:0}.aioseo-analysis-detail li svg{position:relative;left:0;top:3px}.aioseo-analysis-detail li svg.aioseo-circle-check{color:#00aa63}.aioseo-analysis-detail li svg.aioseo-circle-close{color:#df2a4a}.aioseo-analysis-detail li svg.aioseo-circle-check,.aioseo-analysis-detail li svg.aioseo-circle-close{position:absolute;left:0;top:5px}.aioseo-analysis-detail li svg.aioseo-caret{cursor:pointer;transform:rotate(-180deg);transition:transform .3s}.aioseo-analysis-detail li .title{margin-bottom:6px!important}.aioseo-analysis-detail li .title.toggled svg{transform:rotate(-90deg)}.aioseo-analysis-detail li .title.toggled+.description{opacity:0;height:0;margin:0}.aioseo-analysis-detail li .description{font-size:14px;font-style:normal;opacity:1;height:auto;transition:all .3s}.edit-post-sidebar .aioseo-analysis-detail .title{font-size:14px}.edit-post-sidebar .aioseo-analysis-detail .description{font-size:13px}.page-analysis-panel .aioseo-tabs{background:#fff!important}.page-analysis-panel .aioseo-tabs .md-button-content{display:flex}.page-analysis-panel .aioseo-tabs .md-button{font-weight:700!important}.aioseo-focus-keyphrase-panel .modal-body{max-height:calc(90vh - 70px);overflow:auto}.aioseo-focus-keyphrase-panel .modal-body .aioseo-modal-content .aioseo-alert{margin-bottom:20px}.aioseo-focus-keyphrase-panel .semrush-country-selector{max-width:350px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table{width:100%;border:1px solid #d0d1d7;border-radius:3px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-trend,.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-volume{text-align:center}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions>div{display:flex;align-items:center;justify-content:flex-end}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .focus-keyphrase{display:flex;align-items:center;justify-content:flex-end;color:#00aa63;min-width:135px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .focus-keyphrase svg{margin-right:5px;width:16px;height:16px;color:#00aa63}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score{border-radius:3px;padding:5px;font-weight:700;font-size:13px;cursor:pointer;border:1px solid #005ae0}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-green{color:#00aa63;border-color:#00aa63}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-orange{color:#f18200;border-color:#f18200}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-red{color:#df2a4a;border-color:#df2a4a}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover{background-color:#005ae0;color:#fff}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-green{background-color:#00aa63}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-orange{background-color:#f18200}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-red{background-color:#df2a4a}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .remove-keyphrase{display:flex;align-items:center;justify-content:flex-end}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .remove-keyphrase svg{width:16px;height:16px;cursor:pointer}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .remove-keyphrase svg:hover{color:#df2a4a}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-header{height:50px;font-size:14px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-header th{border-bottom:1px solid #d0d1d7;padding:15px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-header th:first-of-type{padding-left:30px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-header th:last-of-type{padding-right:30px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows{font-size:14px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row{background-color:#fff;height:70px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row:last-of-type td:first-of-type{border-radius:0 0 0 3px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row:last-of-type td:last-of-type{border-radius:0 0 3px 0}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row.even{background-color:#f9f9fa}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td{padding:15px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td:first-of-type{padding-left:30px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td:last-of-type{padding-right:30px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row.loading,.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td.no-results>*{display:flex;align-items:center;justify-content:center}.aioseo-description.additional-keyphrases-description,.edit-post-sidebar .aioseo-app .aioseo-description.additional-keyphrases-description{margin:0 0 20px}.aioseo-post-general svg.aioseo-circle-question-mark{width:17px;height:17px;color:#8c8f99;transition:background-color .2s ease}.aioseo-post-general svg.aioseo-circle-question-mark:hover{color:#5a5c65}.aioseo-post-general .mobile-radio-buttons{margin:0!important;padding:0!important;border:0}.aioseo-post-general .mobile-radio-buttons>.aioseo-col{padding:0}.aioseo-post-general .mobile-radio-buttons .aioseo-radio-toggle{justify-content:flex-end}.aioseo-post-general .mobile-radio-buttons .aioseo-radio-toggle>div{margin-left:10px}.aioseo-post-general .ismobile{max-width:375px}.aioseo-post-general .add-keyphrase,.aioseo-post-general .edit-snippet{margin-top:12px;border:1px solid #dcdde1}.aioseo-post-general .add-keyphrase svg,.aioseo-post-general .edit-snippet svg{margin-right:5px}.aioseo-post-general .disabled-button{margin-top:12px;border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default;height:30px;font-size:14px;padding:0 12px;flex-shrink:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-weight:600;border-radius:4px;-webkit-appearance:none;transition:background-color .2s ease;position:relative;overflow:hidden;text-decoration:none;white-space:nowrap}.aioseo-post-general .disabled-button svg{margin-right:5px}.aioseo-post-general .aioseo-toggle{display:block}.aioseo-post-general .aioseo-toggle .toggle-content input:checked+.toggle-switch{border:1px solid #00aa63;background-color:#00aa63}.aioseo-post-general .aioseo-keyphrase-tag{display:inline-block;margin-right:10px;margin-bottom:16px;border-radius:3px;font-size:14px;font-weight:700}.aioseo-post-general .aioseo-keyphrase-tag.selected{position:relative}.aioseo-post-general .aioseo-keyphrase-tag.selected:after,.aioseo-post-general .aioseo-keyphrase-tag.selected:before{content:"";position:absolute;display:block;z-index:10;bottom:-17px;border-style:solid}.aioseo-post-general .aioseo-keyphrase-tag.selected:before{left:calc(50% - 6px);border-width:0 10px 10px;border-color:transparent transparent #e8e8eb}.aioseo-post-general .aioseo-keyphrase-tag.selected:after{left:calc(50% - 4px);border-width:0 8px 8px;border-color:transparent transparent #fff}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag{display:block;padding:9px 10px;border:1px solid #f3f4f5;border-radius:3px;background:#f3f4f5;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag.hidden{opacity:0;height:0;padding:0}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-name{cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-edit{opacity:0;margin:0 8px;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score{cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-green{color:#00aa63}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-orange{color:#f18200}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-red{color:#df2a4a}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag{position:relative}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag>input{width:100%;padding:8px 10px;border:1px solid #e8e8eb;border-radius:3px}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag .keyphrase-delete{position:absolute;top:2px;right:10px;width:16px;height:16px;display:block;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag .keyphrase-delete:hover{color:#df2a4a}.aioseo-post-general .aioseo-keyphrase-tag:hover .keyphrase-edit{opacity:1}.aioseo-post-general .focus-keyphrase-panel .aioseo-analysis-detail{margin-bottom:0}.aioseo-post-general .analysis-wrapper{border-top:1px solid #e8e8eb}.aioseo-post-general .analysis-loading{position:relative;margin-top:16px}.edit-post-sidebar .aioseo-google-search-preview{padding:10px}.edit-post-sidebar .aioseo-button.edit-snippet{display:inline-flex}.edit-post-sidebar .snippet-focus-keyphrases-row{border-bottom:none;margin-bottom:0!important}.edit-post-sidebar .snippet-preview-row{padding-bottom:0!important;border-bottom:none}.edit-post-sidebar .card-additional-keyphrase,.edit-post-sidebar .card-basic-seo,.edit-post-sidebar .card-focus-keyphrase,.edit-post-sidebar .card-readability-seo,.edit-post-sidebar .card-title-seo{margin:0 -1rem;box-shadow:none;border:none;border-top:1px solid #e8e8eb}.edit-post-sidebar .card-additional-keyphrase .header,.edit-post-sidebar .card-basic-seo .header,.edit-post-sidebar .card-focus-keyphrase .header,.edit-post-sidebar .card-readability-seo .header,.edit-post-sidebar .card-title-seo .header{padding:1rem;border-bottom:none;font-size:14px;font-weight:700}.edit-post-sidebar .card-additional-keyphrase .content,.edit-post-sidebar .card-basic-seo .content,.edit-post-sidebar .card-focus-keyphrase .content,.edit-post-sidebar .card-readability-seo .content,.edit-post-sidebar .card-title-seo .content{padding:24px 16px;font-size:14px;border-top:1px solid #e8e8eb}.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail:last-of-type .title{margin-bottom:0}.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail{margin:16px 0!important}.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:empty{margin:16px}.edit-post-sidebar .card-focus-keyphrase .add-keyphrase{width:100%}.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail{margin:0 0 16px!important}.edit-post-sidebar .card-additional-keyphrase .add-keyphrase{width:100%;margin-bottom:16px}.edit-post-sidebar .card-readability-seo{border-bottom:1px solid #e8e8eb}.edit-post-sidebar .aioseo-keyphrase-tag{display:block;margin-right:0;margin-bottom:10px}.edit-post-sidebar .aioseo-keyphrase-tag:after{content:none!important}.edit-post-sidebar .aioseo-keyphrase-tag.selected{border:2px solid #e8e8eb}.edit-post-sidebar .aioseo-keyphrase-tag.selected:after,.edit-post-sidebar .aioseo-keyphrase-tag.selected:before{content:none}.edit-post-sidebar .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag{display:flex;width:100%}.edit-post-sidebar .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag .keyphrase-score{flex:1;text-align:right}.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail{margin-top:0}.edit-post-sidebar .analysis-wrapper{border-top:none}.aioseo-modal-content>.aioseo-settings-row{border:none;margin-bottom:0!important}.aioseo-modal-content .aioseo-post-general>.mobile-radio-buttons{position:absolute;right:40px;top:18px;margin-bottom:0;padding-bottom:0}.aioseo-modal-content .settings-name .name{font-size:16px!important;margin-bottom:6px!important}.aioseo-modal-content .snippet-description-row,.aioseo-modal-content .snippet-title-row{position:relative;display:block;margin-top:32px}.aioseo-modal-content .snippet-description-row .settings-name,.aioseo-modal-content .snippet-title-row .settings-name{margin-bottom:8px}.aioseo-modal-content .snippet-description-row .aioseo-description,.aioseo-modal-content .snippet-title-row .aioseo-description{display:none}.aioseo-modal-content .snippet-description-row .add-tags,.aioseo-modal-content .snippet-title-row .add-tags{position:absolute;top:0;right:8px;margin:0}@media screen and (max-width:520px){.aioseo-modal-content .snippet-description-row .add-tags .aioseo-add-template-tag,.aioseo-modal-content .snippet-title-row .add-tags .aioseo-add-template-tag{display:none}}.aioseo-modal-content .snippet-title-row{margin-top:24px;padding-bottom:24px!important}.aioseo-modal-content .snippet-description-row,.aioseo-modal-content .snippet-preview-row{border:none;margin-bottom:0!important;padding-bottom:0!important}.aioseo-modal-content .snippet-pillar-row{display:none}.aioseo-modal-content .component-wrapper .aioseo-settings-row>.aioseo-col{padding-top:.5rem!important}.aioseo-modal-content .component-wrapper .aioseo-google-search-preview{padding:32px 28px!important}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:not(.md-active){min-width:72px!important;margin:0!important}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:hover{background-color:#e2e3e6}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:before{border-radius:100%!important;display:none}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button .label{display:inline!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-tabs .md-button:not(.md-active){margin:0!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-tabs .md-button:not(.md-active):before{top:0!important}.aioseo-post-schema-lite{position:relative;min-height:450px}.aioseo-post-schema-lite .schema-type{max-width:350px}.aioseo-post-schema-lite .aioseo-description{font-size:14px;line-height:1.8;margin:8px 0 0;color:#141b38}.aioseo-post-schema-lite .field-description{font-size:14px}.aioseo-post-schema-lite .block{display:block}.aioseo-post-schema-lite .aioseo-settings-row:last-of-type{margin-bottom:30px!important;padding-bottom:30px!important}.aioseo-post-schema-lite .schema-book-rating-options{display:flex}.aioseo-post-schema-lite .schema-book-rating-options .rating,.aioseo-post-schema-lite .schema-book-rating-options .rating-min{margin-right:30px;flex:1}.aioseo-post-schema-lite .schema-book-rating-options .rating-max{flex:1}@media screen and (max-width:782px){.aioseo-post-schema-lite .schema-book-rating-options{display:block}.aioseo-post-schema-lite .schema-book-rating-options .rating,.aioseo-post-schema-lite .schema-book-rating-options .rating-min{margin-right:0;margin-bottom:30px}}.aioseo-post-schema-lite .schema-person-options{display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}@media screen and (max-width:782px){.aioseo-post-schema-lite .schema-person-options{display:block}}.aioseo-post-schema-lite .aioseo-alert.schema-upsell{max-width:560px}.edit-post-sidebar .aioseo-post-schema .aioseo-settings-row.aioseo-row .col-md-9 .settings-content .aioseo-col{padding-left:0;padding-right:0}.edit-post-sidebar .schema-book-rating-options{display:block}.edit-post-sidebar .schema-book-rating-options .rating,.edit-post-sidebar .schema-book-rating-options .rating-min{margin:0 0 20px}.edit-post-sidebar .schema-upsell{margin-top:20px}.tab-facebook .facebook-image-upload{display:flex}.tab-facebook .facebook-image-upload .aioseo-input{max-width:445px;margin-right:10px}.tab-facebook .facebook-image-upload .insert-image{min-width:214px;margin-right:10px}.tab-facebook .facebook-image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-right:10px}.tab-facebook .facebook-image img{margin-top:20px;width:auto;max-width:525px;max-height:525px;height:auto}.tab-facebook .facebook-image.vertical img{max-width:158px;max-height:158px}.tab-facebook .facebook-meta-input{margin-top:10px}.tab-twitter .twitter-image-upload{display:flex}.tab-twitter .twitter-image-upload .aioseo-input{max-width:445px;margin-right:10px}.tab-twitter .twitter-image-upload .insert-image{min-width:214px;margin-right:10px}.tab-twitter .twitter-image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-right:10px}.tab-twitter .twitter-image img{margin-top:20px;width:auto;max-width:525px;max-height:525px;height:auto}.tab-twitter .twitter-image.vertical img{max-width:158px;max-height:158px}.tab-twitter .twitter-custom-field,.tab-twitter .twitter-image-source{padding-top:8px!important;padding-bottom:24px!important}.tab-twitter .twitter-card-type,.tab-twitter .twitter-image{padding-top:8px!important}.tab-twitter .aioseo-settings-row:last-of-type,.tab-twitter .use-facebook{margin-bottom:32px!important;padding-bottom:32px!important}.open-social-modal{margin-top:12px;border:1px solid #dcdde1}.open-social-modal svg{margin-right:5px}.open-social-copy>.col-md-3{display:none}.aioseo-post-social .aioseo-col.col-md-9{position:relative}.aioseo-post-social .mobile-radio-buttons{margin:0;padding:0;border:0}.aioseo-post-social .mobile-radio-buttons .aioseo-radio-toggle{justify-content:flex-end;position:absolute;right:20px;top:12px}.aioseo-post-social .mobile-radio-buttons .aioseo-radio-toggle>div{margin-left:10px}.aioseo-post-social .mobile-radio-buttons .col-md-9{padding-left:4px;padding-right:0}.aioseo-post-social .ismobile,.aioseo-post-social .ismobilecard .facebook-post,.aioseo-post-social .ismobilecard .twitter-post{max-width:375px}.aioseo-post-social .aioseo-tabs{background:#fff!important;border:none!important;border-bottom:2px solid #e8e8eb!important}.edit-post-sidebar .mobile-radio-buttons,.edit-post-sidebar .tab-facebook,.edit-post-sidebar .tab-twitter{display:none}.aioseo-modal-content .mobile-radio-buttons{padding-bottom:0!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-radio-toggle{right:0!important;top:8px!important}@media screen and (max-width:520px){.aioseo-modal-content .mobile-radio-buttons .aioseo-radio-toggle{display:none}}.aioseo-modal-content .tab-facebook,.aioseo-modal-content .tab-twitter{display:block}.aioseo-modal-content .tab-facebook .aioseo-settings-row:first-of-type,.aioseo-modal-content .tab-twitter .aioseo-settings-row:first-of-type{border-bottom:0;padding-bottom:0}.aioseo-modal-content .tab-facebook .aioseo-settings-row:first-of-type .aioseo-col:first-of-type,.aioseo-modal-content .tab-twitter .aioseo-settings-row:first-of-type .aioseo-col:first-of-type{display:none}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor{margin-top:0}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor .aioseo-description,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor .aioseo-description{display:none}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor .add-tags,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor .add-tags{position:absolute;top:-40px;right:8px;margin:0}.aioseo-modal-content .tab-facebook .facebook-description-settings,.aioseo-modal-content .tab-facebook .facebook-title-settings,.aioseo-modal-content .tab-facebook .twitter-description-settings,.aioseo-modal-content .tab-facebook .twitter-title-settings,.aioseo-modal-content .tab-twitter .facebook-description-settings,.aioseo-modal-content .tab-twitter .facebook-title-settings,.aioseo-modal-content .tab-twitter .twitter-description-settings,.aioseo-modal-content .tab-twitter .twitter-title-settings{padding-bottom:24px}.aioseo-modal-content .tab-facebook .facebook-description-settings .col-md-9,.aioseo-modal-content .tab-facebook .facebook-title-settings .col-md-9,.aioseo-modal-content .tab-facebook .twitter-description-settings .col-md-9,.aioseo-modal-content .tab-facebook .twitter-title-settings .col-md-9,.aioseo-modal-content .tab-twitter .facebook-description-settings .col-md-9,.aioseo-modal-content .tab-twitter .facebook-title-settings .col-md-9,.aioseo-modal-content .tab-twitter .twitter-description-settings .col-md-9,.aioseo-modal-content .tab-twitter .twitter-title-settings .col-md-9{padding-top:0!important;margin-top:0}.aioseo-modal-content .mobile-radio-buttons{display:block!important}.aioseo-modal-content .mobile-radio-buttons>.col-md-3{display:none}.aioseo-modal-content .mobile-radio-buttons>.col-md-9{padding:0;flex-basis:100%!important;max-width:100%!important}.aioseo-modal-content .aioseo-settings-row>.col-md-3{padding-bottom:0}.aioseo-modal-content .aioseo-settings-row>.col-md-3,.aioseo-modal-content .aioseo-settings-row>.col-md-9{flex-basis:100%;max-width:100%}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs.internal{padding-left:40px}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button-content{display:flex;align-items:center}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button-content svg{display:inline;width:16px;height:16px}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button:before{height:auto!important;border-radius:0!important}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button .label{display:inline!important;margin-left:10px}.aioseo-modal-content>.aioseo-settings-row.mobile-radio-buttons{position:sticky;top:60px;z-index:10;padding-bottom:0}.aioseo-modal-content>.aioseo-settings-row.mobile-radio-buttons .md-button{max-height:46px}.aioseo-modal-content .aioseo-tab-content{position:relative;padding:30px 40px!important}.aioseo-modal-content .aioseo-tab-content.aioseo-post-social{padding:22px 40px!important}.aioseo-app,.aioseo-metabox .aioseo-app{background:#fff}.aioseo-app .aioseo-tabs,.aioseo-metabox .aioseo-app .aioseo-tabs{border-bottom-width:2px;background:#f3f4f5}.aioseo-app .aioseo-tabs .md-tabs-navigation,.aioseo-metabox .aioseo-app .aioseo-tabs .md-tabs-navigation{margin-top:0!important}.aioseo-app .aioseo-tabs .md-button,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button{height:50px!important;font-size:14px!important;color:#434960!important}.aioseo-app .aioseo-tabs .md-button.md-active,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button.md-active{color:#141b38!important;font-weight:700!important}.aioseo-app .aioseo-tabs .md-button .icon,.aioseo-app .aioseo-tabs svg,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button .icon,.aioseo-metabox .aioseo-app .aioseo-tabs svg{display:none}@media screen and (max-width:785px){.aioseo-app .aioseo-tabs svg.aioseo-caret,.aioseo-metabox .aioseo-app .aioseo-tabs svg.aioseo-caret{display:inline}}.aioseo-app .aioseo-tab-content,.aioseo-metabox .aioseo-app .aioseo-tab-content{background:#fff;border-top:0;padding:30px}.aioseo-app .aioseo-settings-row,.aioseo-metabox .aioseo-app .aioseo-settings-row{margin-bottom:16px;padding-bottom:16px}.edit-post-sidebar .col-md-3,.edit-post-sidebar .col-md-4,.edit-post-sidebar .col-sm-6,.edit-post-sidebar .col-xs-12{width:100%;flex-basis:100%!important;max-width:100%!important}.edit-post-sidebar .components-panel{border-bottom:none}.edit-post-sidebar .aioseo-mobile-tabs{display:none}.edit-post-sidebar .tabs-scroller{display:block!important}.edit-post-sidebar .aioseo-tabs{background:#fafafa}.edit-post-sidebar .aioseo-tabs .md-button{height:51px!important;color:#141b38!important}.edit-post-sidebar .aioseo-tabs .md-button .md-ripple{padding:0 10px!important}.edit-post-sidebar .aioseo-tabs .md-button .icon{display:inline;line-height:1.3rem}.edit-post-sidebar .aioseo-tabs .md-button .icon:before{line-height:inherit}.edit-post-sidebar .aioseo-tabs .md-button .label{display:none}.edit-post-sidebar .aioseo-tabs .md-button.md-active{color:#141b38!important}.edit-post-sidebar .aioseo-tabs .md-button.md-active .label{display:inline;margin-left:10px}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active){min-width:36px!important;margin:0 3px!important}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):before{top:8px!important;border-radius:50%;height:36px;color:#141b38}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active) svg{display:inline;width:16px;height:16px;margin-top:4px;color:#8c8f9a}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):focus svg,.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):hover svg{color:#141b38}.edit-post-sidebar .aioseo-app input{border:1px solid #d0d1d7}.edit-post-sidebar .aioseo-app input:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.edit-post-sidebar .aioseo-app input::-moz-placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app input:-ms-input-placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app input::placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app .aioseo-textarea-autosize{border:1px solid #d0d1d7}.edit-post-sidebar .aioseo-app .aioseo-tab-content{padding:20px 16px;border:none}.edit-post-sidebar .aioseo-app .aioseo-description{margin:0}.edit-post-sidebar .aioseo-settings-row{margin-bottom:16px;padding-bottom:16px}.edit-post-sidebar .aioseo-settings-row:last-of-type{border-bottom:0;margin-bottom:0!important;padding-bottom:0!important}.edit-post-sidebar .aioseo-settings-row>.aioseo-col{padding-top:0}.edit-post-sidebar .aioseo-settings-row .settings-name .name{font-size:14px;font-weight:700;margin-bottom:0}.aioseo-modal-content .aioseo-tabs.internal{border-bottom-width:1px!important}@media screen and (max-width:520px){.aioseo-modal-content .aioseo-tabs.internal{padding-left:20px!important}}.aioseo-modal-content .md-tabs-navigation .md-tabs-indicator{bottom:-1px!important}@media only screen and (min-width:782px){.aioseo-modal-content .col-md-4{flex-basis:33.33333333%!important;max-width:33.33333333%!important}.aioseo-modal-content .col-md-5{flex-basis:41.66666667%!important;max-width:41.66666667%!important}.aioseo-modal-content .col-md-7{flex-basis:58.33333333%!important;max-width:58.33333333%!important}.aioseo-modal-content .col-md-8{flex-basis:66.66666667%!important;max-width:66.66666667%!important}}
|
1 |
+
.aioseo-post-advanced .inline-upsell{display:inline-flex;margin-top:20px}.aioseo-post-advanced .selectbox-row{display:flex;align-items:center}.aioseo-post-advanced .selectbox-row .separator{display:inline-block;margin:0 20px;padding-bottom:10px;align-self:flex-end}.aioseo-post-advanced .selectbox-row .select{display:inline-block;width:100%;max-width:125px}.aioseo-post-advanced .selectbox-row .select>span{display:inline-block;font-size:14px;margin-bottom:10px}.aioseo-analysis-detail{margin:0 0 35px}.aioseo-analysis-detail li{padding-left:24px;position:relative;margin-bottom:24px}.aioseo-analysis-detail li:last-of-type{margin-bottom:0}.aioseo-analysis-detail li svg{position:relative;left:0;top:3px}.aioseo-analysis-detail li svg.aioseo-circle-check{color:#00aa63}.aioseo-analysis-detail li svg.aioseo-circle-close{color:#df2a4a}.aioseo-analysis-detail li svg.aioseo-circle-check,.aioseo-analysis-detail li svg.aioseo-circle-close{position:absolute;left:0;top:5px}.aioseo-analysis-detail li svg.aioseo-caret{cursor:pointer;transform:rotate(-180deg);transition:transform .3s}.aioseo-analysis-detail li .title{margin-bottom:6px!important}.aioseo-analysis-detail li .title.toggled svg{transform:rotate(-90deg)}.aioseo-analysis-detail li .title.toggled+.description{opacity:0;height:0;margin:0}.aioseo-analysis-detail li .description{font-size:14px;font-style:normal;opacity:1;height:auto;transition:all .3s}.edit-post-sidebar .aioseo-analysis-detail .title{font-size:14px}.edit-post-sidebar .aioseo-analysis-detail .description{font-size:13px}.page-analysis-panel .aioseo-tabs{background:#fff!important}.page-analysis-panel .aioseo-tabs .md-button-content{display:flex}.page-analysis-panel .aioseo-tabs .md-button{font-weight:700!important}.aioseo-app.aioseo-focus-keyphrase-panel-modal .modal-body{max-height:calc(90vh - 70px);overflow:auto}.aioseo-app.aioseo-focus-keyphrase-panel-modal .modal-body .aioseo-modal-content .aioseo-alert{margin-bottom:20px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .semrush-country-selector{max-width:350px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table{width:100%;border:1px solid #d0d1d7;border-radius:3px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-trend,.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-volume{text-align:center}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions>div{display:flex;align-items:center;justify-content:flex-end}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .focus-keyphrase{display:flex;align-items:center;justify-content:flex-end;color:#00aa63;min-width:135px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .focus-keyphrase svg{margin-right:5px;width:16px;height:16px;color:#00aa63}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score{border-radius:3px;padding:5px;font-weight:700;font-size:13px;cursor:pointer;border:1px solid #005ae0}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-green{color:#00aa63;border-color:#00aa63}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-orange{color:#f18200;border-color:#f18200}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-red{color:#df2a4a;border-color:#df2a4a}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover{background-color:#005ae0;color:#fff}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-green{background-color:#00aa63}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-orange{background-color:#f18200}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-red{background-color:#df2a4a}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .remove-keyphrase{display:flex;align-items:center;justify-content:flex-end}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .remove-keyphrase svg{width:16px;height:16px;cursor:pointer}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .remove-keyphrase svg:hover{color:#df2a4a}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-header{height:50px;font-size:14px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-header th{border-bottom:1px solid #d0d1d7;padding:15px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-header th:first-of-type{padding-left:30px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-header th:last-of-type{padding-right:30px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows{font-size:14px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row{background-color:#fff;height:70px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row:last-of-type td:first-of-type{border-radius:0 0 0 3px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row:last-of-type td:last-of-type{border-radius:0 0 3px 0}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row.even{background-color:#f9f9fa}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td{padding:15px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td:first-of-type{padding-left:30px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td:last-of-type{padding-right:30px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row.loading,.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td.no-results>*{display:flex;align-items:center;justify-content:center}.aioseo-description.additional-keyphrases-description,.edit-post-sidebar .aioseo-app .aioseo-description.additional-keyphrases-description{margin:0 0 20px}.aioseo-post-general svg.aioseo-circle-question-mark{width:17px;height:17px;color:#8c8f99;transition:background-color .2s ease}.aioseo-post-general svg.aioseo-circle-question-mark:hover{color:#5a5c65}.aioseo-post-general .mobile-radio-buttons{margin:0!important;padding:0!important;border:0}.aioseo-post-general .mobile-radio-buttons>.aioseo-col{padding:0}.aioseo-post-general .mobile-radio-buttons .aioseo-radio-toggle{justify-content:flex-end}.aioseo-post-general .mobile-radio-buttons .aioseo-radio-toggle>div{margin-left:10px}.aioseo-post-general .ismobile{max-width:375px}.aioseo-post-general .add-keyphrase,.aioseo-post-general .edit-snippet{margin-top:12px;border:1px solid #dcdde1}.aioseo-post-general .add-keyphrase svg,.aioseo-post-general .edit-snippet svg{margin-right:5px}.aioseo-post-general .disabled-button{margin-top:12px;border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default;height:30px;font-size:14px;padding:0 12px;flex-shrink:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-weight:600;border-radius:4px;-webkit-appearance:none;transition:background-color .2s ease;position:relative;overflow:hidden;text-decoration:none;white-space:nowrap}.aioseo-post-general .disabled-button svg{margin-right:5px}.aioseo-post-general .aioseo-toggle{display:block}.aioseo-post-general .aioseo-toggle .toggle-content input:checked+.toggle-switch{border:1px solid #00aa63;background-color:#00aa63}.aioseo-post-general .aioseo-keyphrase-tag{display:inline-block;margin-right:10px;margin-bottom:16px;border-radius:3px;font-size:14px;font-weight:700}.aioseo-post-general .aioseo-keyphrase-tag.selected{position:relative}.aioseo-post-general .aioseo-keyphrase-tag.selected:after,.aioseo-post-general .aioseo-keyphrase-tag.selected:before{content:"";position:absolute;display:block;z-index:10;bottom:-17px;border-style:solid}.aioseo-post-general .aioseo-keyphrase-tag.selected:before{left:calc(50% - 6px);border-width:0 10px 10px;border-color:transparent transparent #e8e8eb}.aioseo-post-general .aioseo-keyphrase-tag.selected:after{left:calc(50% - 4px);border-width:0 8px 8px;border-color:transparent transparent #fff}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag{display:block;padding:9px 10px;border:1px solid #f3f4f5;border-radius:3px;background:#f3f4f5;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag.hidden{opacity:0;height:0;padding:0}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-name{cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-edit{opacity:0;margin:0 8px;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score{cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-green{color:#00aa63}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-orange{color:#f18200}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-red{color:#df2a4a}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag{position:relative}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag>input{width:100%;padding:8px 10px;border:1px solid #e8e8eb;border-radius:3px}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag .keyphrase-delete{position:absolute;top:2px;right:10px;width:16px;height:16px;display:block;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag .keyphrase-delete:hover{color:#df2a4a}.aioseo-post-general .aioseo-keyphrase-tag:hover .keyphrase-edit{opacity:1}.aioseo-post-general .focus-keyphrase-panel .aioseo-analysis-detail{margin-bottom:0}.aioseo-post-general .analysis-wrapper{border-top:1px solid #e8e8eb}.aioseo-post-general .analysis-loading{position:relative;margin-top:16px}.edit-post-sidebar .aioseo-google-search-preview{padding:10px}.edit-post-sidebar .aioseo-button.edit-snippet{display:inline-flex}.edit-post-sidebar .snippet-focus-keyphrases-row{border-bottom:none;margin-bottom:0!important}.edit-post-sidebar .snippet-preview-row{padding-bottom:0!important;border-bottom:none}.edit-post-sidebar .card-additional-keyphrase,.edit-post-sidebar .card-basic-seo,.edit-post-sidebar .card-focus-keyphrase,.edit-post-sidebar .card-readability-seo,.edit-post-sidebar .card-title-seo{margin:0 -1rem;box-shadow:none;border:none;border-top:1px solid #e8e8eb}.edit-post-sidebar .card-additional-keyphrase .header,.edit-post-sidebar .card-basic-seo .header,.edit-post-sidebar .card-focus-keyphrase .header,.edit-post-sidebar .card-readability-seo .header,.edit-post-sidebar .card-title-seo .header{padding:1rem;border-bottom:none;font-size:14px;font-weight:700}.edit-post-sidebar .card-additional-keyphrase .content,.edit-post-sidebar .card-basic-seo .content,.edit-post-sidebar .card-focus-keyphrase .content,.edit-post-sidebar .card-readability-seo .content,.edit-post-sidebar .card-title-seo .content{padding:24px 16px;font-size:14px;border-top:1px solid #e8e8eb}.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail:last-of-type .title{margin-bottom:0}.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail{margin:16px 0!important}.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:empty{margin:16px}.edit-post-sidebar .card-focus-keyphrase .add-keyphrase{width:100%}.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail{margin:0 0 16px!important}.edit-post-sidebar .card-additional-keyphrase .add-keyphrase{width:100%;margin-bottom:16px}.edit-post-sidebar .card-readability-seo{border-bottom:1px solid #e8e8eb}.edit-post-sidebar .aioseo-keyphrase-tag{display:block;margin-right:0;margin-bottom:10px}.edit-post-sidebar .aioseo-keyphrase-tag:after{content:none!important}.edit-post-sidebar .aioseo-keyphrase-tag.selected{border:2px solid #e8e8eb}.edit-post-sidebar .aioseo-keyphrase-tag.selected:after,.edit-post-sidebar .aioseo-keyphrase-tag.selected:before{content:none}.edit-post-sidebar .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag{display:flex;width:100%}.edit-post-sidebar .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag .keyphrase-score{flex:1;text-align:right}.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail{margin-top:0}.edit-post-sidebar .analysis-wrapper{border-top:none}.aioseo-modal-content>.aioseo-settings-row{border:none;margin-bottom:0!important}.aioseo-modal-content .aioseo-post-general>.mobile-radio-buttons{position:absolute;right:40px;top:18px;margin-bottom:0;padding-bottom:0}.aioseo-modal-content .settings-name .name{font-size:16px!important;margin-bottom:6px!important}.aioseo-modal-content .snippet-description-row,.aioseo-modal-content .snippet-title-row{position:relative;display:block;margin-top:32px}.aioseo-modal-content .snippet-description-row .settings-name,.aioseo-modal-content .snippet-title-row .settings-name{margin-bottom:8px}.aioseo-modal-content .snippet-description-row .aioseo-description,.aioseo-modal-content .snippet-title-row .aioseo-description{display:none}.aioseo-modal-content .snippet-description-row .add-tags,.aioseo-modal-content .snippet-title-row .add-tags{position:absolute;top:0;right:8px;margin:0}@media screen and (max-width:520px){.aioseo-modal-content .snippet-description-row .add-tags .aioseo-add-template-tag,.aioseo-modal-content .snippet-title-row .add-tags .aioseo-add-template-tag{display:none}}.aioseo-modal-content .snippet-title-row{margin-top:24px;padding-bottom:24px!important}.aioseo-modal-content .snippet-description-row,.aioseo-modal-content .snippet-preview-row{border:none;margin-bottom:0!important;padding-bottom:0!important}.aioseo-modal-content .snippet-pillar-row{display:none}.aioseo-modal-content .component-wrapper .aioseo-settings-row>.aioseo-col{padding-top:.5rem!important}.aioseo-modal-content .component-wrapper .aioseo-google-search-preview{padding:32px 28px!important}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:not(.md-active){min-width:72px!important;margin:0!important}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:hover{background-color:#e2e3e6}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:before{border-radius:100%!important;display:none}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button .label{display:inline!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-tabs .md-button:not(.md-active){margin:0!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-tabs .md-button:not(.md-active):before{top:0!important}.aioseo-post-schema-lite{position:relative;min-height:450px}.aioseo-post-schema-lite .schema-type{max-width:350px}.aioseo-post-schema-lite .aioseo-description{font-size:14px;line-height:1.8;margin:8px 0 0;color:#141b38}.aioseo-post-schema-lite .field-description{font-size:14px}.aioseo-post-schema-lite .block{display:block}.aioseo-post-schema-lite .aioseo-settings-row:last-of-type{margin-bottom:30px!important;padding-bottom:30px!important}.aioseo-post-schema-lite .schema-book-rating-options{display:flex}.aioseo-post-schema-lite .schema-book-rating-options .rating,.aioseo-post-schema-lite .schema-book-rating-options .rating-min{margin-right:30px;flex:1}.aioseo-post-schema-lite .schema-book-rating-options .rating-max{flex:1}@media screen and (max-width:782px){.aioseo-post-schema-lite .schema-book-rating-options{display:block}.aioseo-post-schema-lite .schema-book-rating-options .rating,.aioseo-post-schema-lite .schema-book-rating-options .rating-min{margin-right:0;margin-bottom:30px}}.aioseo-post-schema-lite .schema-person-options{display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}@media screen and (max-width:782px){.aioseo-post-schema-lite .schema-person-options{display:block}}.aioseo-post-schema-lite .aioseo-alert.schema-upsell{max-width:560px}.edit-post-sidebar .aioseo-post-schema .aioseo-settings-row.aioseo-row .col-md-9 .settings-content .aioseo-col{padding-left:0;padding-right:0}.edit-post-sidebar .schema-book-rating-options{display:block}.edit-post-sidebar .schema-book-rating-options .rating,.edit-post-sidebar .schema-book-rating-options .rating-min{margin:0 0 20px}.edit-post-sidebar .schema-upsell{margin-top:20px}.tab-facebook .facebook-image-upload{display:flex}.tab-facebook .facebook-image-upload .aioseo-input{max-width:445px;margin-right:10px}.tab-facebook .facebook-image-upload .insert-image{min-width:214px;margin-right:10px}.tab-facebook .facebook-image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-right:10px}.tab-facebook .facebook-image img{margin-top:20px;width:auto;max-width:525px;max-height:525px;height:auto}.tab-facebook .facebook-image.vertical img{max-width:158px;max-height:158px}.tab-facebook .facebook-meta-input{margin-top:10px}.tab-twitter .twitter-image-upload{display:flex}.tab-twitter .twitter-image-upload .aioseo-input{max-width:445px;margin-right:10px}.tab-twitter .twitter-image-upload .insert-image{min-width:214px;margin-right:10px}.tab-twitter .twitter-image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-right:10px}.tab-twitter .twitter-image img{margin-top:20px;width:auto;max-width:525px;max-height:525px;height:auto}.tab-twitter .twitter-image.vertical img{max-width:158px;max-height:158px}.tab-twitter .twitter-custom-field,.tab-twitter .twitter-image-source{padding-top:8px!important;padding-bottom:24px!important}.tab-twitter .twitter-card-type,.tab-twitter .twitter-image{padding-top:8px!important}.tab-twitter .aioseo-settings-row:last-of-type,.tab-twitter .use-facebook{margin-bottom:32px!important;padding-bottom:32px!important}.open-social-modal{margin-top:12px;border:1px solid #dcdde1}.open-social-modal svg{margin-right:5px}.open-social-copy>.col-md-3{display:none}.aioseo-post-social .aioseo-col.col-md-9{position:relative}.aioseo-post-social .mobile-radio-buttons{margin:0;padding:0;border:0}.aioseo-post-social .mobile-radio-buttons .aioseo-radio-toggle{justify-content:flex-end;position:absolute;right:20px;top:12px}.aioseo-post-social .mobile-radio-buttons .aioseo-radio-toggle>div{margin-left:10px}.aioseo-post-social .mobile-radio-buttons .col-md-9{padding-left:4px;padding-right:0}.aioseo-post-social .ismobile,.aioseo-post-social .ismobilecard .facebook-post,.aioseo-post-social .ismobilecard .twitter-post{max-width:375px}.aioseo-post-social .aioseo-tabs{background:#fff!important;border:none!important;border-bottom:2px solid #e8e8eb!important}.edit-post-sidebar .mobile-radio-buttons,.edit-post-sidebar .tab-facebook,.edit-post-sidebar .tab-twitter{display:none}.aioseo-modal-content .mobile-radio-buttons{padding-bottom:0!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-radio-toggle{right:0!important;top:8px!important}@media screen and (max-width:520px){.aioseo-modal-content .mobile-radio-buttons .aioseo-radio-toggle{display:none}}.aioseo-modal-content .tab-facebook,.aioseo-modal-content .tab-twitter{display:block}.aioseo-modal-content .tab-facebook .aioseo-settings-row:first-of-type,.aioseo-modal-content .tab-twitter .aioseo-settings-row:first-of-type{border-bottom:0;padding-bottom:0}.aioseo-modal-content .tab-facebook .aioseo-settings-row:first-of-type .aioseo-col:first-of-type,.aioseo-modal-content .tab-twitter .aioseo-settings-row:first-of-type .aioseo-col:first-of-type{display:none}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor{margin-top:0}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor .aioseo-description,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor .aioseo-description{display:none}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor .add-tags,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor .add-tags{position:absolute;top:-40px;right:8px;margin:0}.aioseo-modal-content .tab-facebook .facebook-description-settings,.aioseo-modal-content .tab-facebook .facebook-title-settings,.aioseo-modal-content .tab-facebook .twitter-description-settings,.aioseo-modal-content .tab-facebook .twitter-title-settings,.aioseo-modal-content .tab-twitter .facebook-description-settings,.aioseo-modal-content .tab-twitter .facebook-title-settings,.aioseo-modal-content .tab-twitter .twitter-description-settings,.aioseo-modal-content .tab-twitter .twitter-title-settings{padding-bottom:24px}.aioseo-modal-content .tab-facebook .facebook-description-settings .col-md-9,.aioseo-modal-content .tab-facebook .facebook-title-settings .col-md-9,.aioseo-modal-content .tab-facebook .twitter-description-settings .col-md-9,.aioseo-modal-content .tab-facebook .twitter-title-settings .col-md-9,.aioseo-modal-content .tab-twitter .facebook-description-settings .col-md-9,.aioseo-modal-content .tab-twitter .facebook-title-settings .col-md-9,.aioseo-modal-content .tab-twitter .twitter-description-settings .col-md-9,.aioseo-modal-content .tab-twitter .twitter-title-settings .col-md-9{padding-top:0!important;margin-top:0}.aioseo-modal-content .mobile-radio-buttons{display:block!important}.aioseo-modal-content .mobile-radio-buttons>.col-md-3{display:none}.aioseo-modal-content .mobile-radio-buttons>.col-md-9{padding:0;flex-basis:100%!important;max-width:100%!important}.aioseo-modal-content .aioseo-settings-row>.col-md-3{padding-bottom:0}.aioseo-modal-content .aioseo-settings-row>.col-md-3,.aioseo-modal-content .aioseo-settings-row>.col-md-9{flex-basis:100%;max-width:100%}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs.internal{padding-left:40px}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button-content{display:flex;align-items:center}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button-content svg{display:inline;width:16px;height:16px}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button:before{height:auto!important;border-radius:0!important}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button .label{display:inline!important;margin-left:10px}.aioseo-modal-content>.aioseo-settings-row.mobile-radio-buttons{position:sticky;top:60px;z-index:10;padding-bottom:0}.aioseo-modal-content>.aioseo-settings-row.mobile-radio-buttons .md-button{max-height:46px}.aioseo-modal-content .aioseo-tab-content{position:relative;padding:30px 40px!important}.aioseo-modal-content .aioseo-tab-content.aioseo-post-social{padding:22px 40px!important}.aioseo-app,.aioseo-metabox .aioseo-app{background:#fff}.aioseo-app .aioseo-tabs,.aioseo-metabox .aioseo-app .aioseo-tabs{border-bottom-width:2px;background:#f3f4f5}.aioseo-app .aioseo-tabs .md-tabs-navigation,.aioseo-metabox .aioseo-app .aioseo-tabs .md-tabs-navigation{margin-top:0!important}.aioseo-app .aioseo-tabs .md-button,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button{height:50px!important;font-size:14px!important;color:#434960!important}.aioseo-app .aioseo-tabs .md-button.md-active,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button.md-active{color:#141b38!important;font-weight:700!important}.aioseo-app .aioseo-tabs .md-button .icon,.aioseo-app .aioseo-tabs svg,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button .icon,.aioseo-metabox .aioseo-app .aioseo-tabs svg{display:none}@media screen and (max-width:785px){.aioseo-app .aioseo-tabs svg.aioseo-caret,.aioseo-metabox .aioseo-app .aioseo-tabs svg.aioseo-caret{display:inline}}.aioseo-app .aioseo-tab-content,.aioseo-metabox .aioseo-app .aioseo-tab-content{background:#fff;border-top:0;padding:30px}.aioseo-app .aioseo-settings-row,.aioseo-metabox .aioseo-app .aioseo-settings-row{margin-bottom:16px;padding-bottom:16px}.edit-post-sidebar .col-md-3,.edit-post-sidebar .col-md-4,.edit-post-sidebar .col-sm-6,.edit-post-sidebar .col-xs-12{width:100%;flex-basis:100%!important;max-width:100%!important}.edit-post-sidebar .components-panel{border-bottom:none}.edit-post-sidebar .aioseo-mobile-tabs{display:none}.edit-post-sidebar .tabs-scroller{display:block!important}.edit-post-sidebar .aioseo-tabs{background:#fafafa}.edit-post-sidebar .aioseo-tabs .md-button{height:51px!important;color:#141b38!important}.edit-post-sidebar .aioseo-tabs .md-button .md-ripple{padding:0 10px!important}.edit-post-sidebar .aioseo-tabs .md-button .icon{display:inline;line-height:1.3rem}.edit-post-sidebar .aioseo-tabs .md-button .icon:before{line-height:inherit}.edit-post-sidebar .aioseo-tabs .md-button .label{display:none}.edit-post-sidebar .aioseo-tabs .md-button.md-active{color:#141b38!important}.edit-post-sidebar .aioseo-tabs .md-button.md-active .label{display:inline;margin-left:10px}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active){min-width:36px!important;margin:0 3px!important}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):before{top:8px!important;border-radius:50%;height:36px;color:#141b38}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active) svg{display:inline;width:16px;height:16px;margin-top:4px;color:#8c8f9a}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):focus svg,.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):hover svg{color:#141b38}.edit-post-sidebar .aioseo-app input{border:1px solid #d0d1d7}.edit-post-sidebar .aioseo-app input:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.edit-post-sidebar .aioseo-app input::-moz-placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app input:-ms-input-placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app input::placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app .aioseo-textarea-autosize{border:1px solid #d0d1d7}.edit-post-sidebar .aioseo-app .aioseo-tab-content{padding:20px 16px;border:none}.edit-post-sidebar .aioseo-app .aioseo-description{margin:0}.edit-post-sidebar .aioseo-settings-row{margin-bottom:16px;padding-bottom:16px}.edit-post-sidebar .aioseo-settings-row:last-of-type{border-bottom:0;margin-bottom:0!important;padding-bottom:0!important}.edit-post-sidebar .aioseo-settings-row>.aioseo-col{padding-top:0}.edit-post-sidebar .aioseo-settings-row .settings-name .name{font-size:14px;font-weight:700;margin-bottom:0}.aioseo-app.post-settings-modal .aioseo-modal-content .aioseo-tabs.internal{border-bottom-width:1px!important}@media screen and (max-width:520px){.aioseo-app.post-settings-modal .aioseo-modal-content .aioseo-tabs.internal{padding-left:20px!important}}.aioseo-app.post-settings-modal .aioseo-modal-content .md-tabs-navigation .md-tabs-indicator{bottom:-1px!important}@media only screen and (min-width:782px){.aioseo-app.post-settings-modal .aioseo-modal-content .col-md-4{flex-basis:33.33333333%!important;max-width:33.33333333%!important}.aioseo-app.post-settings-modal .aioseo-modal-content .col-md-5{flex-basis:41.66666667%!important;max-width:41.66666667%!important}.aioseo-app.post-settings-modal .aioseo-modal-content .col-md-7{flex-basis:58.33333333%!important;max-width:58.33333333%!important}.aioseo-app.post-settings-modal .aioseo-modal-content .col-md-8{flex-basis:66.66666667%!important;max-width:66.66666667%!important}}.aioseo-post-settings-sidebar-vue{display:flex;justify-content:center}.aioseo-post-settings-sidebar-vue .aioseo-loading-spinner{margin-top:30px}.aioseo-localseo-info .aioseo-input,.aioseo-localseo-info .aioseo-multiselect,.aioseo-localseo-info .aioseo-select{max-width:480px}.aioseo-localseo-info .field-description{font-size:14px}.aioseo-localseo-info .info-businessaddress-row .columns{display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}.aioseo-localseo-opening .field-description{display:inline-block;margin:10px 0;font-size:14px}.aioseo-localseo-opening .field-description.mt-8{margin-top:8px}.aioseo-localseo-opening .aioseo-input,.aioseo-localseo-opening .aioseo-multiselect,.aioseo-localseo-opening .aioseo-select{max-width:480px}.aioseo-localseo-opening .aioseo-col-flex{display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #e8e8eb}.aioseo-localseo-opening .aioseo-col-flex:first-of-type{padding-top:0}.aioseo-localseo-opening .aioseo-col-flex:last-of-type{padding-bottom:0;border:none}.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-day{flex:1}.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-alwaysopen,.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-hours{flex:2}.aioseo-localseo-opening .aioseo-col-flex span.separator{margin:0 5px}.aioseo-localseo-opening .aioseo-col-flex .aioseo-select{display:inline-block;max-width:120px;margin-bottom:5px}.aioseo-localseo-opening .aioseo-col-flex .multiselect--disabled .multiselect__single,.aioseo-localseo-opening .aioseo-col-flex .multiselect--disabled .multiselect__tags{background:#f3f4f5}.aioseo-localseo-opening .aioseo-col-alwaysopen .aioseo-checkbox{padding:0 10px}.aioseo-localseo-maps .aioseo-input,.aioseo-localseo-maps .aioseo-multiselect,.aioseo-localseo-maps .aioseo-select{max-width:480px}.aioseo-localseo-maps .field-description{font-size:14px}.sidebar-row{margin-bottom:16px}.sidebar-row .title{font-weight:700}.sidebar-row[data-v-4358427c]{margin-bottom:16px}.sidebar-row .title[data-v-4358427c]{font-weight:700}.sidebar-row.dimensions[data-v-4358427c]{display:flex;flex-direction:row;justify-content:space-between;margin:0 -10px}.sidebar-row.dimensions>div[data-v-4358427c]{padding:0 10px}.sidebar-row.dimensions label[data-v-4358427c]{display:block;padding-bottom:8px}.image-upload .aioseo-button[data-v-4358427c],.image-upload .aioseo-input[data-v-4358427c],.image-upload img[data-v-4358427c]{margin-bottom:8px}
|
dist/Lite/assets/css/post-settings.rtl.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.aioseo-post-advanced .inline-upsell{display:inline-flex;margin-top:20px}.aioseo-post-advanced .selectbox-row{display:flex;align-items:center}.aioseo-post-advanced .selectbox-row .separator{display:inline-block;margin:0 20px;padding-bottom:10px;align-self:flex-end}.aioseo-post-advanced .selectbox-row .select{display:inline-block;width:100%;max-width:125px}.aioseo-post-advanced .selectbox-row .select>span{display:inline-block;font-size:14px;margin-bottom:10px}.aioseo-analysis-detail{margin:0 0 35px}.aioseo-analysis-detail li{padding-right:24px;position:relative;margin-bottom:24px}.aioseo-analysis-detail li:last-of-type{margin-bottom:0}.aioseo-analysis-detail li svg{position:relative;right:0;top:3px}.aioseo-analysis-detail li svg.aioseo-circle-check{color:#00aa63}.aioseo-analysis-detail li svg.aioseo-circle-close{color:#df2a4a}.aioseo-analysis-detail li svg.aioseo-circle-check,.aioseo-analysis-detail li svg.aioseo-circle-close{position:absolute;right:0;top:5px}.aioseo-analysis-detail li svg.aioseo-caret{cursor:pointer;transform:rotate(180deg);transition:transform .3s}.aioseo-analysis-detail li .title{margin-bottom:6px!important}.aioseo-analysis-detail li .title.toggled svg{transform:rotate(90deg)}.aioseo-analysis-detail li .title.toggled+.description{opacity:0;height:0;margin:0}.aioseo-analysis-detail li .description{font-size:14px;font-style:normal;opacity:1;height:auto;transition:all .3s}.edit-post-sidebar .aioseo-analysis-detail .title{font-size:14px}.edit-post-sidebar .aioseo-analysis-detail .description{font-size:13px}.page-analysis-panel .aioseo-tabs{background:#fff!important}.page-analysis-panel .aioseo-tabs .md-button-content{display:flex}.page-analysis-panel .aioseo-tabs .md-button{font-weight:700!important}.aioseo-focus-keyphrase-panel .modal-body{max-height:calc(90vh - 70px);overflow:auto}.aioseo-focus-keyphrase-panel .modal-body .aioseo-modal-content .aioseo-alert{margin-bottom:20px}.aioseo-focus-keyphrase-panel .semrush-country-selector{max-width:350px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table{width:100%;border:1px solid #d0d1d7;border-radius:3px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-trend,.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-volume{text-align:center}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions>div{display:flex;align-items:center;justify-content:flex-end}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .focus-keyphrase{display:flex;align-items:center;justify-content:flex-end;color:#00aa63;min-width:135px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .focus-keyphrase svg{margin-left:5px;width:16px;height:16px;color:#00aa63}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score{border-radius:3px;padding:5px;font-weight:700;font-size:13px;cursor:pointer;border:1px solid #005ae0}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-green{color:#00aa63;border-color:#00aa63}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-orange{color:#f18200;border-color:#f18200}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-red{color:#df2a4a;border-color:#df2a4a}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover{background-color:#005ae0;color:#fff}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-green{background-color:#00aa63}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-orange{background-color:#f18200}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-red{background-color:#df2a4a}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .remove-keyphrase{display:flex;align-items:center;justify-content:flex-end}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .remove-keyphrase svg{width:16px;height:16px;cursor:pointer}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrase-actions .remove-keyphrase svg:hover{color:#df2a4a}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-header{height:50px;font-size:14px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-header th{border-bottom:1px solid #d0d1d7;padding:15px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-header th:first-of-type{padding-right:30px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-header th:last-of-type{padding-left:30px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows{font-size:14px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row{background-color:#fff;height:70px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row:last-of-type td:first-of-type{border-radius:0 0 3px 0}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row:last-of-type td:last-of-type{border-radius:0 0 0 3px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row.even{background-color:#f9f9fa}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td{padding:15px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td:first-of-type{padding-right:30px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td:last-of-type{padding-left:30px}.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row.loading,.aioseo-focus-keyphrase-panel .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td.no-results>*{display:flex;align-items:center;justify-content:center}.aioseo-description.additional-keyphrases-description,.edit-post-sidebar .aioseo-app .aioseo-description.additional-keyphrases-description{margin:0 0 20px}.aioseo-post-general svg.aioseo-circle-question-mark{width:17px;height:17px;color:#8c8f99;transition:background-color .2s ease}.aioseo-post-general svg.aioseo-circle-question-mark:hover{color:#5a5c65}.aioseo-post-general .mobile-radio-buttons{margin:0!important;padding:0!important;border:0}.aioseo-post-general .mobile-radio-buttons>.aioseo-col{padding:0}.aioseo-post-general .mobile-radio-buttons .aioseo-radio-toggle{justify-content:flex-end}.aioseo-post-general .mobile-radio-buttons .aioseo-radio-toggle>div{margin-right:10px}.aioseo-post-general .ismobile{max-width:375px}.aioseo-post-general .add-keyphrase,.aioseo-post-general .edit-snippet{margin-top:12px;border:1px solid #dcdde1}.aioseo-post-general .add-keyphrase svg,.aioseo-post-general .edit-snippet svg{margin-left:5px}.aioseo-post-general .disabled-button{margin-top:12px;border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default;height:30px;font-size:14px;padding:0 12px;flex-shrink:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-weight:600;border-radius:4px;-webkit-appearance:none;transition:background-color .2s ease;position:relative;overflow:hidden;text-decoration:none;white-space:nowrap}.aioseo-post-general .disabled-button svg{margin-left:5px}.aioseo-post-general .aioseo-toggle{display:block}.aioseo-post-general .aioseo-toggle .toggle-content input:checked+.toggle-switch{border:1px solid #00aa63;background-color:#00aa63}.aioseo-post-general .aioseo-keyphrase-tag{display:inline-block;margin-left:10px;margin-bottom:16px;border-radius:3px;font-size:14px;font-weight:700}.aioseo-post-general .aioseo-keyphrase-tag.selected{position:relative}.aioseo-post-general .aioseo-keyphrase-tag.selected:after,.aioseo-post-general .aioseo-keyphrase-tag.selected:before{content:"";position:absolute;display:block;z-index:10;bottom:-17px;border-style:solid}.aioseo-post-general .aioseo-keyphrase-tag.selected:before{right:calc(50% - 6px);border-width:0 10px 10px;border-color:transparent transparent #e8e8eb}.aioseo-post-general .aioseo-keyphrase-tag.selected:after{right:calc(50% - 4px);border-width:0 8px 8px;border-color:transparent transparent #fff}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag{display:block;padding:9px 10px;border:1px solid #f3f4f5;border-radius:3px;background:#f3f4f5;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag.hidden{opacity:0;height:0;padding:0}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-name{cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-edit{opacity:0;margin:0 8px;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score{cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-green{color:#00aa63}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-orange{color:#f18200}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-red{color:#df2a4a}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag{position:relative}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag>input{width:100%;padding:8px 10px;border:1px solid #e8e8eb;border-radius:3px}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag .keyphrase-delete{position:absolute;top:2px;left:10px;width:16px;height:16px;display:block;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag .keyphrase-delete:hover{color:#df2a4a}.aioseo-post-general .aioseo-keyphrase-tag:hover .keyphrase-edit{opacity:1}.aioseo-post-general .focus-keyphrase-panel .aioseo-analysis-detail{margin-bottom:0}.aioseo-post-general .analysis-wrapper{border-top:1px solid #e8e8eb}.aioseo-post-general .analysis-loading{position:relative;margin-top:16px}.edit-post-sidebar .aioseo-google-search-preview{padding:10px}.edit-post-sidebar .aioseo-button.edit-snippet{display:inline-flex}.edit-post-sidebar .snippet-focus-keyphrases-row{border-bottom:none;margin-bottom:0!important}.edit-post-sidebar .snippet-preview-row{padding-bottom:0!important;border-bottom:none}.edit-post-sidebar .card-additional-keyphrase,.edit-post-sidebar .card-basic-seo,.edit-post-sidebar .card-focus-keyphrase,.edit-post-sidebar .card-readability-seo,.edit-post-sidebar .card-title-seo{margin:0 -1rem;box-shadow:none;border:none;border-top:1px solid #e8e8eb}.edit-post-sidebar .card-additional-keyphrase .header,.edit-post-sidebar .card-basic-seo .header,.edit-post-sidebar .card-focus-keyphrase .header,.edit-post-sidebar .card-readability-seo .header,.edit-post-sidebar .card-title-seo .header{padding:1rem;border-bottom:none;font-size:14px;font-weight:700}.edit-post-sidebar .card-additional-keyphrase .content,.edit-post-sidebar .card-basic-seo .content,.edit-post-sidebar .card-focus-keyphrase .content,.edit-post-sidebar .card-readability-seo .content,.edit-post-sidebar .card-title-seo .content{padding:24px 16px;font-size:14px;border-top:1px solid #e8e8eb}.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail:last-of-type .title{margin-bottom:0}.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail{margin:16px 0!important}.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:empty{margin:16px}.edit-post-sidebar .card-focus-keyphrase .add-keyphrase{width:100%}.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail{margin:0 0 16px!important}.edit-post-sidebar .card-additional-keyphrase .add-keyphrase{width:100%;margin-bottom:16px}.edit-post-sidebar .card-readability-seo{border-bottom:1px solid #e8e8eb}.edit-post-sidebar .aioseo-keyphrase-tag{display:block;margin-left:0;margin-bottom:10px}.edit-post-sidebar .aioseo-keyphrase-tag:after{content:none!important}.edit-post-sidebar .aioseo-keyphrase-tag.selected{border:2px solid #e8e8eb}.edit-post-sidebar .aioseo-keyphrase-tag.selected:after,.edit-post-sidebar .aioseo-keyphrase-tag.selected:before{content:none}.edit-post-sidebar .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag{display:flex;width:100%}.edit-post-sidebar .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag .keyphrase-score{flex:1;text-align:left}.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail{margin-top:0}.edit-post-sidebar .analysis-wrapper{border-top:none}.aioseo-modal-content>.aioseo-settings-row{border:none;margin-bottom:0!important}.aioseo-modal-content .aioseo-post-general>.mobile-radio-buttons{position:absolute;left:40px;top:18px;margin-bottom:0;padding-bottom:0}.aioseo-modal-content .settings-name .name{font-size:16px!important;margin-bottom:6px!important}.aioseo-modal-content .snippet-description-row,.aioseo-modal-content .snippet-title-row{position:relative;display:block;margin-top:32px}.aioseo-modal-content .snippet-description-row .settings-name,.aioseo-modal-content .snippet-title-row .settings-name{margin-bottom:8px}.aioseo-modal-content .snippet-description-row .aioseo-description,.aioseo-modal-content .snippet-title-row .aioseo-description{display:none}.aioseo-modal-content .snippet-description-row .add-tags,.aioseo-modal-content .snippet-title-row .add-tags{position:absolute;top:0;left:8px;margin:0}@media screen and (max-width:520px){.aioseo-modal-content .snippet-description-row .add-tags .aioseo-add-template-tag,.aioseo-modal-content .snippet-title-row .add-tags .aioseo-add-template-tag{display:none}}.aioseo-modal-content .snippet-title-row{margin-top:24px;padding-bottom:24px!important}.aioseo-modal-content .snippet-description-row,.aioseo-modal-content .snippet-preview-row{border:none;margin-bottom:0!important;padding-bottom:0!important}.aioseo-modal-content .snippet-pillar-row{display:none}.aioseo-modal-content .component-wrapper .aioseo-settings-row>.aioseo-col{padding-top:.5rem!important}.aioseo-modal-content .component-wrapper .aioseo-google-search-preview{padding:32px 28px!important}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:not(.md-active){min-width:72px!important;margin:0!important}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:hover{background-color:#e2e3e6}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:before{border-radius:100%!important;display:none}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button .label{display:inline!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-tabs .md-button:not(.md-active){margin:0!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-tabs .md-button:not(.md-active):before{top:0!important}.aioseo-post-schema-lite{position:relative;min-height:450px}.aioseo-post-schema-lite .schema-type{max-width:350px}.aioseo-post-schema-lite .aioseo-description{font-size:14px;line-height:1.8;margin:8px 0 0;color:#141b38}.aioseo-post-schema-lite .field-description{font-size:14px}.aioseo-post-schema-lite .block{display:block}.aioseo-post-schema-lite .aioseo-settings-row:last-of-type{margin-bottom:30px!important;padding-bottom:30px!important}.aioseo-post-schema-lite .schema-book-rating-options{display:flex}.aioseo-post-schema-lite .schema-book-rating-options .rating,.aioseo-post-schema-lite .schema-book-rating-options .rating-min{margin-left:30px;flex:1}.aioseo-post-schema-lite .schema-book-rating-options .rating-max{flex:1}@media screen and (max-width:782px){.aioseo-post-schema-lite .schema-book-rating-options{display:block}.aioseo-post-schema-lite .schema-book-rating-options .rating,.aioseo-post-schema-lite .schema-book-rating-options .rating-min{margin-left:0;margin-bottom:30px}}.aioseo-post-schema-lite .schema-person-options{display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}@media screen and (max-width:782px){.aioseo-post-schema-lite .schema-person-options{display:block}}.aioseo-post-schema-lite .aioseo-alert.schema-upsell{max-width:560px}.edit-post-sidebar .aioseo-post-schema .aioseo-settings-row.aioseo-row .col-md-9 .settings-content .aioseo-col{padding-right:0;padding-left:0}.edit-post-sidebar .schema-book-rating-options{display:block}.edit-post-sidebar .schema-book-rating-options .rating,.edit-post-sidebar .schema-book-rating-options .rating-min{margin:0 0 20px}.edit-post-sidebar .schema-upsell{margin-top:20px}.tab-facebook .facebook-image-upload{display:flex}.tab-facebook .facebook-image-upload .aioseo-input{max-width:445px;margin-left:10px}.tab-facebook .facebook-image-upload .insert-image{min-width:214px;margin-left:10px}.tab-facebook .facebook-image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-left:10px}.tab-facebook .facebook-image img{margin-top:20px;width:auto;max-width:525px;max-height:525px;height:auto}.tab-facebook .facebook-image.vertical img{max-width:158px;max-height:158px}.tab-facebook .facebook-meta-input{margin-top:10px}.tab-twitter .twitter-image-upload{display:flex}.tab-twitter .twitter-image-upload .aioseo-input{max-width:445px;margin-left:10px}.tab-twitter .twitter-image-upload .insert-image{min-width:214px;margin-left:10px}.tab-twitter .twitter-image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-left:10px}.tab-twitter .twitter-image img{margin-top:20px;width:auto;max-width:525px;max-height:525px;height:auto}.tab-twitter .twitter-image.vertical img{max-width:158px;max-height:158px}.tab-twitter .twitter-custom-field,.tab-twitter .twitter-image-source{padding-top:8px!important;padding-bottom:24px!important}.tab-twitter .twitter-card-type,.tab-twitter .twitter-image{padding-top:8px!important}.tab-twitter .aioseo-settings-row:last-of-type,.tab-twitter .use-facebook{margin-bottom:32px!important;padding-bottom:32px!important}.open-social-modal{margin-top:12px;border:1px solid #dcdde1}.open-social-modal svg{margin-left:5px}.open-social-copy>.col-md-3{display:none}.aioseo-post-social .aioseo-col.col-md-9{position:relative}.aioseo-post-social .mobile-radio-buttons{margin:0;padding:0;border:0}.aioseo-post-social .mobile-radio-buttons .aioseo-radio-toggle{justify-content:flex-end;position:absolute;left:20px;top:12px}.aioseo-post-social .mobile-radio-buttons .aioseo-radio-toggle>div{margin-right:10px}.aioseo-post-social .mobile-radio-buttons .col-md-9{padding-right:4px;padding-left:0}.aioseo-post-social .ismobile,.aioseo-post-social .ismobilecard .facebook-post,.aioseo-post-social .ismobilecard .twitter-post{max-width:375px}.aioseo-post-social .aioseo-tabs{background:#fff!important;border:none!important;border-bottom:2px solid #e8e8eb!important}.edit-post-sidebar .mobile-radio-buttons,.edit-post-sidebar .tab-facebook,.edit-post-sidebar .tab-twitter{display:none}.aioseo-modal-content .mobile-radio-buttons{padding-bottom:0!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-radio-toggle{left:0!important;top:8px!important}@media screen and (max-width:520px){.aioseo-modal-content .mobile-radio-buttons .aioseo-radio-toggle{display:none}}.aioseo-modal-content .tab-facebook,.aioseo-modal-content .tab-twitter{display:block}.aioseo-modal-content .tab-facebook .aioseo-settings-row:first-of-type,.aioseo-modal-content .tab-twitter .aioseo-settings-row:first-of-type{border-bottom:0;padding-bottom:0}.aioseo-modal-content .tab-facebook .aioseo-settings-row:first-of-type .aioseo-col:first-of-type,.aioseo-modal-content .tab-twitter .aioseo-settings-row:first-of-type .aioseo-col:first-of-type{display:none}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor{margin-top:0}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor .aioseo-description,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor .aioseo-description{display:none}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor .add-tags,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor .add-tags{position:absolute;top:-40px;left:8px;margin:0}.aioseo-modal-content .tab-facebook .facebook-description-settings,.aioseo-modal-content .tab-facebook .facebook-title-settings,.aioseo-modal-content .tab-facebook .twitter-description-settings,.aioseo-modal-content .tab-facebook .twitter-title-settings,.aioseo-modal-content .tab-twitter .facebook-description-settings,.aioseo-modal-content .tab-twitter .facebook-title-settings,.aioseo-modal-content .tab-twitter .twitter-description-settings,.aioseo-modal-content .tab-twitter .twitter-title-settings{padding-bottom:24px}.aioseo-modal-content .tab-facebook .facebook-description-settings .col-md-9,.aioseo-modal-content .tab-facebook .facebook-title-settings .col-md-9,.aioseo-modal-content .tab-facebook .twitter-description-settings .col-md-9,.aioseo-modal-content .tab-facebook .twitter-title-settings .col-md-9,.aioseo-modal-content .tab-twitter .facebook-description-settings .col-md-9,.aioseo-modal-content .tab-twitter .facebook-title-settings .col-md-9,.aioseo-modal-content .tab-twitter .twitter-description-settings .col-md-9,.aioseo-modal-content .tab-twitter .twitter-title-settings .col-md-9{padding-top:0!important;margin-top:0}.aioseo-modal-content .mobile-radio-buttons{display:block!important}.aioseo-modal-content .mobile-radio-buttons>.col-md-3{display:none}.aioseo-modal-content .mobile-radio-buttons>.col-md-9{padding:0;flex-basis:100%!important;max-width:100%!important}.aioseo-modal-content .aioseo-settings-row>.col-md-3{padding-bottom:0}.aioseo-modal-content .aioseo-settings-row>.col-md-3,.aioseo-modal-content .aioseo-settings-row>.col-md-9{flex-basis:100%;max-width:100%}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs.internal{padding-right:40px}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button-content{display:flex;align-items:center}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button-content svg{display:inline;width:16px;height:16px}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button:before{height:auto!important;border-radius:0!important}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button .label{display:inline!important;margin-right:10px}.aioseo-modal-content>.aioseo-settings-row.mobile-radio-buttons{position:sticky;top:60px;z-index:10;padding-bottom:0}.aioseo-modal-content>.aioseo-settings-row.mobile-radio-buttons .md-button{max-height:46px}.aioseo-modal-content .aioseo-tab-content{position:relative;padding:30px 40px!important}.aioseo-modal-content .aioseo-tab-content.aioseo-post-social{padding:22px 40px!important}.aioseo-app,.aioseo-metabox .aioseo-app{background:#fff}.aioseo-app .aioseo-tabs,.aioseo-metabox .aioseo-app .aioseo-tabs{border-bottom-width:2px;background:#f3f4f5}.aioseo-app .aioseo-tabs .md-tabs-navigation,.aioseo-metabox .aioseo-app .aioseo-tabs .md-tabs-navigation{margin-top:0!important}.aioseo-app .aioseo-tabs .md-button,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button{height:50px!important;font-size:14px!important;color:#434960!important}.aioseo-app .aioseo-tabs .md-button.md-active,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button.md-active{color:#141b38!important;font-weight:700!important}.aioseo-app .aioseo-tabs .md-button .icon,.aioseo-app .aioseo-tabs svg,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button .icon,.aioseo-metabox .aioseo-app .aioseo-tabs svg{display:none}@media screen and (max-width:785px){.aioseo-app .aioseo-tabs svg.aioseo-caret,.aioseo-metabox .aioseo-app .aioseo-tabs svg.aioseo-caret{display:inline}}.aioseo-app .aioseo-tab-content,.aioseo-metabox .aioseo-app .aioseo-tab-content{background:#fff;border-top:0;padding:30px}.aioseo-app .aioseo-settings-row,.aioseo-metabox .aioseo-app .aioseo-settings-row{margin-bottom:16px;padding-bottom:16px}.edit-post-sidebar .col-md-3,.edit-post-sidebar .col-md-4,.edit-post-sidebar .col-sm-6,.edit-post-sidebar .col-xs-12{width:100%;flex-basis:100%!important;max-width:100%!important}.edit-post-sidebar .components-panel{border-bottom:none}.edit-post-sidebar .aioseo-mobile-tabs{display:none}.edit-post-sidebar .tabs-scroller{display:block!important}.edit-post-sidebar .aioseo-tabs{background:#fafafa}.edit-post-sidebar .aioseo-tabs .md-button{height:51px!important;color:#141b38!important}.edit-post-sidebar .aioseo-tabs .md-button .md-ripple{padding:0 10px!important}.edit-post-sidebar .aioseo-tabs .md-button .icon{display:inline;line-height:1.3rem}.edit-post-sidebar .aioseo-tabs .md-button .icon:before{line-height:inherit}.edit-post-sidebar .aioseo-tabs .md-button .label{display:none}.edit-post-sidebar .aioseo-tabs .md-button.md-active{color:#141b38!important}.edit-post-sidebar .aioseo-tabs .md-button.md-active .label{display:inline;margin-right:10px}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active){min-width:36px!important;margin:0 3px!important}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):before{top:8px!important;border-radius:50%;height:36px;color:#141b38}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active) svg{display:inline;width:16px;height:16px;margin-top:4px;color:#8c8f9a}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):focus svg,.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):hover svg{color:#141b38}.edit-post-sidebar .aioseo-app input{border:1px solid #d0d1d7}.edit-post-sidebar .aioseo-app input:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.edit-post-sidebar .aioseo-app input::-moz-placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app input:-ms-input-placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app input::placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app .aioseo-textarea-autosize{border:1px solid #d0d1d7}.edit-post-sidebar .aioseo-app .aioseo-tab-content{padding:20px 16px;border:none}.edit-post-sidebar .aioseo-app .aioseo-description{margin:0}.edit-post-sidebar .aioseo-settings-row{margin-bottom:16px;padding-bottom:16px}.edit-post-sidebar .aioseo-settings-row:last-of-type{border-bottom:0;margin-bottom:0!important;padding-bottom:0!important}.edit-post-sidebar .aioseo-settings-row>.aioseo-col{padding-top:0}.edit-post-sidebar .aioseo-settings-row .settings-name .name{font-size:14px;font-weight:700;margin-bottom:0}.aioseo-modal-content .aioseo-tabs.internal{border-bottom-width:1px!important}@media screen and (max-width:520px){.aioseo-modal-content .aioseo-tabs.internal{padding-right:20px!important}}.aioseo-modal-content .md-tabs-navigation .md-tabs-indicator{bottom:-1px!important}@media only screen and (min-width:782px){.aioseo-modal-content .col-md-4{flex-basis:33.33333333%!important;max-width:33.33333333%!important}.aioseo-modal-content .col-md-5{flex-basis:41.66666667%!important;max-width:41.66666667%!important}.aioseo-modal-content .col-md-7{flex-basis:58.33333333%!important;max-width:58.33333333%!important}.aioseo-modal-content .col-md-8{flex-basis:66.66666667%!important;max-width:66.66666667%!important}}
|
1 |
+
.aioseo-post-advanced .inline-upsell{display:inline-flex;margin-top:20px}.aioseo-post-advanced .selectbox-row{display:flex;align-items:center}.aioseo-post-advanced .selectbox-row .separator{display:inline-block;margin:0 20px;padding-bottom:10px;align-self:flex-end}.aioseo-post-advanced .selectbox-row .select{display:inline-block;width:100%;max-width:125px}.aioseo-post-advanced .selectbox-row .select>span{display:inline-block;font-size:14px;margin-bottom:10px}.aioseo-analysis-detail{margin:0 0 35px}.aioseo-analysis-detail li{padding-right:24px;position:relative;margin-bottom:24px}.aioseo-analysis-detail li:last-of-type{margin-bottom:0}.aioseo-analysis-detail li svg{position:relative;right:0;top:3px}.aioseo-analysis-detail li svg.aioseo-circle-check{color:#00aa63}.aioseo-analysis-detail li svg.aioseo-circle-close{color:#df2a4a}.aioseo-analysis-detail li svg.aioseo-circle-check,.aioseo-analysis-detail li svg.aioseo-circle-close{position:absolute;right:0;top:5px}.aioseo-analysis-detail li svg.aioseo-caret{cursor:pointer;transform:rotate(180deg);transition:transform .3s}.aioseo-analysis-detail li .title{margin-bottom:6px!important}.aioseo-analysis-detail li .title.toggled svg{transform:rotate(90deg)}.aioseo-analysis-detail li .title.toggled+.description{opacity:0;height:0;margin:0}.aioseo-analysis-detail li .description{font-size:14px;font-style:normal;opacity:1;height:auto;transition:all .3s}.edit-post-sidebar .aioseo-analysis-detail .title{font-size:14px}.edit-post-sidebar .aioseo-analysis-detail .description{font-size:13px}.page-analysis-panel .aioseo-tabs{background:#fff!important}.page-analysis-panel .aioseo-tabs .md-button-content{display:flex}.page-analysis-panel .aioseo-tabs .md-button{font-weight:700!important}.aioseo-app.aioseo-focus-keyphrase-panel-modal .modal-body{max-height:calc(90vh - 70px);overflow:auto}.aioseo-app.aioseo-focus-keyphrase-panel-modal .modal-body .aioseo-modal-content .aioseo-alert{margin-bottom:20px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .semrush-country-selector{max-width:350px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table{width:100%;border:1px solid #d0d1d7;border-radius:3px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-trend,.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-volume{text-align:center}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions>div{display:flex;align-items:center;justify-content:flex-end}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .focus-keyphrase{display:flex;align-items:center;justify-content:flex-end;color:#00aa63;min-width:135px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .focus-keyphrase svg{margin-left:5px;width:16px;height:16px;color:#00aa63}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score{border-radius:3px;padding:5px;font-weight:700;font-size:13px;cursor:pointer;border:1px solid #005ae0}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-green{color:#00aa63;border-color:#00aa63}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-orange{color:#f18200;border-color:#f18200}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score.score-red{color:#df2a4a;border-color:#df2a4a}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover{background-color:#005ae0;color:#fff}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-green{background-color:#00aa63}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-orange{background-color:#f18200}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .keyphrase-score:hover.score-red{background-color:#df2a4a}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .remove-keyphrase{display:flex;align-items:center;justify-content:flex-end}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .remove-keyphrase svg{width:16px;height:16px;cursor:pointer}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrase-actions .remove-keyphrase svg:hover{color:#df2a4a}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-header{height:50px;font-size:14px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-header th{border-bottom:1px solid #d0d1d7;padding:15px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-header th:first-of-type{padding-right:30px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-header th:last-of-type{padding-left:30px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows{font-size:14px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row{background-color:#fff;height:70px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row:last-of-type td:first-of-type{border-radius:0 0 3px 0}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row:last-of-type td:last-of-type{border-radius:0 0 0 3px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row.even{background-color:#f9f9fa}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td{padding:15px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td:first-of-type{padding-right:30px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td:last-of-type{padding-left:30px}.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row.loading,.aioseo-app.aioseo-focus-keyphrase-panel-modal .additional-keyphrases-table .keyphrases-rows tr.keyphrase-row td.no-results>*{display:flex;align-items:center;justify-content:center}.aioseo-description.additional-keyphrases-description,.edit-post-sidebar .aioseo-app .aioseo-description.additional-keyphrases-description{margin:0 0 20px}.aioseo-post-general svg.aioseo-circle-question-mark{width:17px;height:17px;color:#8c8f99;transition:background-color .2s ease}.aioseo-post-general svg.aioseo-circle-question-mark:hover{color:#5a5c65}.aioseo-post-general .mobile-radio-buttons{margin:0!important;padding:0!important;border:0}.aioseo-post-general .mobile-radio-buttons>.aioseo-col{padding:0}.aioseo-post-general .mobile-radio-buttons .aioseo-radio-toggle{justify-content:flex-end}.aioseo-post-general .mobile-radio-buttons .aioseo-radio-toggle>div{margin-right:10px}.aioseo-post-general .ismobile{max-width:375px}.aioseo-post-general .add-keyphrase,.aioseo-post-general .edit-snippet{margin-top:12px;border:1px solid #dcdde1}.aioseo-post-general .add-keyphrase svg,.aioseo-post-general .edit-snippet svg{margin-left:5px}.aioseo-post-general .disabled-button{margin-top:12px;border:1px solid #dcdde1;color:#8c8f9a;background-color:#f3f4f5;cursor:default;height:30px;font-size:14px;padding:0 12px;flex-shrink:0;line-height:1;display:inline-flex;align-items:center;justify-content:center;font-weight:600;border-radius:4px;-webkit-appearance:none;transition:background-color .2s ease;position:relative;overflow:hidden;text-decoration:none;white-space:nowrap}.aioseo-post-general .disabled-button svg{margin-left:5px}.aioseo-post-general .aioseo-toggle{display:block}.aioseo-post-general .aioseo-toggle .toggle-content input:checked+.toggle-switch{border:1px solid #00aa63;background-color:#00aa63}.aioseo-post-general .aioseo-keyphrase-tag{display:inline-block;margin-left:10px;margin-bottom:16px;border-radius:3px;font-size:14px;font-weight:700}.aioseo-post-general .aioseo-keyphrase-tag.selected{position:relative}.aioseo-post-general .aioseo-keyphrase-tag.selected:after,.aioseo-post-general .aioseo-keyphrase-tag.selected:before{content:"";position:absolute;display:block;z-index:10;bottom:-17px;border-style:solid}.aioseo-post-general .aioseo-keyphrase-tag.selected:before{right:calc(50% - 6px);border-width:0 10px 10px;border-color:transparent transparent #e8e8eb}.aioseo-post-general .aioseo-keyphrase-tag.selected:after{right:calc(50% - 4px);border-width:0 8px 8px;border-color:transparent transparent #fff}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag{display:block;padding:9px 10px;border:1px solid #f3f4f5;border-radius:3px;background:#f3f4f5;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag.hidden{opacity:0;height:0;padding:0}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-name{cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-edit{opacity:0;margin:0 8px;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score{cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-green{color:#00aa63}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-orange{color:#f18200}.aioseo-post-general .aioseo-keyphrase-tag .keyphrase-score.score-red{color:#df2a4a}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag{position:relative}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag>input{width:100%;padding:8px 10px;border:1px solid #e8e8eb;border-radius:3px}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag .keyphrase-delete{position:absolute;top:2px;left:10px;width:16px;height:16px;display:block;cursor:pointer}.aioseo-post-general .aioseo-keyphrase-tag .aioseo-edit-keyphrase-tag .keyphrase-delete:hover{color:#df2a4a}.aioseo-post-general .aioseo-keyphrase-tag:hover .keyphrase-edit{opacity:1}.aioseo-post-general .focus-keyphrase-panel .aioseo-analysis-detail{margin-bottom:0}.aioseo-post-general .analysis-wrapper{border-top:1px solid #e8e8eb}.aioseo-post-general .analysis-loading{position:relative;margin-top:16px}.edit-post-sidebar .aioseo-google-search-preview{padding:10px}.edit-post-sidebar .aioseo-button.edit-snippet{display:inline-flex}.edit-post-sidebar .snippet-focus-keyphrases-row{border-bottom:none;margin-bottom:0!important}.edit-post-sidebar .snippet-preview-row{padding-bottom:0!important;border-bottom:none}.edit-post-sidebar .card-additional-keyphrase,.edit-post-sidebar .card-basic-seo,.edit-post-sidebar .card-focus-keyphrase,.edit-post-sidebar .card-readability-seo,.edit-post-sidebar .card-title-seo{margin:0 -1rem;box-shadow:none;border:none;border-top:1px solid #e8e8eb}.edit-post-sidebar .card-additional-keyphrase .header,.edit-post-sidebar .card-basic-seo .header,.edit-post-sidebar .card-focus-keyphrase .header,.edit-post-sidebar .card-readability-seo .header,.edit-post-sidebar .card-title-seo .header{padding:1rem;border-bottom:none;font-size:14px;font-weight:700}.edit-post-sidebar .card-additional-keyphrase .content,.edit-post-sidebar .card-basic-seo .content,.edit-post-sidebar .card-focus-keyphrase .content,.edit-post-sidebar .card-readability-seo .content,.edit-post-sidebar .card-title-seo .content{padding:24px 16px;font-size:14px;border-top:1px solid #e8e8eb}.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail:last-of-type .title,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail:last-of-type,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail:last-of-type .title{margin-bottom:0}.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail{margin:16px 0!important}.edit-post-sidebar .card-focus-keyphrase .aioseo-analysis-detail:empty{margin:16px}.edit-post-sidebar .card-focus-keyphrase .add-keyphrase{width:100%}.edit-post-sidebar .card-additional-keyphrase .aioseo-analysis-detail{margin:0 0 16px!important}.edit-post-sidebar .card-additional-keyphrase .add-keyphrase{width:100%;margin-bottom:16px}.edit-post-sidebar .card-readability-seo{border-bottom:1px solid #e8e8eb}.edit-post-sidebar .aioseo-keyphrase-tag{display:block;margin-left:0;margin-bottom:10px}.edit-post-sidebar .aioseo-keyphrase-tag:after{content:none!important}.edit-post-sidebar .aioseo-keyphrase-tag.selected{border:2px solid #e8e8eb}.edit-post-sidebar .aioseo-keyphrase-tag.selected:after,.edit-post-sidebar .aioseo-keyphrase-tag.selected:before{content:none}.edit-post-sidebar .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag{display:flex;width:100%}.edit-post-sidebar .aioseo-keyphrase-tag .aioseo-add-keyphrase-tag .keyphrase-score{flex:1;text-align:left}.edit-post-sidebar .card-basic-seo .aioseo-analysis-detail,.edit-post-sidebar .card-readability-seo .aioseo-analysis-detail,.edit-post-sidebar .card-title-seo .aioseo-analysis-detail{margin-top:0}.edit-post-sidebar .analysis-wrapper{border-top:none}.aioseo-modal-content>.aioseo-settings-row{border:none;margin-bottom:0!important}.aioseo-modal-content .aioseo-post-general>.mobile-radio-buttons{position:absolute;left:40px;top:18px;margin-bottom:0;padding-bottom:0}.aioseo-modal-content .settings-name .name{font-size:16px!important;margin-bottom:6px!important}.aioseo-modal-content .snippet-description-row,.aioseo-modal-content .snippet-title-row{position:relative;display:block;margin-top:32px}.aioseo-modal-content .snippet-description-row .settings-name,.aioseo-modal-content .snippet-title-row .settings-name{margin-bottom:8px}.aioseo-modal-content .snippet-description-row .aioseo-description,.aioseo-modal-content .snippet-title-row .aioseo-description{display:none}.aioseo-modal-content .snippet-description-row .add-tags,.aioseo-modal-content .snippet-title-row .add-tags{position:absolute;top:0;left:8px;margin:0}@media screen and (max-width:520px){.aioseo-modal-content .snippet-description-row .add-tags .aioseo-add-template-tag,.aioseo-modal-content .snippet-title-row .add-tags .aioseo-add-template-tag{display:none}}.aioseo-modal-content .snippet-title-row{margin-top:24px;padding-bottom:24px!important}.aioseo-modal-content .snippet-description-row,.aioseo-modal-content .snippet-preview-row{border:none;margin-bottom:0!important;padding-bottom:0!important}.aioseo-modal-content .snippet-pillar-row{display:none}.aioseo-modal-content .component-wrapper .aioseo-settings-row>.aioseo-col{padding-top:.5rem!important}.aioseo-modal-content .component-wrapper .aioseo-google-search-preview{padding:32px 28px!important}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:not(.md-active){min-width:72px!important;margin:0!important}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:hover{background-color:#e2e3e6}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button:before{border-radius:100%!important;display:none}.aioseo-modal-content .component-wrapper .aioseo-tabs .md-button .label{display:inline!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-tabs .md-button:not(.md-active){margin:0!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-tabs .md-button:not(.md-active):before{top:0!important}.aioseo-post-schema-lite{position:relative;min-height:450px}.aioseo-post-schema-lite .schema-type{max-width:350px}.aioseo-post-schema-lite .aioseo-description{font-size:14px;line-height:1.8;margin:8px 0 0;color:#141b38}.aioseo-post-schema-lite .field-description{font-size:14px}.aioseo-post-schema-lite .block{display:block}.aioseo-post-schema-lite .aioseo-settings-row:last-of-type{margin-bottom:30px!important;padding-bottom:30px!important}.aioseo-post-schema-lite .schema-book-rating-options{display:flex}.aioseo-post-schema-lite .schema-book-rating-options .rating,.aioseo-post-schema-lite .schema-book-rating-options .rating-min{margin-left:30px;flex:1}.aioseo-post-schema-lite .schema-book-rating-options .rating-max{flex:1}@media screen and (max-width:782px){.aioseo-post-schema-lite .schema-book-rating-options{display:block}.aioseo-post-schema-lite .schema-book-rating-options .rating,.aioseo-post-schema-lite .schema-book-rating-options .rating-min{margin-left:0;margin-bottom:30px}}.aioseo-post-schema-lite .schema-person-options{display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}@media screen and (max-width:782px){.aioseo-post-schema-lite .schema-person-options{display:block}}.aioseo-post-schema-lite .aioseo-alert.schema-upsell{max-width:560px}.edit-post-sidebar .aioseo-post-schema .aioseo-settings-row.aioseo-row .col-md-9 .settings-content .aioseo-col{padding-right:0;padding-left:0}.edit-post-sidebar .schema-book-rating-options{display:block}.edit-post-sidebar .schema-book-rating-options .rating,.edit-post-sidebar .schema-book-rating-options .rating-min{margin:0 0 20px}.edit-post-sidebar .schema-upsell{margin-top:20px}.tab-facebook .facebook-image-upload{display:flex}.tab-facebook .facebook-image-upload .aioseo-input{max-width:445px;margin-left:10px}.tab-facebook .facebook-image-upload .insert-image{min-width:214px;margin-left:10px}.tab-facebook .facebook-image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-left:10px}.tab-facebook .facebook-image img{margin-top:20px;width:auto;max-width:525px;max-height:525px;height:auto}.tab-facebook .facebook-image.vertical img{max-width:158px;max-height:158px}.tab-facebook .facebook-meta-input{margin-top:10px}.tab-twitter .twitter-image-upload{display:flex}.tab-twitter .twitter-image-upload .aioseo-input{max-width:445px;margin-left:10px}.tab-twitter .twitter-image-upload .insert-image{min-width:214px;margin-left:10px}.tab-twitter .twitter-image-upload .insert-image svg.aioseo-circle-plus{width:13px;height:13px;margin-left:10px}.tab-twitter .twitter-image img{margin-top:20px;width:auto;max-width:525px;max-height:525px;height:auto}.tab-twitter .twitter-image.vertical img{max-width:158px;max-height:158px}.tab-twitter .twitter-custom-field,.tab-twitter .twitter-image-source{padding-top:8px!important;padding-bottom:24px!important}.tab-twitter .twitter-card-type,.tab-twitter .twitter-image{padding-top:8px!important}.tab-twitter .aioseo-settings-row:last-of-type,.tab-twitter .use-facebook{margin-bottom:32px!important;padding-bottom:32px!important}.open-social-modal{margin-top:12px;border:1px solid #dcdde1}.open-social-modal svg{margin-left:5px}.open-social-copy>.col-md-3{display:none}.aioseo-post-social .aioseo-col.col-md-9{position:relative}.aioseo-post-social .mobile-radio-buttons{margin:0;padding:0;border:0}.aioseo-post-social .mobile-radio-buttons .aioseo-radio-toggle{justify-content:flex-end;position:absolute;left:20px;top:12px}.aioseo-post-social .mobile-radio-buttons .aioseo-radio-toggle>div{margin-right:10px}.aioseo-post-social .mobile-radio-buttons .col-md-9{padding-right:4px;padding-left:0}.aioseo-post-social .ismobile,.aioseo-post-social .ismobilecard .facebook-post,.aioseo-post-social .ismobilecard .twitter-post{max-width:375px}.aioseo-post-social .aioseo-tabs{background:#fff!important;border:none!important;border-bottom:2px solid #e8e8eb!important}.edit-post-sidebar .mobile-radio-buttons,.edit-post-sidebar .tab-facebook,.edit-post-sidebar .tab-twitter{display:none}.aioseo-modal-content .mobile-radio-buttons{padding-bottom:0!important}.aioseo-modal-content .mobile-radio-buttons .aioseo-radio-toggle{left:0!important;top:8px!important}@media screen and (max-width:520px){.aioseo-modal-content .mobile-radio-buttons .aioseo-radio-toggle{display:none}}.aioseo-modal-content .tab-facebook,.aioseo-modal-content .tab-twitter{display:block}.aioseo-modal-content .tab-facebook .aioseo-settings-row:first-of-type,.aioseo-modal-content .tab-twitter .aioseo-settings-row:first-of-type{border-bottom:0;padding-bottom:0}.aioseo-modal-content .tab-facebook .aioseo-settings-row:first-of-type .aioseo-col:first-of-type,.aioseo-modal-content .tab-twitter .aioseo-settings-row:first-of-type .aioseo-col:first-of-type{display:none}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor{margin-top:0}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor .aioseo-description,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor .aioseo-description{display:none}.aioseo-modal-content .tab-facebook .aioseo-html-tags-editor .add-tags,.aioseo-modal-content .tab-twitter .aioseo-html-tags-editor .add-tags{position:absolute;top:-40px;left:8px;margin:0}.aioseo-modal-content .tab-facebook .facebook-description-settings,.aioseo-modal-content .tab-facebook .facebook-title-settings,.aioseo-modal-content .tab-facebook .twitter-description-settings,.aioseo-modal-content .tab-facebook .twitter-title-settings,.aioseo-modal-content .tab-twitter .facebook-description-settings,.aioseo-modal-content .tab-twitter .facebook-title-settings,.aioseo-modal-content .tab-twitter .twitter-description-settings,.aioseo-modal-content .tab-twitter .twitter-title-settings{padding-bottom:24px}.aioseo-modal-content .tab-facebook .facebook-description-settings .col-md-9,.aioseo-modal-content .tab-facebook .facebook-title-settings .col-md-9,.aioseo-modal-content .tab-facebook .twitter-description-settings .col-md-9,.aioseo-modal-content .tab-facebook .twitter-title-settings .col-md-9,.aioseo-modal-content .tab-twitter .facebook-description-settings .col-md-9,.aioseo-modal-content .tab-twitter .facebook-title-settings .col-md-9,.aioseo-modal-content .tab-twitter .twitter-description-settings .col-md-9,.aioseo-modal-content .tab-twitter .twitter-title-settings .col-md-9{padding-top:0!important;margin-top:0}.aioseo-modal-content .mobile-radio-buttons{display:block!important}.aioseo-modal-content .mobile-radio-buttons>.col-md-3{display:none}.aioseo-modal-content .mobile-radio-buttons>.col-md-9{padding:0;flex-basis:100%!important;max-width:100%!important}.aioseo-modal-content .aioseo-settings-row>.col-md-3{padding-bottom:0}.aioseo-modal-content .aioseo-settings-row>.col-md-3,.aioseo-modal-content .aioseo-settings-row>.col-md-9{flex-basis:100%;max-width:100%}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs.internal{padding-right:40px}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button-content{display:flex;align-items:center}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button-content svg{display:inline;width:16px;height:16px}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button:before{height:auto!important;border-radius:0!important}.aioseo-modal-content>.aioseo-settings-row .aioseo-tabs .md-button .label{display:inline!important;margin-right:10px}.aioseo-modal-content>.aioseo-settings-row.mobile-radio-buttons{position:sticky;top:60px;z-index:10;padding-bottom:0}.aioseo-modal-content>.aioseo-settings-row.mobile-radio-buttons .md-button{max-height:46px}.aioseo-modal-content .aioseo-tab-content{position:relative;padding:30px 40px!important}.aioseo-modal-content .aioseo-tab-content.aioseo-post-social{padding:22px 40px!important}.aioseo-app,.aioseo-metabox .aioseo-app{background:#fff}.aioseo-app .aioseo-tabs,.aioseo-metabox .aioseo-app .aioseo-tabs{border-bottom-width:2px;background:#f3f4f5}.aioseo-app .aioseo-tabs .md-tabs-navigation,.aioseo-metabox .aioseo-app .aioseo-tabs .md-tabs-navigation{margin-top:0!important}.aioseo-app .aioseo-tabs .md-button,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button{height:50px!important;font-size:14px!important;color:#434960!important}.aioseo-app .aioseo-tabs .md-button.md-active,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button.md-active{color:#141b38!important;font-weight:700!important}.aioseo-app .aioseo-tabs .md-button .icon,.aioseo-app .aioseo-tabs svg,.aioseo-metabox .aioseo-app .aioseo-tabs .md-button .icon,.aioseo-metabox .aioseo-app .aioseo-tabs svg{display:none}@media screen and (max-width:785px){.aioseo-app .aioseo-tabs svg.aioseo-caret,.aioseo-metabox .aioseo-app .aioseo-tabs svg.aioseo-caret{display:inline}}.aioseo-app .aioseo-tab-content,.aioseo-metabox .aioseo-app .aioseo-tab-content{background:#fff;border-top:0;padding:30px}.aioseo-app .aioseo-settings-row,.aioseo-metabox .aioseo-app .aioseo-settings-row{margin-bottom:16px;padding-bottom:16px}.edit-post-sidebar .col-md-3,.edit-post-sidebar .col-md-4,.edit-post-sidebar .col-sm-6,.edit-post-sidebar .col-xs-12{width:100%;flex-basis:100%!important;max-width:100%!important}.edit-post-sidebar .components-panel{border-bottom:none}.edit-post-sidebar .aioseo-mobile-tabs{display:none}.edit-post-sidebar .tabs-scroller{display:block!important}.edit-post-sidebar .aioseo-tabs{background:#fafafa}.edit-post-sidebar .aioseo-tabs .md-button{height:51px!important;color:#141b38!important}.edit-post-sidebar .aioseo-tabs .md-button .md-ripple{padding:0 10px!important}.edit-post-sidebar .aioseo-tabs .md-button .icon{display:inline;line-height:1.3rem}.edit-post-sidebar .aioseo-tabs .md-button .icon:before{line-height:inherit}.edit-post-sidebar .aioseo-tabs .md-button .label{display:none}.edit-post-sidebar .aioseo-tabs .md-button.md-active{color:#141b38!important}.edit-post-sidebar .aioseo-tabs .md-button.md-active .label{display:inline;margin-right:10px}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active){min-width:36px!important;margin:0 3px!important}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):before{top:8px!important;border-radius:50%;height:36px;color:#141b38}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active) svg{display:inline;width:16px;height:16px;margin-top:4px;color:#8c8f9a}.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):focus svg,.edit-post-sidebar .aioseo-tabs .md-button:not(.md-active):hover svg{color:#141b38}.edit-post-sidebar .aioseo-app input{border:1px solid #d0d1d7}.edit-post-sidebar .aioseo-app input:focus{border-color:#005ae0;box-shadow:0 0 0 1px #005ae0}.edit-post-sidebar .aioseo-app input::-moz-placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app input:-ms-input-placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app input::placeholder{color:#8c8f9a}.edit-post-sidebar .aioseo-app .aioseo-textarea-autosize{border:1px solid #d0d1d7}.edit-post-sidebar .aioseo-app .aioseo-tab-content{padding:20px 16px;border:none}.edit-post-sidebar .aioseo-app .aioseo-description{margin:0}.edit-post-sidebar .aioseo-settings-row{margin-bottom:16px;padding-bottom:16px}.edit-post-sidebar .aioseo-settings-row:last-of-type{border-bottom:0;margin-bottom:0!important;padding-bottom:0!important}.edit-post-sidebar .aioseo-settings-row>.aioseo-col{padding-top:0}.edit-post-sidebar .aioseo-settings-row .settings-name .name{font-size:14px;font-weight:700;margin-bottom:0}.aioseo-app.post-settings-modal .aioseo-modal-content .aioseo-tabs.internal{border-bottom-width:1px!important}@media screen and (max-width:520px){.aioseo-app.post-settings-modal .aioseo-modal-content .aioseo-tabs.internal{padding-right:20px!important}}.aioseo-app.post-settings-modal .aioseo-modal-content .md-tabs-navigation .md-tabs-indicator{bottom:-1px!important}@media only screen and (min-width:782px){.aioseo-app.post-settings-modal .aioseo-modal-content .col-md-4{flex-basis:33.33333333%!important;max-width:33.33333333%!important}.aioseo-app.post-settings-modal .aioseo-modal-content .col-md-5{flex-basis:41.66666667%!important;max-width:41.66666667%!important}.aioseo-app.post-settings-modal .aioseo-modal-content .col-md-7{flex-basis:58.33333333%!important;max-width:58.33333333%!important}.aioseo-app.post-settings-modal .aioseo-modal-content .col-md-8{flex-basis:66.66666667%!important;max-width:66.66666667%!important}}.aioseo-post-settings-sidebar-vue{display:flex;justify-content:center}.aioseo-post-settings-sidebar-vue .aioseo-loading-spinner{margin-top:30px}.aioseo-localseo-info .aioseo-input,.aioseo-localseo-info .aioseo-multiselect,.aioseo-localseo-info .aioseo-select{max-width:480px}.aioseo-localseo-info .field-description{font-size:14px}.aioseo-localseo-info .info-businessaddress-row .columns{display:flex;flex:0 1 auto;flex-direction:row;flex-wrap:wrap}.aioseo-localseo-opening .field-description{display:inline-block;margin:10px 0;font-size:14px}.aioseo-localseo-opening .field-description.mt-8{margin-top:8px}.aioseo-localseo-opening .aioseo-input,.aioseo-localseo-opening .aioseo-multiselect,.aioseo-localseo-opening .aioseo-select{max-width:480px}.aioseo-localseo-opening .aioseo-col-flex{display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #e8e8eb}.aioseo-localseo-opening .aioseo-col-flex:first-of-type{padding-top:0}.aioseo-localseo-opening .aioseo-col-flex:last-of-type{padding-bottom:0;border:none}.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-day{flex:1}.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-alwaysopen,.aioseo-localseo-opening .aioseo-col-flex .aioseo-col-hours{flex:2}.aioseo-localseo-opening .aioseo-col-flex span.separator{margin:0 5px}.aioseo-localseo-opening .aioseo-col-flex .aioseo-select{display:inline-block;max-width:120px;margin-bottom:5px}.aioseo-localseo-opening .aioseo-col-flex .multiselect--disabled .multiselect__single,.aioseo-localseo-opening .aioseo-col-flex .multiselect--disabled .multiselect__tags{background:#f3f4f5}.aioseo-localseo-opening .aioseo-col-alwaysopen .aioseo-che
|