Version Description
Download this release
Release Info
Developer | Yoast |
Plugin | Yoast SEO |
Version | 7.8 |
Comparing to | |
See all releases |
Code changes from version 7.7.3 to 7.8
- admin/banner/class-admin-banner-renderer.php +0 -50
- admin/banner/class-admin-banner-sidebar-renderer.php +0 -62
- admin/banner/class-admin-banner-sidebar.php +0 -358
- admin/banner/class-admin-banner-spot-renderer.php +0 -39
- admin/banner/class-admin-banner-spot.php +0 -120
- admin/banner/class-admin-banner.php +0 -89
- admin/class-add-keyword-modal.php +2 -2
- admin/class-admin.php +0 -1
- admin/class-keyword-synonyms-modal.php +61 -0
- admin/class-premium-benefits-for-synonyms-list.php +54 -0
- admin/class-yoast-form.php +1 -11
- admin/class-yoast-notification-center.php +11 -1
- admin/config-ui/components/class-component-suggestions.php +14 -6
- admin/metabox/class-metabox-keyword-synonyms-button.php +50 -0
- admin/metabox/class-metabox.php +5 -0
- admin/views/sidebar.php +125 -0
- admin/watchers/class-slug-change-watcher.php +59 -2
- css/dist/{admin-global-773-rtl.min.css → admin-global-780-rtl.min.css} +0 -0
- css/dist/{admin-global-773.min.css → admin-global-780.min.css} +0 -0
- css/dist/{adminbar-773-rtl.min.css → adminbar-780-rtl.min.css} +0 -0
- css/dist/{adminbar-773.min.css → adminbar-780.min.css} +0 -0
- css/dist/{alerts-773-rtl.min.css → alerts-780-rtl.min.css} +0 -0
- css/dist/{alerts-773.min.css → alerts-780.min.css} +0 -0
- css/dist/{dashboard-773-rtl.min.css → dashboard-780-rtl.min.css} +0 -0
- css/dist/{dashboard-773.min.css → dashboard-780.min.css} +0 -0
- css/dist/{edit-page-773-rtl.min.css → edit-page-780-rtl.min.css} +0 -0
- css/dist/{edit-page-773.min.css → edit-page-780.min.css} +0 -0
- css/dist/{featured-image-773-rtl.min.css → featured-image-780-rtl.min.css} +0 -0
- css/dist/{featured-image-773.min.css → featured-image-780.min.css} +0 -0
- css/dist/{filter-explanation-773-rtl.min.css → filter-explanation-780-rtl.min.css} +0 -0
- css/dist/{filter-explanation-773.min.css → filter-explanation-780.min.css} +0 -0
- css/dist/{inside-editor-773-rtl.min.css → inside-editor-780-rtl.min.css} +0 -0
- css/dist/{inside-editor-773.min.css → inside-editor-780.min.css} +0 -0
- css/dist/{metabox-773-rtl.min.css → metabox-780-rtl.min.css} +1 -1
- css/dist/{metabox-773.min.css → metabox-780.min.css} +1 -1
- css/dist/{metabox-primary-category-773-rtl.min.css → metabox-primary-category-780-rtl.min.css} +0 -0
- css/dist/{metabox-primary-category-773.min.css → metabox-primary-category-780.min.css} +0 -0
- css/dist/{search-appearance-773-rtl.min.css → search-appearance-780-rtl.min.css} +0 -0
- css/dist/{search-appearance-773.min.css → search-appearance-780.min.css} +0 -0
- css/dist/{snippet-773-rtl.min.css → snippet-780-rtl.min.css} +0 -0
- css/dist/{snippet-773.min.css → snippet-780.min.css} +0 -0
- css/dist/{toggle-switch-773-rtl.min.css → toggle-switch-780-rtl.min.css} +0 -0
- css/dist/{toggle-switch-773.min.css → toggle-switch-780.min.css} +0 -0
- css/dist/{wpseo-dismissible-773-rtl.min.css → wpseo-dismissible-780-rtl.min.css} +0 -0
- css/dist/{wpseo-dismissible-773.min.css → wpseo-dismissible-780.min.css} +0 -0
- css/dist/{yoast-components-773-rtl.min.css → yoast-components-780-rtl.min.css} +0 -0
- css/dist/{yoast-components-773.min.css → yoast-components-780.min.css} +0 -0
- css/dist/{yoast-extensions-773-rtl.min.css → yoast-extensions-780-rtl.min.css} +0 -0
- css/dist/{yoast-extensions-773.min.css → yoast-extensions-780.min.css} +0 -0
- css/dist/{yst_plugin_tools-773-rtl.min.css → yst_plugin_tools-780-rtl.min.css} +1 -1
- css/dist/{yst_plugin_tools-773.min.css → yst_plugin_tools-780.min.css} +1 -1
- css/dist/{yst_seo_score-773-rtl.min.css → yst_seo_score-780-rtl.min.css} +0 -0
- css/dist/{yst_seo_score-773.min.css → yst_seo_score-780.min.css} +0 -0
- frontend/class-breadcrumbs.php +81 -25
- frontend/class-frontend-page-type.php +28 -1
- frontend/class-frontend.php +25 -12
- frontend/class-opengraph-image.php +43 -6
- frontend/class-twitter.php +12 -2
- images/BasicSEO.svg +1 -0
- images/Local_SEO_Icon.svg +1 -0
- images/News_SEO_Icon.svg +1 -0
- images/SEO_for_beginners.svg +1 -0
- images/Video_SEO_Icon.svg +1 -0
- images/Woo_SEO_Icon.svg +1 -0
- images/banner/basic-seo-training.png +0 -0
- images/banner/configuration-service.png +0 -0
- images/banner/keyword-research-training.png +0 -0
- images/banner/local-seo-for-woocommerce.png +0 -0
- images/banner/local-seo.png +0 -0
- images/banner/news-seo.png +0 -0
- images/banner/premium-seo.png +0 -0
- images/banner/seo-care.png +0 -0
- images/banner/seo-copywriting-training.png +0 -0
- images/banner/seo-for-beginners-training.png +0 -0
- images/banner/site-structure-training.png +0 -0
- images/banner/structured-data-course.png +0 -0
- images/banner/technical-seo-training.png +0 -0
- images/banner/video-seo.png +0 -0
- images/banner/website-review.png +0 -0
- images/banner/woocommerce-seo.png +0 -0
- images/banner/yoast-seo-for-wordpress-training-2018.png +0 -0
- inc/class-upgrade.php +18 -1
- inc/class-wpseo-replace-vars.php +76 -5
- js/dist/{commons-773.min.js → commons-780.min.js} +7 -7
- js/dist/configuration-wizard-773.min.js +0 -12
admin/banner/class-admin-banner-renderer.php
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* WPSEO plugin file.
|
4 |
-
*
|
5 |
-
* @package WPSEO\Admin\Banner
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Represents the render object for generating the html for the given banner.
|
10 |
-
*/
|
11 |
-
class WPSEO_Admin_Banner_Renderer {
|
12 |
-
|
13 |
-
/** @var string */
|
14 |
-
protected $base_path = '';
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Renders the admin banner.
|
18 |
-
*
|
19 |
-
* @param WPSEO_Admin_Banner $banner The banner to render.
|
20 |
-
*
|
21 |
-
* @return string
|
22 |
-
*/
|
23 |
-
public function render( WPSEO_Admin_Banner $banner ) {
|
24 |
-
$output = '<a class="wpseo-banner__link" target="_blank" href="' . esc_url( $banner->get_url() ) . '">';
|
25 |
-
$output .= '<img class="wpseo-banner__image" width="' . esc_attr( $banner->get_width() ) . '" height="' . esc_attr( $banner->get_height() ) . '" src="' . esc_attr( $this->get_image_path( $banner->get_image() ) ) . '" alt="' . esc_attr( $banner->get_alt() ) . '"/>';
|
26 |
-
$output .= '</a>';
|
27 |
-
|
28 |
-
return $output;
|
29 |
-
}
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Sets the base path, where the images are located.
|
33 |
-
*
|
34 |
-
* @param string $base_path The image location.
|
35 |
-
*/
|
36 |
-
public function set_base_path( $base_path ) {
|
37 |
-
$this->base_path = $base_path;
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Returns the full path for the image.
|
42 |
-
*
|
43 |
-
* @param string $image The image path.
|
44 |
-
*
|
45 |
-
* @return string
|
46 |
-
*/
|
47 |
-
protected function get_image_path( $image ) {
|
48 |
-
return rtrim( $this->base_path, '/' ) . '/' . ltrim( $image, '/' );
|
49 |
-
}
|
50 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/banner/class-admin-banner-sidebar-renderer.php
DELETED
@@ -1,62 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* WPSEO plugin file.
|
4 |
-
*
|
5 |
-
* @package WPSEO\Admin\Banner
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Represents the render object for generating the html for the banner sidebar
|
10 |
-
*/
|
11 |
-
class WPSEO_Admin_Banner_Sidebar_Renderer {
|
12 |
-
|
13 |
-
/** @var WPSEO_Admin_Banner_Spot_Renderer */
|
14 |
-
protected $spot_renderer;
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Sets the spot renderer.
|
18 |
-
*
|
19 |
-
* @param WPSEO_Admin_Banner_Spot_Renderer $spot_renderer The spot renderer that has to be used.
|
20 |
-
*/
|
21 |
-
public function __construct( WPSEO_Admin_Banner_Spot_Renderer $spot_renderer ) {
|
22 |
-
$this->spot_renderer = $spot_renderer;
|
23 |
-
}
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Renders the admin banner sidebar.
|
27 |
-
*
|
28 |
-
* @param WPSEO_Admin_Banner_Sidebar $banner_sidebar The sidebar to render.
|
29 |
-
*
|
30 |
-
* @return string
|
31 |
-
*/
|
32 |
-
public function render( WPSEO_Admin_Banner_Sidebar $banner_sidebar ) {
|
33 |
-
return sprintf( '
|
34 |
-
<div class="wpseo_content_cell" id="sidebar-container">
|
35 |
-
<div id="sidebar">
|
36 |
-
<div class="wpseo_content_cell_title yoast-sidebar__title ">
|
37 |
-
%1$s
|
38 |
-
</div>
|
39 |
-
%2$s
|
40 |
-
</div>
|
41 |
-
</div>',
|
42 |
-
$banner_sidebar->get_title(),
|
43 |
-
$this->render_banner_spots( $banner_sidebar->get_banner_spots() )
|
44 |
-
);
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Renders the admin banner spots.
|
49 |
-
*
|
50 |
-
* @param WPSEO_Admin_Banner_Spot[] $banner_spots The banner spots to render.
|
51 |
-
*
|
52 |
-
* @return string
|
53 |
-
*/
|
54 |
-
protected function render_banner_spots( array $banner_spots ) {
|
55 |
-
$return = '';
|
56 |
-
foreach ( $banner_spots as $banner_spot ) {
|
57 |
-
$return .= $this->spot_renderer->render( $banner_spot );
|
58 |
-
}
|
59 |
-
|
60 |
-
return $return;
|
61 |
-
}
|
62 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/banner/class-admin-banner-sidebar.php
DELETED
@@ -1,358 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* WPSEO plugin file.
|
4 |
-
*
|
5 |
-
* @package WPSEO\Admin\Banner
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Represents the render object for generating the html for the given banner.
|
10 |
-
*/
|
11 |
-
class WPSEO_Admin_Banner_Sidebar {
|
12 |
-
|
13 |
-
/** @var string */
|
14 |
-
protected $title = '';
|
15 |
-
|
16 |
-
/** @var WPSEO_Admin_Banner_Spot[] */
|
17 |
-
protected $banner_spots = array();
|
18 |
-
|
19 |
-
/** @var WPSEO_Admin_Banner_Renderer */
|
20 |
-
protected $banner_renderer;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* WPSEO_Admin_Banner_Sidebar constructor.
|
24 |
-
*
|
25 |
-
* @param string $title The title for the sidebar.
|
26 |
-
* @param WPSEO_Admin_Banner_Renderer $banner_renderer The render class for banners.
|
27 |
-
*/
|
28 |
-
public function __construct( $title, WPSEO_Admin_Banner_Renderer $banner_renderer ) {
|
29 |
-
$this->title = $title;
|
30 |
-
$this->banner_renderer = $banner_renderer;
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Returns the set title.
|
35 |
-
*
|
36 |
-
* @return string
|
37 |
-
*/
|
38 |
-
public function get_title() {
|
39 |
-
return $this->title;
|
40 |
-
}
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Initializes the banner sidebar by setting its banner spots.
|
44 |
-
*
|
45 |
-
* @param WPSEO_Features $features Class regarding WPSEO Features.
|
46 |
-
*/
|
47 |
-
public function initialize( WPSEO_Features $features ) {
|
48 |
-
if ( $features->is_free() ) {
|
49 |
-
$this->add_banner_spot( $this->get_premium_spot() );
|
50 |
-
}
|
51 |
-
|
52 |
-
$this->add_banner_spot( $this->get_services_spot() );
|
53 |
-
|
54 |
-
$extensions_spot = $this->get_extensions_spot( $this->get_active_extensions() );
|
55 |
-
if ( $extensions_spot->has_banners() ) {
|
56 |
-
$this->add_banner_spot( $extensions_spot );
|
57 |
-
}
|
58 |
-
|
59 |
-
$this->add_banner_spot( $this->get_courses_spot() );
|
60 |
-
$this->add_banner_spot( $this->get_remove_banner_spot() );
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Returns array with bannerspots.
|
65 |
-
*
|
66 |
-
* @return WPSEO_Admin_Banner_Spot[]
|
67 |
-
*/
|
68 |
-
public function get_banner_spots() {
|
69 |
-
return $this->banner_spots;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Adds a banner spot.
|
74 |
-
*
|
75 |
-
* @param WPSEO_Admin_Banner_Spot $spot The spot to add.
|
76 |
-
*/
|
77 |
-
protected function add_banner_spot( WPSEO_Admin_Banner_Spot $spot ) {
|
78 |
-
$this->banner_spots[] = $spot;
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* Returns the premium banner spot.
|
83 |
-
*
|
84 |
-
* @return WPSEO_Admin_Banner_Spot
|
85 |
-
*/
|
86 |
-
protected function get_premium_spot() {
|
87 |
-
$premium_spot = new WPSEO_Admin_Banner_Spot( '', $this->banner_renderer );
|
88 |
-
|
89 |
-
$premium_uri = WPSEO_Shortlinker::get( 'https://yoa.st/jj' );
|
90 |
-
|
91 |
-
$premium_spot->set_extra(
|
92 |
-
/* translators: %1$s expands to the plugin name */
|
93 |
-
'<h2>' . sprintf( esc_html__( 'Upgrade to %1$s', 'wordpress-seo' ), 'Yoast SEO Premium' ) . '</h2>' .
|
94 |
-
'<ul>' .
|
95 |
-
'<li><strong>' . esc_html__( 'Rank for up to 5 focus keywords per page', 'wordpress-seo' ) . '</strong></li>' .
|
96 |
-
'<li><strong>' . esc_html__( 'Preview your page in Facebook and Twitter', 'wordpress-seo' ) . '</strong></li>' .
|
97 |
-
'<li><strong>' . esc_html__( 'Get real-time suggestions for internal links', 'wordpress-seo' ) . '</strong></li>' .
|
98 |
-
'<li><strong>' . esc_html__( 'No more dead links a.k.a. 404 pages', 'wordpress-seo' ) . '</strong></li>' .
|
99 |
-
'<li><strong>' . esc_html__( '24/7 email support', 'wordpress-seo' ) . '</strong></li>' .
|
100 |
-
'<li><strong>' . esc_html__( 'No ads', 'wordpress-seo' ) . '</strong></li>' .
|
101 |
-
'</ul>' .
|
102 |
-
/* translators: %s expands to Yoast SEO Premium */
|
103 |
-
'<a id="wpseo-premium-button" class="button button-primary" href="' . $premium_uri . '" target="_blank">' . sprintf( __( 'Get %s now', 'wordpress-seo' ), 'Yoast SEO Premium' ) . '</a><br/>'
|
104 |
-
);
|
105 |
-
|
106 |
-
return $premium_spot;
|
107 |
-
}
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Returns the services banner spot.
|
111 |
-
*
|
112 |
-
* @return WPSEO_Admin_Banner_Spot
|
113 |
-
*/
|
114 |
-
protected function get_services_spot() {
|
115 |
-
$service_spot = new WPSEO_Admin_Banner_Spot( __( 'Services', 'wordpress-seo' ), $this->banner_renderer );
|
116 |
-
|
117 |
-
$service_spot->set_description(
|
118 |
-
sprintf(
|
119 |
-
/* translators: %1$s expands to a link start tag to the Yoast Services page, %2$s to Yoast, %3$s is the link closing tag. */
|
120 |
-
__( 'Do you want to know how to improve your rankings? %1$sLet team %2$s help you!%3$s', 'wordpress-seo' ),
|
121 |
-
'<a target="_blank" href="' . WPSEO_Shortlinker::get( 'https://yoa.st/jk' ) . '">',
|
122 |
-
'Yoast',
|
123 |
-
'</a>'
|
124 |
-
)
|
125 |
-
);
|
126 |
-
|
127 |
-
$service_spot->add_banner(
|
128 |
-
new WPSEO_Admin_Banner(
|
129 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/jm' ),
|
130 |
-
'configuration-service.png',
|
131 |
-
261,
|
132 |
-
152,
|
133 |
-
sprintf(
|
134 |
-
/* translators: %1$s expands to Yoast SEO Premium. */
|
135 |
-
__( 'Let our experts set up your %1$s plugin!', 'wordpress-seo' ),
|
136 |
-
'Yoast SEO Premium'
|
137 |
-
)
|
138 |
-
)
|
139 |
-
);
|
140 |
-
|
141 |
-
return $service_spot;
|
142 |
-
}
|
143 |
-
|
144 |
-
/**
|
145 |
-
* Returns an array with the Yoast SEO extensions with the value true when they are active.
|
146 |
-
*
|
147 |
-
* @return array
|
148 |
-
*/
|
149 |
-
protected function get_active_extensions() {
|
150 |
-
return array(
|
151 |
-
'video' => class_exists( 'wpseo_Video_Sitemap' ),
|
152 |
-
'woocommerce' => class_exists( 'Woocommerce' ) && class_exists( 'Yoast_WooCommerce_SEO' ),
|
153 |
-
'news' => class_exists( 'WPSEO_News' ),
|
154 |
-
'local' => defined( 'WPSEO_LOCAL_VERSION' ),
|
155 |
-
);
|
156 |
-
}
|
157 |
-
|
158 |
-
/**
|
159 |
-
* Returns the extensions banner spot.
|
160 |
-
*
|
161 |
-
* @param array $active_extensions The active extensions.
|
162 |
-
*
|
163 |
-
* @return WPSEO_Admin_Banner_Spot
|
164 |
-
*/
|
165 |
-
protected function get_extensions_spot( array $active_extensions ) {
|
166 |
-
$extension_spot = new WPSEO_Admin_Banner_Spot( __( 'Extensions', 'wordpress-seo' ), $this->banner_renderer );
|
167 |
-
|
168 |
-
$extension_spot->set_description(
|
169 |
-
sprintf(
|
170 |
-
/* translators: %1$s expands to a link start tag to the Yoast plugin page, %2$s is the link closing tag. */
|
171 |
-
__( 'Take your SEO to the next level and outrank your competition with our %1$sSEO plugins%2$s.', 'wordpress-seo' ),
|
172 |
-
'<a target="_blank" href="' . WPSEO_Shortlinker::get( 'https://yoa.st/jn' ) . '">',
|
173 |
-
'</a>'
|
174 |
-
)
|
175 |
-
);
|
176 |
-
|
177 |
-
if ( empty( $active_extensions['video'] ) ) {
|
178 |
-
$extension_spot->add_banner(
|
179 |
-
new WPSEO_Admin_Banner(
|
180 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/jo' ),
|
181 |
-
'video-seo.png',
|
182 |
-
261,
|
183 |
-
152,
|
184 |
-
sprintf(
|
185 |
-
/* translators: %1$s expands to Yoast Video SEO. */
|
186 |
-
__( 'Buy the %1$s plugin now and optimize your videos for video search results and social media!', 'wordpress-seo' ),
|
187 |
-
'Yoast Video SEO'
|
188 |
-
)
|
189 |
-
)
|
190 |
-
);
|
191 |
-
}
|
192 |
-
|
193 |
-
if ( empty( $active_extensions['woocommerce'] ) ) {
|
194 |
-
$extension_spot->add_banner(
|
195 |
-
new WPSEO_Admin_Banner(
|
196 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/jp' ),
|
197 |
-
'woocommerce-seo.png',
|
198 |
-
261,
|
199 |
-
152,
|
200 |
-
sprintf(
|
201 |
-
/* translators: %1$s expands to Yoast WooCommerce SEO. */
|
202 |
-
__( 'Buy the %1$s plugin now and optimize your shop today to improve your product promotion!', 'wordpress-seo' ),
|
203 |
-
'Yoast WooCommerce SEO'
|
204 |
-
)
|
205 |
-
)
|
206 |
-
);
|
207 |
-
}
|
208 |
-
|
209 |
-
if ( empty( $active_extensions['local'] ) ) {
|
210 |
-
$extension_spot->add_banner(
|
211 |
-
new WPSEO_Admin_Banner(
|
212 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/jq' ),
|
213 |
-
'local-seo.png', 261,
|
214 |
-
152,
|
215 |
-
sprintf(
|
216 |
-
/* translators: %1$s expands to Yoast Local SEO. */
|
217 |
-
__( 'Buy the %1$s plugin now to improve your site’s Local SEO and ranking in Google Maps!', 'wordpress-seo' ),
|
218 |
-
'Yoast Local SEO'
|
219 |
-
)
|
220 |
-
)
|
221 |
-
);
|
222 |
-
}
|
223 |
-
|
224 |
-
if ( empty( $active_extensions['news'] ) ) {
|
225 |
-
$extension_spot->add_banner(
|
226 |
-
new WPSEO_Admin_Banner(
|
227 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/jr' ),
|
228 |
-
'news-seo.png',
|
229 |
-
261,
|
230 |
-
152,
|
231 |
-
sprintf(
|
232 |
-
/* translators: %1$s expands to Yoast News SEO. */
|
233 |
-
__( 'Buy the %1$s plugin now and start optimizing to get your site featured in Google News!', 'wordpress-seo' ),
|
234 |
-
'Yoast News SEO'
|
235 |
-
)
|
236 |
-
)
|
237 |
-
);
|
238 |
-
}
|
239 |
-
|
240 |
-
return $extension_spot;
|
241 |
-
}
|
242 |
-
|
243 |
-
/**
|
244 |
-
* Returns the courses banner spot.
|
245 |
-
*
|
246 |
-
* @return WPSEO_Admin_Banner_Spot
|
247 |
-
*/
|
248 |
-
protected function get_courses_spot() {
|
249 |
-
$courses_spot = new WPSEO_Admin_Banner_Spot( __( 'Improve your SEO skills', 'wordpress-seo' ), $this->banner_renderer );
|
250 |
-
|
251 |
-
$courses_spot->set_description(
|
252 |
-
sprintf(
|
253 |
-
/* translators: %1$s expands to a link start tag to the Yoast Services page, %2$s is the link closing tag. */
|
254 |
-
__( 'We believe SEO should be for everyone. That’s why we develop courses on any topic related to SEO. %1$sDiscover our online SEO courses »%2$s', 'wordpress-seo' ),
|
255 |
-
'<a target="_blank" href="' . WPSEO_Shortlinker::get( 'https://yoa.st/jt' ) . '">',
|
256 |
-
'</a>'
|
257 |
-
)
|
258 |
-
);
|
259 |
-
|
260 |
-
$courses_spot->add_banner(
|
261 |
-
new WPSEO_Admin_Banner(
|
262 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/ju' ),
|
263 |
-
'basic-seo-training.png',
|
264 |
-
261,
|
265 |
-
152,
|
266 |
-
__( 'Take the online Basic SEO Training course and learn the fundamentals of SEO!', 'wordpress-seo' )
|
267 |
-
)
|
268 |
-
);
|
269 |
-
|
270 |
-
$courses_spot->add_banner(
|
271 |
-
new WPSEO_Admin_Banner(
|
272 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/jv' ),
|
273 |
-
'yoast-seo-for-wordpress-training-2018.png',
|
274 |
-
261,
|
275 |
-
152,
|
276 |
-
sprintf(
|
277 |
-
/* translators: %1$s expands to Yoast SEO for WordPress Training, %2$s to Yoast SEO for WordPress. */
|
278 |
-
__( 'Take the %1$s course and become a certified %2$s expert!', 'wordpress-seo' ),
|
279 |
-
'Yoast SEO for WordPress Training',
|
280 |
-
'Yoast SEO for WordPress'
|
281 |
-
)
|
282 |
-
)
|
283 |
-
);
|
284 |
-
|
285 |
-
$courses_spot->add_banner(
|
286 |
-
new WPSEO_Admin_Banner(
|
287 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/jw' ),
|
288 |
-
'seo-copywriting-training.png',
|
289 |
-
261,
|
290 |
-
152,
|
291 |
-
__( 'Take the online SEO Copywriting Training course and learn how to write awesome copy that ranks!', 'wordpress-seo' )
|
292 |
-
)
|
293 |
-
);
|
294 |
-
|
295 |
-
$courses_spot->add_banner(
|
296 |
-
new WPSEO_Admin_Banner(
|
297 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/qy' ),
|
298 |
-
'site-structure-training.png',
|
299 |
-
261,
|
300 |
-
152,
|
301 |
-
__( 'Take the online Site Structure Training course and learn how to structure your website!', 'wordpress-seo' )
|
302 |
-
)
|
303 |
-
);
|
304 |
-
|
305 |
-
$courses_spot->add_banner(
|
306 |
-
new WPSEO_Admin_Banner(
|
307 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/jaa' ),
|
308 |
-
'technical-seo-training.png',
|
309 |
-
261,
|
310 |
-
152,
|
311 |
-
__( 'Take the online Technical SEO Training course and learn essential technical SEO-concepts!', 'wordpress-seo' )
|
312 |
-
)
|
313 |
-
);
|
314 |
-
|
315 |
-
$courses_spot->add_banner(
|
316 |
-
new WPSEO_Admin_Banner(
|
317 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/15h' ),
|
318 |
-
'structured-data-course.png',
|
319 |
-
261,
|
320 |
-
152,
|
321 |
-
__( 'Take the online Structured Data Training course and learn how to create rich snippets!', 'wordpress-seo' )
|
322 |
-
)
|
323 |
-
);
|
324 |
-
|
325 |
-
$courses_spot->add_banner(
|
326 |
-
new WPSEO_Admin_Banner(
|
327 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/2oi' ),
|
328 |
-
'seo-for-beginners-training.png',
|
329 |
-
261,
|
330 |
-
152,
|
331 |
-
__( 'Get the FREE SEO for beginners training course and learn the SEO basics to make your site rank higher.', 'wordpress-seo' )
|
332 |
-
)
|
333 |
-
);
|
334 |
-
|
335 |
-
return $courses_spot;
|
336 |
-
}
|
337 |
-
|
338 |
-
/**
|
339 |
-
* Returns the remove banner spot.
|
340 |
-
*
|
341 |
-
* @return WPSEO_Admin_Banner_Spot
|
342 |
-
*/
|
343 |
-
protected function get_remove_banner_spot() {
|
344 |
-
|
345 |
-
$remove_banner_spot = new WPSEO_Admin_Banner_Spot(
|
346 |
-
__( 'Remove these ads?', 'wordpress-seo' )
|
347 |
-
);
|
348 |
-
|
349 |
-
$remove_banner_spot->set_description(
|
350 |
-
'<a target="_blank" href="' . WPSEO_Shortlinker::get( 'https://yoa.st/jy' ) . '">' .
|
351 |
-
/* translators: %1$s expands to Yoast SEO Premium */
|
352 |
-
sprintf( __( 'Upgrade to %1$s »', 'wordpress-seo' ), 'Yoast SEO Premium' ) .
|
353 |
-
'</a>'
|
354 |
-
);
|
355 |
-
|
356 |
-
return $remove_banner_spot;
|
357 |
-
}
|
358 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/banner/class-admin-banner-spot-renderer.php
DELETED
@@ -1,39 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* WPSEO plugin file.
|
4 |
-
*
|
5 |
-
* @package WPSEO\Admin\Banner
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Represents the render object for generating the html for the given banner spot.
|
10 |
-
*/
|
11 |
-
class WPSEO_Admin_Banner_Spot_Renderer {
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Renders the admin banner spot.
|
15 |
-
*
|
16 |
-
* @param WPSEO_Admin_Banner_Spot $banner_spot The spot to render.
|
17 |
-
*
|
18 |
-
* @return string
|
19 |
-
*/
|
20 |
-
public function render( WPSEO_Admin_Banner_Spot $banner_spot ) {
|
21 |
-
$output = '<div class="yoast-sidebar__spot">';
|
22 |
-
if ( $banner_spot->get_title() !== '' ) {
|
23 |
-
$output .= '<strong>' . $banner_spot->get_title() . '</strong>';
|
24 |
-
}
|
25 |
-
|
26 |
-
if ( $banner_spot->get_extra() !== '' ) {
|
27 |
-
$output .= $banner_spot->get_extra();
|
28 |
-
}
|
29 |
-
|
30 |
-
if ( $banner_spot->get_description() !== '' ) {
|
31 |
-
$output .= '<p>' . $banner_spot->get_description() . '</p>';
|
32 |
-
}
|
33 |
-
|
34 |
-
$output .= $banner_spot->render_banner();
|
35 |
-
$output .= '</div>';
|
36 |
-
|
37 |
-
return $output;
|
38 |
-
}
|
39 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/banner/class-admin-banner-spot.php
DELETED
@@ -1,120 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* WPSEO plugin file.
|
4 |
-
*
|
5 |
-
* @package WPSEO\Admin\Banner
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Represents the an admin banner spot.
|
10 |
-
*/
|
11 |
-
class WPSEO_Admin_Banner_Spot {
|
12 |
-
|
13 |
-
/** @var string */
|
14 |
-
private $title;
|
15 |
-
|
16 |
-
/** @var string */
|
17 |
-
private $description = '';
|
18 |
-
|
19 |
-
/** @var string */
|
20 |
-
private $extra = '';
|
21 |
-
|
22 |
-
/** @var WPSEO_Admin_Banner[] */
|
23 |
-
private $banners = array();
|
24 |
-
|
25 |
-
/**
|
26 |
-
* WPSEO_Admin_Banner_Spot constructor.
|
27 |
-
*
|
28 |
-
* @param string $title The title for the spot.
|
29 |
-
* @param WPSEO_Admin_Banner_Renderer $banner_renderer The renderer for the banner.
|
30 |
-
*/
|
31 |
-
public function __construct( $title, WPSEO_Admin_Banner_Renderer $banner_renderer = null ) {
|
32 |
-
$this->title = $title;
|
33 |
-
$this->banner_renderer = ( is_null( $banner_renderer ) ? new WPSEO_Admin_Banner_Renderer() : $banner_renderer );
|
34 |
-
}
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Returns the title.
|
38 |
-
*
|
39 |
-
* @return string
|
40 |
-
*/
|
41 |
-
public function get_title() {
|
42 |
-
return $this->title;
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Returns the description.
|
47 |
-
*
|
48 |
-
* @return string
|
49 |
-
*/
|
50 |
-
public function get_description() {
|
51 |
-
return $this->description;
|
52 |
-
}
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Returns the extra content.
|
56 |
-
*
|
57 |
-
* @return string
|
58 |
-
*/
|
59 |
-
public function get_extra() {
|
60 |
-
return $this->extra;
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Sets the description
|
65 |
-
*
|
66 |
-
* @param string $description The description.
|
67 |
-
*/
|
68 |
-
public function set_description( $description ) {
|
69 |
-
$this->description = $description;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Sets the "extra"
|
74 |
-
*
|
75 |
-
* @param string $extra The "extra".
|
76 |
-
*/
|
77 |
-
public function set_extra( $extra ) {
|
78 |
-
$this->extra = $extra;
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* Adds an admin banner.
|
83 |
-
*
|
84 |
-
* @param WPSEO_Admin_Banner $banner The banner to add.
|
85 |
-
*/
|
86 |
-
public function add_banner( WPSEO_Admin_Banner $banner ) {
|
87 |
-
$this->banners[] = $banner;
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Renders the banner.
|
92 |
-
*
|
93 |
-
* @return string
|
94 |
-
*/
|
95 |
-
public function render_banner() {
|
96 |
-
if ( ! $this->has_banners() ) {
|
97 |
-
return '';
|
98 |
-
}
|
99 |
-
|
100 |
-
return $this->banner_renderer->render( $this->get_random_banner() );
|
101 |
-
}
|
102 |
-
|
103 |
-
/**
|
104 |
-
* Checks if there are any banners set.
|
105 |
-
*
|
106 |
-
* @return bool
|
107 |
-
*/
|
108 |
-
public function has_banners() {
|
109 |
-
return ! empty( $this->banners );
|
110 |
-
}
|
111 |
-
|
112 |
-
/**
|
113 |
-
* Returns a random banner.
|
114 |
-
*
|
115 |
-
* @return null|WPSEO_Admin_Banner
|
116 |
-
*/
|
117 |
-
protected function get_random_banner() {
|
118 |
-
return $this->banners[ array_rand( $this->banners, 1 ) ];
|
119 |
-
}
|
120 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/banner/class-admin-banner.php
DELETED
@@ -1,89 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* WPSEO plugin file.
|
4 |
-
*
|
5 |
-
* @package WPSEO\Admin\Banner
|
6 |
-
*/
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Represents an admin banner.
|
10 |
-
*/
|
11 |
-
class WPSEO_Admin_Banner {
|
12 |
-
|
13 |
-
/** @var string */
|
14 |
-
private $url;
|
15 |
-
|
16 |
-
/** @var string */
|
17 |
-
private $image;
|
18 |
-
|
19 |
-
/** @var integer */
|
20 |
-
private $width;
|
21 |
-
|
22 |
-
/** @var integer */
|
23 |
-
private $height;
|
24 |
-
|
25 |
-
/** @var string */
|
26 |
-
private $alt;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Sets the attributes for this object.
|
30 |
-
*
|
31 |
-
* @param string $url The URL where the banner links to.
|
32 |
-
* @param string $image The image filename.
|
33 |
-
* @param integer $width The width of the image.
|
34 |
-
* @param integer $height The height of the image.
|
35 |
-
* @param string $alt The alt text for the image.
|
36 |
-
*/
|
37 |
-
public function __construct( $url, $image, $width, $height, $alt = '' ) {
|
38 |
-
$this->url = $url;
|
39 |
-
$this->image = $image;
|
40 |
-
$this->alt = $alt;
|
41 |
-
$this->width = $width;
|
42 |
-
$this->height = $height;
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* Returns the set url.
|
47 |
-
*
|
48 |
-
* @return string
|
49 |
-
*/
|
50 |
-
public function get_url() {
|
51 |
-
return $this->url;
|
52 |
-
}
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Returns the image.
|
56 |
-
*
|
57 |
-
* @return string
|
58 |
-
*/
|
59 |
-
public function get_image() {
|
60 |
-
return $this->image;
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Returns the alt-text.
|
65 |
-
*
|
66 |
-
* @return string
|
67 |
-
*/
|
68 |
-
public function get_alt() {
|
69 |
-
return $this->alt;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Returns the width.
|
74 |
-
*
|
75 |
-
* @return string
|
76 |
-
*/
|
77 |
-
public function get_width() {
|
78 |
-
return $this->width;
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* Returns the height.
|
83 |
-
*
|
84 |
-
* @return string
|
85 |
-
*/
|
86 |
-
public function get_height() {
|
87 |
-
return $this->height;
|
88 |
-
}
|
89 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/class-add-keyword-modal.php
CHANGED
@@ -18,7 +18,7 @@ class WPSEO_Add_Keyword_Modal {
|
|
18 |
*/
|
19 |
public function get_translations() {
|
20 |
return array(
|
21 |
-
'title' => __( '
|
22 |
'intro' => sprintf(
|
23 |
/* translators: %1$s expands to a 'Yoast SEO Premium' text linked to the yoast.com website. */
|
24 |
__( 'Great news: you can, with %1$s!', 'wordpress-seo' ),
|
@@ -40,7 +40,7 @@ class WPSEO_Add_Keyword_Modal {
|
|
40 |
}
|
41 |
|
42 |
/**
|
43 |
-
*
|
44 |
*
|
45 |
* @return array Translated text strings for the Add Keyword modal component.
|
46 |
*/
|
18 |
*/
|
19 |
public function get_translations() {
|
20 |
return array(
|
21 |
+
'title' => __( 'Would you like to add more than one keyword?', 'wordpress-seo' ),
|
22 |
'intro' => sprintf(
|
23 |
/* translators: %1$s expands to a 'Yoast SEO Premium' text linked to the yoast.com website. */
|
24 |
__( 'Great news: you can, with %1$s!', 'wordpress-seo' ),
|
40 |
}
|
41 |
|
42 |
/**
|
43 |
+
* Passes translations to JS for the Add Keyword modal component.
|
44 |
*
|
45 |
* @return array Translated text strings for the Add Keyword modal component.
|
46 |
*/
|
admin/class-admin.php
CHANGED
@@ -95,7 +95,6 @@ class WPSEO_Admin {
|
|
95 |
$integrations[] = new WPSEO_Yoast_Columns();
|
96 |
$integrations[] = new WPSEO_License_Page_Manager();
|
97 |
$integrations[] = new WPSEO_Statistic_Integration();
|
98 |
-
$integrations[] = new WPSEO_Slug_Change_Watcher();
|
99 |
$integrations[] = new WPSEO_Capability_Manager_Integration( WPSEO_Capability_Manager_Factory::get() );
|
100 |
$integrations[] = new WPSEO_Admin_Media_Purge_Notification();
|
101 |
$integrations = array_merge( $integrations, $this->initialize_seo_links() );
|
95 |
$integrations[] = new WPSEO_Yoast_Columns();
|
96 |
$integrations[] = new WPSEO_License_Page_Manager();
|
97 |
$integrations[] = new WPSEO_Statistic_Integration();
|
|
|
98 |
$integrations[] = new WPSEO_Capability_Manager_Integration( WPSEO_Capability_Manager_Factory::get() );
|
99 |
$integrations[] = new WPSEO_Admin_Media_Purge_Notification();
|
100 |
$integrations = array_merge( $integrations, $this->initialize_seo_links() );
|
admin/class-keyword-synonyms-modal.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package WPSEO\Admin
|
4 |
+
*/
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Class to print out the translatable strings for the Keyword Synonyms modal.
|
8 |
+
*/
|
9 |
+
class WPSEO_Keyword_Synonyms_Modal {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Returns the translations for the Keyword Synonyms modal.
|
13 |
+
*
|
14 |
+
* These strings are not escaped because they're meant to be used with React
|
15 |
+
* which already takes care of that. If used in PHP, they should be escaped.
|
16 |
+
*
|
17 |
+
* @return array Translated text strings for the Keyword Synonyms modal.
|
18 |
+
*/
|
19 |
+
public function get_translations() {
|
20 |
+
return array(
|
21 |
+
'title' => __( 'Would you like to add keyword synonyms?', 'wordpress-seo' ),
|
22 |
+
'intro' => sprintf(
|
23 |
+
/* translators: %1$s expands to a 'Yoast SEO Premium' text linked to the yoast.com website. */
|
24 |
+
__( 'Great news: you can, with %1$s!', 'wordpress-seo' ),
|
25 |
+
'{{link}}Yoast SEO Premium{{/link}}'
|
26 |
+
),
|
27 |
+
'link' => WPSEO_Shortlinker::get( 'https://yoa.st/pe-premium-page' ),
|
28 |
+
'other' => sprintf(
|
29 |
+
/* translators: %s expands to 'Yoast SEO Premium'. */
|
30 |
+
__( 'Other benefits of %s for you:', 'wordpress-seo' ), 'Yoast SEO Premium'
|
31 |
+
),
|
32 |
+
'buylink' => WPSEO_Shortlinker::get( 'https://yoa.st/keyword-synonyms-popup' ),
|
33 |
+
'buy' => sprintf(
|
34 |
+
/* translators: %s expands to 'Yoast SEO Premium'. */
|
35 |
+
__( 'Get %s now!', 'wordpress-seo' ), 'Yoast SEO Premium'
|
36 |
+
),
|
37 |
+
'small' => __( '1 year free updates and upgrades included!', 'wordpress-seo' ),
|
38 |
+
'a11yNotice.opensInNewTab' => __( '(Opens in a new browser tab)', 'wordpress-seo' ),
|
39 |
+
);
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Passes translations to JS for the Keyword Synonyms modal component.
|
44 |
+
*
|
45 |
+
* @return array Translated text strings for the Keyword Synonyms modal component.
|
46 |
+
*/
|
47 |
+
public function get_translations_for_js() {
|
48 |
+
$translations = $this->get_translations();
|
49 |
+
return array(
|
50 |
+
'locale' => WPSEO_Utils::get_user_locale(),
|
51 |
+
'intl' => $translations,
|
52 |
+
);
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Prints the localized Keyword Synonyms modal translations for JS.
|
57 |
+
*/
|
58 |
+
public function enqueue_translations() {
|
59 |
+
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-global-script', 'yoastKeywordSynonymsModalL10n', $this->get_translations_for_js() );
|
60 |
+
}
|
61 |
+
}
|
admin/class-premium-benefits-for-synonyms-list.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package WPSEO\Admin
|
4 |
+
*/
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Class to print out a list of Premium benefits specific for the keyword synonyms.
|
8 |
+
*/
|
9 |
+
class WPSEO_Premium_Benefits_For_Synonyms_List {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Returns the translations for the Premium benefits list.
|
13 |
+
*
|
14 |
+
* @return array Translated text strings for the Premium benefits list.
|
15 |
+
*/
|
16 |
+
public function get_translations() {
|
17 |
+
return array(
|
18 |
+
'<strong>' . __( 'Rank for up to 5 focus keywords per page', 'wordpress-seo' ) . '</strong>',
|
19 |
+
sprintf(
|
20 |
+
/* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */
|
21 |
+
__( '%1$sNo more dead links%2$s: easy redirect manager', 'wordpress-seo' ),
|
22 |
+
'<strong>', '</strong>'
|
23 |
+
),
|
24 |
+
'<strong>' . __( 'Superfast internal links suggestions', 'wordpress-seo' ) . '</strong>',
|
25 |
+
sprintf(
|
26 |
+
/* translators: %1$s expands to a 'strong' start tag, %2$s to a 'strong' end tag. */
|
27 |
+
__( '%1$sSocial media preview%2$s: Facebook & Twitter', 'wordpress-seo' ),
|
28 |
+
'<strong>', '</strong>'
|
29 |
+
),
|
30 |
+
'<strong>' . __( '24/7 support', 'wordpress-seo' ) . '</strong>',
|
31 |
+
'<strong>' . __( 'No ads!', 'wordpress-seo' ) . '</strong>',
|
32 |
+
);
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Passes translations to JS for the Add Keyword JS component Premium benefits list.
|
37 |
+
*
|
38 |
+
* @return array Translated text strings for the Premium benefits list component.
|
39 |
+
*/
|
40 |
+
public function get_translations_for_js() {
|
41 |
+
$translations = $this->get_translations();
|
42 |
+
return array(
|
43 |
+
'locale' => WPSEO_Utils::get_user_locale(),
|
44 |
+
'intl' => $translations,
|
45 |
+
);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Prints the localized Premium benefits translations for JS.
|
50 |
+
*/
|
51 |
+
public function enqueue_translations() {
|
52 |
+
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'admin-global-script', 'yoastPremiumBenefitsForSynonymsL10n', $this->get_translations_for_js() );
|
53 |
+
}
|
54 |
+
}
|
admin/class-yoast-form.php
CHANGED
@@ -183,17 +183,7 @@ class Yoast_Form {
|
|
183 |
}
|
184 |
}
|
185 |
|
186 |
-
|
187 |
-
|
188 |
-
$banner_renderer = new WPSEO_Admin_Banner_Renderer();
|
189 |
-
$banner_renderer->set_base_path( plugins_url( 'images/banner/', WPSEO_FILE ) );
|
190 |
-
|
191 |
-
/* translators: %1$s expands to "Yoast". */
|
192 |
-
$sidebar = new WPSEO_Admin_Banner_Sidebar( sprintf( __( '%1s recommendations for you', 'wordpress-seo' ), 'Yoast' ), $banner_renderer );
|
193 |
-
$sidebar->initialize( new WPSEO_Features() );
|
194 |
-
|
195 |
-
echo $sidebar_renderer->render( $sidebar );
|
196 |
-
|
197 |
}
|
198 |
|
199 |
/**
|
183 |
}
|
184 |
}
|
185 |
|
186 |
+
require_once 'views/sidebar.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
}
|
188 |
|
189 |
/**
|
admin/class-yoast-notification-center.php
CHANGED
@@ -641,7 +641,13 @@ class Yoast_Notification_Center {
|
|
641 |
*/
|
642 |
private function notification_to_array( Yoast_Notification $notification ) {
|
643 |
|
644 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
645 |
}
|
646 |
|
647 |
/**
|
@@ -653,6 +659,10 @@ class Yoast_Notification_Center {
|
|
653 |
*/
|
654 |
private function array_to_notification( $notification_data ) {
|
655 |
|
|
|
|
|
|
|
|
|
656 |
return new Yoast_Notification(
|
657 |
$notification_data['message'],
|
658 |
$notification_data['options']
|
641 |
*/
|
642 |
private function notification_to_array( Yoast_Notification $notification ) {
|
643 |
|
644 |
+
$notification_data = $notification->to_array();
|
645 |
+
|
646 |
+
if ( isset( $notification_data['nonce'] ) ) {
|
647 |
+
unset( $notification_data['nonce'] );
|
648 |
+
}
|
649 |
+
|
650 |
+
return $notification_data;
|
651 |
}
|
652 |
|
653 |
/**
|
659 |
*/
|
660 |
private function array_to_notification( $notification_data ) {
|
661 |
|
662 |
+
if ( isset( $notification_data['options']['nonce'] ) ) {
|
663 |
+
unset( $notification_data['options']['nonce'] );
|
664 |
+
}
|
665 |
+
|
666 |
return new Yoast_Notification(
|
667 |
$notification_data['message'],
|
668 |
$notification_data['options']
|
admin/config-ui/components/class-component-suggestions.php
CHANGED
@@ -44,15 +44,23 @@ class WPSEO_Config_Component_Suggestions implements WPSEO_Config_Component {
|
|
44 |
}
|
45 |
|
46 |
$field->add_suggestion(
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
array(
|
51 |
-
'label' => 'SEO
|
52 |
'type' => 'link',
|
53 |
-
'url' => WPSEO_Shortlinker::get( 'https://yoa.st/
|
54 |
),
|
55 |
-
WPSEO_Shortlinker::get( 'https://yoa.st/
|
56 |
);
|
57 |
|
58 |
$field->add_suggestion(
|
44 |
}
|
45 |
|
46 |
$field->add_suggestion(
|
47 |
+
sprintf(
|
48 |
+
/* translators: %1$s resolves to Basic SEO training */
|
49 |
+
__( 'Learn all about SEO with our %1$s', 'wordpress-seo' ),
|
50 |
+
'Basic SEO training'
|
51 |
+
),
|
52 |
+
sprintf(
|
53 |
+
/* translators: %1$s resolves to Basic SEO training, 2: Yoast SEO */
|
54 |
+
__( 'Do you want to learn how you can improve your SEO yourself? In our %1$s you\'ll learn practical SEO skills from keyword research and copywriting to technical SEO and off-page SEO. Using the %2$s plugin is one thing. Doing good SEO day-to-day is another. You simply won\'t get the results you want without putting in work yourself. The %1$s teaches you how.', 'wordpress-seo' ),
|
55 |
+
'Basic SEO training',
|
56 |
+
'Yoast SEO'
|
57 |
+
),
|
58 |
array(
|
59 |
+
'label' => 'Basic SEO training',
|
60 |
'type' => 'link',
|
61 |
+
'url' => WPSEO_Shortlinker::get( 'https://yoa.st/2up' ),
|
62 |
),
|
63 |
+
WPSEO_Shortlinker::get( 'https://yoa.st/2v0' )
|
64 |
);
|
65 |
|
66 |
$field->add_suggestion(
|
admin/metabox/class-metabox-keyword-synonyms-button.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WPSEO plugin file.
|
4 |
+
*
|
5 |
+
* @package WPSEO\Admin\Metabox
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Button to show the premium upsell.
|
10 |
+
*/
|
11 |
+
class WPSEO_Metabox_Keyword_Synonyms_Button {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Returns a button because a link is inappropriate here.
|
15 |
+
*
|
16 |
+
* @return string
|
17 |
+
*/
|
18 |
+
public function get_link() {
|
19 |
+
|
20 |
+
$keyword_synonyms_modal_config = array(
|
21 |
+
'mountHook' => '.wpseo-button-keyword-synonyms',
|
22 |
+
'openButtonIcon' => '',
|
23 |
+
'intl' => array(
|
24 |
+
'open' => __( '+ Add synonyms', 'wordpress-seo' ),
|
25 |
+
'modalAriaLabel' => sprintf(
|
26 |
+
/* translators: %s expands to 'Yoast SEO Premium'. */
|
27 |
+
__( 'Get %s now!', 'wordpress-seo' ), 'Yoast SEO Premium'
|
28 |
+
),
|
29 |
+
'heading' => sprintf(
|
30 |
+
/* translators: %s expands to 'Yoast SEO Premium'. */
|
31 |
+
__( 'Get %s now!', 'wordpress-seo' ), 'Yoast SEO Premium'
|
32 |
+
),
|
33 |
+
),
|
34 |
+
'classes' => array(
|
35 |
+
'openButton' => 'wpseo-keyword-synonyms button-link',
|
36 |
+
),
|
37 |
+
'content' => 'KeywordSynonyms',
|
38 |
+
);
|
39 |
+
|
40 |
+
$translations = new WPSEO_Keyword_Synonyms_Modal();
|
41 |
+
$translations->enqueue_translations();
|
42 |
+
|
43 |
+
$benefits = new WPSEO_Premium_Benefits_For_Synonyms_List();
|
44 |
+
$benefits->enqueue_translations();
|
45 |
+
|
46 |
+
Yoast_Modal::add( $keyword_synonyms_modal_config );
|
47 |
+
|
48 |
+
return '<div class="wpseo-button-keyword-synonyms"></div>';
|
49 |
+
}
|
50 |
+
}
|
admin/metabox/class-metabox.php
CHANGED
@@ -596,6 +596,11 @@ class WPSEO_Metabox extends WPSEO_Meta {
|
|
596 |
$content .= '<label for="' . $esc_form_key . '" class="screen-reader-text">' . esc_html( $meta_field_def['label'] ) . '</label>';
|
597 |
$content .= '<input type="text"' . $placeholder . ' id="' . $esc_form_key . '" autocomplete="off" name="' . $esc_form_key . '" value="' . esc_attr( $meta_value ) . '" class="large-text' . $class . '"/>';
|
598 |
|
|
|
|
|
|
|
|
|
|
|
599 |
if ( WPSEO_Options::get( 'enable_cornerstone_content', false ) ) {
|
600 |
$cornerstone_field = new WPSEO_Cornerstone_Field();
|
601 |
|
596 |
$content .= '<label for="' . $esc_form_key . '" class="screen-reader-text">' . esc_html( $meta_field_def['label'] ) . '</label>';
|
597 |
$content .= '<input type="text"' . $placeholder . ' id="' . $esc_form_key . '" autocomplete="off" name="' . $esc_form_key . '" value="' . esc_attr( $meta_value ) . '" class="large-text' . $class . '"/>';
|
598 |
|
599 |
+
if ( WPSEO_UTILS::is_yoast_seo_premium() === false ) {
|
600 |
+
$button = new WPSEO_Metabox_Keyword_Synonyms_Button();
|
601 |
+
$content .= $button->get_link();
|
602 |
+
}
|
603 |
+
|
604 |
if ( WPSEO_Options::get( 'enable_cornerstone_content', false ) ) {
|
605 |
$cornerstone_field = new WPSEO_Cornerstone_Field();
|
606 |
|
admin/views/sidebar.php
ADDED
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* View for the banner sidebar.
|
4 |
+
*
|
5 |
+
* @package WPSEO\Admin\Views
|
6 |
+
*/
|
7 |
+
|
8 |
+
$wpseo_plugin_dir_url = plugin_dir_url( WPSEO_FILE );
|
9 |
+
|
10 |
+
?>
|
11 |
+
<div class="wpseo_content_cell" id="sidebar-container">
|
12 |
+
<div id="sidebar">
|
13 |
+
<div class="wpseo_content_cell_title yoast-sidebar__title">
|
14 |
+
<?php
|
15 |
+
/* translators: %1$s expands to Yoast */
|
16 |
+
printf( esc_html__( '%1$s recommendations for you', 'wordpress-seo' ), 'Yoast' );
|
17 |
+
?>
|
18 |
+
</div>
|
19 |
+
<div class="yoast-sidebar_section">
|
20 |
+
<h2>
|
21 |
+
<?php
|
22 |
+
/* translators: %1$s expands to the plugin name */
|
23 |
+
printf( esc_html__( 'Upgrade to %1$s', 'wordpress-seo' ), 'Yoast SEO Premium' );
|
24 |
+
?>
|
25 |
+
</h2>
|
26 |
+
<ul>
|
27 |
+
<li><strong><?php esc_html_e( 'Rank for up to 5 focus keywords per page', 'wordpress-seo' ); ?></strong></li>
|
28 |
+
<li><strong><?php esc_html_e( 'Preview your page in Facebook and Twitter', 'wordpress-seo' ); ?></strong></li>
|
29 |
+
<li><strong><?php esc_html_e( 'Get real-time suggestions for internal links', 'wordpress-seo' ); ?></strong></li>
|
30 |
+
<li><strong><?php esc_html_e( 'No more dead links a.k.a. 404 pages', 'wordpress-seo' ); ?></strong></li>
|
31 |
+
<li><strong><?php esc_html_e( '24/7 email support', 'wordpress-seo' ); ?></strong></li>
|
32 |
+
<li><strong><?php esc_html_e( 'No ads', 'wordpress-seo' ); ?></strong></li>
|
33 |
+
</ul>
|
34 |
+
|
35 |
+
<a id="wpseo-premium-button" class="button button-primary" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jj' ); ?>" target="_blank">
|
36 |
+
<?php
|
37 |
+
/* translators: %s is replaced by the plugin name */
|
38 |
+
printf( esc_html__( 'Get %s now', 'wordpress-seo' ), 'Yoast SEO Premium' );
|
39 |
+
?>
|
40 |
+
</a><br>
|
41 |
+
</div>
|
42 |
+
<div class="yoast-sidebar_section">
|
43 |
+
<h2><?php esc_html_e( 'Improve your SEO skills', 'wordpress-seo' ); ?></h2>
|
44 |
+
<div>
|
45 |
+
<a href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/2oi' ) ?>" target="_blank" rel="noopener noreferrer"><img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/SEO_for_beginners.svg' ); ?>" alt=""></a>
|
46 |
+
<p>
|
47 |
+
<strong>
|
48 |
+
<?php
|
49 |
+
printf(
|
50 |
+
/* translators: %1$s and %2$s convert to anchors. */
|
51 |
+
esc_html__( 'Free: %1$sSEO for Beginners course%2$s', 'wordpress-seo' ),
|
52 |
+
'<a target="_blank" rel="noopener noreferrer" href="' . esc_url( WPSEO_Shortlinker::get( 'https://yoa.st/2oi' ) ) . '">',
|
53 |
+
'</a>'
|
54 |
+
);
|
55 |
+
?>
|
56 |
+
</strong><br>
|
57 |
+
<?php esc_html_e( 'Get quick wins to make your site rank higher in search engines.', 'wordpress-seo' ); ?>
|
58 |
+
</p>
|
59 |
+
<br class="clear">
|
60 |
+
</div>
|
61 |
+
<div>
|
62 |
+
<a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jv' ); ?>"><img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/yoast_seo_for_wp_2.svg' ); ?>" alt=""></a>
|
63 |
+
<p>
|
64 |
+
<strong><a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jv' ); ?>"><?php esc_html_e( 'Yoast SEO for WordPress course', 'wordpress-seo' ); ?></a></strong><br>
|
65 |
+
<?php esc_html_e( 'Don’t waste time figuring out the best settings yourself.', 'wordpress-seo' ); ?>
|
66 |
+
</p>
|
67 |
+
<br class="clear">
|
68 |
+
</div>
|
69 |
+
<div>
|
70 |
+
<a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/ju' ); ?>"><img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/BasicSEO.svg' ); ?>" alt=""></a>
|
71 |
+
<p>
|
72 |
+
<strong><a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/ju' ); ?>"><?php esc_html_e( 'Basic SEO course', 'wordpress-seo' ); ?></a></strong><br>
|
73 |
+
<?php esc_html_e( 'Learn practical SEO skills to rank higher in Google.', 'wordpress-seo' ); ?>
|
74 |
+
</p>
|
75 |
+
<br class="clear">
|
76 |
+
</div>
|
77 |
+
</div>
|
78 |
+
<div class="yoast-sidebar_section">
|
79 |
+
<h2><?php esc_html_e( 'Extend Yoast SEO', 'wordpress-seo' ); ?></h2>
|
80 |
+
<div>
|
81 |
+
<a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jq' ); ?>"><img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Local_SEO_Icon.svg' ); ?>" alt=""></a>
|
82 |
+
<p>
|
83 |
+
<strong><a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jq' ); ?>"><?php esc_html_e( 'Local SEO', 'wordpress-seo' ); ?></a></strong><br>
|
84 |
+
<?php esc_html_e( 'Be found in Google Maps and local results.', 'wordpress-seo' ); ?>
|
85 |
+
</p>
|
86 |
+
<br class="clear">
|
87 |
+
</div>
|
88 |
+
<div>
|
89 |
+
<a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jo' ); ?>"><img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Video_SEO_Icon.svg' ); ?>" alt=""></a>
|
90 |
+
<p>
|
91 |
+
<strong><a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jo' ); ?>"><?php esc_html_e( 'Video SEO', 'wordpress-seo' ); ?></a></strong><br>
|
92 |
+
<?php esc_html_e( 'Be found in Google Video search and enhance your video sharing on social media.', 'wordpress-seo' ); ?>
|
93 |
+
</p>
|
94 |
+
<br class="clear">
|
95 |
+
</div>
|
96 |
+
<div>
|
97 |
+
<a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jp' ); ?>"><img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/Woo_SEO_Icon.svg' ); ?>" alt=""></a>
|
98 |
+
<p>
|
99 |
+
<strong><a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jp' ); ?>"><?php esc_html_e( 'WooCommerce SEO', 'wordpress-seo' ); ?></a></strong><br>
|
100 |
+
<?php esc_html_e( 'Optimize your shop\'s SEO and sell more products!', 'wordpress-seo' ); ?>
|
101 |
+
</p>
|
102 |
+
<br class="clear">
|
103 |
+
</div>
|
104 |
+
<div>
|
105 |
+
<a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jr' ); ?>"><img src="<?php echo esc_url( $wpseo_plugin_dir_url . 'images/News_SEO_Icon.svg' ); ?>" alt=""></a>
|
106 |
+
<p>
|
107 |
+
<strong><a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jr' ); ?>"><?php esc_html_e( 'News SEO', 'wordpress-seo' ); ?></a></strong><br>
|
108 |
+
<?php esc_html_e( 'Optimize your site for Google News.', 'wordpress-seo' ); ?>
|
109 |
+
</p>
|
110 |
+
<br class="clear">
|
111 |
+
</div>
|
112 |
+
</div>
|
113 |
+
<div class="yoast-sidebar_section">
|
114 |
+
<strong>Remove these ads?</strong>
|
115 |
+
<p>
|
116 |
+
<a target="_blank" rel="noopener noreferrer" href="<?php WPSEO_Shortlinker::show( 'https://yoa.st/jy' ); ?>">
|
117 |
+
<?php
|
118 |
+
/* translators: %s expands to Yoast SEO Premium. */
|
119 |
+
printf( esc_html__( 'Upgrade to %s »', 'wordpress-seo' ), 'Yoast SEO Premium' );
|
120 |
+
?>
|
121 |
+
</a>
|
122 |
+
</p>
|
123 |
+
</div>
|
124 |
+
</div>
|
125 |
+
</div>
|
admin/watchers/class-slug-change-watcher.php
CHANGED
@@ -28,6 +28,9 @@ class WPSEO_Slug_Change_Watcher implements WPSEO_WordPress_Integration {
|
|
28 |
|
29 |
// Detect a post delete.
|
30 |
add_action( 'before_delete_post', array( $this, 'detect_post_delete' ) );
|
|
|
|
|
|
|
31 |
}
|
32 |
|
33 |
/**
|
@@ -38,7 +41,7 @@ class WPSEO_Slug_Change_Watcher implements WPSEO_WordPress_Integration {
|
|
38 |
public function enqueue_assets() {
|
39 |
global $pagenow;
|
40 |
|
41 |
-
if ( ! in_array( $pagenow, array( 'edit.php' ), true ) ) {
|
42 |
return;
|
43 |
}
|
44 |
|
@@ -84,6 +87,24 @@ class WPSEO_Slug_Change_Watcher implements WPSEO_WordPress_Integration {
|
|
84 |
$this->add_notification( $message );
|
85 |
}
|
86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
/**
|
88 |
* Checks if the post is viewable.
|
89 |
*
|
@@ -105,6 +126,42 @@ class WPSEO_Slug_Change_Watcher implements WPSEO_WordPress_Integration {
|
|
105 |
return true;
|
106 |
}
|
107 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
/**
|
109 |
* Retrieves the singular post type label.
|
110 |
*
|
@@ -120,7 +177,7 @@ class WPSEO_Slug_Change_Watcher implements WPSEO_WordPress_Integration {
|
|
120 |
$post_type_object = get_post_type_object( 'post' );
|
121 |
}
|
122 |
|
123 |
-
return
|
124 |
}
|
125 |
|
126 |
/**
|
28 |
|
29 |
// Detect a post delete.
|
30 |
add_action( 'before_delete_post', array( $this, 'detect_post_delete' ) );
|
31 |
+
|
32 |
+
// Detects deletion of a term.
|
33 |
+
add_action( 'delete_term_taxonomy', array( $this, 'detect_term_delete' ) );
|
34 |
}
|
35 |
|
36 |
/**
|
41 |
public function enqueue_assets() {
|
42 |
global $pagenow;
|
43 |
|
44 |
+
if ( ! in_array( $pagenow, array( 'edit.php', 'edit-tags.php' ), true ) ) {
|
45 |
return;
|
46 |
}
|
47 |
|
87 |
$this->add_notification( $message );
|
88 |
}
|
89 |
|
90 |
+
/**
|
91 |
+
* Shows a message when a term is about to get deleted.
|
92 |
+
*
|
93 |
+
* @param integer $term_id The term ID that will be deleted.
|
94 |
+
*
|
95 |
+
* @return void
|
96 |
+
*/
|
97 |
+
public function detect_term_delete( $term_id ) {
|
98 |
+
if ( ! $this->is_term_viewable( $term_id ) ) {
|
99 |
+
return;
|
100 |
+
}
|
101 |
+
|
102 |
+
$first_sentence = sprintf( __( 'You just deleted a %1$s.', 'wordpress-seo' ), $this->get_taxonomy_label_for_term( $term_id ) );
|
103 |
+
$message = $this->get_message( $first_sentence );
|
104 |
+
|
105 |
+
$this->add_notification( $message );
|
106 |
+
}
|
107 |
+
|
108 |
/**
|
109 |
* Checks if the post is viewable.
|
110 |
*
|
126 |
return true;
|
127 |
}
|
128 |
|
129 |
+
/**
|
130 |
+
* Checks if the term is viewable.
|
131 |
+
*
|
132 |
+
* @param string $term_id The term ID to check.
|
133 |
+
*
|
134 |
+
* @return bool Whether the term is viewable or not.
|
135 |
+
*/
|
136 |
+
protected function is_term_viewable( $term_id ) {
|
137 |
+
$term = get_term( $term_id );
|
138 |
+
|
139 |
+
if ( ! $term || is_wp_error( $term ) ) {
|
140 |
+
return false;
|
141 |
+
}
|
142 |
+
|
143 |
+
$taxonomy = get_taxonomy( $term->taxonomy );
|
144 |
+
if ( ! $taxonomy ) {
|
145 |
+
return false;
|
146 |
+
}
|
147 |
+
|
148 |
+
return $taxonomy->publicly_queryable || $taxonomy->public;
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Gets the taxonomy label to use for a term.
|
153 |
+
*
|
154 |
+
* @param int $term_id The term ID.
|
155 |
+
*
|
156 |
+
* @return string The taxonomy's singular label.
|
157 |
+
*/
|
158 |
+
protected function get_taxonomy_label_for_term( $term_id ) {
|
159 |
+
$term = get_term( $term_id );
|
160 |
+
$taxonomy = get_taxonomy( $term->taxonomy );
|
161 |
+
|
162 |
+
return $taxonomy->labels->singular_name;
|
163 |
+
}
|
164 |
+
|
165 |
/**
|
166 |
* Retrieves the singular post type label.
|
167 |
*
|
177 |
$post_type_object = get_post_type_object( 'post' );
|
178 |
}
|
179 |
|
180 |
+
return $post_type_object->labels->singular_name;
|
181 |
}
|
182 |
|
183 |
/**
|
css/dist/{admin-global-773-rtl.min.css → admin-global-780-rtl.min.css}
RENAMED
File without changes
|
css/dist/{admin-global-773.min.css → admin-global-780.min.css}
RENAMED
File without changes
|
css/dist/{adminbar-773-rtl.min.css → adminbar-780-rtl.min.css}
RENAMED
File without changes
|
css/dist/{adminbar-773.min.css → adminbar-780.min.css}
RENAMED
File without changes
|
css/dist/{alerts-773-rtl.min.css → alerts-780-rtl.min.css}
RENAMED
File without changes
|
css/dist/{alerts-773.min.css → alerts-780.min.css}
RENAMED
File without changes
|
css/dist/{dashboard-773-rtl.min.css → dashboard-780-rtl.min.css}
RENAMED
File without changes
|
css/dist/{dashboard-773.min.css → dashboard-780.min.css}
RENAMED
File without changes
|
css/dist/{edit-page-773-rtl.min.css → edit-page-780-rtl.min.css}
RENAMED
File without changes
|
css/dist/{edit-page-773.min.css → edit-page-780.min.css}
RENAMED
File without changes
|
css/dist/{featured-image-773-rtl.min.css → featured-image-780-rtl.min.css}
RENAMED
File without changes
|
css/dist/{featured-image-773.min.css → featured-image-780.min.css}
RENAMED
File without changes
|
css/dist/{filter-explanation-773-rtl.min.css → filter-explanation-780-rtl.min.css}
RENAMED
File without changes
|
css/dist/{filter-explanation-773.min.css → filter-explanation-780.min.css}
RENAMED
File without changes
|
css/dist/{inside-editor-773-rtl.min.css → inside-editor-780-rtl.min.css}
RENAMED
File without changes
|
css/dist/{inside-editor-773.min.css → inside-editor-780.min.css}
RENAMED
File without changes
|
css/dist/{metabox-773-rtl.min.css → metabox-780-rtl.min.css}
RENAMED
@@ -1 +1 @@
|
|
1 |
-
.yoast-section{width:auto;max-width:640px}.snippet_container:after,.snippet_container:before{display:table;content:" "}.snippet_container:after{clear:both}.snippet-editor__view{clear:both;background:#fff}.snippet-editor__view-toggle{display:inline-block;margin-top:10px;margin-right:20px;border:1px solid #dbdbdb;border-radius:4px;background-color:#f7f7f7;vertical-align:top}.snippet-editor__view-icon{float:right;width:31px;height:31px;border:none;border-bottom:4px solid transparent;outline:0;background-color:transparent;background-repeat:no-repeat;background-position:center,center;cursor:pointer}.snippet-editor__view-icon:focus,.snippet-editor__view-icon:hover{border-color:#1074a8;background-color:#fff;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out}.snippet-editor__view-icon--active{border-color:#555;transition:.15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out}.snippet-editor__view-icon.yoast-tooltip:before{bottom:-10px}.snippet-editor__view-icon.yoast-tooltip:after{margin-top:10px}.snippet-editor__view-icon-desktop{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1728%20992v%2D832q0%2D13%2D9%2E5%2D22%2E5t%2D22%2E5%2D9%2E5h%2D1600q%2D13%200%2D22%2E5%209%2E5t%2D9%2E5%2022%2E5v832q0%2013%209%2E5%2022%2E5t22%2E5%209%2E5h1600q13%200%2022%2E5%2D9%2E5t9%2E5%2D22%2E5zm128%2D832v1088q0%2066%2D47%20113t%2D113%2047h%2D544q0%2037%2016%2077%2E5t32%2071%2016%2043%2E5q0%2026%2D19%2045t%2D45%2019h%2D512q%2D26%200%2D45%2D19t%2D19%2D45q0%2D14%2016%2D44t32%2D70%2016%2D78h%2D544q%2D66%200%2D113%2D47t%2D47%2D113v%2D1088q0%2D66%2047%2D113t113%2D47h1600q66%200%20113%2047t47%20113z%22%2F%3E%3C%2Fsvg%3E");background-size:18px}.snippet-editor__view-icon-desktop:focus,.snippet-editor__view-icon-desktop:hover{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1728%20992v%2D832q0%2D13%2D9%2E5%2D22%2E5t%2D22%2E5%2D9%2E5h%2D1600q%2D13%200%2D22%2E5%209%2E5t%2D9%2E5%2022%2E5v832q0%2013%209%2E5%2022%2E5t22%2E5%209%2E5h1600q13%200%2022%2E5%2D9%2E5t9%2E5%2D22%2E5zm128%2D832v1088q0%2066%2D47%20113t%2D113%2047h%2D544q0%2037%2016%2077%2E5t32%2071%2016%2043%2E5q0%2026%2D19%2045t%2D45%2019h%2D512q%2D26%200%2D45%2D19t%2D19%2D45q0%2D14%2016%2D44t32%2D70%2016%2D78h%2D544q%2D66%200%2D113%2D47t%2D47%2D113v%2D1088q0%2D66%2047%2D113t113%2D47h1600q66%200%20113%2047t47%20113z%22%2F%3E%3C%2Fsvg%3E")}.snippet-editor__view-icon-mobile{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M976%201408q0%2D33%2D23%2E5%2D56%2E5t%2D56%2E5%2D23%2E5%2D56%2E5%2023%2E5%2D23%2E5%2056%2E5%2023%2E5%2056%2E5%2056%2E5%2023%2E5%2056%2E5%2D23%2E5%2023%2E5%2D56%2E5zm208%2D160v%2D704q0%2D13%2D9%2E5%2D22%2E5t%2D22%2E5%2D9%2E5h%2D512q%2D13%200%2D22%2E5%209%2E5t%2D9%2E5%2022%2E5v704q0%2013%209%2E5%2022%2E5t22%2E5%209%2E5h512q13%200%2022%2E5%2D9%2E5t9%2E5%2D22%2E5zm%2D192%2D848q0%2D16%2D16%2D16h%2D160q%2D16%200%2D16%2016t16%2016h160q16%200%2016%2D16zm288%2D16v1024q0%2052%2D38%2090t%2D90%2038h%2D512q%2D52%200%2D90%2D38t%2D38%2D90v%2D1024q0%2D52%2038%2D90t90%2D38h512q52%200%2090%2038t38%2090z%22%2F%3E%3C%2Fsvg%3E");background-size:22px}.snippet-editor__view-icon-mobile:focus,.snippet-editor__view-icon-mobile:hover{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M976%201408q0%2D33%2D23%2E5%2D56%2E5t%2D56%2E5%2D23%2E5%2D56%2E5%2023%2E5%2D23%2E5%2056%2E5%2023%2E5%2056%2E5%2056%2E5%2023%2E5%2056%2E5%2D23%2E5%2023%2E5%2D56%2E5zm208%2D160v%2D704q0%2D13%2D9%2E5%2D22%2E5t%2D22%2E5%2D9%2E5h%2D512q%2D13%200%2D22%2E5%209%2E5t%2D9%2E5%2022%2E5v704q0%2013%209%2E5%2022%2E5t22%2E5%209%2E5h512q13%200%2022%2E5%2D9%2E5t9%2E5%2D22%2E5zm%2D192%2D848q0%2D16%2D16%2D16h%2D160q%2D16%200%2D16%2016t16%2016h160q16%200%2016%2D16zm288%2D16v1024q0%2052%2D38%2090t%2D90%2038h%2D512q%2D52%200%2D90%2D38t%2D38%2D90v%2D1024q0%2D52%2038%2D90t90%2D38h512q52%200%2090%2038t38%2090z%22%2F%3E%3C%2Fsvg%3E")}.snippet-editor__view--desktop{overflow:auto;width:640px;max-width:100%;padding:0 20px}.snippet-editor__view .snippet_container__title{width:600px;white-space:nowrap}.snippet-editor__view .snippet_container__title .title{display:inline-block;overflow:hidden;max-width:600px;vertical-align:top;text-overflow:ellipsis}.snippet-editor__view .snippet_container__title .title#snippet_sitename{display:inline}.snippet-editor__view .snippet_container__url{width:600px;line-height:1;white-space:nowrap}.snippet-editor__view .snippet_container__url .urlFull{display:inline-block;overflow:hidden;max-width:586px;font-size:14px;line-height:16px;vertical-align:top;text-overflow:ellipsis}.snippet-editor__view .snippet_container .down_arrow{display:inline-block;margin-top:6px;margin-right:6px;border-top:5px solid #006621;border-left:4px solid transparent;border-right:4px solid transparent;vertical-align:top}.snippet-editor__view .snippet_container__meta{width:600px}.snippet-editor__view--mobile{margin:0 20px 10px;padding:11px 0;border-bottom:1px hidden #fff;border-radius:2px;box-shadow:0 1px 2px rgba(0,0,0,.2)}.snippet-editor__view--mobile .snippet_container{display:block;line-height:20px}.snippet-editor__view--mobile .snippet_container__meta,.snippet-editor__view--mobile .snippet_container__title,.snippet-editor__view--mobile .snippet_container__url{box-sizing:border-box;width:100%}.snippet-editor__view--mobile .snippet_container__title{overflow:visible;padding:0 16px;white-space:normal;word-wrap:break-word}.snippet-editor__view--mobile .snippet_container__title .title{font-size:16px;line-height:20px}.snippet-editor__view--mobile .snippet_container__url{margin-bottom:9px;padding:0 16px 9px;border-bottom:1px solid #ebebeb}.snippet-editor__view--mobile .snippet_container__url .urlFull{max-width:100%;font-size:14px;line-height:20px}.snippet-editor__view--mobile .snippet_container .down_arrow{display:none}.snippet-editor__view--mobile .snippet_container__meta{padding:0 16px;font-size:14px;line-height:20px}.snippet-editor__view--mobile .snippet_container .desc{font-size:14px;line-height:20px}.snippet-editor__is-scrollable-hintwrapper{display:none;margin:1em 0 5px;text-align:center}.snippet-editor__view--desktop.snippet-editor__view--desktop-has-scroll+.snippet-editor__is-scrollable-hintwrapper{display:block}.snippet-editor__is-scrollable-hint{display:inline-block}.snippet-editor__is-scrollable-hint:before{display:inline-block;margin-left:10px;font-size:20px;line-height:inherit;vertical-align:text-top;content:"\21c4"}.snippet-editor__container{position:relative;cursor:pointer}.snippet-editor__container.editable-preview__container--no-caret{cursor:auto}.snippet-editor__heading{margin:0 0 15px;padding:8px 20px;color:#555;font-family:"Open Sans",sans-serif;font-size:.9rem;font-weight:300}.snippet-editor__heading-editor{border-top:1px solid #f7f7f7}.snippet-editor__heading-icon{padding-right:45px;background-repeat:no-repeat;background-position:right 20px top .6em;background-size:16px}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before,.snippet-editor__container:hover:before{position:absolute;right:-22px;width:24px;height:24px;background-size:25px;content:"";display:block;top:-3px}.snippet-editor__heading-icon-eye{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__container--focus:before,.snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__preview{max-width:640px;padding:0 0 15px}.snippet-editor__preview #help-yoast-snippetpreview{padding:0 20px}.snippet-editor__button{padding:8px 10px;border:1px solid #dbdbdb;border-radius:4px;color:#555;background:#f7f7f7;font-size:.8rem;line-height:15px;cursor:pointer}.snippet-editor__edit-button{display:inline-block;box-sizing:border-box;margin-top:10px;padding-right:32px;background:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M491%201536l91%2D91%2D235%2D235%2D91%2091v107h128v128h107zm523%2D928q0%2D22%2D22%2D22%2D10%200%2D17%207l%2D542%20542q%2D7%207%2D7%2017%200%2022%2022%2022%2010%200%2017%2D7l542%2D542q7%2D7%207%2D17zm%2D54%2D192l416%20416%2D832%20832h%2D416v%2D416zm683%2096q0%2053%2D37%2090l%2D166%20166%2D416%2D416%20166%2D165q36%2D38%2090%2D38%2053%200%2091%2038l235%20234q37%2039%2037%2091z%22%20%2F%3E%3C%2Fsvg%3E") right 8px top 50% no-repeat #f7f7f7;background-size:16px}.snippet-editor__form{padding:20px}.snippet-editor__label{display:block;position:relative;width:100%;margin-top:1em}.snippet-editor__label--focus:before,.snippet-editor__label--hover:before{right:-22px;width:24px;height:24px;background-size:25px;display:block;content:"";position:absolute}.snippet-editor__label:first-child{margin-top:0}.snippet-editor__label--hover:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__label--focus:before{top:-3px;top:20px;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1152%20896q0%2026%2D19%2045l%2D448%20448q%2D19%2019%2D45%2019t%2D45%2D19%2D19%2D45v%2D896q0%2D26%2019%2D45t45%2D19%2045%2019l448%20448q19%2019%2019%2045z%22%20%2F%3E%3C%2Fsvg%3E")}.snippet-editor__input{display:block;box-sizing:border-box;width:100%;max-width:100%;margin-top:5px;border:1px solid #bfbfbf}.snippet-editor__input:focus{border:1px solid #1074a8;outline:0}.rtl .snippet-editor__container:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__container--focus:before,.rtl .snippet-editor__container--focus:hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__label--hover:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23bfbfbf%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.rtl .snippet-editor__label--focus:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%231074a8%22%20d%3D%22M1216%20448v896q0%2026%2D19%2045t%2D45%2019%2D45%2D19l%2D448%2D448q%2D19%2D19%2D19%2D45t19%2D45l448%2D448q19%2D19%2045%2D19t45%2019%2019%2045z%22%2F%3E%3C%2Fsvg%3E")}.snippet-editor__meta-description{height:84px}.snippet-editor__submit{margin-top:1em}#snippet_cite{min-width:20px}#meta_container{clear:both;min-height:20px}.snippet_container .title{margin:0;color:#1e0fbe;font-size:18px;font-weight:400;line-height:1.2;text-decoration:none}.snippet-editor__date,.snippet_container .desc{font-size:13px;line-height:1.4}.snippet_container .url{color:#006621;font-style:normal}.snippet_container .url strong{font-weight:700}.snippet_container .desc-default{color:#545454}.snippet_container .desc-default strong{color:#6a6a6a;font-weight:700}.snippet_container .desc-render{color:#777}.snippet_container .tooLong{color:red!important}.snippet-editor__field--invalid{color:red}.snippet-editor__progress{display:block;box-sizing:border-box;width:100%;height:8px;margin-top:5px;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.snippet-editor__progress::-webkit-progress-bar{height:8px;border:1px solid #bfbfbf;background-color:#f7f7f7}.snippet-editor__progress--fallback{height:8px;border:1px solid #bfbfbf;background-color:#f7f7f7}.snippet-editor__progress-bar{width:0;max-width:100%;height:100%}.snippet-editor__date{color:grey}.snippet-editor--hidden{display:none}.yoast-measurement-elements-holder{position:absolute;right:-9999em}.snippet-editor__progress--bad[value]{color:#dc3232}.snippet-editor__progress--bad[value]::-webkit-progress-value{background-color:#dc3232;transition:width 250ms}.snippet-editor__progress--bad[value]::-moz-progress-bar{background-color:#dc3232}.snippet-editor__progress--bad[value] .snippet-editor__progress-bar{background-color:#dc3232}.snippet-editor__progress--ok[value]{color:#ee7c1b}.snippet-editor__progress--ok[value]::-webkit-progress-value{background-color:#ee7c1b;transition:width 250ms}.snippet-editor__progress--ok[value]::-moz-progress-bar{background-color:#ee7c1b}.snippet-editor__progress--ok[value] .snippet-editor__progress-bar{background-color:#ee7c1b}.snippet-editor__progress--good[value]{color:#7ad03a}.snippet-editor__progress--good[value]::-webkit-progress-value{background-color:#7ad03a;transition:width 250ms}.snippet-editor__progress--good[value]::-moz-progress-bar{background-color:#7ad03a}.snippet-editor__progress--good[value] .snippet-editor__progress-bar{background-color:#7ad03a}.wpseoanalysis{padding-left:0}.wpseo-score-text{float:right;width:86%;width:calc(100% - 56px)}.assessment-results .wpseo-score-icon{float:right;width:12px;height:12px;margin:3px 0 0 10px;border-radius:50%;background:#888}.wpseo-score-icon.good{background-color:#7ad03a}.wpseo-score-icon.ok{background-color:#ee7c1b}.wpseo-score-icon.bad{background-color:#dc3232}.wpseo-score-icon.na{background-color:#999}.wpseo-score-icon.noindex{background-color:#1e8cbe}li.score{margin-bottom:6px;list-style-type:none!important}li.score:after{display:table;clear:both;content:""}.screen-reader-text{overflow:hidden;clip:rect(1px,1px,1px,1px);position:absolute!important;width:1px;height:1px}.assessment-results{clear:both}.assessment-results__mark.icon-eye-active,.assessment-results__mark.icon-eye-disabled,.assessment-results__mark.icon-eye-inactive{float:right;width:28px;height:28px;margin:-5px 3px 0;padding:4px;border:0;border-radius:100%;outline:0;background:center no-repeat;background-size:16px;cursor:pointer}.assessment-results__mark.icon-eye-inactive{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23555555%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark.icon-eye-active{background-color:#a4286a;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23ffffff%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark.icon-eye-disabled{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%221792%22%20height%3D%221792%22%20viewBox%3D%220%200%201792%201792%22%20xmlns%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20role%3D%22img%22%20aria%2Dhidden%3D%22true%22%20focusable%3D%22false%22%3E%3Cpath%20fill%3D%22%23e6e6e6%22%20d%3D%22M1664%20960q%2D152%2D236%2D381%2D353%2061%20104%2061%20225%200%20185%2D131%2E5%20316%2E5t%2D316%2E5%20131%2E5%2D316%2E5%2D131%2E5%2D131%2E5%2D316%2E5q0%2D121%2061%2D225%2D229%20117%2D381%20353%20133%20205%20333%2E5%20326%2E5t434%2E5%20121%2E5%20434%2E5%2D121%2E5%20333%2E5%2D326%2E5zm%2D720%2D384q0%2D20%2D14%2D34t%2D34%2D14q%2D125%200%2D214%2E5%2089%2E5t%2D89%2E5%20214%2E5q0%2020%2014%2034t34%2014%2034%2D14%2014%2D34q0%2D86%2061%2D147t147%2D61q20%200%2034%2D14t14%2D34zm848%20384q0%2034%2D20%2069%2D140%20230%2D376%2E5%20368%2E5t%2D499%2E5%20138%2E5%2D499%2E5%2D139%2D376%2E5%2D368q%2D20%2D35%2D20%2D69t20%2D69q140%2D229%20376%2E5%2D368t499%2E5%2D139%20499%2E5%20139%20376%2E5%20368q20%2035%2020%2069z%22%20%2F%3E%3C%2Fsvg%3E")}.assessment-results__mark:focus{border-radius:100%;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.assessment-results__mark-container{display:inline-block;float:left;width:33px;min-height:1px}.YoastSEO_msg .left,.YoastSEO_msg .right{display:none}@keyframes animatedBackground{from{background-position:100% 0}to{background-position:0 0}}.YoastSEO_msg .bufferbar{display:block;width:100%;height:12px;margin:10px 0;border:1px solid #dfdfdf;background-image:linear-gradient(to right,#fff,#0063ff,#fff,#0063ff);background-position:100% 0;background-size:300% 100%;animation:animatedBackground 5s linear infinite}.yoast-tooltip{position:relative}button.yoast-tooltip{overflow:visible}.yoast-tooltip::after{display:none;position:absolute;z-index:1000000;padding:6px 8px 5px;border-radius:3px;opacity:0;color:#fff;background:rgba(0,0,0,.8);text-shadow:none;font:normal normal 11px/1.45454545 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";text-align:center;white-space:pre;text-decoration:none;letter-spacing:normal;text-transform:none;word-wrap:break-word;content:attr(aria-label);pointer-events:none;-webkit-font-smoothing:subpixel-antialiased}.yoast-tooltip-alt::after{content:attr(data-label)}.yoast-tooltip::before{display:none;position:absolute;z-index:1000001;width:0;height:0;border:5px solid transparent;opacity:0;color:rgba(0,0,0,.8);content:"\00a0";pointer-events:none}@keyframes yoast-tooltip-appear{from{opacity:0}to{opacity:1}}.yoast-tooltip:active::after,.yoast-tooltip:active::before,.yoast-tooltip:focus::after,.yoast-tooltip:focus::before,.yoast-tooltip:hover::after,.yoast-tooltip:hover::before{display:inline-block;text-decoration:none;animation-name:yoast-tooltip-appear;animation-duration:.1s;animation-timing-function:ease-in;animation-delay:.4s;animation-fill-mode:forwards}.yoast-tooltip-no-delay:active::after,.yoast-tooltip-no-delay:active::before,.yoast-tooltip-no-delay:focus::after,.yoast-tooltip-no-delay:focus::before,.yoast-tooltip-no-delay:hover::after,.yoast-tooltip-no-delay:hover::before{opacity:1;animation:none}.yoast-tooltip-multiline:active::after,.yoast-tooltip-multiline:focus::after,.yoast-tooltip-multiline:hover::after{display:table-cell}.yoast-tooltip-s::after,.yoast-tooltip-se::after,.yoast-tooltip-sw::after{top:100%;left:50%;margin-top:5px}.yoast-tooltip-s::before,.yoast-tooltip-se::before,.yoast-tooltip-sw::before{top:auto;left:50%;bottom:-5px;margin-left:-5px;border-bottom-color:rgba(0,0,0,.8)}.yoast-tooltip-se::after{left:auto;right:50%;margin-right:-15px}.yoast-tooltip-sw::after{margin-left:-15px}.yoast-tooltip-n::after,.yoast-tooltip-ne::after,.yoast-tooltip-nw::after{left:50%;bottom:100%;margin-bottom:5px}.yoast-tooltip-n::before,.yoast-tooltip-ne::before,.yoast-tooltip-nw::before{top:-5px;left:50%;bottom:auto;margin-left:-5px;border-top-color:rgba(0,0,0,.8)}.yoast-tooltip-ne::after{left:auto;right:50%;margin-right:-15px}.yoast-tooltip-nw::after{margin-left:-15px}.yoast-tooltip-n::after,.yoast-tooltip-s::after{-ms-transform:translateX(-50%);transform:translateX(-50%)}.yoast-tooltip-w::after{left:100%;bottom:50%;margin-left:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-w::before{top:50%;bottom:50%;right:-5px;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}.yoast-tooltip-e::after{bottom:50%;right:100%;margin-right:5px;-ms-transform:translateY(50%);transform:translateY(50%)}.yoast-tooltip-e::before{top:50%;left:-5px;bottom:50%;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.yoast-tooltip-multiline::after{width:250px;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;border-collapse:separate;white-space:pre-line;word-wrap:normal;word-break:break-word}.yoast-tooltip-multiline.yoast-tooltip-n::after,.yoast-tooltip-multiline.yoast-tooltip-s::after{left:auto;right:50%;-ms-transform:translateX(50%);transform:translateX(50%)}.yoast-tooltip-multiline.yoast-tooltip-e::after,.yoast-tooltip-multiline.yoast-tooltip-w::after{left:100%}@media screen and (min-width:0\0){.yoast-tooltip-multiline::after{width:250px}}.yoast-tooltip-sticky::after,.yoast-tooltip-sticky::before{display:inline-block}.yoast-tooltip-sticky.yoast-tooltip-multiline::after{display:table-cell}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (-moz-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.yoast-tooltip-w::after{margin-left:4.5px}}.postbox .yoast-help-center__button{min-height:0;margin:0;padding:8px 0;border:none;color:#0073aa;box-shadow:none;font:inherit;text-decoration:underline;text-transform:none}.wpseotab label,.wpseotab legend{font-weight:600}.postbox .yoast-help-center__button svg{margin:0 13px}#edittag .yoast-video-tutorial__video-container{float:none;max-width:100%;margin:0 auto}#edittag .yoast-video-tutorial__descriptions{margin:0 auto;padding:0}@media screen and (max-width:1480px){#poststuff .yoast-video-tutorial__video-container{float:none;max-width:100%;margin:0 auto}#poststuff .yoast-video-tutorial__descriptions{margin:0 auto;padding:0}}.wpseo-metabox #yoast-help-center-container{margin:8px 0}.draftJsMentionPlugin__mention__29BEd,.draftJsMentionPlugin__mention__29BEd:visited{display:inline-block;padding-left:2px;padding-right:2px;border-radius:2px;color:#575f67;background:#e6f3ff;text-decoration:none;cursor:pointer}.draftJsMentionPlugin__mention__29BEd:focus,.draftJsMentionPlugin__mention__29BEd:hover{outline:0;color:#677584;background:#edf5fd}.draftJsMentionPlugin__mention__29BEd:active{color:#222;background:#455261}.draftJsMentionPlugin__mentionSuggestionsEntry__3mSwm{padding:7px 10px 3px;transition:background-color .4s cubic-bezier(.27,1.27,.48,.56)}.draftJsMentionPlugin__mentionSuggestionsEntry__3mSwm:active{background-color:#cce7ff}.draftJsMentionPlugin__mentionSuggestionsEntryFocused__3LcTd{background-color:#e6f3ff}.draftJsMentionPlugin__mentionSuggestionsEntryText__3Jobq{display:inline-block;overflow:hidden;max-width:368px;margin-bottom:.2em;margin-right:8px;font-size:.9em;white-space:nowrap;text-overflow:ellipsis}.draftJsMentionPlugin__mentionSuggestionsEntryAvatar__1xgA9{display:inline-block;width:24px;height:24px;border-radius:12px}.draftJsMentionPlugin__mentionSuggestions__2DWjA{display:-ms-flexbox;display:flex;flex-direction:column;position:absolute;z-index:2;box-sizing:border-box;min-width:220px;max-width:440px;margin-top:.4em;padding-top:8px;padding-bottom:8px;border:1px solid #eee;border-radius:2px;background:#fff;box-shadow:0 4px 30px 0 #dcdcdc;cursor:pointer;-ms-transform:scale(0);transform:scale(0);-ms-flex-direction:column}#edittag>#wp-description-wrap,.DraftEditorPlaceholder-hidden{display:none}.DraftEditor-root,.public-DraftEditor-block{position:relative}.DraftEditor-editorContainer,.DraftEditor-root,.public-DraftEditor-content{height:inherit;text-align:initial}.public-DraftEditor-content[contenteditable=true]{-webkit-user-modify:read-write-plaintext-only}.DraftEditor-editorContainer{position:relative;z-index:1;border-left:.1px solid transparent;background-color:rgba(255,255,255,0)}.DraftEditor-alignLeft .public-DraftStyleDefault-block{text-align:left}.DraftEditor-alignLeft .public-DraftEditorPlaceholder-root{left:0;text-align:left}.DraftEditor-alignCenter .public-DraftStyleDefault-block{text-align:center}.DraftEditor-alignCenter .public-DraftEditorPlaceholder-root{width:100%;margin:0 auto;text-align:center}.DraftEditor-alignRight .public-DraftStyleDefault-block{text-align:right}.DraftEditor-alignRight .public-DraftEditorPlaceholder-root{right:0;text-align:right}.public-DraftEditorPlaceholder-root{position:absolute;z-index:1;color:#9197a3}.public-DraftEditorPlaceholder-hasFocus{color:#bdc1c9}.public-DraftStyleDefault-block{position:relative;white-space:pre-wrap}.public-DraftStyleDefault-ltr{text-align:left;direction:ltr}.public-DraftStyleDefault-rtl{text-align:right;direction:rtl}.public-DraftStyleDefault-listLTR{direction:ltr}.public-DraftStyleDefault-listRTL{direction:rtl}.public-DraftStyleDefault-ol,.public-DraftStyleDefault-ul{margin:16px 0;padding:0}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-listLTR{margin-left:1.5em}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-listRTL{margin-right:1.5em}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-listLTR{margin-left:3em}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-listRTL{margin-right:3em}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-listLTR{margin-left:4.5em}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-listRTL{margin-right:4.5em}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-listLTR{margin-left:6em}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-listRTL{margin-right:6em}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-listLTR{margin-left:7.5em}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-listRTL{margin-right:7.5em}.public-DraftStyleDefault-unorderedListItem{position:relative;list-style-type:square}.public-DraftStyleDefault-unorderedListItem.public-DraftStyleDefault-depth0{list-style-type:disc}.public-DraftStyleDefault-unorderedListItem.public-DraftStyleDefault-depth1{list-style-type:circle}.public-DraftStyleDefault-orderedListItem{position:relative;list-style-type:none}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-listLTR:before{position:absolute;left:-36px;width:30px;text-align:right}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-listRTL:before{position:absolute;right:-36px;width:30px;text-align:left}.public-DraftStyleDefault-orderedListItem:before{content:counter(ol0) ". ";counter-increment:ol0}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth1:before{content:counter(ol1) ". ";counter-increment:ol1}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth2:before{content:counter(ol2) ". ";counter-increment:ol2}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth3:before{content:counter(ol3) ". ";counter-increment:ol3}.public-DraftStyleDefault-orderedListItem.public-DraftStyleDefault-depth4:before{content:counter(ol4) ". ";counter-increment:ol4}.public-DraftStyleDefault-depth0.public-DraftStyleDefault-reset{counter-reset:ol0}.public-DraftStyleDefault-depth1.public-DraftStyleDefault-reset{counter-reset:ol1}.public-DraftStyleDefault-depth2.public-DraftStyleDefault-reset{counter-reset:ol2}.public-DraftStyleDefault-depth3.public-DraftStyleDefault-reset{counter-reset:ol3}.public-DraftStyleDefault-depth4.public-DraftStyleDefault-reset{counter-reset:ol4}#wpseo_meta{box-sizing:border-box}#wpseo_meta *,#wpseo_meta :after,#wpseo_meta :before{box-sizing:inherit}#wp-description-wrap .wp-editor-area{border:0}.term-description-wrap td>textarea#description{min-height:530px}ul.wpseo-metabox-tabs{display:none;margin-top:6px;margin-bottom:0}ul.wpseo-metabox-tabs:after{display:table;clear:both;content:""}.wpseo-metabox-tabs-div ul{list-style:none}ul.wpseo-metabox-tabs li.active{background-color:#fdfdfd}.wpseo-meta-section{display:none;width:100%;max-width:calc(100% - 50px);vertical-align:top}.wpseo-meta-section.active{display:inline-block}.wpseo-metabox-sidebar{float:right;width:50px;padding:0;background-color:#fff}.wpseo-metabox-sidebar ul{margin:0}.wpseo-metabox-sidebar li{display:inline-block;margin-bottom:0;padding:5px}.wpseo-metabox-sidebar a{display:inline-block;width:35px;height:35px;font-size:20px;line-height:30px;text-decoration:none}.wpseo-metabox-sidebar li span{margin:3px -5px 0 0;padding:0 5px 0 2px;border:0 solid transparent;border-right-width:3px;border-radius:3px}.wpseo-metabox-sidebar li span.wpseo-buy-premium{color:#a4286a}.wpseo-metabox-sidebar li span.wpseo-buy-premium:hover{color:#832055}.wpseo-metabox-sidebar li.active span{border-color:#333;color:#333}.wpseo-metabox-sidebar li.active span.wpseo-buy-premium{border-color:#a4286a;color:#a4286a}.wpseo-metabox-sidebar li.active span.wpseo-buy-premium:hover{border-color:#832055;color:#832055}ul.wpseo-metabox-tabs li{float:right;margin-left:5px;margin-bottom:-1px;padding:0;border:1px solid #dfdfdf;border-bottom:0 none}ul.wpseo-metabox-tabs li .wpseo-keyword{display:inline-block;overflow:hidden;max-width:8em;max-width:8rem;vertical-align:top;white-space:nowrap;text-overflow:ellipsis}.wpseotab{display:none;padding:20px 35px;border:1px solid #ddd;background-color:#fdfdfd}.wpseotab .wpseo-cornerstone-checkbox{margin-left:.5em}.wpseotab.content{padding:20px 15px}.wpseotab.active{display:block}#wpseofocuskeyword,#wpseosnippet{margin-bottom:2em}.wpseo-metabox-tabs .wpseo_tablink{display:inline-block;padding:5px 12px 6px;vertical-align:top;text-decoration:none}.wpseo-metabox-tabs .wpseo_content_tab a,.wpseo-metabox-tabs .wpseo_content_tab+.wpseo_keyword_tab a{padding-left:12px}.wpseo-metabox-tabs .wpseo-score-icon{margin-right:0}#wpseo-meta-section-social .wpseo-metabox-tabs .wpseo_tablink{padding:5px 7px}.wpseo-metabox-tabs .wpseo_tablink .dashicons{width:16px;height:16px;font-size:16px}.wpseo-metabox-sidebar .dashicons{width:30px;height:30px;font-size:30px}.wpseo-metabox-tabs-div div.wpseo-tabs-panel{overflow:auto;padding:.5em .9em;border:1px solid}#wpseo_meta .inside{margin:0}#wpseo_meta .inside::after{display:table;clear:both;content:""}#wpseo_meta .postbox .inside .wpseotab{font-size:13px!important}.wpseotab .select2-container,.wpseotab input,.wpseotab label,.wpseotab p.error-message,.wpseotab textarea,.yoast-metabox__description{max-width:600px}.wpseotab fieldset{padding-top:5px}.wpseotab label{display:block}.wpseotab input[type=checkbox]+label,.wpseotab input[type=radio]+label{display:inline-block;font-weight:400}.wpseotab fieldset,.wpseotab label{margin-top:2em;margin-bottom:.5em}.wpseotab input[type=checkbox],.wpseotab input[type=checkbox]+label{margin-top:2em;margin-bottom:0;font-size:1em}.wpseotab fieldset:first-child,.wpseotab input[type=checkbox]:first-child,.wpseotab input[type=checkbox]:first-child+label,.wpseotab label:first-child{margin-top:10px}.wpseotab input[type=radio]{margin-top:0}.wpseotab input[type=radio]+label{margin:0 0 0 1em}.wpseotab p.error-message,.yoast-metabox__description{margin:.5em 0}.wpseotab #yoast_wpseo_focuskw_text_input,.wpseotab select[multiple]{margin-top:0}.wpseotab .wpseo_image_upload_button{margin-right:3px}.good,.warn,.wrong{font-weight:600}.good{color:green}.warn{color:maroon}.wrong{color:#dc3232}#current_seo_title span{padding:2px 5px;background-color:#ffffe0}#focuskwresults ul{margin:0}#focuskwresults li,#focuskwresults p{font-size:13px}#focuskwresults li{margin:0 20px 0 0;list-style-type:disc}.wpseo_hidden{display:none}.wpseo_msg{margin:5px 0 10px;padding:0 5px;border:1px solid #e6db55;background-color:#ffffe0}ul.wpseo-metabox-tabs li.wpseo-tab-add-keyword{border:1px dashed #dfdfdf;border-bottom:none}.wpseo-tab-add-keyword .wpseo-add-keyword.button{height:auto;padding:5px 10px 5px 12px;background:0 0;box-shadow:none;font-size:inherit;font-weight:700;line-height:inherit;vertical-align:top;text-decoration:none}.wpseo-tab-add-keyword .wpseo-add-keyword.button:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wpseo-tab-add-keyword |